/** * Used for easily adding entity-dependent animations. The second and third float params here are * the same second and third as in the setRotationAngles method. */ public void setLivingAnimations( EntityLivingBase entitylivingbaseIn, float p_78086_2_, float p_78086_3_, float partialTickTime) { EntityIronGolem entityirongolem = (EntityIronGolem) entitylivingbaseIn; int i = entityirongolem.getAttackTimer(); if (i > 0) { this.ironGolemRightArm.rotateAngleX = -2.0F + 1.5F * this.triangleWave((float) i - partialTickTime, 10.0F); this.ironGolemLeftArm.rotateAngleX = -2.0F + 1.5F * this.triangleWave((float) i - partialTickTime, 10.0F); } else { int j = entityirongolem.getHoldRoseTick(); if (j > 0) { this.ironGolemRightArm.rotateAngleX = -0.8F + 0.025F * this.triangleWave((float) j, 70.0F); this.ironGolemLeftArm.rotateAngleX = 0.0F; } else { this.ironGolemRightArm.rotateAngleX = (-0.2F + 1.5F * this.triangleWave(p_78086_2_, 13.0F)) * p_78086_3_; this.ironGolemLeftArm.rotateAngleX = (-0.2F - 1.5F * this.triangleWave(p_78086_2_, 13.0F)) * p_78086_3_; } } }
private void trySpawnGolem(World worldIn, BlockPos pos) { BlockPattern.PatternHelper patternhelper; int i; int j; if ((patternhelper = this.getSnowmanPattern().match(worldIn, pos)) != null) { for (i = 0; i < this.getSnowmanPattern().getThumbLength(); ++i) { BlockWorldState blockworldstate = patternhelper.translateOffset(0, i, 0); worldIn.setBlockState(blockworldstate.getPos(), Blocks.air.getDefaultState(), 2); } EntitySnowman entitysnowman = new EntitySnowman(worldIn); BlockPos blockpos2 = patternhelper.translateOffset(0, 2, 0).getPos(); entitysnowman.setLocationAndAngles( (double) blockpos2.getX() + 0.5D, (double) blockpos2.getY() + 0.05D, (double) blockpos2.getZ() + 0.5D, 0.0F, 0.0F); worldIn.spawnEntityInWorld(entitysnowman); for (j = 0; j < 120; ++j) { worldIn.spawnParticle( EnumParticleTypes.SNOW_SHOVEL, (double) blockpos2.getX() + worldIn.rand.nextDouble(), (double) blockpos2.getY() + worldIn.rand.nextDouble() * 2.5D, (double) blockpos2.getZ() + worldIn.rand.nextDouble(), 0.0D, 0.0D, 0.0D, new int[0]); } for (j = 0; j < this.getSnowmanPattern().getThumbLength(); ++j) { BlockWorldState blockworldstate1 = patternhelper.translateOffset(0, j, 0); worldIn.notifyNeighborsRespectDebug(blockworldstate1.getPos(), Blocks.air); } } else if ((patternhelper = this.getGolemPattern().match(worldIn, pos)) != null) { for (i = 0; i < this.getGolemPattern().getPalmLength(); ++i) { for (int k = 0; k < this.getGolemPattern().getThumbLength(); ++k) { worldIn.setBlockState( patternhelper.translateOffset(i, k, 0).getPos(), Blocks.air.getDefaultState(), 2); } } BlockPos blockpos1 = patternhelper.translateOffset(1, 2, 0).getPos(); EntityIronGolem entityirongolem = new EntityIronGolem(worldIn); entityirongolem.setPlayerCreated(true); entityirongolem.setLocationAndAngles( (double) blockpos1.getX() + 0.5D, (double) blockpos1.getY() + 0.05D, (double) blockpos1.getZ() + 0.5D, 0.0F, 0.0F); worldIn.spawnEntityInWorld(entityirongolem); for (j = 0; j < 120; ++j) { worldIn.spawnParticle( EnumParticleTypes.SNOWBALL, (double) blockpos1.getX() + worldIn.rand.nextDouble(), (double) blockpos1.getY() + worldIn.rand.nextDouble() * 3.9D, (double) blockpos1.getZ() + worldIn.rand.nextDouble(), 0.0D, 0.0D, 0.0D, new int[0]); } for (j = 0; j < this.getGolemPattern().getPalmLength(); ++j) { for (int l = 0; l < this.getGolemPattern().getThumbLength(); ++l) { BlockWorldState blockworldstate2 = patternhelper.translateOffset(j, l, 0); worldIn.notifyNeighborsRespectDebug(blockworldstate2.getPos(), Blocks.air); } } } }
/** Called whenever the block is added into the world. Args: world, x, y, z */ public void onBlockAdded(World par1World, int par2, int par3, int par4) { super.onBlockAdded(par1World, par2, par3, par4); if (par1World.getBlockId(par2, par3 - 1, par4) == Block.blockSnow.blockID && par1World.getBlockId(par2, par3 - 2, par4) == Block.blockSnow.blockID) { if (!par1World.isRemote) { par1World.setBlock(par2, par3, par4, 0); par1World.setBlock(par2, par3 - 1, par4, 0); par1World.setBlock(par2, par3 - 2, par4, 0); EntitySnowman var9 = new EntitySnowman(par1World); var9.setLocationAndAngles( (double) par2 + 0.5D, (double) par3 - 1.95D, (double) par4 + 0.5D, 0.0F, 0.0F); par1World.spawnEntityInWorld(var9); par1World.notifyBlockChange(par2, par3, par4, 0); par1World.notifyBlockChange(par2, par3 - 1, par4, 0); par1World.notifyBlockChange(par2, par3 - 2, par4, 0); } for (int var10 = 0; var10 < 120; ++var10) { par1World.spawnParticle( "snowshovel", (double) par2 + par1World.rand.nextDouble(), (double) (par3 - 2) + par1World.rand.nextDouble() * 2.5D, (double) par4 + par1World.rand.nextDouble(), 0.0D, 0.0D, 0.0D); } } else if (par1World.getBlockId(par2, par3 - 1, par4) == Block.blockSteel.blockID && par1World.getBlockId(par2, par3 - 2, par4) == Block.blockSteel.blockID) { boolean var5 = par1World.getBlockId(par2 - 1, par3 - 1, par4) == Block.blockSteel.blockID && par1World.getBlockId(par2 + 1, par3 - 1, par4) == Block.blockSteel.blockID; boolean var6 = par1World.getBlockId(par2, par3 - 1, par4 - 1) == Block.blockSteel.blockID && par1World.getBlockId(par2, par3 - 1, par4 + 1) == Block.blockSteel.blockID; if (var5 || var6) { par1World.setBlock(par2, par3, par4, 0); par1World.setBlock(par2, par3 - 1, par4, 0); par1World.setBlock(par2, par3 - 2, par4, 0); if (var5) { par1World.setBlock(par2 - 1, par3 - 1, par4, 0); par1World.setBlock(par2 + 1, par3 - 1, par4, 0); } else { par1World.setBlock(par2, par3 - 1, par4 - 1, 0); par1World.setBlock(par2, par3 - 1, par4 + 1, 0); } EntityIronGolem var7 = new EntityIronGolem(par1World); var7.setPlayerCreated(true); var7.setLocationAndAngles( (double) par2 + 0.5D, (double) par3 - 1.95D, (double) par4 + 0.5D, 0.0F, 0.0F); par1World.spawnEntityInWorld(var7); for (int var8 = 0; var8 < 120; ++var8) { par1World.spawnParticle( "snowballpoof", (double) par2 + par1World.rand.nextDouble(), (double) (par3 - 2) + par1World.rand.nextDouble() * 3.9D, (double) par4 + par1World.rand.nextDouble(), 0.0D, 0.0D, 0.0D); } par1World.notifyBlockChange(par2, par3, par4, 0); par1World.notifyBlockChange(par2, par3 - 1, par4, 0); par1World.notifyBlockChange(par2, par3 - 2, par4, 0); if (var5) { par1World.notifyBlockChange(par2 - 1, par3 - 1, par4, 0); par1World.notifyBlockChange(par2 + 1, par3 - 1, par4, 0); } else { par1World.notifyBlockChange(par2, par3 - 1, par4 - 1, 0); par1World.notifyBlockChange(par2, par3 - 1, par4 + 1, 0); } } } }