initial commit
This commit is contained in:
202
src/main/java/hal/studios/hpm/entity/CutterSeatEntity.java
Normal file
202
src/main/java/hal/studios/hpm/entity/CutterSeatEntity.java
Normal file
@@ -0,0 +1,202 @@
|
||||
|
||||
package hal.studios.hpm.entity;
|
||||
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import net.minecraftforge.network.PlayMessages;
|
||||
import net.minecraftforge.network.NetworkHooks;
|
||||
import net.minecraftforge.common.ForgeMod;
|
||||
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.ServerLevelAccessor;
|
||||
import net.minecraft.world.level.LevelReader;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.entity.projectile.ThrownPotion;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.entity.ai.navigation.PathNavigation;
|
||||
import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation;
|
||||
import net.minecraft.world.entity.ai.control.FlyingMoveControl;
|
||||
import net.minecraft.world.entity.ai.attributes.Attributes;
|
||||
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
|
||||
import net.minecraft.world.entity.SpawnGroupData;
|
||||
import net.minecraft.world.entity.PathfinderMob;
|
||||
import net.minecraft.world.entity.MobType;
|
||||
import net.minecraft.world.entity.MobSpawnType;
|
||||
import net.minecraft.world.entity.Mob;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.AreaEffectCloud;
|
||||
import net.minecraft.world.damagesource.DamageSource;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.DifficultyInstance;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.network.protocol.Packet;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.core.BlockPos;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import hal.studios.hpm.procedures.CutterSeatTickProcedure;
|
||||
import hal.studios.hpm.procedures.CutterPassengerOnInitialEntitySpawnProcedure;
|
||||
import hal.studios.hpm.procedures.CutterPassengerEntityIsHurtProcedure;
|
||||
import hal.studios.hpm.init.HpmModEntities;
|
||||
|
||||
public class CutterSeatEntity extends PathfinderMob {
|
||||
public CutterSeatEntity(PlayMessages.SpawnEntity packet, Level world) {
|
||||
this(HpmModEntities.CUTTER_SEAT.get(), world);
|
||||
}
|
||||
|
||||
public CutterSeatEntity(EntityType<CutterSeatEntity> type, Level world) {
|
||||
super(type, world);
|
||||
maxUpStep = 0.6f;
|
||||
xpReward = 0;
|
||||
setNoAi(false);
|
||||
setPersistenceRequired();
|
||||
this.moveControl = new FlyingMoveControl(this, 10, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Packet<?> getAddEntityPacket() {
|
||||
return NetworkHooks.getEntitySpawningPacket(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PathNavigation createNavigation(Level world) {
|
||||
return new FlyingPathNavigation(this, world);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerGoals() {
|
||||
super.registerGoals();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public MobType getMobType() {
|
||||
return MobType.UNDEFINED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeWhenFarAway(double distanceToClosestPlayer) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getPassengersRidingOffset() {
|
||||
return super.getPassengersRidingOffset() + -0.6;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundEvent getHurtSound(DamageSource ds) {
|
||||
return ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation(""));
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundEvent getDeathSound() {
|
||||
return ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation(""));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean causeFallDamage(float l, float d, DamageSource source) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hurt(DamageSource source, float amount) {
|
||||
CutterPassengerEntityIsHurtProcedure.execute(this.level, this.getX(), this.getY(), this.getZ(), this);
|
||||
if (source.getDirectEntity() instanceof ThrownPotion || source.getDirectEntity() instanceof AreaEffectCloud)
|
||||
return false;
|
||||
if (source == DamageSource.FALL)
|
||||
return false;
|
||||
if (source == DamageSource.DROWN)
|
||||
return false;
|
||||
if (source == DamageSource.DRAGON_BREATH)
|
||||
return false;
|
||||
if (source == DamageSource.WITHER)
|
||||
return false;
|
||||
if (source.getMsgId().equals("witherSkull"))
|
||||
return false;
|
||||
return super.hurt(source, amount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType reason, @Nullable SpawnGroupData livingdata, @Nullable CompoundTag tag) {
|
||||
SpawnGroupData retval = super.finalizeSpawn(world, difficulty, reason, livingdata, tag);
|
||||
CutterPassengerOnInitialEntitySpawnProcedure.execute(this);
|
||||
return retval;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InteractionResult mobInteract(Player sourceentity, InteractionHand hand) {
|
||||
ItemStack itemstack = sourceentity.getItemInHand(hand);
|
||||
InteractionResult retval = InteractionResult.sidedSuccess(this.level.isClientSide());
|
||||
super.mobInteract(sourceentity, hand);
|
||||
sourceentity.startRiding(this);
|
||||
return retval;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void baseTick() {
|
||||
super.baseTick();
|
||||
CutterSeatTickProcedure.execute(this.level, this.getX(), this.getY(), this.getZ(), this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBreatheUnderwater() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkSpawnObstruction(LevelReader world) {
|
||||
return world.isUnobstructed(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPushedByFluid() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPushable() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doPush(Entity entityIn) {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void pushEntities() {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void checkFallDamage(double y, boolean onGroundIn, BlockState state, BlockPos pos) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setNoGravity(boolean ignored) {
|
||||
super.setNoGravity(true);
|
||||
}
|
||||
|
||||
public void aiStep() {
|
||||
super.aiStep();
|
||||
this.setNoGravity(true);
|
||||
}
|
||||
|
||||
public static void init() {
|
||||
}
|
||||
|
||||
public static AttributeSupplier.Builder createAttributes() {
|
||||
AttributeSupplier.Builder builder = Mob.createMobAttributes();
|
||||
builder = builder.add(Attributes.MOVEMENT_SPEED, 0.3);
|
||||
builder = builder.add(Attributes.MAX_HEALTH, 50);
|
||||
builder = builder.add(Attributes.ARMOR, 0);
|
||||
builder = builder.add(Attributes.ATTACK_DAMAGE, 3);
|
||||
builder = builder.add(Attributes.FOLLOW_RANGE, 16);
|
||||
builder = builder.add(Attributes.FLYING_SPEED, 0.3);
|
||||
builder = builder.add(ForgeMod.SWIM_SPEED.get(), 0.3);
|
||||
return builder;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user