From fece29925cb6739a0c5487f5cf0ccea5c9b90d2a Mon Sep 17 00:00:00 2001 From: bconlon Date: Wed, 30 Dec 2020 22:45:17 -0800 Subject: [PATCH] Backport swet changes. --- .../client/renders/entity/SwetRenderer.java | 67 +- .../passive/mountable/EntitySwet.java | 849 +++++++++--------- .../the_aether/network/AetherNetwork.java | 2 + .../network/packets/PacketSwetJump.java | 55 ++ 4 files changed, 496 insertions(+), 477 deletions(-) create mode 100644 src/main/java/com/gildedgames/the_aether/network/packets/PacketSwetJump.java diff --git a/src/main/java/com/gildedgames/the_aether/client/renders/entity/SwetRenderer.java b/src/main/java/com/gildedgames/the_aether/client/renders/entity/SwetRenderer.java index 9df82ac..a4b1803 100644 --- a/src/main/java/com/gildedgames/the_aether/client/renders/entity/SwetRenderer.java +++ b/src/main/java/com/gildedgames/the_aether/client/renders/entity/SwetRenderer.java @@ -7,6 +7,7 @@ import net.minecraft.client.model.ModelSlime; import net.minecraft.client.renderer.entity.RenderLiving; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntitySlime; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; @@ -17,22 +18,29 @@ public class SwetRenderer extends RenderLiving { private static final ResourceLocation TEXTURE_GOLDEN = Aether.locate("textures/entities/swet/swet_golden.png"); - public SwetRenderer() { + public SwetRenderer() + { super(new ModelSlime(16), 0.3F); - - this.setRenderPassModel(new ModelSlime(0)); } - protected int renderEyeGlow(EntitySwet entity, int pass, float particleTicks) { - if (entity.isInvisible()) { + protected int shouldRenderPass(EntitySwet entity, int pass, float particleTicks) + { + if (entity.isInvisible()) + { return 0; - } else if (pass == 0) { + } + else if (pass == 0) + { + this.setRenderPassModel(new ModelSlime(0)); GL11.glEnable(GL11.GL_NORMALIZE); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); return 1; - } else { - if (pass == 1) { + } + else + { + if (pass == 1) + { GL11.glDisable(GL11.GL_BLEND); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); } @@ -41,44 +49,35 @@ public class SwetRenderer extends RenderLiving { } } - protected void setupAnimation(EntitySwet swet, float f) { - float f2 = 1.0F; - float f1 = 1.0F; - float f3 = 1.5F; + protected void preRenderCallback(EntitySwet swet, float f) + { + float f1 = swet.swetHeight; //height + float f2 = swet.swetWidth; //width + float f3 = 1.5F; //scale - if (!swet.onGround && swet.worldObj.isRemote) { - if (swet.motionY > 0.85D) { - f1 = 1.425F; - f2 = 0.575F; - } else if (swet.motionY < -0.85D) { - f1 = 0.575F; - f2 = 1.425F; - } else { - float f4 = (float) swet.motionY * 0.5F; - f1 += f4; - f2 -= f4; - } - } - - if (swet.riddenByEntity != null) { - f3 = 1.5F + (swet.riddenByEntity.width + swet.riddenByEntity.height) * 2.0F; + if(swet.riddenByEntity != null) + { + f3 = 1.5F + (swet.riddenByEntity.width + swet.riddenByEntity.height) * 0.75F; } GL11.glScalef(f2 * f3, f1 * f3, f2 * f3); } @Override - protected int shouldRenderPass(EntityLivingBase entity, int pass, float particleTicks) { - return this.renderEyeGlow((EntitySwet) entity, pass, particleTicks); + protected void preRenderCallback(EntityLivingBase p_77041_1_, float p_77041_2_) + { + this.preRenderCallback((EntitySwet)p_77041_1_, p_77041_2_); } @Override - protected void preRenderCallback(EntityLivingBase swet, float f) { - this.setupAnimation((EntitySwet) swet, f); + protected int shouldRenderPass(EntityLivingBase p_77032_1_, int p_77032_2_, float p_77032_3_) + { + return this.shouldRenderPass((EntitySwet)p_77032_1_, p_77032_2_, p_77032_3_); } @Override - public ResourceLocation getEntityTexture(Entity swet) { - return ((EntitySwet) swet).getSwetType() == EnumSwetType.BLUE ? TEXTURE_BLUE : TEXTURE_GOLDEN; + public ResourceLocation getEntityTexture(Entity swet) + { + return ((EntitySwet) swet).getType() == EnumSwetType.BLUE ? TEXTURE_BLUE : TEXTURE_GOLDEN; } } \ No newline at end of file diff --git a/src/main/java/com/gildedgames/the_aether/entities/passive/mountable/EntitySwet.java b/src/main/java/com/gildedgames/the_aether/entities/passive/mountable/EntitySwet.java index 5458ff5..b9e60ff 100644 --- a/src/main/java/com/gildedgames/the_aether/entities/passive/mountable/EntitySwet.java +++ b/src/main/java/com/gildedgames/the_aether/entities/passive/mountable/EntitySwet.java @@ -1,154 +1,126 @@ package com.gildedgames.the_aether.entities.passive.mountable; -import java.util.List; - +import com.gildedgames.the_aether.api.AetherAPI; +import com.gildedgames.the_aether.api.player.IPlayerAether; +import com.gildedgames.the_aether.blocks.BlocksAether; import com.gildedgames.the_aether.entities.hostile.swet.EnumSwetType; -import net.minecraft.command.IEntitySelector; +import com.gildedgames.the_aether.items.ItemsAether; +import com.gildedgames.the_aether.network.AetherNetwork; +import com.gildedgames.the_aether.network.packets.PacketSwetJump; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityAgeable; -import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; import net.minecraft.util.MathHelper; +import net.minecraft.world.EnumDifficulty; import net.minecraft.world.World; -import com.gildedgames.the_aether.blocks.BlocksAether; import com.gildedgames.the_aether.entities.util.EntityMountable; -import com.gildedgames.the_aether.items.ItemsAether; -import com.gildedgames.the_aether.player.PlayerAether; -public class EntitySwet extends EntityMountable { +public class EntitySwet extends EntityMountable +{ + public boolean wasOnGround; + public boolean midJump; + public int jumpTimer; - private int slimeJumpDelay = 0; + public float swetHeight; + public float swetWidth; - public int ticker; + private int jumpDelay; - public int flutter; + private int jumps = 0; + private float chosenDegrees; - public int hops; - - public boolean kickoff; - - public EntitySwet(World world) { + public EntitySwet(World world) + { super(world); - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(25); - this.setHealth(25); - - this.setSwetType(this.rand.nextInt(2)); - this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(1.5F); this.setSize(0.8F, 0.8F); this.setPosition(this.posX, this.posY, this.posZ); - this.hops = 0; - this.flutter = 0; - this.ticker = 0; - this.slimeJumpDelay = this.rand.nextInt(20) + 10; + + this.swetHeight = 1.0F; + this.swetWidth = 1.0F; } @Override - public void entityInit() { - super.entityInit(); - - this.dataWatcher.addObject(20, new Byte((byte) 0)); - this.dataWatcher.addObject(21, new Byte((byte) this.rand.nextInt(EnumSwetType.values().length))); - } - - @Override - public void updateRidden() { - super.updateRidden(); - - if (this.riddenByEntity != null && this.kickoff) { - this.riddenByEntity.mountEntity(null); - this.kickoff = false; - } - } - - @Override - public boolean getCanSpawnHere() + public void entityInit() { - return this.rand.nextInt(10) == 0 && super.getCanSpawnHere(); + super.entityInit(); + this.dataWatcher.addObject(21, (byte) this.rand.nextInt(EnumSwetType.values().length)); } @Override - public void onUpdate() { - super.onUpdate(); + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(1.5D); + this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(25.0D); + this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(25.0D); + this.setHealth(25.0F); + } - if (this.getAttackTarget() != null) { - for (int i = 0; i < 3; i++) { - double d = (float) this.posX + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.3F; - double d1 = (float) this.posY + this.height; - double d2 = (float) this.posZ + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.3F; + @Override + protected void collideWithEntity(Entity entityIn) + { + super.collideWithEntity(entityIn); - this.worldObj.spawnParticle("splash", d, d1 - 0.25D, d2, 0.0D, 0.0D, 0.0D); - } - } + if (!this.hasPrey()) + { + if (entityIn instanceof EntityPlayer) + { + EntityPlayer player = (EntityPlayer) entityIn; - if (this.riddenByEntity == null && !this.isFriendly()) { - List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand(0.5D, 0.75D, 0.5D), new IEntitySelector() { - @Override - public boolean isEntityApplicable(Entity entity) { - return !(entity instanceof EntitySwet) && entity instanceof EntityLivingBase && entity.ridingEntity == null; + if (this.getAttackTarget() != null) + { + if (this.getAttackTarget() == player) + { + if (!player.capabilities.isCreativeMode) + { + this.capturePrey((EntityPlayer) entityIn); + } + } } - }); - - for (int j = 0; j < list.size() && this.riddenByEntity == null; ++j) { - EntityLivingBase entity = (EntityLivingBase) list.get(j); - - this.capturePrey(entity); - } - } - - if (this.handleWaterMovement()) { - this.dissolve(); - } - } - - @Override - protected boolean canDespawn() { - return !this.isFriendly(); - } - - @Override - public void fall(float distance) { - if (!this.isFriendly()) { - super.fall(distance); - - if (this.hops >= 3 && this.getHealth() >= 0) { - this.dissolve(); } } } @Override - public void knockBack(Entity entity, float damage, double distanceX, double distanceZ) { - if (this.riddenByEntity != entity) { - super.knockBack(entity, damage, distanceX, distanceZ); + public boolean interact(EntityPlayer player) + { + if (!this.worldObj.isRemote) + { + if (!this.hasPrey() && this.isPlayerFriendly(player)) + { + this.capturePrey(player); + } + } + + return true; + } + + @Override + public void onEntityUpdate() + { + super.onEntityUpdate(); + + if (this.getAttackTarget() instanceof EntityPlayer) + { + if (this.isPlayerFriendly((EntityPlayer) this.getAttackTarget()) || this.isFriendly()) + { + this.setAttackTarget(null); + } } } - public void dissolve() { - for (int i = 0; i < 50; i++) { - float f = this.rand.nextFloat() * 3.141593F * 2.0F; - float f1 = this.rand.nextFloat() * 0.5F + 0.25F; - float f2 = MathHelper.sin(f) * f1; - float f3 = MathHelper.cos(f) * f1; - - this.worldObj.spawnParticle("splash", this.posX + (double) f2, this.boundingBox.minY + 1.25D, this.posZ + (double) f3, (double) f2 * 1.5D + this.motionX, 4D, (double) f3 * 1.5D + this.motionZ); - } - - this.setDead(); - } - - public void capturePrey(Entity entity) { - this.splorch(); + public void capturePrey(EntityPlayer entity) + { + this.worldObj.playSound(this.posX, this.posY, this.posZ, "mob.attack", 0.5F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F, false); this.prevPosX = this.posX = entity.posX; - this.prevPosY = this.posY = entity.posY + 0.0099999997764825821D; + this.prevPosY = this.posY = entity.posY + 0.01; this.prevPosZ = this.posZ = entity.posZ; this.prevRotationYaw = this.rotationYaw = entity.rotationYaw; this.prevRotationPitch = this.rotationPitch = entity.rotationPitch; @@ -164,405 +136,396 @@ public class EntitySwet extends EntityMountable { this.rotationYaw = this.rand.nextFloat() * 360F; } - @Override - public boolean attackEntityFrom(DamageSource damageSource, float i) { - Entity entity = damageSource.getEntity(); - - if (this.hops == 3 && entity == null && this.getHealth() > 1) { - this.setHealth(1); + public void onUpdate() + { + if (!this.worldObj.isRemote && this.worldObj.difficultySetting == EnumDifficulty.PEACEFUL) + { + this.isDead = true; } - boolean flag = super.attackEntityFrom(damageSource, i); + if (this.handleWaterMovement()) + { + this.dissolveSwet(); + } - if (flag && this.riddenByEntity != null && (this.riddenByEntity instanceof EntityLivingBase)) { - EntityLivingBase rider = (EntityLivingBase) this.riddenByEntity; + super.onUpdate(); - if (entity != null && rider == entity) { - if (this.rand.nextInt(3) == 0) { - this.kickoff = true; - } - } else { - rider.attackEntityFrom(DamageSource.causeMobDamage(this), i); + if (!this.hasPrey()) + { + for (int i = 0; i < 5; i++) + { + double d = (float) this.posX + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.3F; + double d1 = (float) this.posY + this.height; + double d2 = (float) this.posZ + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.3F; + this.worldObj.spawnParticle("splash", d, d1 - 0.25D, d2, 0.0D, 0.0D, 0.0D); + } + } - if (this.getHealth() <= 0) { - this.kickoff = true; + if (this.onGround && !this.wasOnGround) + { + this.worldObj.playSound(this.posX, this.posY, this.posZ, "mob.slime.small", 0.5F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F, false); + } + + if (!this.worldObj.isRemote) + { + this.midJump = !this.onGround; + AetherNetwork.sendToAll(new PacketSwetJump(this.getEntityId(), !this.onGround)); + } + + if (this.worldObj.isRemote) + { + if (this.midJump) + { + this.jumpTimer++; + } + else + { + this.jumpTimer = 0; + } + + if (this.onGround) + { + this.swetHeight = this.swetHeight < 1.0F ? this.swetHeight += 0.25F : 1.0F; + this.swetWidth = this.swetWidth > 1.0F ? this.swetWidth -= 0.25F : 1.0F; + } + else + { + this.swetHeight = 1.425F; + this.swetWidth = 0.875F; + + if (this.getJumpTimer() > 3) + { + float scale = Math.min(this.getJumpTimer(), 10); + this.swetHeight -= 0.05F * scale; + this.swetWidth += 0.05F * scale; } } } - if (flag && this.getHealth() <= 0) { - this.dissolve(); - } else if (flag && (entity instanceof EntityLivingBase)) { - EntityLivingBase entityliving = (EntityLivingBase) entity; - - if (entityliving.getHealth() > 0 && (this.riddenByEntity == null || this.riddenByEntity != null && entityliving != this.riddenByEntity)) { - this.setAttackTarget((EntityLivingBase) entity); - this.kickoff = true; - } - } - - if (this.isFriendly()) { - this.setAttackTarget(null); - } - - return flag; + this.wasOnGround = this.onGround; } @Override - public void updateEntityActionState() { - super.updateEntityActionState(); - this.entityAge++; + public void moveEntityWithHeading(float strafe, float forward) + { + if (this.hasPrey()) + { + if (this.isFriendly()) + { + EntityPlayer rider = (EntityPlayer) this.riddenByEntity; + IPlayerAether aetherRider = AetherAPI.get(rider); - if (this.isFriendly() && this.riddenByEntity != null) { - return; - } - - if (this.getAttackTarget() == null && this.riddenByEntity == null && this.getHealth() > 0) { - if (this.onGround && this.slimeJumpDelay-- <= 0) { - this.slimeJumpDelay = this.getJumpDelay(); - - this.isJumping = true; - - this.motionY = 0.34999999403953552D; - - this.playSound("mob.slime.small", 1.0F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F) * 0.8F); - - this.moveStrafing = 1.0F - this.rand.nextFloat() * 2.0F; - this.moveForward = 16.0F; - } else { - this.isJumping = false; - - if (this.onGround) { - this.moveStrafing = this.moveForward = 0.0F; + if (aetherRider.isJumping() && this.onGround) + { + this.jump(); + this.onGround = false; + this.motionY = 1.0f; } } } - if (!this.onGround && this.isJumping) { + + super.moveEntityWithHeading(strafe, forward); + } + + @Override + protected void updateEntityActionState() + { + this.despawnEntity(); + + EntityPlayer entityplayer = this.worldObj.getClosestVulnerablePlayerToEntity(this, 25.0D); + + if (entityplayer != null) + { + if (entityplayer.isEntityAlive() && !entityplayer.capabilities.disableDamage) + { + if (!this.isPlayerFriendly(entityplayer) && !this.isFriendly() && !this.hasPrey()) + { + this.setAttackTarget(entityplayer); + this.faceEntity(entityplayer, 10.0F, 20.0F); + } + } + } + + if (this.onGround && this.jumpDelay-- <= 0) + { + this.jumpDelay = this.getJumpDelay(); + + if (entityplayer != null) + { + this.jumpDelay /= 3; + } + + this.isJumping = true; + + this.playSound(this.getJumpSound(), this.getSoundVolume(), ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F) * 0.8F); + + this.moveStrafing = 1.0F - this.rand.nextFloat() * 2.0F; + this.moveForward = 1.0F; + } + else + { this.isJumping = false; - } - if (this.getAttackTarget() != null && this.riddenByEntity == null && this.getHealth() > 0) { - float f = MathHelper.wrapAngleTo180_float(20.0F); - - if (f > 20.0F) { - f = 10.0F; - } - - if (f < -20.0F) { - f = -210.0F; - } - - this.rotationYaw = f + this.getAttackTarget().rotationYaw + 214.0F; - //this.faceEntity(this.getAttackTarget(), 10F, 20F); - - if (this.onGround && this.slimeJumpDelay-- <= 0) { - this.slimeJumpDelay = this.getJumpDelay(); - - this.isJumping = true; - - this.motionY = 0.34999999403953552D; - - this.playSound("mob.slime.small", 1.0F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F) * 0.8F); - - this.moveStrafing = 1.0F - this.rand.nextFloat() * 2.0F; - this.moveForward = 16.0F; - } else { - this.isJumping = false; - - if (this.onGround) { - this.moveStrafing = this.moveForward = 0.0F; - } + if (this.onGround) + { + this.moveStrafing = this.moveForward = 0.0F; } } - if (this.getAttackTarget() != null && this.getAttackTarget().isDead) { - this.setAttackTarget(null); - } + if (this.hasPrey() && this.riddenByEntity instanceof EntityPlayer && !this.isPlayerFriendly((EntityPlayer) this.riddenByEntity)) + { + if (this.jumps <= 3) + { + if (this.onGround) + { + this.playSound("mob.slime.small", 1.0F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F) * 0.8F); - if (!this.onGround && this.motionY < 0.05000000074505806D && this.flutter > 0) { - this.motionY += 0.070000000298023224D; - this.flutter--; - } - if (this.ticker < 4) { - this.ticker++; - } else { - if (this.onGround && this.riddenByEntity == null && this.hops != 0 && this.hops != 3) { - this.hops = 0; - } + this.chosenDegrees = (float)this.rand.nextInt(360); - if (this.getAttackTarget() == null && this.riddenByEntity == null) { - Entity entity = this.getPrey(); - if (entity != null) { - this.setAttackTarget((EntityLivingBase) entity); - } - } else if (this.getAttackTarget() != null && this.riddenByEntity == null) { - if (this.getDistanceToEntity(this.getAttackTarget()) <= 9F) { - if (this.onGround && this.canEntityBeSeen(this.getAttackTarget())) { - this.splotch(); - this.flutter = 10; - this.isJumping = true; - this.moveForward = 16.0F; - this.moveStrafing = 1.0F - this.rand.nextFloat() * 2.0F; - this.rotationYaw += 5F * (this.rand.nextFloat() - this.rand.nextFloat()); + if (this.jumps == 0) + { + this.motionY += 0.64999999403953552D; + } + else if (this.jumps == 1) + { + this.motionY += 0.74999998807907104D; + } + else if (this.jumps == 2) + { + this.motionY += 1.55D; + } + else + { + if (this.riddenByEntity instanceof EntityPlayer) + { + ((EntityPlayer) this.riddenByEntity).dismountEntity(this); + } + this.dissolveSwet(); + } + + if (!this.midJump) + { + this.jumps++; } - } else { - this.setAttackTarget(null); - this.isJumping = false; - this.moveStrafing = this.moveForward = 0.0F; } - } else if (this.riddenByEntity != null && this.riddenByEntity != null && this.onGround) { - if (this.hops == 0) { - this.splotch(); - this.onGround = false; - this.motionY = 0.34999999403953552D; - this.moveForward = 0.8F; - this.hops = 1; - this.flutter = 5; - this.rotationYaw += 20F * (this.rand.nextFloat() - this.rand.nextFloat()); - } else if (this.hops == 1) { - this.splotch(); - this.onGround = false; - this.motionY = 0.44999998807907104D; - this.moveForward = 0.9F; - this.hops = 2; - this.flutter = 5; - this.rotationYaw += 20F * (this.rand.nextFloat() - this.rand.nextFloat()); - } else if (this.hops == 2) { - this.splotch(); - this.onGround = false; - this.motionY = 1.25D; - this.moveForward = 1.25F; - this.hops = 3; - this.flutter = 5; - this.rotationYaw += 20F * (this.rand.nextFloat() - this.rand.nextFloat()); + + if (!this.wasOnGround) + { + if (this.getJumpTimer() < 6) + { + if (this.jumps == 1) + { + this.moveXY(0.0F, 0.2F, this.chosenDegrees); + } + else if (this.jumps == 2) + { + this.moveXY(0.0F, 0.3F, this.chosenDegrees); + } + else if (this.jumps == 3) + { + this.moveXY(0.0F, 0.6F, this.chosenDegrees); + } + } } } - - this.ticker = 0; - } - - if (this.onGround && this.hops >= 3) { - this.dissolve(); } } - protected int getJumpDelay() { - return this.rand.nextInt(20) + 10; + public void moveXY(float strafe, float forward, float rotation) + { + float f = strafe * strafe + forward * forward; + + f = MathHelper.sqrt_float(f); + if (f < 1.0F) f = 1.0F; + strafe = strafe * f; + forward = forward * f; + float f1 = MathHelper.sin(rotation * 0.017453292F); + float f2 = MathHelper.cos(rotation * 0.017453292F); + + this.motionX += (strafe * f2 - forward * f1); + this.motionZ += (forward * f2 + strafe * f1); } - public void moveEntityWithHeading(float par1, float par2) { - EntityPlayer rider = this.riddenByEntity != null && this.riddenByEntity instanceof EntityPlayer ? (EntityPlayer) this.riddenByEntity : null; - - if (rider != null) { - PlayerAether aetherRider = PlayerAether.get(rider); - - if (aetherRider == null) { - return; - } - - this.setFriendly(aetherRider.getAccessoryInventory().wearingAccessory(new ItemStack(ItemsAether.swet_cape)) ? true : false); - - if (this.isFriendly()) { - this.prevRotationYaw = this.rotationYaw = rider.rotationYaw; - this.rotationPitch = rider.rotationPitch * 0.5F; - - this.setRotation(this.rotationYaw, this.rotationPitch); - - this.rotationYawHead = this.renderYawOffset = this.rotationYaw; - - if (this.onGround && this.slimeJumpDelay-- <= 0) { - par1 = rider.moveStrafing * 2F; - par2 = rider.moveForward * 2; - - if (par1 != 0.0f || par2 != 0.0f) { - this.jump(); - this.onGround = false; - this.motionY = 0.7f; - this.slimeJumpDelay = this.rand.nextInt(4); - } - - if (aetherRider.isJumping()) { - this.jump(); - this.onGround = false; - this.motionY = 1.0f; - this.slimeJumpDelay = this.rand.nextInt(15); - } - - int rotate = MathHelper.floor_double(rider.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; - - double x = Math.cos(this.getLookVec().xCoord); - double z = Math.cos(this.getLookVec().zCoord); - - if (par2 > 0.0F) { - this.motionX = this.getLookVec().xCoord / 2; - this.motionZ = this.getLookVec().zCoord / 2; - } - - if (par2 < 0.0F) { - this.motionX = -this.getLookVec().xCoord / 2; - this.motionZ = -this.getLookVec().zCoord / 2; - } - - if (par1 > 0.0F) { - if (rotate <= 1) { - this.motionX = x / 2; - this.motionZ = z / 2; - } else { - this.motionX = -x / 2; - this.motionZ = -z / 2; - } - } - - if (par1 < 0.0F) { - if (rotate <= 1) { - this.motionX = +-x / 2; - this.motionZ = +-z / 2; - } else { - this.motionX = +x / 2; - this.motionZ = +z / 2; - } - } - } else if (this.onGround) { - return; - } - - if (par2 <= 0.0F) { - par2 *= 0.25F; - this.field_110285_bP = 0; - } - - this.stepHeight = 1.0F; - this.jumpMovementFactor = this.getAIMoveSpeed() * 0.1F; - - if (!this.worldObj.isRemote) { - this.setAIMoveSpeed((float) this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getAttributeValue()); - super.moveEntityWithHeading(par1, par2); - } - } else { - this.stepHeight = 0.5F; - this.jumpMovementFactor = 0.02F; - super.moveEntityWithHeading(this.moveForward, this.moveStrafing); - } - } else { - this.stepHeight = 0.5F; - this.jumpMovementFactor = 0.02F; - super.moveEntityWithHeading(this.moveForward, this.moveStrafing); + @Override + public void fall(float distance) + { + if (!this.isFriendly()) + { + super.fall(distance); } } @Override - protected void jump() { - super.jump(); - - this.playSound("mob.slime.small", 1.0F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F) * 0.8F); + protected void jump() + { + this.motionY = 0.41999998688697815D; + this.isAirBorne = true; } - public void setSwetType(int id) { - this.dataWatcher.updateObject(21, (byte) id); + public int getJumpTimer() + { + return this.jumpTimer; } - public EnumSwetType getSwetType() { + public int getJumpDelay() + { + if (this.isFriendly()) + { + return 2; + } + else + { + return this.rand.nextInt(20) + 10; + } + } + + @Override + public int getVerticalFaceSpeed() + { + return 0; + } + + @Override + public void knockBack(Entity entityIn, float strength, double xRatio, double zRatio) + { + if (!this.hasPrey()) + { + super.knockBack(entityIn, strength, xRatio, zRatio); + } + } + + public boolean hasPrey() + { + return this.riddenByEntity != null; + } + + public boolean isPlayerFriendly(EntityPlayer player) + { + IPlayerAether iPlayerAether = AetherAPI.get(player); + return iPlayerAether.getAccessoryInventory().wearingAccessory(new ItemStack(ItemsAether.swet_cape)); + } + + public boolean isFriendly() + { + return this.hasPrey() && this.riddenByEntity instanceof EntityPlayer && isPlayerFriendly((EntityPlayer) this.riddenByEntity); + } + + public void dissolveSwet() + { + for (int i = 0; i < 50; i++) + { + float f = this.rand.nextFloat() * 3.141593F * 2.0F; + float f1 = this.rand.nextFloat() * 0.5F + 0.25F; + float f2 = MathHelper.sin(f) * f1; + float f3 = MathHelper.cos(f) * f1; + + this.worldObj.spawnParticle("splash", this.posX + (double) f2, this.boundingBox.minY + 1.25D, this.posZ + (double) f3, (double) f2 * 1.5D + this.motionX, 4D, (double) f3 * 1.5D + this.motionZ); + } + + if (this.getDeathSound() != null) this.playSound(this.getDeathSound(), this.getSoundVolume(), this.getSoundPitch()); + + this.setDead(); + } + + @Override + public float getEyeHeight() + { + return 0.625F * this.height; + } + + @Override + protected void dropFewItems(boolean recentlyHit, int lootLevel) + { + int count = this.rand.nextInt(2); + + if (lootLevel > 0) + { + count += this.rand.nextInt(lootLevel + 1); + } + + if (this.getType() == EnumSwetType.GOLDEN) + { + this.entityDropItem(new ItemStack(Blocks.glowstone, count), 1.0F); + } + else + { + this.entityDropItem(new ItemStack(BlocksAether.aercloud, count, 1), 1.0F); + this.entityDropItem(new ItemStack(ItemsAether.swet_ball, count), 1.0F); + } + } + + @Override + protected float getSoundVolume() + { + return 0.6F; + } + + @Override + public EntityAgeable createChild(EntityAgeable entityageable) + { + return null; + } + + protected String getJumpSound() + { + return "mob.slime.small"; + } + + @Override + protected String getHurtSound() + { + return "mob.slime.small"; + } + + @Override + protected String getDeathSound() + { + return "mob.slime.small"; + } + + public EnumSwetType getType() + { int id = this.dataWatcher.getWatchableObjectByte(21); return EnumSwetType.get(id); } - public void setFriendly(boolean friendly) { - this.dataWatcher.updateObject(20, (byte) (friendly ? 1 : 0)); - } - - public boolean isFriendly() { - return this.dataWatcher.getWatchableObjectByte(20) == (byte) 1; - } - - public void splorch() { - this.worldObj.playSound(this.posX, this.posY, this.posZ, "mob.attack", 0.5F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F, false); - } - - public void splotch() { - this.worldObj.playSound(this.posX, this.posY, this.posZ, "mob.slime.small", 0.5F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F, false); + public void setType(int id) + { + this.dataWatcher.updateObject(21, (byte) id); } @Override - protected String getHurtSound() { - return "mob.slime.small"; + public boolean getCanSpawnHere() + { + return this.rand.nextInt(10) == 0 && super.getCanSpawnHere(); } @Override - protected String getDeathSound() { - return "mob.slime.small"; + public int getMaxSpawnedInChunk() + { + return 3; } @Override - public void applyEntityCollision(Entity entity) { - if (this.hops == 0 && !this.isFriendly() && this.riddenByEntity == null && this.getAttackTarget() != null && entity != null && entity == this.getAttackTarget() && (entity.ridingEntity == null || !(entity.ridingEntity instanceof EntitySwet))) { - this.capturePrey(entity); - } - - super.applyEntityCollision(entity); + public boolean canDespawn() + { + return this.isFriendly(); } @Override - public boolean interact(EntityPlayer player) { - if (!this.worldObj.isRemote && this.isFriendly()) { - if (this.riddenByEntity == null) { - this.capturePrey(player); - } else if (this.riddenByEntity == player) { - player.mountEntity(null); - } - } - - return super.interact(player); - } - - protected Entity getPrey() { - List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand(6D, 6D, 6D)); - for (int i = 0; i < list.size(); i++) { - Entity entity = (Entity) list.get(i); - if ((entity instanceof EntityLivingBase) && !(entity instanceof EntitySwet) && (this.isFriendly() ? !(entity instanceof EntityPlayer) : !(entity instanceof EntityMob))) { - return entity; - } - } - - return null; - } - - @Override - protected void dropFewItems(boolean recentlyHit, int lootLevel) { - int count = this.rand.nextInt(3); - - if (lootLevel > 0) { - count += this.rand.nextInt(lootLevel + 1); - } - - this.entityDropItem(new ItemStack(this.getSwetType().getId() == 0 ? BlocksAether.aercloud : Blocks.glowstone, count, this.getSwetType().getId() == 0 ? 1 : 0), 1.0F); - this.entityDropItem(new ItemStack(ItemsAether.swet_ball, count), 1.0F); - } - - @Override - public EntityAgeable createChild(EntityAgeable entityageable) { - return null; - } - - @Override - public void writeEntityToNBT(NBTTagCompound compound) { + public void writeEntityToNBT(NBTTagCompound compound) + { super.writeEntityToNBT(compound); - compound.setShort("Hops", (short) this.hops); - compound.setShort("Flutter", (short) this.flutter); - compound.setBoolean("isFriendly", this.isFriendly()); - compound.setInteger("swetType", this.getSwetType().getId()); + compound.setInteger("SwetType", this.getType().getId()); } @Override - public void readEntityFromNBT(NBTTagCompound compound) { + public void readEntityFromNBT(NBTTagCompound compound) + { super.readEntityFromNBT(compound); - this.hops = compound.getShort("Hops"); - this.flutter = compound.getShort("Flutter"); - - this.setFriendly(compound.getBoolean("isFriendly")); - this.setSwetType(compound.getInteger("swetType")); + this.setType(compound.getInteger("SwetType")); } - } \ No newline at end of file diff --git a/src/main/java/com/gildedgames/the_aether/network/AetherNetwork.java b/src/main/java/com/gildedgames/the_aether/network/AetherNetwork.java index d06a28f..6b29cfc 100644 --- a/src/main/java/com/gildedgames/the_aether/network/AetherNetwork.java +++ b/src/main/java/com/gildedgames/the_aether/network/AetherNetwork.java @@ -54,6 +54,8 @@ public class AetherNetwork { INSTANCE.registerMessage(PacketPortalItem.class, PacketPortalItem.class, discriminant++, Side.CLIENT); INSTANCE.registerMessage(PacketCheckKey.class, PacketCheckKey.class, discriminant++, Side.SERVER); + + INSTANCE.registerMessage(PacketSwetJump.class, PacketSwetJump.class, discriminant++, Side.CLIENT); } public static void sendToAll(IMessage message) { diff --git a/src/main/java/com/gildedgames/the_aether/network/packets/PacketSwetJump.java b/src/main/java/com/gildedgames/the_aether/network/packets/PacketSwetJump.java new file mode 100644 index 0000000..b44823c --- /dev/null +++ b/src/main/java/com/gildedgames/the_aether/network/packets/PacketSwetJump.java @@ -0,0 +1,55 @@ +package com.gildedgames.the_aether.network.packets; + +import com.gildedgames.the_aether.entities.passive.mountable.EntitySwet; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; + +public class PacketSwetJump extends AetherPacket +{ + public int id; + public boolean bool; + + public PacketSwetJump() + { + + } + + public PacketSwetJump(int entity, boolean bool) + { + this.id = entity; + this.bool = bool; + } + + @Override + public void fromBytes(ByteBuf buf) + { + this.id = buf.readInt(); + this.bool = buf.readBoolean(); + } + + @Override + public void toBytes(ByteBuf buf) + { + buf.writeInt(this.id); + buf.writeBoolean(this.bool); + } + + @Override + public void handleClient(PacketSwetJump message, EntityPlayer player) + { + if (player != null && player.worldObj != null) { + Entity entity = player.worldObj.getEntityByID(message.id); + + if (entity instanceof EntitySwet) { + ((EntitySwet) entity).midJump = message.bool; + } + } + } + + @Override + public void handleServer(PacketSwetJump message, EntityPlayer player) + { + + } +} \ No newline at end of file