From ce1cdff408e1644f5d63c54a8883541d57f98b63 Mon Sep 17 00:00:00 2001 From: Corail31 Date: Tue, 30 Jul 2019 02:17:25 +0200 Subject: [PATCH] bop boats now extends BoatEntity --- .../biomesoplenty/api/entity/BOPEntities.java | 3 +- .../common/entity/item/BoatEntityBOP.java | 346 ++++++------------ .../common/entity/item/BoatRendererBOP.java | 2 +- .../common/entity/item/package-info.java | 3 + .../common/item/BoatItemBOP.java | 2 +- .../resources/META-INF/accesstransformer.cfg | 2 - 6 files changed, 123 insertions(+), 235 deletions(-) create mode 100644 src/main/java/biomesoplenty/common/entity/item/package-info.java diff --git a/src/main/java/biomesoplenty/api/entity/BOPEntities.java b/src/main/java/biomesoplenty/api/entity/BOPEntities.java index 9abe3b7f5..b3ea10f31 100644 --- a/src/main/java/biomesoplenty/api/entity/BOPEntities.java +++ b/src/main/java/biomesoplenty/api/entity/BOPEntities.java @@ -8,8 +8,9 @@ package biomesoplenty.api.entity; import net.minecraft.entity.EntityType; +import net.minecraft.entity.item.BoatEntity; public class BOPEntities { - public static EntityType boat_bop; + public static EntityType boat_bop; } diff --git a/src/main/java/biomesoplenty/common/entity/item/BoatEntityBOP.java b/src/main/java/biomesoplenty/common/entity/item/BoatEntityBOP.java index 551de7e36..d3288bc76 100644 --- a/src/main/java/biomesoplenty/common/entity/item/BoatEntityBOP.java +++ b/src/main/java/biomesoplenty/common/entity/item/BoatEntityBOP.java @@ -6,7 +6,6 @@ import biomesoplenty.api.item.BOPItems; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.LilyPadBlock; -import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; @@ -26,7 +25,11 @@ import net.minecraft.network.datasync.EntityDataManager; import net.minecraft.network.play.client.CSteerBoatPacket; import net.minecraft.particles.ParticleTypes; import net.minecraft.tags.FluidTags; -import net.minecraft.util.*; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityPredicates; +import net.minecraft.util.IndirectEntityDamageSource; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.SoundEvents; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; @@ -44,7 +47,7 @@ import net.minecraftforge.fml.network.NetworkHooks; import javax.annotation.Nullable; import java.util.List; -public class BoatEntityBOP extends Entity { +public class BoatEntityBOP extends BoatEntity { private static final DataParameter TIME_SINCE_HIT = EntityDataManager.createKey(BoatEntityBOP.class, DataSerializers.VARINT); private static final DataParameter FORWARD_DIRECTION = EntityDataManager.createKey(BoatEntityBOP.class, DataSerializers.VARINT); private static final DataParameter DAMAGE_TAKEN = EntityDataManager.createKey(BoatEntityBOP.class, DataSerializers.FLOAT); @@ -68,8 +71,8 @@ public class BoatEntityBOP extends Entity { private boolean backInputDown; private double waterLevel; private float boatGlide; - private BoatEntityBOP.Status status; - private BoatEntityBOP.Status previousStatus; + private Status status; + private Status previousStatus; private double lastYd; private boolean rocking; private boolean field_203060_aN; @@ -77,7 +80,7 @@ public class BoatEntityBOP extends Entity { private float rockingAngle; private float prevRockingAngle; - public BoatEntityBOP(EntityType p_i50129_1_, World p_i50129_2_) { + public BoatEntityBOP(EntityType p_i50129_1_, World p_i50129_2_) { super(p_i50129_1_, p_i50129_2_); this.preventEntitySpawning = true; } @@ -95,14 +98,7 @@ public class BoatEntityBOP extends Entity { this(BOPEntities.boat_bop, world); } - /** - * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to - * prevent them from trampling crops - */ - protected boolean canTriggerWalking() { - return false; - } - + @Override protected void registerData() { this.dataManager.register(TIME_SINCE_HIT, 0); this.dataManager.register(FORWARD_DIRECTION, 1); @@ -113,37 +109,10 @@ public class BoatEntityBOP extends Entity { this.dataManager.register(ROCKING_TICKS, 0); } - /** - * Returns a boundingBox used to collide the entity with other entities and blocks. This enables the entity to be - * pushable on contact, like boats or minecarts. - */ - @Nullable - public AxisAlignedBB getCollisionBox(Entity entityIn) { - return entityIn.canBePushed() ? entityIn.getBoundingBox() : null; - } - - @Nullable - public AxisAlignedBB getCollisionBoundingBox() { - return this.getBoundingBox(); - } - - /** - * Returns true if this entity should push and be pushed by other entities when colliding. - */ - public boolean canBePushed() { - return true; - } - - /** - * Returns the Y offset from the entity's position for any entity riding this one. - */ - public double getMountedYOffset() { - return -0.1D; - } - /** * Called when the entity is attacked. */ + @Override public boolean attackEntityFrom(DamageSource source, float amount) { if (this.isInvulnerableTo(source)) { return false; @@ -155,7 +124,7 @@ public class BoatEntityBOP extends Entity { this.setTimeSinceHit(10); this.setDamageTaken(this.getDamageTaken() + amount * 10.0F); this.markVelocityChanged(); - boolean flag = source.getTrueSource() instanceof PlayerEntity && ((PlayerEntity)source.getTrueSource()).abilities.isCreativeMode; + boolean flag = source.getTrueSource() instanceof PlayerEntity && ((PlayerEntity) source.getTrueSource()).abilities.isCreativeMode; if (flag || this.getDamageTaken() > 40.0F) { if (!flag && this.world.getGameRules().getBoolean(GameRules.DO_ENTITY_DROPS)) { this.entityDropItem(this.getItemBoat()); @@ -163,7 +132,6 @@ public class BoatEntityBOP extends Entity { this.remove(); } - return true; } } else { @@ -171,6 +139,7 @@ public class BoatEntityBOP extends Entity { } } + @Override public void onEnterBubbleColumnWithAirAbove(boolean downwards) { if (!this.world.isRemote) { this.rocking = true; @@ -179,30 +148,15 @@ public class BoatEntityBOP extends Entity { this.setRockingTicks(60); } } - - this.world.addParticle(ParticleTypes.SPLASH, this.posX + (double)this.rand.nextFloat(), this.posY + 0.7D, this.posZ + (double)this.rand.nextFloat(), 0.0D, 0.0D, 0.0D); + this.world.addParticle(ParticleTypes.SPLASH, this.posX + (double) this.rand.nextFloat(), this.posY + 0.7D, this.posZ + (double) this.rand.nextFloat(), 0.0D, 0.0D, 0.0D); if (this.rand.nextInt(20) == 0) { this.world.playSound(this.posX, this.posY, this.posZ, this.getSplashSound(), this.getSoundCategory(), 1.0F, 0.8F + 0.4F * this.rand.nextFloat(), false); } - - } - - /** - * Applies a velocity to the entities, to push them away from eachother. - */ - public void applyEntityCollision(Entity entityIn) { - if (entityIn instanceof BoatEntity) { - if (entityIn.getBoundingBox().minY < this.getBoundingBox().maxY) { - super.applyEntityCollision(entityIn); - } - } else if (entityIn.getBoundingBox().minY <= this.getBoundingBox().minY) { - super.applyEntityCollision(entityIn); - } - } + @Override public Item getItemBoat() { - switch(this.getBoatType()) { + switch (this.getBoatModel()) { case FIR: default: return BOPItems.fir_boat; @@ -234,6 +188,7 @@ public class BoatEntityBOP extends Entity { /** * Setups the entity to do the hurt animation. Only used by packets in multiplayer. */ + @Override @OnlyIn(Dist.CLIENT) public void performHurtAnimation() { this.setForwardDirection(-this.getForwardDirection()); @@ -241,50 +196,14 @@ public class BoatEntityBOP extends Entity { this.setDamageTaken(this.getDamageTaken() * 11.0F); } - /** - * Returns true if other Entities should be prevented from moving through this Entity. - */ - public boolean canBeCollidedWith() { - return !this.removed; - } - - /** - * Sets a target for the client to interpolate towards over the next few ticks - */ - @OnlyIn(Dist.CLIENT) - public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean teleport) { - this.lerpX = x; - this.lerpY = y; - this.lerpZ = z; - this.lerpYaw = (double)yaw; - this.lerpPitch = (double)pitch; - this.lerpSteps = 10; - } - - /** - * Gets the horizontal facing direction of this Entity, adjusted to take specially-treated entity types into account. - */ - public Direction getAdjustedHorizontalFacing() { - return this.getHorizontalFacing().rotateY(); - } - /** * Called to update the entity's position/logic. */ @Override public void tick() { - if (this.world.isRemote) { - Entity rider = getControllingPassenger(); - if (rider instanceof PlayerEntity) { - ClientPlayerEntity player = (ClientPlayerEntity) rider; - updateInputs(player.movementInput.leftKeyDown, player.movementInput.rightKeyDown, player.movementInput.forwardKeyDown, player.movementInput.backKeyDown); - player.rowingBoat |= player.movementInput.leftKeyDown || player.movementInput.rightKeyDown || player.movementInput.forwardKeyDown || player.movementInput.backKeyDown; - } - } - this.previousStatus = this.status; this.status = this.getBoatStatus(); - if (this.status != BoatEntityBOP.Status.UNDER_WATER && this.status != BoatEntityBOP.Status.UNDER_FLOWING_WATER) { + if (this.status != Status.UNDER_WATER && this.status != Status.UNDER_FLOWING_WATER) { this.outOfControlTicks = 0.0F; } else { ++this.outOfControlTicks; @@ -305,7 +224,13 @@ public class BoatEntityBOP extends Entity { this.prevPosX = this.posX; this.prevPosY = this.posY; this.prevPosZ = this.posZ; - super.tick(); + + // !!! this is the super of BoatEntity !!! + if (!this.world.isRemote) { + this.setFlag(6, this.isGlowing()); + } + baseTick(); + this.tickLerp(); if (this.canPassengerSteer()) { if (this.getPassengers().isEmpty() || !(this.getPassengers().get(0) instanceof PlayerEntity)) { @@ -325,30 +250,30 @@ public class BoatEntityBOP extends Entity { this.updateRocking(); - for(int i = 0; i <= 1; ++i) { + for (int i = 0; i <= 1; ++i) { if (this.getPaddleState(i)) { - if (!this.isSilent() && (double)(this.paddlePositions[i] % ((float)Math.PI * 2F)) <= (double)((float)Math.PI / 4F) && ((double)this.paddlePositions[i] + (double)((float)Math.PI / 8F)) % (double)((float)Math.PI * 2F) >= (double)((float)Math.PI / 4F)) { + if (!this.isSilent() && (double) (this.paddlePositions[i] % ((float) Math.PI * 2F)) <= (double) ((float) Math.PI / 4F) && ((double) this.paddlePositions[i] + (double) ((float) Math.PI / 8F)) % (double) ((float) Math.PI * 2F) >= (double) ((float) Math.PI / 4F)) { SoundEvent soundevent = this.getPaddleSound(); if (soundevent != null) { Vec3d vec3d = this.getLook(1.0F); double d0 = i == 1 ? -vec3d.z : vec3d.z; double d1 = i == 1 ? vec3d.x : -vec3d.x; - this.world.playSound((PlayerEntity)null, this.posX + d0, this.posY, this.posZ + d1, soundevent, this.getSoundCategory(), 1.0F, 0.8F + 0.4F * this.rand.nextFloat()); + this.world.playSound((PlayerEntity) null, this.posX + d0, this.posY, this.posZ + d1, soundevent, this.getSoundCategory(), 1.0F, 0.8F + 0.4F * this.rand.nextFloat()); } } - this.paddlePositions[i] = (float)((double)this.paddlePositions[i] + (double)((float)Math.PI / 8F)); + this.paddlePositions[i] = (float) ((double) this.paddlePositions[i] + (double) ((float) Math.PI / 8F)); } else { this.paddlePositions[i] = 0.0F; } } this.doBlockCollisions(); - List list = this.world.getEntitiesInAABBexcluding(this, this.getBoundingBox().grow((double)0.2F, (double)-0.01F, (double)0.2F), EntityPredicates.pushableBy(this)); + List list = this.world.getEntitiesInAABBexcluding(this, this.getBoundingBox().grow((double) 0.2F, (double) -0.01F, (double) 0.2F), EntityPredicates.pushableBy(this)); if (!list.isEmpty()) { boolean flag = !this.world.isRemote && !(this.getControllingPassenger() instanceof PlayerEntity); - for(int j = 0; j < list.size(); ++j) { + for (int j = 0; j < list.size(); ++j) { Entity entity = list.get(j); if (!entity.isPassenger(this)) { if (flag && this.getPassengers().size() < 2 && !entity.isPassenger() && entity.getWidth() < this.getWidth() && entity instanceof LivingEntity && !(entity instanceof WaterMobEntity) && !(entity instanceof PlayerEntity)) { @@ -359,7 +284,6 @@ public class BoatEntityBOP extends Entity { } } } - } private void updateRocking() { @@ -373,7 +297,7 @@ public class BoatEntityBOP extends Entity { this.rockingIntensity = MathHelper.clamp(this.rockingIntensity, 0.0F, 1.0F); this.prevRockingAngle = this.rockingAngle; - this.rockingAngle = 10.0F * (float)Math.sin((double)(0.5F * (float)this.world.getGameTime())) * this.rockingIntensity; + this.rockingAngle = 10.0F * (float) Math.sin((double) (0.5F * (float) this.world.getGameTime())) * this.rockingIntensity; } else { if (!this.rocking) { this.setRockingTicks(0); @@ -398,12 +322,12 @@ public class BoatEntityBOP extends Entity { this.rocking = false; } } - } + @Override @Nullable protected SoundEvent getPaddleSound() { - switch(this.getBoatStatus()) { + switch (this.getBoatStatus()) { case IN_WATER: case UNDER_WATER: case UNDER_FLOWING_WATER: @@ -418,49 +342,52 @@ public class BoatEntityBOP extends Entity { private void tickLerp() { if (this.lerpSteps > 0 && !this.canPassengerSteer()) { - double d0 = this.posX + (this.lerpX - this.posX) / (double)this.lerpSteps; - double d1 = this.posY + (this.lerpY - this.posY) / (double)this.lerpSteps; - double d2 = this.posZ + (this.lerpZ - this.posZ) / (double)this.lerpSteps; - double d3 = MathHelper.wrapDegrees(this.lerpYaw - (double)this.rotationYaw); - this.rotationYaw = (float)((double)this.rotationYaw + d3 / (double)this.lerpSteps); - this.rotationPitch = (float)((double)this.rotationPitch + (this.lerpPitch - (double)this.rotationPitch) / (double)this.lerpSteps); + double d0 = this.posX + (this.lerpX - this.posX) / (double) this.lerpSteps; + double d1 = this.posY + (this.lerpY - this.posY) / (double) this.lerpSteps; + double d2 = this.posZ + (this.lerpZ - this.posZ) / (double) this.lerpSteps; + double d3 = MathHelper.wrapDegrees(this.lerpYaw - (double) this.rotationYaw); + this.rotationYaw = (float) ((double) this.rotationYaw + d3 / (double) this.lerpSteps); + this.rotationPitch = (float) ((double) this.rotationPitch + (this.lerpPitch - (double) this.rotationPitch) / (double) this.lerpSteps); --this.lerpSteps; this.setPosition(d0, d1, d2); this.setRotation(this.rotationYaw, this.rotationPitch); } } + @Override public void setPaddleState(boolean left, boolean right) { this.dataManager.set(field_199704_e, left); this.dataManager.set(field_199705_f, right); } + @Override @OnlyIn(Dist.CLIENT) public float getRowingTime(int side, float limbSwing) { - return this.getPaddleState(side) ? (float)MathHelper.clampedLerp((double)this.paddlePositions[side] - (double)((float)Math.PI / 8F), (double)this.paddlePositions[side], (double)limbSwing) : 0.0F; + return this.getPaddleState(side) ? (float) MathHelper.clampedLerp((double) this.paddlePositions[side] - (double) ((float) Math.PI / 8F), (double) this.paddlePositions[side], (double) limbSwing) : 0.0F; } /** * Determines whether the boat is in water, gliding on land, or in air */ - private BoatEntityBOP.Status getBoatStatus() { - BoatEntityBOP.Status boatentity$status = this.getUnderwaterStatus(); + private Status getBoatStatus() { + Status boatentity$status = this.getUnderwaterStatus(); if (boatentity$status != null) { this.waterLevel = this.getBoundingBox().maxY; return boatentity$status; } else if (this.checkInWater()) { - return BoatEntityBOP.Status.IN_WATER; + return Status.IN_WATER; } else { float f = this.getBoatGlide(); if (f > 0.0F) { this.boatGlide = f; - return BoatEntityBOP.Status.ON_LAND; + return Status.ON_LAND; } else { - return BoatEntityBOP.Status.IN_AIR; + return Status.IN_AIR; } } } + @Override public float getWaterLevelAbove() { AxisAlignedBB axisalignedbb = this.getBoundingBox(); int i = MathHelper.floor(axisalignedbb.minX); @@ -472,11 +399,11 @@ public class BoatEntityBOP extends Entity { try (BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.retain()) { label161: - for(int k1 = k; k1 < l; ++k1) { + for (int k1 = k; k1 < l; ++k1) { float f = 0.0F; - for(int l1 = i; l1 < j; ++l1) { - for(int i2 = i1; i2 < j1; ++i2) { + for (int l1 = i; l1 < j; ++l1) { + for (int i2 = i1; i2 < j1; ++i2) { blockpos$pooledmutableblockpos.setPos(l1, k1, i2); IFluidState ifluidstate = this.world.getFluidState(blockpos$pooledmutableblockpos); if (ifluidstate.isTagged(FluidTags.WATER)) { @@ -490,12 +417,12 @@ public class BoatEntityBOP extends Entity { } if (f < 1.0F) { - float f2 = (float)blockpos$pooledmutableblockpos.getY() + f; + float f2 = (float) blockpos$pooledmutableblockpos.getY() + f; return f2; } } - float f1 = (float)(l + 1); + float f1 = (float) (l + 1); return f1; } } @@ -503,6 +430,7 @@ public class BoatEntityBOP extends Entity { /** * Decides how much the boat should be gliding on the land (based on any slippery blocks) */ + @Override public float getBoatGlide() { AxisAlignedBB axisalignedbb = this.getBoundingBox(); AxisAlignedBB axisalignedbb1 = new AxisAlignedBB(axisalignedbb.minX, axisalignedbb.minY - 0.001D, axisalignedbb.minZ, axisalignedbb.maxX, axisalignedbb.minY, axisalignedbb.maxZ); @@ -517,15 +445,15 @@ public class BoatEntityBOP extends Entity { int k1 = 0; try (BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.retain()) { - for(int l1 = i; l1 < j; ++l1) { - for(int i2 = i1; i2 < j1; ++i2) { + for (int l1 = i; l1 < j; ++l1) { + for (int i2 = i1; i2 < j1; ++i2) { int j2 = (l1 != i && l1 != j - 1 ? 0 : 1) + (i2 != i1 && i2 != j1 - 1 ? 0 : 1); if (j2 != 2) { - for(int k2 = k; k2 < l; ++k2) { + for (int k2 = k; k2 < l; ++k2) { if (j2 <= 0 || k2 != k && k2 != l - 1) { blockpos$pooledmutableblockpos.setPos(l1, k2, i2); BlockState blockstate = this.world.getBlockState(blockpos$pooledmutableblockpos); - if (!(blockstate.getBlock() instanceof LilyPadBlock) && VoxelShapes.compare(blockstate.getCollisionShape(this.world, blockpos$pooledmutableblockpos).withOffset((double)l1, (double)k2, (double)i2), voxelshape, IBooleanFunction.AND)) { + if (!(blockstate.getBlock() instanceof LilyPadBlock) && VoxelShapes.compare(blockstate.getCollisionShape(this.world, blockpos$pooledmutableblockpos).withOffset((double) l1, (double) k2, (double) i2), voxelshape, IBooleanFunction.AND)) { f += blockstate.getSlipperiness(this.world, blockpos$pooledmutableblockpos, this); ++k1; } @@ -536,7 +464,7 @@ public class BoatEntityBOP extends Entity { } } - return f / (float)k1; + return f / (float) k1; } private boolean checkInWater() { @@ -551,15 +479,15 @@ public class BoatEntityBOP extends Entity { this.waterLevel = Double.MIN_VALUE; try (BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.retain()) { - for(int k1 = i; k1 < j; ++k1) { - for(int l1 = k; l1 < l; ++l1) { - for(int i2 = i1; i2 < j1; ++i2) { + for (int k1 = i; k1 < j; ++k1) { + for (int l1 = k; l1 < l; ++l1) { + for (int i2 = i1; i2 < j1; ++i2) { blockpos$pooledmutableblockpos.setPos(k1, l1, i2); IFluidState ifluidstate = this.world.getFluidState(blockpos$pooledmutableblockpos); if (ifluidstate.isTagged(FluidTags.WATER)) { - float f = (float)l1 + ifluidstate.func_215679_a(this.world, blockpos$pooledmutableblockpos); - this.waterLevel = Math.max((double)f, this.waterLevel); - flag |= axisalignedbb.minY < (double)f; + float f = (float) l1 + ifluidstate.func_215679_a(this.world, blockpos$pooledmutableblockpos); + this.waterLevel = Math.max((double) f, this.waterLevel); + flag |= axisalignedbb.minY < (double) f; } } } @@ -573,7 +501,7 @@ public class BoatEntityBOP extends Entity { * Decides whether the boat is currently underwater. */ @Nullable - private BoatEntityBOP.Status getUnderwaterStatus() { + private Status getUnderwaterStatus() { AxisAlignedBB axisalignedbb = this.getBoundingBox(); double d0 = axisalignedbb.maxY + 0.001D; int i = MathHelper.floor(axisalignedbb.minX); @@ -585,15 +513,14 @@ public class BoatEntityBOP extends Entity { boolean flag = false; try (BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.retain()) { - for(int k1 = i; k1 < j; ++k1) { - for(int l1 = k; l1 < l; ++l1) { - for(int i2 = i1; i2 < j1; ++i2) { + for (int k1 = i; k1 < j; ++k1) { + for (int l1 = k; l1 < l; ++l1) { + for (int i2 = i1; i2 < j1; ++i2) { blockpos$pooledmutableblockpos.setPos(k1, l1, i2); IFluidState ifluidstate = this.world.getFluidState(blockpos$pooledmutableblockpos); - if (ifluidstate.isTagged(FluidTags.WATER) && d0 < (double)((float)blockpos$pooledmutableblockpos.getY() + ifluidstate.func_215679_a(this.world, blockpos$pooledmutableblockpos))) { + if (ifluidstate.isTagged(FluidTags.WATER) && d0 < (double) ((float) blockpos$pooledmutableblockpos.getY() + ifluidstate.func_215679_a(this.world, blockpos$pooledmutableblockpos))) { if (!ifluidstate.isSource()) { - BoatEntityBOP.Status boatentity$status = BoatEntityBOP.Status.UNDER_FLOWING_WATER; - return boatentity$status; + return Status.UNDER_FLOWING_WATER; } flag = true; @@ -603,36 +530,36 @@ public class BoatEntityBOP extends Entity { } } - return flag ? BoatEntityBOP.Status.UNDER_WATER : null; + return flag ? Status.UNDER_WATER : null; } /** * Update the boat's speed, based on momentum. */ private void updateMotion() { - double d0 = (double)-0.04F; - double d1 = this.hasNoGravity() ? 0.0D : (double)-0.04F; + double gravity = (double) -0.04F; + double d1 = this.hasNoGravity() ? 0.0D : gravity; double d2 = 0.0D; this.momentum = 0.05F; - if (this.previousStatus == BoatEntityBOP.Status.IN_AIR && this.status != BoatEntityBOP.Status.IN_AIR && this.status != BoatEntityBOP.Status.ON_LAND) { - this.waterLevel = this.getBoundingBox().minY + (double)this.getHeight(); - this.setPosition(this.posX, (double)(this.getWaterLevelAbove() - this.getHeight()) + 0.101D, this.posZ); + if (this.previousStatus == Status.IN_AIR && this.status != Status.IN_AIR && this.status != Status.ON_LAND) { + this.waterLevel = this.getBoundingBox().minY + (double) this.getHeight(); + this.setPosition(this.posX, (double) (this.getWaterLevelAbove() - this.getHeight()) + 0.101D, this.posZ); this.setMotion(this.getMotion().mul(1.0D, 0.0D, 1.0D)); this.lastYd = 0.0D; - this.status = BoatEntityBOP.Status.IN_WATER; + this.status = Status.IN_WATER; } else { - if (this.status == BoatEntityBOP.Status.IN_WATER) { - d2 = (this.waterLevel - this.getBoundingBox().minY) / (double)this.getHeight(); + if (this.status == Status.IN_WATER) { + d2 = (this.waterLevel - this.getBoundingBox().minY) / (double) this.getHeight(); this.momentum = 0.9F; - } else if (this.status == BoatEntityBOP.Status.UNDER_FLOWING_WATER) { + } else if (this.status == Status.UNDER_FLOWING_WATER) { d1 = -7.0E-4D; this.momentum = 0.9F; - } else if (this.status == BoatEntityBOP.Status.UNDER_WATER) { - d2 = (double)0.01F; + } else if (this.status == Status.UNDER_WATER) { + d2 = (double) 0.01F; this.momentum = 0.45F; - } else if (this.status == BoatEntityBOP.Status.IN_AIR) { + } else if (this.status == Status.IN_AIR) { this.momentum = 0.9F; - } else if (this.status == BoatEntityBOP.Status.ON_LAND) { + } else if (this.status == Status.ON_LAND) { this.momentum = this.boatGlide; if (this.getControllingPassenger() instanceof PlayerEntity) { this.boatGlide /= 2.0F; @@ -640,14 +567,13 @@ public class BoatEntityBOP extends Entity { } Vec3d vec3d = this.getMotion(); - this.setMotion(vec3d.x * (double)this.momentum, vec3d.y + d1, vec3d.z * (double)this.momentum); + this.setMotion(vec3d.x * (double) this.momentum, vec3d.y + d1, vec3d.z * (double) this.momentum); this.deltaRotation *= this.momentum; if (d2 > 0.0D) { Vec3d vec3d1 = this.getMotion(); this.setMotion(vec3d1.x, (vec3d1.y + d2 * 0.06153846016296973D) * 0.75D, vec3d1.z); } } - } private void controlBoat() { @@ -674,15 +600,16 @@ public class BoatEntityBOP extends Entity { f -= 0.005F; } - this.setMotion(this.getMotion().add((double)(MathHelper.sin(-this.rotationYaw * ((float)Math.PI / 180F)) * f), 0.0D, (double)(MathHelper.cos(this.rotationYaw * ((float)Math.PI / 180F)) * f))); + this.setMotion(this.getMotion().add((double) (MathHelper.sin(-this.rotationYaw * ((float) Math.PI / 180F)) * f), 0.0D, (double) (MathHelper.cos(this.rotationYaw * ((float) Math.PI / 180F)) * f))); this.setPaddleState(this.rightInputDown && !this.leftInputDown || this.forwardInputDown, this.leftInputDown && !this.rightInputDown || this.forwardInputDown); } } + @Override public void updatePassenger(Entity passenger) { if (this.isPassenger(passenger)) { float f = 0.0F; - float f1 = (float)((this.removed ? (double)0.01F : this.getMountedYOffset()) + passenger.getYOffset()); + float f1 = (float) ((this.removed ? (double) 0.01F : this.getMountedYOffset()) + passenger.getYOffset()); if (this.getPassengers().size() > 1) { int i = this.getPassengers().indexOf(passenger); if (i == 0) { @@ -692,27 +619,27 @@ public class BoatEntityBOP extends Entity { } if (passenger instanceof AnimalEntity) { - f = (float)((double)f + 0.2D); + f = (float) ((double) f + 0.2D); } } - Vec3d vec3d = (new Vec3d((double)f, 0.0D, 0.0D)).rotateYaw(-this.rotationYaw * ((float)Math.PI / 180F) - ((float)Math.PI / 2F)); - passenger.setPosition(this.posX + vec3d.x, this.posY + (double)f1, this.posZ + vec3d.z); + Vec3d vec3d = (new Vec3d((double) f, 0.0D, 0.0D)).rotateYaw(-this.rotationYaw * ((float) Math.PI / 180F) - ((float) Math.PI / 2F)); + passenger.setPosition(this.posX + vec3d.x, this.posY + (double) f1, this.posZ + vec3d.z); passenger.rotationYaw += this.deltaRotation; passenger.setRotationYawHead(passenger.getRotationYawHead() + this.deltaRotation); this.applyYawToEntity(passenger); if (passenger instanceof AnimalEntity && this.getPassengers().size() > 1) { int j = passenger.getEntityId() % 2 == 0 ? 90 : 270; - passenger.setRenderYawOffset(((AnimalEntity)passenger).renderYawOffset + (float)j); - passenger.setRotationYawHead(passenger.getRotationYawHead() + (float)j); + passenger.setRenderYawOffset(((AnimalEntity) passenger).renderYawOffset + (float) j); + passenger.setRotationYawHead(passenger.getRotationYawHead() + (float) j); } - } } /** * Applies this boat's yaw to the given entity. Used to update the orientation of its passenger. */ + @Override protected void applyYawToEntity(Entity entityToUpdate) { entityToUpdate.setRenderYawOffset(this.rotationYaw); float f = MathHelper.wrapDegrees(entityToUpdate.rotationYaw - this.rotationYaw); @@ -725,6 +652,7 @@ public class BoatEntityBOP extends Entity { /** * Applies this entity's orientation (pitch/yaw) to another entity. Used to update passenger orientation. */ + @Override @OnlyIn(Dist.CLIENT) public void applyOrientationToEntity(Entity entityToUpdate) { this.applyYawToEntity(entityToUpdate); @@ -732,7 +660,7 @@ public class BoatEntityBOP extends Entity { @Override protected void writeAdditional(CompoundNBT compound) { - compound.putString("Type", this.getBoatType().getName()); + compound.putString("Type", this.getBoatModel().getName()); } /** @@ -741,20 +669,7 @@ public class BoatEntityBOP extends Entity { @Override protected void readAdditional(CompoundNBT compound) { if (compound.contains("Type", 8)) { - this.setBoatType(Type.getTypeFromString(compound.getString("Type"))); - } - - } - - public boolean processInitialInteract(PlayerEntity player, Hand hand) { - if (player.isSneaking()) { - return false; - } else { - if (!this.world.isRemote && this.outOfControlTicks < 60.0F) { - player.startRiding(this); - } - - return true; + setBoatModel(Type.getTypeFromString(compound.getString("Type"))); } } @@ -773,11 +688,11 @@ public class BoatEntityBOP extends Entity { if (!this.world.isRemote && !this.removed) { this.remove(); if (this.world.getGameRules().getBoolean(GameRules.DO_ENTITY_DROPS)) { - for(int i = 0; i < 3; ++i) { + for (int i = 0; i < 3; ++i) { this.entityDropItem(this.getBoatType().asPlank()); } - for(int j = 0; j < 2; ++j) { + for (int j = 0; j < 2; ++j) { this.entityDropItem(Items.STICK); } } @@ -786,12 +701,12 @@ public class BoatEntityBOP extends Entity { this.fallDistance = 0.0F; } else if (!this.world.getFluidState((new BlockPos(this)).down()).isTagged(FluidTags.WATER) && y < 0.0D) { - this.fallDistance = (float)((double)this.fallDistance - y); + this.fallDistance = (float) ((double) this.fallDistance - y); } - } } + @Override public boolean getPaddleState(int side) { return this.dataManager.get(side == 0 ? field_199704_e : field_199705_f) && this.getControllingPassenger() != null; } @@ -799,6 +714,7 @@ public class BoatEntityBOP extends Entity { /** * Sets the damage taken from the last hit. */ + @Override public void setDamageTaken(float damageTaken) { this.dataManager.set(DAMAGE_TAKEN, damageTaken); } @@ -806,6 +722,7 @@ public class BoatEntityBOP extends Entity { /** * Gets the damage taken from the last hit. */ + @Override public float getDamageTaken() { return this.dataManager.get(DAMAGE_TAKEN); } @@ -813,6 +730,7 @@ public class BoatEntityBOP extends Entity { /** * Sets the time to count down from since the last time entity was hit. */ + @Override public void setTimeSinceHit(int timeSinceHit) { this.dataManager.set(TIME_SINCE_HIT, timeSinceHit); } @@ -820,6 +738,7 @@ public class BoatEntityBOP extends Entity { /** * Gets the time since the last hit. */ + @Override public int getTimeSinceHit() { return this.dataManager.get(TIME_SINCE_HIT); } @@ -832,6 +751,7 @@ public class BoatEntityBOP extends Entity { return this.dataManager.get(ROCKING_TICKS); } + @Override @OnlyIn(Dist.CLIENT) public float getRockingAngle(float partialTicks) { return MathHelper.lerp(partialTicks, this.prevRockingAngle, this.rockingAngle); @@ -840,6 +760,7 @@ public class BoatEntityBOP extends Entity { /** * Sets the forward direction of the entity. */ + @Override public void setForwardDirection(int forwardDirection) { this.dataManager.set(FORWARD_DIRECTION, forwardDirection); } @@ -847,32 +768,20 @@ public class BoatEntityBOP extends Entity { /** * Gets the forward direction of the entity. */ + @Override public int getForwardDirection() { return this.dataManager.get(FORWARD_DIRECTION); } - public void setBoatType(Type boatType) { + public void setBoatModel(Type boatType) { this.dataManager.set(BOAT_TYPE, boatType.ordinal()); } - public Type getBoatType() { + public Type getBoatModel() { return Type.byId(this.dataManager.get(BOAT_TYPE)); } - protected boolean canFitPassenger(Entity passenger) { - return this.getPassengers().size() < 2 && !this.areEyesInFluid(FluidTags.WATER); - } - - /** - * For vehicles, the first passenger is generally considered the controller and "drives" the vehicle. For example, - * Pigs, Horses, and Boats are generally "steered" by the controlling passenger. - */ - @Nullable - public Entity getControllingPassenger() { - List list = this.getPassengers(); - return list.isEmpty() ? null : list.get(0); - } - + @Override @OnlyIn(Dist.CLIENT) public void updateInputs(boolean p_184442_1_, boolean p_184442_2_, boolean p_184442_3_, boolean p_184442_4_) { this.leftInputDown = p_184442_1_; @@ -886,29 +795,7 @@ public class BoatEntityBOP extends Entity { return NetworkHooks.getEntitySpawningPacket(this); } - // Forge: Fix MC-119811 by instantly completing lerp on board - @Override - protected void addPassenger(Entity passenger) { - super.addPassenger(passenger); - if (this.canPassengerSteer() && this.lerpSteps > 0) { - this.lerpSteps = 0; - this.posX = this.lerpX; - this.posY = this.lerpY; - this.posZ = this.lerpZ; - this.rotationYaw = (float)this.lerpYaw; - this.rotationPitch = (float)this.lerpPitch; - } - } - - public static enum Status { - IN_WATER, - UNDER_WATER, - UNDER_FLOWING_WATER, - ON_LAND, - IN_AIR; - } - - public static enum Type { + public enum Type { FIR(BOPBlocks.fir_planks, "fir"), REDWOOD(BOPBlocks.redwood_planks, "redwood"), CHERRY(BOPBlocks.cherry_planks, "cherry"), @@ -944,6 +831,7 @@ public class BoatEntityBOP extends Entity { /** * Get a boat type by it's enum ordinal + * * @return */ public static Type byId(int id) { @@ -951,19 +839,17 @@ public class BoatEntityBOP extends Entity { if (id < 0 || id >= aboatentity$type.length) { id = 0; } - return aboatentity$type[id]; } public static Type getTypeFromString(String nameIn) { Type[] aboatentity$type = values(); - for(int i = 0; i < aboatentity$type.length; ++i) { + for (int i = 0; i < aboatentity$type.length; ++i) { if (aboatentity$type[i].getName().equals(nameIn)) { return aboatentity$type[i]; } } - return aboatentity$type[0]; } } diff --git a/src/main/java/biomesoplenty/common/entity/item/BoatRendererBOP.java b/src/main/java/biomesoplenty/common/entity/item/BoatRendererBOP.java index 5595e1910..9816e8d34 100644 --- a/src/main/java/biomesoplenty/common/entity/item/BoatRendererBOP.java +++ b/src/main/java/biomesoplenty/common/entity/item/BoatRendererBOP.java @@ -65,7 +65,7 @@ public class BoatRendererBOP extends EntityRenderer { @Override protected ResourceLocation getEntityTexture(BoatEntityBOP entity) { - return BOAT_TEXTURES[entity.getBoatType().ordinal()]; + return BOAT_TEXTURES[entity.getBoatModel().ordinal()]; } @Override diff --git a/src/main/java/biomesoplenty/common/entity/item/package-info.java b/src/main/java/biomesoplenty/common/entity/item/package-info.java new file mode 100644 index 000000000..cd4ef3f6e --- /dev/null +++ b/src/main/java/biomesoplenty/common/entity/item/package-info.java @@ -0,0 +1,3 @@ +@javax.annotation.ParametersAreNonnullByDefault +@mcp.MethodsReturnNonnullByDefault +package biomesoplenty.common.entity.item; diff --git a/src/main/java/biomesoplenty/common/item/BoatItemBOP.java b/src/main/java/biomesoplenty/common/item/BoatItemBOP.java index 8df265f9c..9325bfddd 100644 --- a/src/main/java/biomesoplenty/common/item/BoatItemBOP.java +++ b/src/main/java/biomesoplenty/common/item/BoatItemBOP.java @@ -56,7 +56,7 @@ public class BoatItemBOP extends Item { if (raytraceresult.getType() == RayTraceResult.Type.BLOCK) { BoatEntityBOP boatentity = new BoatEntityBOP(worldIn, raytraceresult.getHitVec().x, raytraceresult.getHitVec().y, raytraceresult.getHitVec().z); - boatentity.setBoatType(this.type); + boatentity.setBoatModel(this.type); boatentity.rotationYaw = playerIn.rotationYaw; if (!worldIn.isCollisionBoxesEmpty(boatentity, boatentity.getBoundingBox().grow(-0.1D))) { return new ActionResult<>(ActionResultType.FAIL, itemstack); diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index 8976f7b23..cde6def2c 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -16,5 +16,3 @@ public-f net.minecraft.item.AxeItem field_203176_a # BLOCK_STRIPPING_MAP # server.properties world type hackery public-f net.minecraft.server.dedicated.ServerProperties * public net.minecraft.server.dedicated.PropertyManager * - -public net.minecraft.client.entity.player.ClientPlayerEntity field_184844_co # rowingBoat