diff --git a/patches/minecraft/net/minecraft/block/Block.java.patch b/patches.mcp/minecraft/net/minecraft/block/Block.java.patch similarity index 70% rename from patches/minecraft/net/minecraft/block/Block.java.patch rename to patches.mcp/minecraft/net/minecraft/block/Block.java.patch index 87d785eae..b3a3dfca1 100644 --- a/patches/minecraft/net/minecraft/block/Block.java.patch +++ b/patches.mcp/minecraft/net/minecraft/block/Block.java.patch @@ -3,186 +3,186 @@ @@ -39,8 +39,9 @@ public class Block { - private static final ResourceLocation field_176230_a = new ResourceLocation("air"); -- public static final RegistryNamespacedDefaultedByKey field_149771_c = new RegistryNamespacedDefaultedByKey(field_176230_a); -- public static final ObjectIntIdentityMap field_176229_d = new ObjectIntIdentityMap(); -+ public static final RegistryNamespacedDefaultedByKey field_149771_c = net.minecraftforge.fml.common.registry.GameData.getBlockRegistry(); + private static final ResourceLocation AIR_ID = new ResourceLocation("air"); +- public static final RegistryNamespacedDefaultedByKey blockRegistry = new RegistryNamespacedDefaultedByKey(AIR_ID); +- public static final ObjectIntIdentityMap BLOCK_STATE_IDS = new ObjectIntIdentityMap(); ++ public static final RegistryNamespacedDefaultedByKey blockRegistry = net.minecraftforge.fml.common.registry.GameData.getBlockRegistry(); + @Deprecated //Modders: DO NOT use this! Use GameRegistry -+ public static final ObjectIntIdentityMap field_176229_d = net.minecraftforge.fml.common.registry.GameData.getBlockStateIDMap(); - private CreativeTabs field_149772_a; - public static final Block.SoundType field_149769_e = new Block.SoundType("stone", 1.0F, 1.0F); - public static final Block.SoundType field_149766_f = new Block.SoundType("wood", 1.0F, 1.0F); ++ public static final ObjectIntIdentityMap BLOCK_STATE_IDS = net.minecraftforge.fml.common.registry.GameData.getBlockStateIDMap(); + private CreativeTabs displayOnCreativeTab; + public static final Block.SoundType soundTypeStone = new Block.SoundType("stone", 1.0F, 1.0F); + public static final Block.SoundType soundTypeWood = new Block.SoundType("wood", 1.0F, 1.0F); @@ -124,6 +125,9 @@ - private String field_149770_b; + private String unlocalizedName; private static final String __OBFID = "CL_00000199"; + public final net.minecraftforge.fml.common.registry.RegistryDelegate delegate = -+ ((net.minecraftforge.fml.common.registry.FMLControlledNamespacedRegistry)field_149771_c).getDelegate(this, Block.class); ++ ((net.minecraftforge.fml.common.registry.FMLControlledNamespacedRegistry)blockRegistry).getDelegate(this, Block.class); + - public static int func_149682_b(Block p_149682_0_) + public static int getIdFromBlock(Block blockIn) { - return field_149771_c.func_148757_b(p_149682_0_); + return blockRegistry.getIDForObject(blockIn); @@ -136,7 +140,8 @@ - public static Block func_149729_e(int p_149729_0_) + public static Block getBlockById(int id) { -- return (Block)field_149771_c.func_148754_a(p_149729_0_); -+ Block ret = (Block)field_149771_c.func_148754_a(p_149729_0_); -+ return ret == null ? net.minecraft.init.Blocks.field_150350_a : ret; +- return (Block)blockRegistry.getObjectById(id); ++ Block ret = (Block)blockRegistry.getObjectById(id); ++ return ret == null ? net.minecraft.init.Blocks.air : ret; } - public static IBlockState func_176220_d(int p_176220_0_) + public static IBlockState getStateById(int id) @@ -300,7 +305,7 @@ - public boolean func_176200_f(World p_176200_1_, BlockPos p_176200_2_) + public boolean isReplaceable(World worldIn, BlockPos pos) { - return false; -+ return func_149688_o().func_76222_j(); ++ return getMaterial().isReplaceable(); } - public Block func_149711_c(float p_149711_1_) + public Block setHardness(float hardness) @@ -337,9 +342,10 @@ - return this.field_149789_z; + return this.needsRandomTick; } + @Deprecated //Forge: New State sensitive version. - public boolean func_149716_u() + public boolean hasTileEntity() { -- return this.field_149758_A; -+ return hasTileEntity(func_176223_P()); +- return this.isBlockContainer; ++ return hasTileEntity(getDefaultState()); } - public final void func_149676_a(float p_149676_1_, float p_149676_2_, float p_149676_3_, float p_149676_4_, float p_149676_5_, float p_149676_6_) + public final void setBlockBounds(float minX, float minY, float minZ, float maxX, float maxY, float maxZ) @@ -356,13 +362,13 @@ - public int func_176207_c(IBlockAccess p_176207_1_, BlockPos p_176207_2_) + public int getMixedBrightnessForBlock(IBlockAccess worldIn, BlockPos pos) { - Block block = p_176207_1_.func_180495_p(p_176207_2_).func_177230_c(); -- int i = p_176207_1_.func_175626_b(p_176207_2_, block.func_149750_m()); -+ int i = p_176207_1_.func_175626_b(p_176207_2_, block.getLightValue(p_176207_1_, p_176207_2_)); + Block block = worldIn.getBlockState(pos).getBlock(); +- int i = worldIn.getCombinedLight(pos, block.getLightValue()); ++ int i = worldIn.getCombinedLight(pos, block.getLightValue(worldIn, pos)); if (i == 0 && block instanceof BlockSlab) { - p_176207_2_ = p_176207_2_.func_177977_b(); - block = p_176207_1_.func_180495_p(p_176207_2_).func_177230_c(); -- return p_176207_1_.func_175626_b(p_176207_2_, block.func_149750_m()); -+ return p_176207_1_.func_175626_b(p_176207_2_, block.getLightValue(p_176207_1_, p_176207_2_)); + pos = pos.down(); + block = worldIn.getBlockState(pos).getBlock(); +- return worldIn.getCombinedLight(pos, block.getLightValue()); ++ return worldIn.getCombinedLight(pos, block.getLightValue(worldIn, pos)); } else { @@ -438,7 +444,13 @@ - public void func_176213_c(World p_176213_1_, BlockPos p_176213_2_, IBlockState p_176213_3_) {} + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) {} -- public void func_180663_b(World p_180663_1_, BlockPos p_180663_2_, IBlockState p_180663_3_) {} -+ public void func_180663_b(World p_180663_1_, BlockPos p_180663_2_, IBlockState p_180663_3_) +- public void breakBlock(World worldIn, BlockPos pos, IBlockState state) {} ++ public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { -+ if (hasTileEntity(p_180663_3_) && !(this instanceof BlockContainer)) ++ if (hasTileEntity(state) && !(this instanceof BlockContainer)) + { -+ p_180663_1_.func_175713_t(p_180663_2_); ++ worldIn.removeTileEntity(pos); + } + } - public int func_149745_a(Random p_149745_1_) + public int quantityDropped(Random random) { @@ -452,8 +464,7 @@ - public float func_180647_a(EntityPlayer p_180647_1_, World p_180647_2_, BlockPos p_180647_3_) + public float getPlayerRelativeBlockHardness(EntityPlayer playerIn, World worldIn, BlockPos pos) { -- float f = this.func_176195_g(p_180647_2_, p_180647_3_); -- return f < 0.0F ? 0.0F : (!p_180647_1_.func_146099_a(this) ? p_180647_1_.func_180471_a(this) / f / 100.0F : p_180647_1_.func_180471_a(this) / f / 30.0F); -+ return net.minecraftforge.common.ForgeHooks.blockStrength(p_180647_2_.func_180495_p(p_180647_3_), p_180647_1_, p_180647_2_, p_180647_3_); +- float f = this.getBlockHardness(worldIn, pos); +- return f < 0.0F ? 0.0F : (!playerIn.canHarvestBlock(this) ? playerIn.getToolDigEfficiency(this) / f / 100.0F : playerIn.getToolDigEfficiency(this) / f / 30.0F); ++ return net.minecraftforge.common.ForgeHooks.blockStrength(worldIn.getBlockState(pos), playerIn, worldIn, pos); } - public final void func_176226_b(World p_176226_1_, BlockPos p_176226_2_, IBlockState p_176226_3_, int p_176226_4_) + public final void dropBlockAsItem(World worldIn, BlockPos pos, IBlockState state, int forture) @@ -463,20 +474,16 @@ - public void func_180653_a(World p_180653_1_, BlockPos p_180653_2_, IBlockState p_180653_3_, float p_180653_4_, int p_180653_5_) + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) { -- if (!p_180653_1_.field_72995_K) -+ if (!p_180653_1_.field_72995_K && !p_180653_1_.restoringBlockSnapshots) // do not drop items while restoring blockstates, prevents item dupe +- if (!worldIn.isRemote) ++ if (!worldIn.isRemote && !worldIn.restoringBlockSnapshots) // do not drop items while restoring blockstates, prevents item dupe { -- int j = this.func_149679_a(p_180653_5_, p_180653_1_.field_73012_v); -+ java.util.List items = getDrops(p_180653_1_, p_180653_2_, p_180653_3_, p_180653_5_); -+ p_180653_4_ = net.minecraftforge.event.ForgeEventFactory.fireBlockHarvesting(items, p_180653_1_, p_180653_2_, p_180653_3_, p_180653_5_, p_180653_4_, false, harvesters.get()); +- int j = this.quantityDroppedWithBonus(fortune, worldIn.rand); ++ java.util.List items = getDrops(worldIn, pos, state, fortune); ++ chance = net.minecraftforge.event.ForgeEventFactory.fireBlockHarvesting(items, worldIn, pos, state, fortune, chance, false, harvesters.get()); - for (int k = 0; k < j; ++k) + for (ItemStack item : items) { - if (p_180653_1_.field_73012_v.nextFloat() <= p_180653_4_) + if (worldIn.rand.nextFloat() <= chance) { -- Item item = this.func_180660_a(p_180653_3_, p_180653_1_.field_73012_v, p_180653_5_); +- Item item = this.getItemDropped(state, worldIn.rand, fortune); - - if (item != null) - { -- func_180635_a(p_180653_1_, p_180653_2_, new ItemStack(item, 1, this.func_180651_a(p_180653_3_))); +- spawnAsEntity(worldIn, pos, new ItemStack(item, 1, this.damageDropped(state))); - } -+ func_180635_a(p_180653_1_, p_180653_2_, item); ++ spawnAsEntity(worldIn, pos, item); } } } @@ -484,8 +491,13 @@ - public static void func_180635_a(World p_180635_0_, BlockPos p_180635_1_, ItemStack p_180635_2_) + public static void spawnAsEntity(World worldIn, BlockPos pos, ItemStack stack) { -- if (!p_180635_0_.field_72995_K && p_180635_0_.func_82736_K().func_82766_b("doTileDrops")) -+ if (!p_180635_0_.field_72995_K && p_180635_0_.func_82736_K().func_82766_b("doTileDrops") && !p_180635_0_.restoringBlockSnapshots) // do not drop items while restoring blockstates, prevents item dupe +- if (!worldIn.isRemote && worldIn.getGameRules().getGameRuleBooleanValue("doTileDrops")) ++ if (!worldIn.isRemote && worldIn.getGameRules().getGameRuleBooleanValue("doTileDrops") && !worldIn.restoringBlockSnapshots) // do not drop items while restoring blockstates, prevents item dupe { + if (captureDrops.get()) + { -+ capturedDrops.get().add(p_180635_2_); ++ capturedDrops.get().add(stack); + return; + } float f = 0.5F; - double d0 = (double)(p_180635_0_.field_73012_v.nextFloat() * f) + (double)(1.0F - f) * 0.5D; - double d1 = (double)(p_180635_0_.field_73012_v.nextFloat() * f) + (double)(1.0F - f) * 0.5D; + double d0 = (double)(worldIn.rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D; + double d1 = (double)(worldIn.rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D; @@ -670,7 +682,7 @@ - public boolean func_176196_c(World p_176196_1_, BlockPos p_176196_2_) + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) { -- return p_176196_1_.func_180495_p(p_176196_2_).func_177230_c().field_149764_J.func_76222_j(); -+ return p_176196_1_.func_180495_p(p_176196_2_).func_177230_c().func_176200_f(p_176196_1_, p_176196_2_); +- return worldIn.getBlockState(pos).getBlock().blockMaterial.isReplaceable(); ++ return worldIn.getBlockState(pos).getBlock().isReplaceable(worldIn, pos); } - public boolean func_180639_a(World p_180639_1_, BlockPos p_180639_2_, IBlockState p_180639_3_, EntityPlayer p_180639_4_, EnumFacing p_180639_5_, float p_180639_6_, float p_180639_7_, float p_180639_8_) + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumFacing side, float hitX, float hitY, float hitZ) @@ -772,25 +784,35 @@ - p_180657_2_.func_71029_a(StatList.field_75934_C[func_149682_b(this)]); - p_180657_2_.func_71020_j(0.025F); + player.triggerAchievement(StatList.mineBlockStatArray[getIdFromBlock(this)]); + player.addExhaustion(0.025F); -- if (this.func_149700_E() && EnchantmentHelper.func_77502_d(p_180657_2_)) -+ if (this.canSilkHarvest(p_180657_1_, p_180657_3_, p_180657_1_.func_180495_p(p_180657_3_), p_180657_2_) && EnchantmentHelper.func_77502_d(p_180657_2_)) +- if (this.canSilkHarvest() && EnchantmentHelper.getSilkTouchModifier(player)) ++ if (this.canSilkHarvest(worldIn, pos, worldIn.getBlockState(pos), player) && EnchantmentHelper.getSilkTouchModifier(player)) { + java.util.ArrayList items = new java.util.ArrayList(); - ItemStack itemstack = this.func_180643_i(p_180657_4_); + ItemStack itemstack = this.createStackedBlock(state); if (itemstack != null) { -- func_180635_a(p_180657_1_, p_180657_3_, itemstack); +- spawnAsEntity(worldIn, pos, itemstack); + items.add(itemstack); } + -+ net.minecraftforge.event.ForgeEventFactory.fireBlockHarvesting(items, p_180657_1_, p_180657_3_, p_180657_1_.func_180495_p(p_180657_3_), 0, 1.0f, true, p_180657_2_); ++ net.minecraftforge.event.ForgeEventFactory.fireBlockHarvesting(items, worldIn, pos, worldIn.getBlockState(pos), 0, 1.0f, true, player); + for (ItemStack stack : items) + { -+ func_180635_a(p_180657_1_, p_180657_3_, stack); ++ spawnAsEntity(worldIn, pos, stack); + } } else { -+ harvesters.set(p_180657_2_); - int i = EnchantmentHelper.func_77517_e(p_180657_2_); - this.func_176226_b(p_180657_1_, p_180657_3_, p_180657_4_, i); ++ harvesters.set(player); + int i = EnchantmentHelper.getFortuneModifier(player); + this.dropBlockAsItem(worldIn, pos, state, i); + harvesters.set(null); } } + @Deprecated //Forge: State sensitive version - protected boolean func_149700_E() + protected boolean canSilkHarvest() { -- return this.func_149686_d() && !this.field_149758_A; -+ return this.func_149686_d() && !this.hasTileEntity(silk_check_state.get()); +- return this.isFullCube() && !this.isBlockContainer; ++ return this.isFullCube() && !this.hasTileEntity(silk_check_state.get()); } - protected ItemStack func_180643_i(IBlockState p_180643_1_) + protected ItemStack createStackedBlock(IBlockState state) @@ -967,6 +989,1033 @@ return Block.EnumOffsetType.NONE; } @@ -201,12 +201,12 @@ + */ + public int getLightValue(IBlockAccess world, BlockPos pos) + { -+ Block block = world.func_180495_p(pos).func_177230_c(); ++ Block block = world.getBlockState(pos).getBlock(); + if (block != this) + { + return block.getLightValue(world, pos); + } -+ return func_149750_m(); ++ return getLightValue(); + } + + /** @@ -230,7 +230,7 @@ + */ + public boolean isNormalCube(IBlockAccess world, BlockPos pos) + { -+ return func_149688_o().func_76218_k() && func_149686_d() && !func_149744_f(); ++ return getMaterial().isOpaque() && isFullCube() && !canProvidePower(); + } + + /** @@ -243,11 +243,11 @@ + */ + public boolean isSideSolid(IBlockAccess world, BlockPos pos, EnumFacing side) + { -+ IBlockState state = this.func_176221_a(world.func_180495_p(pos), world, pos); ++ IBlockState state = this.getActualState(world.getBlockState(pos), world, pos); + + if (this instanceof BlockSlab) + { -+ return func_149730_j() || (state.func_177229_b(BlockSlab.field_176554_a) == BlockSlab.EnumBlockHalf.TOP && side == EnumFacing.UP); ++ return isFullBlock() || (state.getValue(BlockSlab.HALF) == BlockSlab.EnumBlockHalf.TOP && side == EnumFacing.UP); + } + else if (this instanceof BlockFarmland) + { @@ -255,26 +255,26 @@ + } + else if (this instanceof BlockStairs) + { -+ boolean flipped = state.func_177229_b(BlockStairs.field_176308_b) == BlockStairs.EnumHalf.TOP; -+ BlockStairs.EnumShape shape = (BlockStairs.EnumShape)state.func_177229_b(BlockStairs.field_176310_M); -+ EnumFacing facing = (EnumFacing)state.func_177229_b(BlockStairs.field_176309_a); ++ boolean flipped = state.getValue(BlockStairs.HALF) == BlockStairs.EnumHalf.TOP; ++ BlockStairs.EnumShape shape = (BlockStairs.EnumShape)state.getValue(BlockStairs.SHAPE); ++ EnumFacing facing = (EnumFacing)state.getValue(BlockStairs.FACING); + if (side == EnumFacing.UP) return flipped; + if (facing == side) return true; + if (flipped) + { -+ if (shape == BlockStairs.EnumShape.INNER_LEFT ) return side == facing.func_176735_f(); -+ if (shape == BlockStairs.EnumShape.INNER_RIGHT) return side == facing.func_176746_e(); ++ if (shape == BlockStairs.EnumShape.INNER_LEFT ) return side == facing.rotateYCCW(); ++ if (shape == BlockStairs.EnumShape.INNER_RIGHT) return side == facing.rotateY(); + } + else + { -+ if (shape == BlockStairs.EnumShape.INNER_LEFT ) return side == facing.func_176746_e(); -+ if (shape == BlockStairs.EnumShape.INNER_RIGHT) return side == facing.func_176735_f(); ++ if (shape == BlockStairs.EnumShape.INNER_LEFT ) return side == facing.rotateY(); ++ if (shape == BlockStairs.EnumShape.INNER_RIGHT) return side == facing.rotateYCCW(); + } + return false; + } + else if (this instanceof BlockSnow) + { -+ return ((Integer)state.func_177229_b(BlockSnow.field_176315_a)) >= 8; ++ return ((Integer)state.getValue(BlockSnow.LAYERS)) >= 8; + } + else if (this instanceof BlockHopper && side == EnumFacing.UP) + { @@ -312,7 +312,7 @@ + */ + public boolean isAir(IBlockAccess world, BlockPos pos) + { -+ return func_149688_o() == Material.field_151579_a; ++ return getMaterial() == Material.air; + } + + /** @@ -347,7 +347,7 @@ + */ + public boolean removedByPlayer(World world, BlockPos pos, EntityPlayer player, boolean willHarvest) + { -+ return world.func_175698_g(pos); ++ return world.setBlockToAir(pos); + } + + /** @@ -361,7 +361,7 @@ + */ + public int getFlammability(IBlockAccess world, BlockPos pos, EnumFacing face) + { -+ return net.minecraft.init.Blocks.field_150480_ab.func_176532_c(this); ++ return net.minecraft.init.Blocks.fire.getFlammability(this); + } + + /** @@ -389,7 +389,7 @@ + */ + public int getFireSpreadSpeed(IBlockAccess world, BlockPos pos, EnumFacing face) + { -+ return net.minecraft.init.Blocks.field_150480_ab.func_176534_d(this); ++ return net.minecraft.init.Blocks.fire.getEncouragement(this); + } + + /** @@ -405,11 +405,11 @@ + */ + public boolean isFireSource(World world, BlockPos pos, EnumFacing side) + { -+ if (this == net.minecraft.init.Blocks.field_150424_aL && side == EnumFacing.UP) ++ if (this == net.minecraft.init.Blocks.netherrack && side == EnumFacing.UP) + { + return true; + } -+ if ((world.field_73011_w instanceof net.minecraft.world.WorldProviderEnd) && this == net.minecraft.init.Blocks.field_150357_h && side == EnumFacing.UP) ++ if ((world.provider instanceof net.minecraft.world.WorldProviderEnd) && this == net.minecraft.init.Blocks.bedrock && side == EnumFacing.UP) + { + return true; + } @@ -444,7 +444,7 @@ + { + if (isTileProvider) + { -+ return ((ITileEntityProvider)this).func_149915_a(world, func_176201_c(state)); ++ return ((ITileEntityProvider)this).createNewTileEntity(world, getMetaFromState(state)); + } + return null; + } @@ -460,7 +460,7 @@ + */ + public int quantityDropped(IBlockState state, int fortune, Random random) + { -+ return func_149679_a(fortune, random); ++ return quantityDroppedWithBonus(fortune, random); + } + + /** @@ -476,15 +476,15 @@ + { + List ret = new java.util.ArrayList(); + -+ Random rand = world instanceof World ? ((World)world).field_73012_v : RANDOM; ++ Random rand = world instanceof World ? ((World)world).rand : RANDOM; + + int count = quantityDropped(state, fortune, rand); + for(int i = 0; i < count; i++) + { -+ Item item = this.func_180660_a(state, rand, fortune); ++ Item item = this.getItemDropped(state, rand, fortune); + if (item != null) + { -+ ret.add(new ItemStack(item, 1, this.func_180651_a(state))); ++ ret.add(new ItemStack(item, 1, this.damageDropped(state))); + } + } + return ret; @@ -502,7 +502,7 @@ + public boolean canSilkHarvest(World world, BlockPos pos, IBlockState state, EntityPlayer player) + { + silk_check_state.set(state);; -+ boolean ret = this.func_149700_E(); ++ boolean ret = this.canSilkHarvest(); + silk_check_state.set(null); + return ret; + } @@ -518,14 +518,14 @@ + */ + public boolean canCreatureSpawn(IBlockAccess world, BlockPos pos, net.minecraft.entity.EntityLiving.SpawnPlacementType type) + { -+ IBlockState state = world.func_180495_p(pos); ++ IBlockState state = world.getBlockState(pos); + if (this instanceof BlockSlab) + { -+ return (func_149730_j() || state.func_177229_b(BlockSlab.field_176554_a) == BlockSlab.EnumBlockHalf.TOP); ++ return (isFullBlock() || state.getValue(BlockSlab.HALF) == BlockSlab.EnumBlockHalf.TOP); + } + else if (this instanceof BlockStairs) + { -+ return state.func_177229_b(BlockStairs.field_176308_b) == BlockStairs.EnumHalf.TOP; ++ return state.getValue(BlockStairs.HALF) == BlockStairs.EnumHalf.TOP; + } + return isSideSolid(world, pos, EnumFacing.UP); + } @@ -542,7 +542,7 @@ + */ + public boolean isBed(IBlockAccess world, BlockPos pos, Entity player) + { -+ return this == net.minecraft.init.Blocks.field_150324_C; ++ return this == net.minecraft.init.Blocks.bed; + } + + /** @@ -557,7 +557,7 @@ + public BlockPos getBedSpawnPosition(IBlockAccess world, BlockPos pos, EntityPlayer player) + { + if (world instanceof World) -+ return BlockBed.func_176468_a((World)world, pos, 0); ++ return BlockBed.getSafeExitLocation((World)world, pos, 0); + return null; + } + @@ -573,10 +573,10 @@ + { + if (world instanceof World) + { -+ IBlockState state = world.func_180495_p(pos); -+ state = state.func_177230_c().func_176221_a(state, world, pos); -+ state = state.func_177226_a(BlockBed.field_176471_b, true); -+ ((World)world).func_180501_a(pos, state, 4); ++ IBlockState state = world.getBlockState(pos); ++ state = state.getBlock().getActualState(state, world, pos); ++ state = state.withProperty(BlockBed.OCCUPIED, true); ++ ((World)world).setBlockState(pos, state, 4); + } + } + @@ -590,7 +590,7 @@ + */ + public EnumFacing getBedDirection(IBlockAccess world, BlockPos pos) + { -+ return (EnumFacing)func_176221_a(world.func_180495_p(pos), world, pos).func_177229_b(BlockDirectional.field_176387_N); ++ return (EnumFacing)getActualState(world.getBlockState(pos), world, pos).getValue(BlockDirectional.FACING); + } + + /** @@ -602,7 +602,7 @@ + */ + public boolean isBedFoot(IBlockAccess world, BlockPos pos) + { -+ return func_176221_a(world.func_180495_p(pos), world, pos).func_177229_b(BlockBed.field_176472_a) == BlockBed.EnumPartType.FOOT; ++ return getActualState(world.getBlockState(pos), world, pos).getValue(BlockBed.PART) == BlockBed.EnumPartType.FOOT; + } + + /** @@ -634,7 +634,7 @@ + */ + public boolean isLeaves(IBlockAccess world, BlockPos pos) + { -+ return func_149688_o() == Material.field_151584_j; ++ return getMaterial() == Material.leaves; + } + + /** @@ -646,7 +646,7 @@ + */ + public boolean canBeReplacedByLeaves(IBlockAccess world, BlockPos pos) + { -+ return !func_149730_j(); ++ return !isFullBlock(); + } + + /** @@ -671,7 +671,7 @@ + */ + public boolean isReplaceableOreGen(World world, BlockPos pos, com.google.common.base.Predicate target) + { -+ return target.apply(world.func_180495_p(pos)); ++ return target.apply(world.getBlockState(pos)); + } + + /** @@ -685,7 +685,7 @@ + */ + public float getExplosionResistance(World world, BlockPos pos, Entity exploder, Explosion explosion) + { -+ return func_149638_a(exploder); ++ return getExplosionResistance(exploder); + } + + /** @@ -699,8 +699,8 @@ + */ + public void onBlockExploded(World world, BlockPos pos, Explosion explosion) + { -+ world.func_175698_g(pos); -+ func_180652_a(world, pos, explosion); ++ world.setBlockToAir(pos); ++ onBlockDestroyedByExplosion(world, pos, explosion); + } + + /** @@ -714,7 +714,7 @@ + */ + public boolean canConnectRedstone(IBlockAccess world, BlockPos pos, EnumFacing side) + { -+ return func_149744_f() && side != null; ++ return canProvidePower() && side != null; + } + + /** @@ -733,7 +733,7 @@ + } + else + { -+ return this instanceof BlockFence || this == net.minecraft.init.Blocks.field_150359_w || this == net.minecraft.init.Blocks.field_150463_bK || this == net.minecraft.init.Blocks.field_150399_cn; ++ return this instanceof BlockFence || this == net.minecraft.init.Blocks.glass || this == net.minecraft.init.Blocks.cobblestone_wall || this == net.minecraft.init.Blocks.stained_glass; + } + } + @@ -763,15 +763,15 @@ + @Deprecated + public ItemStack getPickBlock(MovingObjectPosition target, World world, BlockPos pos) + { -+ Item item = func_180665_b(world, pos); ++ Item item = getItem(world, pos); + + if (item == null) + { + return null; + } + -+ Block block = item instanceof ItemBlock && !func_149648_K() ? Block.func_149634_a(item) : this; -+ return new ItemStack(item, 1, block.func_176222_j(world, pos)); ++ Block block = item instanceof ItemBlock && !isFlowerPot() ? Block.getBlockFromItem(item) : this; ++ return new ItemStack(item, 1, block.getDamageValue(world, pos)); + } + + /** @@ -838,39 +838,39 @@ + */ + public boolean canSustainPlant(IBlockAccess world, BlockPos pos, EnumFacing direction, net.minecraftforge.common.IPlantable plantable) + { -+ IBlockState state = world.func_180495_p(pos); -+ IBlockState plant = plantable.getPlant(world, pos.func_177972_a(direction)); -+ net.minecraftforge.common.EnumPlantType plantType = plantable.getPlantType(world, pos.func_177972_a(direction)); ++ IBlockState state = world.getBlockState(pos); ++ IBlockState plant = plantable.getPlant(world, pos.offset(direction)); ++ net.minecraftforge.common.EnumPlantType plantType = plantable.getPlantType(world, pos.offset(direction)); + -+ if (plant.func_177230_c() == net.minecraft.init.Blocks.field_150434_aF && this == net.minecraft.init.Blocks.field_150434_aF) ++ if (plant.getBlock() == net.minecraft.init.Blocks.cactus && this == net.minecraft.init.Blocks.cactus) + { + return true; + } + -+ if (plant.func_177230_c() == net.minecraft.init.Blocks.field_150436_aH && this == net.minecraft.init.Blocks.field_150436_aH) ++ if (plant.getBlock() == net.minecraft.init.Blocks.reeds && this == net.minecraft.init.Blocks.reeds) + { + return true; + } + -+ if (plantable instanceof BlockBush && ((BlockBush)plantable).func_149854_a(this)) ++ if (plantable instanceof BlockBush && ((BlockBush)plantable).canPlaceBlockOn(this)) + { + return true; + } + + switch (plantType) + { -+ case Desert: return this == net.minecraft.init.Blocks.field_150354_m || this == net.minecraft.init.Blocks.field_150405_ch || this == net.minecraft.init.Blocks.field_150406_ce || this == net.minecraft.init.Blocks.field_150346_d; -+ case Nether: return this == net.minecraft.init.Blocks.field_150425_aM; -+ case Crop: return this == net.minecraft.init.Blocks.field_150458_ak; ++ case Desert: return this == net.minecraft.init.Blocks.sand || this == net.minecraft.init.Blocks.hardened_clay || this == net.minecraft.init.Blocks.stained_hardened_clay || this == net.minecraft.init.Blocks.dirt; ++ case Nether: return this == net.minecraft.init.Blocks.soul_sand; ++ case Crop: return this == net.minecraft.init.Blocks.farmland; + case Cave: return isSideSolid(world, pos, EnumFacing.UP); -+ case Plains: return this == net.minecraft.init.Blocks.field_150349_c || this == net.minecraft.init.Blocks.field_150346_d || this == net.minecraft.init.Blocks.field_150458_ak; -+ case Water: return func_149688_o() == Material.field_151586_h && ((Integer)state.func_177229_b(BlockLiquid.field_176367_b)) == 0; ++ case Plains: return this == net.minecraft.init.Blocks.grass || this == net.minecraft.init.Blocks.dirt || this == net.minecraft.init.Blocks.farmland; ++ case Water: return getMaterial() == Material.water && ((Integer)state.getValue(BlockLiquid.LEVEL)) == 0; + case Beach: -+ boolean isBeach = this == net.minecraft.init.Blocks.field_150349_c || this == net.minecraft.init.Blocks.field_150346_d || this == net.minecraft.init.Blocks.field_150354_m; -+ boolean hasWater = (world.func_180495_p(pos.func_177974_f()).func_177230_c().func_149688_o() == Material.field_151586_h || -+ world.func_180495_p(pos.func_177976_e()).func_177230_c().func_149688_o() == Material.field_151586_h || -+ world.func_180495_p(pos.func_177978_c()).func_177230_c().func_149688_o() == Material.field_151586_h || -+ world.func_180495_p(pos.func_177968_d()).func_177230_c().func_149688_o() == Material.field_151586_h); ++ boolean isBeach = this == net.minecraft.init.Blocks.grass || this == net.minecraft.init.Blocks.dirt || this == net.minecraft.init.Blocks.sand; ++ boolean hasWater = (world.getBlockState(pos.east()).getBlock().getMaterial() == Material.water || ++ world.getBlockState(pos.west()).getBlock().getMaterial() == Material.water || ++ world.getBlockState(pos.north()).getBlock().getMaterial() == Material.water || ++ world.getBlockState(pos.south()).getBlock().getMaterial() == Material.water); + return isBeach && hasWater; + } + @@ -892,9 +892,9 @@ + */ + public void onPlantGrow(World world, BlockPos pos, BlockPos source) + { -+ if (this == net.minecraft.init.Blocks.field_150349_c || this == net.minecraft.init.Blocks.field_150458_ak) ++ if (this == net.minecraft.init.Blocks.grass || this == net.minecraft.init.Blocks.farmland) + { -+ world.func_180501_a(pos, net.minecraft.init.Blocks.field_150346_d.func_176223_P(), 2); ++ world.setBlockState(pos, net.minecraft.init.Blocks.dirt.getDefaultState(), 2); + } + } + @@ -909,9 +909,9 @@ + */ + public boolean isFertile(World world, BlockPos pos) + { -+ if (this == net.minecraft.init.Blocks.field_150458_ak) ++ if (this == net.minecraft.init.Blocks.farmland) + { -+ return ((Integer)world.func_180495_p(pos).func_177229_b(BlockFarmland.field_176531_a)) > 0; ++ return ((Integer)world.getBlockState(pos).getValue(BlockFarmland.MOISTURE)) > 0; + } + + return false; @@ -931,7 +931,7 @@ + */ + public int getLightOpacity(IBlockAccess world, BlockPos pos) + { -+ return func_149717_k(); ++ return getLightOpacity(); + } + + /** @@ -945,11 +945,11 @@ + { + if (entity instanceof net.minecraft.entity.boss.EntityWither) + { -+ return this != net.minecraft.init.Blocks.field_180401_cv && this != net.minecraft.init.Blocks.field_150357_h && this != net.minecraft.init.Blocks.field_150384_bq && this != net.minecraft.init.Blocks.field_150378_br && this != net.minecraft.init.Blocks.field_150483_bI; ++ return this != net.minecraft.init.Blocks.barrier && this != net.minecraft.init.Blocks.bedrock && this != net.minecraft.init.Blocks.end_portal && this != net.minecraft.init.Blocks.end_portal_frame && this != net.minecraft.init.Blocks.command_block; + } + else if (entity instanceof net.minecraft.entity.boss.EntityDragon) + { -+ return this != net.minecraft.init.Blocks.field_180401_cv && this != net.minecraft.init.Blocks.field_150343_Z && this != net.minecraft.init.Blocks.field_150377_bs && this != net.minecraft.init.Blocks.field_150357_h && this != net.minecraft.init.Blocks.field_150483_bI; ++ return this != net.minecraft.init.Blocks.barrier && this != net.minecraft.init.Blocks.obsidian && this != net.minecraft.init.Blocks.end_stone && this != net.minecraft.init.Blocks.bedrock && this != net.minecraft.init.Blocks.command_block; + } + + return true; @@ -965,7 +965,7 @@ + */ + public boolean isBeaconBase(IBlockAccess worldObj, BlockPos pos, BlockPos beacon) + { -+ return this == net.minecraft.init.Blocks.field_150475_bE || this == net.minecraft.init.Blocks.field_150340_R || this == net.minecraft.init.Blocks.field_150484_ah || this == net.minecraft.init.Blocks.field_150339_S; ++ return this == net.minecraft.init.Blocks.emerald_block || this == net.minecraft.init.Blocks.gold_block || this == net.minecraft.init.Blocks.diamond_block || this == net.minecraft.init.Blocks.iron_block; + } + + /** @@ -981,12 +981,12 @@ + */ + public boolean rotateBlock(World world, BlockPos pos, EnumFacing axis) + { -+ IBlockState state = world.func_180495_p(pos); -+ for (IProperty prop : (java.util.Set)state.func_177228_b().keySet()) ++ IBlockState state = world.getBlockState(pos); ++ for (IProperty prop : (java.util.Set)state.getProperties().keySet()) + { -+ if (prop.func_177701_a().equals("facing") || prop.func_177701_a().equals("rotation")) ++ if (prop.getName().equals("facing") || prop.getName().equals("rotation")) + { -+ world.func_175656_a(pos, state.func_177231_a(prop)); ++ world.setBlockState(pos, state.cycleProperty(prop)); + return true; + } + } @@ -1002,12 +1002,12 @@ + */ + public EnumFacing[] getValidRotations(World world, BlockPos pos) + { -+ IBlockState state = world.func_180495_p(pos); -+ for (IProperty prop : (java.util.Set)state.func_177228_b().keySet()) ++ IBlockState state = world.getBlockState(pos); ++ for (IProperty prop : (java.util.Set)state.getProperties().keySet()) + { -+ if (prop.func_177701_a().equals("facing") && prop.func_177699_b() == EnumFacing.class) ++ if (prop.getName().equals("facing") && prop.getValueClass() == EnumFacing.class) + { -+ java.util.Collection values = ((java.util.Collection)prop.func_177700_c()); ++ java.util.Collection values = ((java.util.Collection)prop.getAllowedValues()); + return values.toArray(new EnumFacing[values.size()]); + } + } @@ -1022,7 +1022,7 @@ + */ + public float getEnchantPowerBonus(World world, BlockPos pos) + { -+ return this == net.minecraft.init.Blocks.field_150342_X ? 1 : 0; ++ return this == net.minecraft.init.Blocks.bookshelf ? 1 : 0; + } + + /** @@ -1035,15 +1035,15 @@ + */ + public boolean recolorBlock(World world, BlockPos pos, EnumFacing side, net.minecraft.item.EnumDyeColor color) + { -+ IBlockState state = world.func_180495_p(pos); -+ for (IProperty prop : (java.util.Set)state.func_177228_b().keySet()) ++ IBlockState state = world.getBlockState(pos); ++ for (IProperty prop : (java.util.Set)state.getProperties().keySet()) + { -+ if (prop.func_177701_a().equals("color") && prop.func_177699_b() == net.minecraft.item.EnumDyeColor.class) ++ if (prop.getName().equals("color") && prop.getValueClass() == net.minecraft.item.EnumDyeColor.class) + { -+ net.minecraft.item.EnumDyeColor current = (net.minecraft.item.EnumDyeColor)state.func_177229_b(prop); ++ net.minecraft.item.EnumDyeColor current = (net.minecraft.item.EnumDyeColor)state.getValue(prop); + if (current != color) + { -+ world.func_175656_a(pos, state.func_177226_a(prop, color)); ++ world.setBlockState(pos, state.withProperty(prop, color)); + return true; + } + } @@ -1081,7 +1081,7 @@ + */ + public boolean shouldCheckWeakPower(IBlockAccess world, BlockPos pos, EnumFacing side) + { -+ return func_149721_r(); ++ return isNormalCube(); + } + + /** @@ -1114,7 +1114,7 @@ + */ + public void setHarvestLevel(String toolClass, int level) + { -+ Iterator itr = func_176194_O().func_177619_a().iterator(); ++ Iterator itr = getBlockState().getValidStates().iterator(); + while (itr.hasNext()) + { + setHarvestLevel(toolClass, level, itr.next()); @@ -1135,7 +1135,7 @@ + */ + public void setHarvestLevel(String toolClass, int level, IBlockState state) + { -+ int idx = this.func_176201_c(state); ++ int idx = this.getMetaFromState(state); + this.harvestTool[idx] = toolClass; + this.harvestLevel[idx] = level; + } @@ -1146,7 +1146,7 @@ + */ + public String getHarvestTool(IBlockState state) + { -+ return harvestTool[func_176201_c(state)]; ++ return harvestTool[getMetaFromState(state)]; + } + + /** @@ -1158,7 +1158,7 @@ + */ + public int getHarvestLevel(IBlockState state) + { -+ return harvestLevel[func_176201_c(state)]; ++ return harvestLevel[getMetaFromState(state)]; + } + + /** @@ -1167,7 +1167,7 @@ + */ + public boolean isToolEffective(String type, IBlockState state) + { -+ if ("pickaxe".equals(type) && (this == net.minecraft.init.Blocks.field_150450_ax || this == net.minecraft.init.Blocks.field_150439_ay || this == net.minecraft.init.Blocks.field_150343_Z)) ++ if ("pickaxe".equals(type) && (this == net.minecraft.init.Blocks.redstone_ore || this == net.minecraft.init.Blocks.lit_redstone_ore || this == net.minecraft.init.Blocks.obsidian)) + return false; + return type != null && type.equals(getHarvestTool(state)); + } @@ -1177,7 +1177,7 @@ + */ + public IBlockState getExtendedState(IBlockState state, IBlockAccess world, BlockPos pos) + { -+ return func_176221_a(state, world, pos); ++ return getActualState(state, world, pos); + } + + /** @@ -1186,7 +1186,7 @@ + */ + public boolean canRenderInLayer(EnumWorldBlockLayer layer) + { -+ return func_180664_k() == layer; ++ return getBlockLayer() == layer; + } + + // For Internal use only to capture droped items inside getDrops @@ -1214,6 +1214,6 @@ + } + /* ========================================= FORGE END ======================================*/ + - public static void func_149671_p() + public static void registerBlocks() { - func_176215_a(0, field_176230_a, (new BlockAir()).func_149663_c("air")); + registerBlock(0, AIR_ID, (new BlockAir()).setUnlocalizedName("air")); diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockAir.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockAir.java.patch new file mode 100644 index 000000000..a85287bef --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockAir.java.patch @@ -0,0 +1,9 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockAir.java ++++ ../src-work/minecraft/net/minecraft/block/BlockAir.java +@@ -36,4 +36,6 @@ + } + + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) {} ++ ++ public boolean isReplaceable(World worldIn, BlockPos pos){ return true; } + } diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockBush.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockBush.java.patch new file mode 100644 index 000000000..107960c2a --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockBush.java.patch @@ -0,0 +1,66 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockBush.java ++++ ../src-work/minecraft/net/minecraft/block/BlockBush.java +@@ -12,7 +12,7 @@ + import net.minecraftforge.fml.relauncher.Side; + import net.minecraftforge.fml.relauncher.SideOnly; + +-public class BlockBush extends Block ++public class BlockBush extends Block implements net.minecraftforge.common.IPlantable + { + private static final String __OBFID = "CL_00000208"; + +@@ -32,7 +32,7 @@ + + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { +- return super.canPlaceBlockAt(worldIn, pos) && this.canPlaceBlockOn(worldIn.getBlockState(pos.down()).getBlock()); ++ return super.canPlaceBlockAt(worldIn, pos) && worldIn.getBlockState(pos.down()).getBlock().canSustainPlant(worldIn, pos.down(), net.minecraft.util.EnumFacing.UP, this); + } + + protected boolean canPlaceBlockOn(Block ground) +@@ -62,7 +62,10 @@ + + public boolean canBlockStay(World worldIn, BlockPos pos, IBlockState state) + { +- return this.canPlaceBlockOn(worldIn.getBlockState(pos.down()).getBlock()); ++ BlockPos down = pos.down(); ++ Block soil = worldIn.getBlockState(down).getBlock(); ++ if (state.getBlock() != this) return this.canPlaceBlockOn(soil); //Forge: This function is called during world gen and placement, before this block is set, so if we are not 'here' then assume it's the pre-check. ++ return soil.canSustainPlant(worldIn, down, net.minecraft.util.EnumFacing.UP, this); + } + + public AxisAlignedBB getCollisionBoundingBox(World worldIn, BlockPos pos, IBlockState state) +@@ -85,4 +88,33 @@ + { + return EnumWorldBlockLayer.CUTOUT; + } ++ ++ @Override ++ public net.minecraftforge.common.EnumPlantType getPlantType(net.minecraft.world.IBlockAccess world, BlockPos pos) ++ { ++ if (this == Blocks.wheat) return net.minecraftforge.common.EnumPlantType.Crop; ++ if (this == Blocks.carrots) return net.minecraftforge.common.EnumPlantType.Crop; ++ if (this == Blocks.potatoes) return net.minecraftforge.common.EnumPlantType.Crop; ++ if (this == Blocks.melon_stem) return net.minecraftforge.common.EnumPlantType.Crop; ++ if (this == Blocks.pumpkin_stem) return net.minecraftforge.common.EnumPlantType.Crop; ++ if (this == Blocks.deadbush) return net.minecraftforge.common.EnumPlantType.Desert; ++ if (this == Blocks.waterlily) return net.minecraftforge.common.EnumPlantType.Water; ++ if (this == Blocks.red_mushroom) return net.minecraftforge.common.EnumPlantType.Cave; ++ if (this == Blocks.brown_mushroom) return net.minecraftforge.common.EnumPlantType.Cave; ++ if (this == Blocks.nether_wart) return net.minecraftforge.common.EnumPlantType.Nether; ++ if (this == Blocks.sapling) return net.minecraftforge.common.EnumPlantType.Plains; ++ if (this == Blocks.tallgrass) return net.minecraftforge.common.EnumPlantType.Plains; ++ if (this == Blocks.double_plant) return net.minecraftforge.common.EnumPlantType.Plains; ++ if (this == Blocks.red_flower) return net.minecraftforge.common.EnumPlantType.Plains; ++ if (this == Blocks.yellow_flower) return net.minecraftforge.common.EnumPlantType.Plains; ++ return net.minecraftforge.common.EnumPlantType.Plains; ++ } ++ ++ @Override ++ public IBlockState getPlant(net.minecraft.world.IBlockAccess world, BlockPos pos) ++ { ++ IBlockState state = world.getBlockState(pos); ++ if (state.getBlock() != this) return getDefaultState(); ++ return state; ++ } + } diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockButton.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockButton.java.patch new file mode 100644 index 000000000..e91728561 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockButton.java.patch @@ -0,0 +1,46 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockButton.java ++++ ../src-work/minecraft/net/minecraft/block/BlockButton.java +@@ -18,6 +18,7 @@ + import net.minecraft.util.EnumFacing; + import net.minecraft.world.IBlockAccess; + import net.minecraft.world.World; ++import static net.minecraft.util.EnumFacing.*; + + public abstract class BlockButton extends Block + { +@@ -57,7 +58,7 @@ + + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { +- return worldIn.getBlockState(pos.offset(side.getOpposite())).getBlock().isNormalCube(); ++ return worldIn.isSideSolid(pos.offset(side.getOpposite()), side, true); + } + + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) +@@ -69,7 +70,7 @@ + { + EnumFacing enumfacing = aenumfacing[j]; + +- if (worldIn.getBlockState(pos.offset(enumfacing)).getBlock().isNormalCube()) ++ if (worldIn.isSideSolid(pos.offset(enumfacing), enumfacing.getOpposite(), true)) + { + return true; + } +@@ -80,7 +81,7 @@ + + public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { +- return worldIn.getBlockState(pos.offset(facing.getOpposite())).getBlock().isNormalCube() ? this.getDefaultState().withProperty(FACING, facing).withProperty(POWERED, Boolean.valueOf(false)) : this.getDefaultState().withProperty(FACING, EnumFacing.DOWN).withProperty(POWERED, Boolean.valueOf(false)); ++ return worldIn.isSideSolid(pos.offset(facing.getOpposite()), facing, true) ? this.getDefaultState().withProperty(FACING, facing).withProperty(POWERED, Boolean.valueOf(false)) : this.getDefaultState().withProperty(FACING, EnumFacing.DOWN).withProperty(POWERED, Boolean.valueOf(false)); + } + + public void onNeighborBlockChange(World worldIn, BlockPos pos, IBlockState state, Block neighborBlock) +@@ -89,7 +90,7 @@ + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + +- if (!worldIn.getBlockState(pos.offset(enumfacing.getOpposite())).getBlock().isNormalCube()) ++ if (!worldIn.isSideSolid(pos.offset(enumfacing.getOpposite()), enumfacing, true)) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); diff --git a/patches/minecraft/net/minecraft/block/BlockCactus.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockCactus.java.patch similarity index 58% rename from patches/minecraft/net/minecraft/block/BlockCactus.java.patch rename to patches.mcp/minecraft/net/minecraft/block/BlockCactus.java.patch index af39372ed..25c9d4cb0 100644 --- a/patches/minecraft/net/minecraft/block/BlockCactus.java.patch +++ b/patches.mcp/minecraft/net/minecraft/block/BlockCactus.java.patch @@ -7,20 +7,20 @@ -public class BlockCactus extends Block +public class BlockCactus extends Block implements net.minecraftforge.common.IPlantable { - public static final PropertyInteger field_176587_a = PropertyInteger.func_177719_a("age", 0, 15); + public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 15); private static final String __OBFID = "CL_00000210"; @@ -115,7 +115,7 @@ } - Block block = p_176586_1_.func_180495_p(p_176586_2_.func_177977_b()).func_177230_c(); -- return block == Blocks.field_150434_aF || block == Blocks.field_150354_m; -+ return block.canSustainPlant(p_176586_1_, p_176586_2_.func_177977_b(), EnumFacing.UP, this); + Block block = worldIn.getBlockState(pos.down()).getBlock(); +- return block == Blocks.cactus || block == Blocks.sand; ++ return block.canSustainPlant(worldIn, pos.down(), EnumFacing.UP, this); } - public void func_180634_a(World p_180634_1_, BlockPos p_180634_2_, IBlockState p_180634_3_, Entity p_180634_4_) + public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) @@ -143,4 +143,16 @@ { - return new BlockState(this, new IProperty[] {field_176587_a}); + return new BlockState(this, new IProperty[] {AGE}); } + + @Override @@ -32,6 +32,6 @@ + @Override + public IBlockState getPlant(net.minecraft.world.IBlockAccess world, BlockPos pos) + { -+ return func_176223_P(); ++ return getDefaultState(); + } } diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockChest.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockChest.java.patch new file mode 100644 index 000000000..66e55dc38 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockChest.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockChest.java ++++ ../src-work/minecraft/net/minecraft/block/BlockChest.java +@@ -531,7 +531,7 @@ + + private boolean isBelowSolidBlock(World worldIn, BlockPos pos) + { +- return worldIn.getBlockState(pos.up()).getBlock().isNormalCube(); ++ return worldIn.isSideSolid(pos.up(), EnumFacing.DOWN, false); + } + + private boolean isOcelotSittingOnChest(World worldIn, BlockPos pos) diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockCocoa.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockCocoa.java.patch new file mode 100644 index 000000000..d99b486cf --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockCocoa.java.patch @@ -0,0 +1,27 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockCocoa.java ++++ ../src-work/minecraft/net/minecraft/block/BlockCocoa.java +@@ -137,6 +137,13 @@ + + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { ++ super.dropBlockAsItemWithChance(worldIn, pos, state, chance, fortune); ++ } ++ ++ @Override ++ public java.util.List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) ++ { ++ java.util.List dropped = super.getDrops(world, pos, state, fortune); + int j = ((Integer)state.getValue(AGE)).intValue(); + byte b0 = 1; + +@@ -147,8 +154,9 @@ + + for (int k = 0; k < b0; ++k) + { +- spawnAsEntity(worldIn, pos, new ItemStack(Items.dye, 1, EnumDyeColor.BROWN.getDyeDamage())); ++ dropped.add(new ItemStack(Items.dye, 1, EnumDyeColor.BROWN.getDyeDamage())); + } ++ return dropped; + } + + @SideOnly(Side.CLIENT) diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockCrops.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockCrops.java.patch new file mode 100644 index 000000000..e7efd49a1 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockCrops.java.patch @@ -0,0 +1,77 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockCrops.java ++++ ../src-work/minecraft/net/minecraft/block/BlockCrops.java +@@ -82,11 +82,11 @@ + float f1 = 0.0F; + IBlockState iblockstate = worldIn.getBlockState(blockpos1.add(i, 0, j)); + +- if (iblockstate.getBlock() == Blocks.farmland) ++ if (iblockstate.getBlock().canSustainPlant(worldIn, blockpos1.add(i, 0, j), net.minecraft.util.EnumFacing.UP, (net.minecraftforge.common.IPlantable)blockIn)) + { + f1 = 1.0F; + +- if (((Integer)iblockstate.getValue(BlockFarmland.MOISTURE)).intValue() > 0) ++ if (iblockstate.getBlock().isFertile(worldIn, blockpos1.add(i, 0, j))) + { + f1 = 3.0F; + } +@@ -127,7 +127,7 @@ + + public boolean canBlockStay(World worldIn, BlockPos pos, IBlockState state) + { +- return (worldIn.getLight(pos) >= 8 || worldIn.canSeeSky(pos)) && this.canPlaceBlockOn(worldIn.getBlockState(pos.down()).getBlock()); ++ return (worldIn.getLight(pos) >= 8 || worldIn.canSeeSky(pos)) && worldIn.getBlockState(pos.down()).getBlock().canSustainPlant(worldIn, pos.down(), net.minecraft.util.EnumFacing.UP, this); + } + + protected Item getSeed() +@@ -143,24 +143,6 @@ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + super.dropBlockAsItemWithChance(worldIn, pos, state, chance, 0); +- +- if (!worldIn.isRemote) +- { +- int j = ((Integer)state.getValue(AGE)).intValue(); +- +- if (j >= 7) +- { +- int k = 3 + fortune; +- +- for (int l = 0; l < k; ++l) +- { +- if (worldIn.rand.nextInt(15) <= j) +- { +- spawnAsEntity(worldIn, pos, new ItemStack(this.getSeed(), 1, 0)); +- } +- } +- } +- } + } + + public Item getItemDropped(IBlockState state, Random rand, int fortune) +@@ -203,4 +185,26 @@ + { + return new BlockState(this, new IProperty[] {AGE}); + } ++ ++ @Override ++ public java.util.List getDrops(net.minecraft.world.IBlockAccess world, BlockPos pos, IBlockState state, int fortune) ++ { ++ java.util.List ret = super.getDrops(world, pos, state, fortune); ++ int age = ((Integer)state.getValue(AGE)).intValue(); ++ Random rand = world instanceof World ? ((World)world).rand : new Random(); ++ ++ if (age >= 7) ++ { ++ int k = 3 + fortune; ++ ++ for (int i = 0; i < 3 + fortune; ++i) ++ { ++ if (rand.nextInt(15) <= age) ++ { ++ ret.add(new ItemStack(this.getSeed(), 1, 0)); ++ } ++ } ++ } ++ return ret; ++ } + } diff --git a/patches/minecraft/net/minecraft/block/BlockDeadBush.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockDeadBush.java.patch similarity index 57% rename from patches/minecraft/net/minecraft/block/BlockDeadBush.java.patch rename to patches.mcp/minecraft/net/minecraft/block/BlockDeadBush.java.patch index daeef6fe3..5a36603ea 100644 --- a/patches/minecraft/net/minecraft/block/BlockDeadBush.java.patch +++ b/patches.mcp/minecraft/net/minecraft/block/BlockDeadBush.java.patch @@ -11,16 +11,16 @@ @@ -41,14 +41,15 @@ - public void func_180657_a(World p_180657_1_, EntityPlayer p_180657_2_, BlockPos p_180657_3_, IBlockState p_180657_4_, TileEntity p_180657_5_) + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity te) { -- if (!p_180657_1_.field_72995_K && p_180657_2_.func_71045_bC() != null && p_180657_2_.func_71045_bC().func_77973_b() == Items.field_151097_aZ) +- if (!worldIn.isRemote && player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() == Items.shears) { -- p_180657_2_.func_71029_a(StatList.field_75934_C[Block.func_149682_b(this)]); -- func_180635_a(p_180657_1_, p_180657_3_, new ItemStack(Blocks.field_150330_I, 1, 0)); +- player.triggerAchievement(StatList.mineBlockStatArray[Block.getIdFromBlock(this)]); +- spawnAsEntity(worldIn, pos, new ItemStack(Blocks.deadbush, 1, 0)); - } - else - { - super.func_180657_a(p_180657_1_, p_180657_2_, p_180657_3_, p_180657_4_, p_180657_5_); + super.harvestBlock(worldIn, player, pos, state, te); } } + @@ -28,6 +28,6 @@ + @Override + public java.util.List onSheared(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) + { -+ return new java.util.ArrayList(java.util.Arrays.asList(new ItemStack(Blocks.field_150330_I))); ++ return new java.util.ArrayList(java.util.Arrays.asList(new ItemStack(Blocks.deadbush))); + } } diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockDoor.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockDoor.java.patch new file mode 100644 index 000000000..e44689205 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockDoor.java.patch @@ -0,0 +1,20 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockDoor.java ++++ ../src-work/minecraft/net/minecraft/block/BlockDoor.java +@@ -149,7 +149,7 @@ + { + if (this.blockMaterial == Material.iron) + { +- return true; ++ return false; //Allow items to interact with the door + } + else + { +@@ -267,7 +267,7 @@ + + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { +- return pos.getY() >= 255 ? false : World.doesBlockHaveSolidTopSurface(worldIn, pos.down()) && super.canPlaceBlockAt(worldIn, pos) && super.canPlaceBlockAt(worldIn, pos.up()); ++ return pos.getY() >= worldIn.getHeight() - 1 ? false : World.doesBlockHaveSolidTopSurface(worldIn, pos.down()) && super.canPlaceBlockAt(worldIn, pos) && super.canPlaceBlockAt(worldIn, pos.up()); + } + + public int getMobilityFlag() diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockDoublePlant.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockDoublePlant.java.patch new file mode 100644 index 000000000..e617af020 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockDoublePlant.java.patch @@ -0,0 +1,89 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockDoublePlant.java ++++ ../src-work/minecraft/net/minecraft/block/BlockDoublePlant.java +@@ -24,7 +24,7 @@ + import net.minecraftforge.fml.relauncher.Side; + import net.minecraftforge.fml.relauncher.SideOnly; + +-public class BlockDoublePlant extends BlockBush implements IGrowable ++public class BlockDoublePlant extends BlockBush implements IGrowable, net.minecraftforge.common.IShearable + { + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockDoublePlant.EnumPlantType.class); + public static final PropertyEnum HALF = PropertyEnum.create("half", BlockDoublePlant.EnumBlockHalf.class); +@@ -89,6 +89,8 @@ + Object object = flag ? this : worldIn.getBlockState(blockpos1).getBlock(); + Object object1 = flag ? worldIn.getBlockState(blockpos2).getBlock() : this; + ++ if (!flag) this.dropBlockAsItem(worldIn, pos, state, 0); //Forge move above the setting to air. ++ + if (object == this) + { + worldIn.setBlockState(blockpos1, Blocks.air.getDefaultState(), 3); +@@ -97,17 +99,13 @@ + if (object1 == this) + { + worldIn.setBlockState(blockpos2, Blocks.air.getDefaultState(), 3); +- +- if (!flag) +- { +- this.dropBlockAsItem(worldIn, blockpos2, state, 0); +- } + } + } + } + + public boolean canBlockStay(World worldIn, BlockPos pos, IBlockState state) + { ++ if (state.getBlock() != this) return super.canBlockStay(worldIn, pos, state); //Forge: This function is called during world gen and placement, before this block is set, so if we are not 'here' then assume it's the pre-check. + if (state.getValue(HALF) == BlockDoublePlant.EnumBlockHalf.UPPER) + { + return worldIn.getBlockState(pos.down()).getBlock() == this; +@@ -157,7 +155,6 @@ + + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity te) + { +- if (worldIn.isRemote || player.getCurrentEquippedItem() == null || player.getCurrentEquippedItem().getItem() != Items.shears || state.getValue(HALF) != BlockDoublePlant.EnumBlockHalf.LOWER || !this.onHarvest(worldIn, pos, state, player)) + { + super.harvestBlock(worldIn, player, pos, state, te); + } +@@ -220,8 +217,6 @@ + else + { + player.triggerAchievement(StatList.mineBlockStatArray[Block.getIdFromBlock(this)]); +- int i = (enumplanttype == BlockDoublePlant.EnumPlantType.GRASS ? BlockTallGrass.EnumType.GRASS : BlockTallGrass.EnumType.FERN).getMeta(); +- spawnAsEntity(worldIn, pos, new ItemStack(Blocks.tallgrass, 2, i)); + return true; + } + } +@@ -296,6 +291,32 @@ + return Block.EnumOffsetType.XZ; + } + ++ @Override ++ public boolean isShearable(ItemStack item, IBlockAccess world, BlockPos pos) ++ { ++ IBlockState state = world.getBlockState(pos); ++ EnumPlantType type = (EnumPlantType)state.getValue(VARIANT); ++ return state.getValue(HALF) == EnumBlockHalf.LOWER && (type == EnumPlantType.FERN || type == EnumPlantType.GRASS); ++ } ++ @Override ++ public java.util.List onSheared(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) ++ { ++ java.util.List ret = new java.util.ArrayList(); ++ EnumPlantType type = (EnumPlantType)world.getBlockState(pos).getValue(VARIANT); ++ if (type == EnumPlantType.FERN) ret.add(new ItemStack(Blocks.tallgrass, 2, BlockTallGrass.EnumType.FERN.getMeta())); ++ if (type == EnumPlantType.GRASS) ret.add(new ItemStack(Blocks.tallgrass, 2, BlockTallGrass.EnumType.GRASS.getMeta())); ++ return ret; ++ } ++ @Override ++ public boolean removedByPlayer(World world, BlockPos pos, EntityPlayer player, boolean willHarvest) ++ { ++ //Forge: Break both parts on the client to prevent the top part flickering as default type for a few frames. ++ IBlockState state = world.getBlockState(pos); ++ if (state.getBlock() == this && state.getValue(HALF) == EnumBlockHalf.LOWER && world.getBlockState(pos.up()).getBlock() == this) ++ world.setBlockToAir(pos.up()); ++ return world.setBlockToAir(pos); ++ } ++ + static enum EnumBlockHalf implements IStringSerializable + { + UPPER, diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockFalling.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockFalling.java.patch new file mode 100644 index 000000000..f303f1b29 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockFalling.java.patch @@ -0,0 +1,10 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockFalling.java ++++ ../src-work/minecraft/net/minecraft/block/BlockFalling.java +@@ -85,6 +85,7 @@ + + public static boolean canFallInto(World worldIn, BlockPos pos) + { ++ if (worldIn.isAirBlock(pos)) return true; + Block block = worldIn.getBlockState(pos).getBlock(); + Material material = block.blockMaterial; + return block == Blocks.fire || material == Material.air || material == Material.water || material == Material.lava; diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockFarmland.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockFarmland.java.patch new file mode 100644 index 000000000..b94b5429e --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockFarmland.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockFarmland.java ++++ ../src-work/minecraft/net/minecraft/block/BlockFarmland.java +@@ -89,7 +89,7 @@ + private boolean hasCrops(World worldIn, BlockPos pos) + { + Block block = worldIn.getBlockState(pos.up()).getBlock(); +- return block instanceof BlockCrops || block instanceof BlockStem; ++ return block instanceof net.minecraftforge.common.IPlantable && canSustainPlant(worldIn, pos, net.minecraft.util.EnumFacing.UP, (net.minecraftforge.common.IPlantable)block); + } + + private boolean hasWater(World worldIn, BlockPos pos) diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockFire.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockFire.java.patch new file mode 100644 index 000000000..ebd791a84 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockFire.java.patch @@ -0,0 +1,211 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockFire.java ++++ ../src-work/minecraft/net/minecraft/block/BlockFire.java +@@ -42,18 +42,24 @@ + int j = pos.getY(); + int k = pos.getZ(); + +- if (!World.doesBlockHaveSolidTopSurface(worldIn, pos.down()) && !Blocks.fire.canCatchFire(worldIn, pos.down())) ++ if (!World.doesBlockHaveSolidTopSurface(worldIn, pos.down()) && !Blocks.fire.canCatchFire(worldIn, pos.down(), EnumFacing.UP)) + { + boolean flag = (i + j + k & 1) == 1; + boolean flag1 = (i / 2 + j / 2 + k / 2 & 1) == 1; + int l = 0; + +- if (this.canCatchFire(worldIn, pos.up())) ++ if (this.canCatchFire(worldIn, pos.up(), EnumFacing.DOWN)) + { + l = flag ? 1 : 2; + } + +- return state.withProperty(NORTH, Boolean.valueOf(this.canCatchFire(worldIn, pos.north()))).withProperty(EAST, Boolean.valueOf(this.canCatchFire(worldIn, pos.east()))).withProperty(SOUTH, Boolean.valueOf(this.canCatchFire(worldIn, pos.south()))).withProperty(WEST, Boolean.valueOf(this.canCatchFire(worldIn, pos.west()))).withProperty(UPPER, Integer.valueOf(l)).withProperty(FLIP, Boolean.valueOf(flag1)).withProperty(ALT, Boolean.valueOf(flag)); ++ return state.withProperty(NORTH, Boolean.valueOf(this.canCatchFire(worldIn, pos.north(), EnumFacing.SOUTH))) ++ .withProperty(EAST, Boolean.valueOf(this.canCatchFire(worldIn, pos.east(), EnumFacing.EAST ))) ++ .withProperty(SOUTH, Boolean.valueOf(this.canCatchFire(worldIn, pos.south(), EnumFacing.NORTH))) ++ .withProperty(WEST, Boolean.valueOf(this.canCatchFire(worldIn, pos.west(), EnumFacing.EAST ))) ++ .withProperty(UPPER, Integer.valueOf(l)) ++ .withProperty(FLIP, Boolean.valueOf(flag1)) ++ .withProperty(ALT, Boolean.valueOf(flag)); + } + else + { +@@ -109,6 +115,7 @@ + + public void setFireInfo(Block blockIn, int encouragement, int flammability) + { ++ if (blockIn == Blocks.air) throw new IllegalArgumentException("Tried to set air on fire... This is bad."); + this.encouragements.put(blockIn, Integer.valueOf(encouragement)); + this.flammabilities.put(blockIn, Integer.valueOf(flammability)); + } +@@ -148,13 +155,8 @@ + } + + Block block = worldIn.getBlockState(pos.down()).getBlock(); +- boolean flag = block == Blocks.netherrack; ++ boolean flag = block.isFireSource(worldIn, pos.down(), EnumFacing.UP); + +- if (worldIn.provider instanceof WorldProviderEnd && block == Blocks.bedrock) +- { +- flag = true; +- } +- + if (!flag && worldIn.isRaining() && this.canDie(worldIn, pos)) + { + worldIn.setBlockToAir(pos); +@@ -183,7 +185,7 @@ + return; + } + +- if (!this.canCatchFire(worldIn, pos.down()) && i == 15 && rand.nextInt(4) == 0) ++ if (!this.canCatchFire(worldIn, pos.down(), EnumFacing.UP) && i == 15 && rand.nextInt(4) == 0) + { + worldIn.setBlockToAir(pos); + return; +@@ -198,12 +200,12 @@ + b0 = -50; + } + +- this.catchOnFire(worldIn, pos.east(), 300 + b0, rand, i); +- this.catchOnFire(worldIn, pos.west(), 300 + b0, rand, i); +- this.catchOnFire(worldIn, pos.down(), 250 + b0, rand, i); +- this.catchOnFire(worldIn, pos.up(), 250 + b0, rand, i); +- this.catchOnFire(worldIn, pos.north(), 300 + b0, rand, i); +- this.catchOnFire(worldIn, pos.south(), 300 + b0, rand, i); ++ this.tryCatchFire(worldIn, pos.east(), 300 + b0, rand, i, EnumFacing.WEST); ++ this.tryCatchFire(worldIn, pos.west(), 300 + b0, rand, i, EnumFacing.EAST); ++ this.tryCatchFire(worldIn, pos.down(), 250 + b0, rand, i, EnumFacing.UP); ++ this.tryCatchFire(worldIn, pos.up(), 250 + b0, rand, i, EnumFacing.DOWN); ++ this.tryCatchFire(worldIn, pos.north(), 300 + b0, rand, i, EnumFacing.SOUTH); ++ this.tryCatchFire(worldIn, pos.south(), 300 + b0, rand, i, EnumFacing.NORTH); + + for (int j = -1; j <= 1; ++j) + { +@@ -262,22 +264,30 @@ + return false; + } + ++ @Deprecated // Use Block.getFlammability + public int getFlammability(Block blockIn) + { + Integer integer = (Integer)this.flammabilities.get(blockIn); + return integer == null ? 0 : integer.intValue(); + } + ++ @Deprecated // Use Block.getFlammability + public int getEncouragement(Block blockIn) + { + Integer integer = (Integer)this.encouragements.get(blockIn); + return integer == null ? 0 : integer.intValue(); + } + ++ @Deprecated // Use tryCatchFire with face below + private void catchOnFire(World worldIn, BlockPos pos, int chance, Random random, int age) + { +- int k = this.getFlammability(worldIn.getBlockState(pos).getBlock()); ++ this.tryCatchFire(worldIn, pos, chance, random, age, EnumFacing.UP); ++ } + ++ private void tryCatchFire(World worldIn, BlockPos pos, int chance, Random random, int age, EnumFacing face) ++ { ++ int k = worldIn.getBlockState(pos).getBlock().getFlammability(worldIn, pos, face); ++ + if (random.nextInt(chance) < k) + { + IBlockState iblockstate = worldIn.getBlockState(pos); +@@ -314,7 +324,7 @@ + { + EnumFacing enumfacing = aenumfacing[j]; + +- if (this.canCatchFire(worldIn, pos.offset(enumfacing))) ++ if (this.canCatchFire(worldIn, pos.offset(enumfacing), enumfacing.getOpposite())) + { + return true; + } +@@ -338,7 +348,7 @@ + for (int k = 0; k < j; ++k) + { + EnumFacing enumfacing = aenumfacing[k]; +- i = Math.max(this.getEncouragement(worldIn.getBlockState(pos.offset(enumfacing)).getBlock()), i); ++ i = Math.max(worldIn.getBlockState(pos.offset(enumfacing)).getBlock().getFlammability(worldIn, pos.offset(enumfacing), enumfacing.getOpposite()), i); + } + + return i; +@@ -350,9 +360,10 @@ + return false; + } + ++ @Deprecated // Use canCatchFire with face sensitive version below + public boolean canCatchFire(IBlockAccess worldIn, BlockPos pos) + { +- return this.getEncouragement(worldIn.getBlockState(pos).getBlock()) > 0; ++ return canCatchFire(worldIn, pos, EnumFacing.UP); + } + + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) +@@ -396,9 +407,9 @@ + double d1; + double d2; + +- if (!World.doesBlockHaveSolidTopSurface(worldIn, pos.down()) && !Blocks.fire.canCatchFire(worldIn, pos.down())) ++ if (!World.doesBlockHaveSolidTopSurface(worldIn, pos.down()) && !Blocks.fire.canCatchFire(worldIn, pos.down(), EnumFacing.UP)) + { +- if (Blocks.fire.canCatchFire(worldIn, pos.west())) ++ if (Blocks.fire.canCatchFire(worldIn, pos.west(), EnumFacing.EAST)) + { + for (i = 0; i < 2; ++i) + { +@@ -409,7 +420,7 @@ + } + } + +- if (Blocks.fire.canCatchFire(worldIn, pos.east())) ++ if (Blocks.fire.canCatchFire(worldIn, pos.east(), EnumFacing.WEST)) + { + for (i = 0; i < 2; ++i) + { +@@ -420,7 +431,7 @@ + } + } + +- if (Blocks.fire.canCatchFire(worldIn, pos.north())) ++ if (Blocks.fire.canCatchFire(worldIn, pos.north(), EnumFacing.SOUTH)) + { + for (i = 0; i < 2; ++i) + { +@@ -431,7 +442,7 @@ + } + } + +- if (Blocks.fire.canCatchFire(worldIn, pos.south())) ++ if (Blocks.fire.canCatchFire(worldIn, pos.south(), EnumFacing.NORTH)) + { + for (i = 0; i < 2; ++i) + { +@@ -442,7 +453,7 @@ + } + } + +- if (Blocks.fire.canCatchFire(worldIn, pos.up())) ++ if (Blocks.fire.canCatchFire(worldIn, pos.up(), EnumFacing.DOWN)) + { + for (i = 0; i < 2; ++i) + { +@@ -490,4 +501,19 @@ + { + return new BlockState(this, new IProperty[] {AGE, NORTH, EAST, SOUTH, WEST, UPPER, FLIP, ALT}); + } ++ ++ /*================================= Forge Start ======================================*/ ++ /** ++ * Side sensitive version that calls the block function. ++ * ++ * @param world The current world ++ * @param pos Block position ++ * @param face The side the fire is coming from ++ * @return True if the face can catch fire. ++ */ ++ public boolean canCatchFire(IBlockAccess world, BlockPos pos, EnumFacing face) ++ { ++ return world.getBlockState(pos).getBlock().isFlammable(world, pos, face); ++ } ++ /*================================= Forge Start ======================================*/ + } diff --git a/patches/minecraft/net/minecraft/block/BlockFlowerPot.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockFlowerPot.java.patch similarity index 56% rename from patches/minecraft/net/minecraft/block/BlockFlowerPot.java.patch rename to patches.mcp/minecraft/net/minecraft/block/BlockFlowerPot.java.patch index fc892d51e..cc2eda3c8 100644 --- a/patches/minecraft/net/minecraft/block/BlockFlowerPot.java.patch +++ b/patches.mcp/minecraft/net/minecraft/block/BlockFlowerPot.java.patch @@ -2,16 +2,16 @@ +++ ../src-work/minecraft/net/minecraft/block/BlockFlowerPot.java @@ -162,13 +162,6 @@ - public void func_180663_b(World p_180663_1_, BlockPos p_180663_2_, IBlockState p_180663_3_) + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) { -- TileEntityFlowerPot tileentityflowerpot = this.func_176442_d(p_180663_1_, p_180663_2_); +- TileEntityFlowerPot tileentityflowerpot = this.getTileEntity(worldIn, pos); - -- if (tileentityflowerpot != null && tileentityflowerpot.func_145965_a() != null) +- if (tileentityflowerpot != null && tileentityflowerpot.getFlowerPotItem() != null) - { -- func_180635_a(p_180663_1_, p_180663_2_, new ItemStack(tileentityflowerpot.func_145965_a(), 1, tileentityflowerpot.func_145966_b())); +- spawnAsEntity(worldIn, pos, new ItemStack(tileentityflowerpot.getFlowerPotItem(), 1, tileentityflowerpot.getFlowerPotData())); - } - - super.func_180663_b(p_180663_1_, p_180663_2_, p_180663_3_); + super.breakBlock(worldIn, pos, state); } @@ -388,6 +381,31 @@ @@ -24,9 +24,9 @@ + public java.util.List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + java.util.List ret = super.getDrops(world, pos, state, fortune); -+ TileEntityFlowerPot te = world.func_175625_s(pos) instanceof TileEntityFlowerPot ? (TileEntityFlowerPot)world.func_175625_s(pos) : null; -+ if (te != null && te.func_145965_a() != null) -+ ret.add(new ItemStack(te.func_145965_a(), 1, te.func_145966_b())); ++ TileEntityFlowerPot te = world.getTileEntity(pos) instanceof TileEntityFlowerPot ? (TileEntityFlowerPot)world.getTileEntity(pos) : null; ++ if (te != null && te.getFlowerPotItem() != null) ++ ret.add(new ItemStack(te.getFlowerPotItem(), 1, te.getFlowerPotData())); + return ret; + } + @Override @@ -36,10 +36,10 @@ + return super.removedByPlayer(world, pos, player, willHarvest); + } + @Override -+ public void func_180657_a(World world, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity te) ++ public void harvestBlock(World world, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity te) + { -+ super.func_180657_a(world, player, pos, state, te); -+ world.func_175698_g(pos); ++ super.harvestBlock(world, player, pos, state, te); ++ world.setBlockToAir(pos); + } + /*===========================FORGE END==========================================*/ + diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockGrass.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockGrass.java.patch new file mode 100644 index 000000000..dcf8c192c --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockGrass.java.patch @@ -0,0 +1,41 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockGrass.java ++++ ../src-work/minecraft/net/minecraft/block/BlockGrass.java +@@ -59,7 +59,7 @@ + { + if (!worldIn.isRemote) + { +- if (worldIn.getLightFromNeighbors(pos.up()) < 4 && worldIn.getBlockState(pos.up()).getBlock().getLightOpacity() > 2) ++ if (worldIn.getLightFromNeighbors(pos.up()) < 4 && worldIn.getBlockState(pos.up()).getBlock().getLightOpacity(worldIn, pos.up()) > 2) + { + worldIn.setBlockState(pos, Blocks.dirt.getDefaultState()); + } +@@ -73,7 +73,7 @@ + Block block = worldIn.getBlockState(blockpos1.up()).getBlock(); + IBlockState iblockstate1 = worldIn.getBlockState(blockpos1); + +- if (iblockstate1.getBlock() == Blocks.dirt && iblockstate1.getValue(BlockDirt.VARIANT) == BlockDirt.DirtType.DIRT && worldIn.getLightFromNeighbors(blockpos1.up()) >= 4 && block.getLightOpacity() <= 2) ++ if (iblockstate1.getBlock() == Blocks.dirt && iblockstate1.getValue(BlockDirt.VARIANT) == BlockDirt.DirtType.DIRT && worldIn.getLightFromNeighbors(blockpos1.up()) >= 4 && block.getLightOpacity(worldIn, blockpos1.up()) <= 2) + { + worldIn.setBlockState(blockpos1, Blocks.grass.getDefaultState()); + } +@@ -120,18 +120,11 @@ + continue; + } + } +- else if (worldIn.getBlockState(blockpos2).getBlock().blockMaterial == Material.air) ++ else if (worldIn.isAirBlock(blockpos2)) + { + if (rand.nextInt(8) == 0) + { +- BlockFlower.EnumFlowerType enumflowertype = worldIn.getBiomeGenForCoords(blockpos2).pickRandomFlower(rand, blockpos2); +- BlockFlower blockflower = enumflowertype.getBlockType().getBlock(); +- IBlockState iblockstate1 = blockflower.getDefaultState().withProperty(blockflower.getTypeProperty(), enumflowertype); +- +- if (blockflower.canBlockStay(worldIn, blockpos2, iblockstate1)) +- { +- worldIn.setBlockState(blockpos2, iblockstate1, 3); +- } ++ worldIn.getBiomeGenForCoords(blockpos2).plantFlower(worldIn, rand, blockpos2); + } + else + { diff --git a/patches/minecraft/net/minecraft/block/BlockHugeMushroom.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockHugeMushroom.java.patch similarity index 58% rename from patches/minecraft/net/minecraft/block/BlockHugeMushroom.java.patch rename to patches.mcp/minecraft/net/minecraft/block/BlockHugeMushroom.java.patch index 6f2f73437..a46fe79eb 100644 --- a/patches/minecraft/net/minecraft/block/BlockHugeMushroom.java.patch +++ b/patches.mcp/minecraft/net/minecraft/block/BlockHugeMushroom.java.patch @@ -1,17 +1,17 @@ --- ../src-base/minecraft/net/minecraft/block/BlockHugeMushroom.java +++ ../src-work/minecraft/net/minecraft/block/BlockHugeMushroom.java @@ -64,6 +64,20 @@ - return new BlockState(this, new IProperty[] {field_176380_a}); + return new BlockState(this, new IProperty[] {VARIANT}); } + public boolean rotateBlock(World world, BlockPos pos, EnumFacing axis) + { -+ IBlockState state = world.func_180495_p(pos); -+ for (IProperty prop : (java.util.Set)state.func_177228_b().keySet()) ++ IBlockState state = world.getBlockState(pos); ++ for (IProperty prop : (java.util.Set)state.getProperties().keySet()) + { -+ if (prop.func_177701_a().equals("variant")) ++ if (prop.getName().equals("variant")) + { -+ world.func_175656_a(pos, state.func_177231_a(prop)); ++ world.setBlockState(pos, state.cycleProperty(prop)); + return true; + } + } diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockIce.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockIce.java.patch new file mode 100644 index 000000000..ebd4a9f12 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockIce.java.patch @@ -0,0 +1,35 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockIce.java ++++ ../src-work/minecraft/net/minecraft/block/BlockIce.java +@@ -40,14 +40,17 @@ + player.triggerAchievement(StatList.mineBlockStatArray[Block.getIdFromBlock(this)]); + player.addExhaustion(0.025F); + +- if (this.canSilkHarvest() && EnchantmentHelper.getSilkTouchModifier(player)) ++ if (this.canSilkHarvest(worldIn, pos, worldIn.getBlockState(pos), player) && EnchantmentHelper.getSilkTouchModifier(player)) + { ++ java.util.List items = new java.util.ArrayList(); + ItemStack itemstack = this.createStackedBlock(state); + +- if (itemstack != null) +- { +- spawnAsEntity(worldIn, pos, itemstack); +- } ++ if (itemstack != null) items.add(itemstack); ++ ++ net.minecraftforge.event.ForgeEventFactory.fireBlockHarvesting(items, worldIn, pos, worldIn.getBlockState(pos), 0, 1.0f, true, player); ++ ++ for (ItemStack is : items) ++ spawnAsEntity(worldIn, pos, is); + } + else + { +@@ -58,7 +61,9 @@ + } + + int i = EnchantmentHelper.getFortuneModifier(player); ++ harvesters.set(player); + this.dropBlockAsItem(worldIn, pos, state, i); ++ harvesters.set(null); + Material material = worldIn.getBlockState(pos.down()).getBlock().getMaterial(); + + if (material.blocksMovement() || material.isLiquid()) diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockLadder.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockLadder.java.patch new file mode 100644 index 000000000..9c4b2704e --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockLadder.java.patch @@ -0,0 +1,32 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockLadder.java ++++ ../src-work/minecraft/net/minecraft/block/BlockLadder.java +@@ -80,7 +80,10 @@ + + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { +- return worldIn.getBlockState(pos.west()).getBlock().isNormalCube() ? true : (worldIn.getBlockState(pos.east()).getBlock().isNormalCube() ? true : (worldIn.getBlockState(pos.north()).getBlock().isNormalCube() ? true : worldIn.getBlockState(pos.south()).getBlock().isNormalCube())); ++ return worldIn.isSideSolid(pos.west(), EnumFacing.EAST, true) || ++ worldIn.isSideSolid(pos.east(), EnumFacing.WEST, true) || ++ worldIn.isSideSolid(pos.north(), EnumFacing.SOUTH, true) || ++ worldIn.isSideSolid(pos.south(), EnumFacing.NORTH, true); + } + + public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) +@@ -124,7 +127,7 @@ + + protected boolean canBlockStay(World worldIn, BlockPos pos, EnumFacing facing) + { +- return worldIn.getBlockState(pos.offset(facing.getOpposite())).getBlock().isNormalCube(); ++ return worldIn.isSideSolid(pos.offset(facing.getOpposite()), facing, true); + } + + @SideOnly(Side.CLIENT) +@@ -155,6 +158,8 @@ + return new BlockState(this, new IProperty[] {FACING}); + } + ++ @Override public boolean isLadder(IBlockAccess world, BlockPos pos, EntityLivingBase entity) { return true; } ++ + static final class SwitchEnumFacing + { + static final int[] FACING_LOOKUP = new int[EnumFacing.values().length]; diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockLeaves.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockLeaves.java.patch new file mode 100644 index 000000000..662e1f74d --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockLeaves.java.patch @@ -0,0 +1,130 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockLeaves.java ++++ ../src-work/minecraft/net/minecraft/block/BlockLeaves.java +@@ -18,7 +18,7 @@ + import net.minecraftforge.fml.relauncher.Side; + import net.minecraftforge.fml.relauncher.SideOnly; + +-public abstract class BlockLeaves extends BlockLeavesBase ++public abstract class BlockLeaves extends BlockLeavesBase implements net.minecraftforge.common.IShearable + { + public static final PropertyBool DECAYABLE = PropertyBool.create("decayable"); + public static final PropertyBool CHECK_DECAY = PropertyBool.create("check_decay"); +@@ -76,9 +76,9 @@ + BlockPos blockpos1 = pos.add(i1, j1, k1); + IBlockState iblockstate1 = worldIn.getBlockState(blockpos1); + +- if (iblockstate1.getBlock().getMaterial() == Material.leaves && !((Boolean)iblockstate1.getValue(CHECK_DECAY)).booleanValue()) ++ if (iblockstate1.getBlock().isLeaves(worldIn, blockpos1)) + { +- worldIn.setBlockState(blockpos1, iblockstate1.withProperty(CHECK_DECAY, Boolean.valueOf(true)), 4); ++ iblockstate1.getBlock().beginLeavesDecay(worldIn, blockpos1); + } + } + } +@@ -119,11 +119,12 @@ + { + for (i2 = -b0; i2 <= b0; ++i2) + { +- Block block = worldIn.getBlockState(new BlockPos(j + k1, k + l1, l + i2)).getBlock(); ++ BlockPos tmp = new BlockPos(j + k1, k + l1, l + i2); ++ Block block = worldIn.getBlockState(tmp).getBlock(); + +- if (block != Blocks.log && block != Blocks.log2) ++ if (!block.canSustainLeaves(worldIn, tmp)) + { +- if (block.getMaterial() == Material.leaves) ++ if (block.isLeaves(worldIn, tmp)) + { + this.surroundings[(k1 + j1) * i1 + (l1 + j1) * b1 + i2 + j1] = -2; + } +@@ -230,40 +231,7 @@ + + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { +- if (!worldIn.isRemote) +- { +- int j = this.getSaplingDropChance(state); +- +- if (fortune > 0) +- { +- j -= 2 << fortune; +- +- if (j < 10) +- { +- j = 10; +- } +- } +- +- if (worldIn.rand.nextInt(j) == 0) +- { +- Item item = this.getItemDropped(state, worldIn.rand, fortune); +- spawnAsEntity(worldIn, pos, new ItemStack(item, 1, this.damageDropped(state))); +- } +- +- j = 200; +- +- if (fortune > 0) +- { +- j -= 10 << fortune; +- +- if (j < 40) +- { +- j = 40; +- } +- } +- +- this.dropApple(worldIn, pos, state, j); +- } ++ super.dropBlockAsItemWithChance(worldIn, pos, state, chance, fortune); + } + + protected void dropApple(World worldIn, BlockPos pos, IBlockState state, int chance) {} +@@ -298,4 +266,48 @@ + } + + public abstract BlockPlanks.EnumType getWoodType(int meta); ++ ++ @Override public boolean isShearable(ItemStack item, IBlockAccess world, BlockPos pos){ return true; } ++ @Override public boolean isLeaves(IBlockAccess world, BlockPos pos){ return true; } ++ ++ @Override ++ public void beginLeavesDecay(World world, BlockPos pos) ++ { ++ IBlockState state = world.getBlockState(pos); ++ if (!(Boolean)state.getValue(CHECK_DECAY)) ++ { ++ world.setBlockState(pos, state.withProperty(CHECK_DECAY, true), 4); ++ } ++ } ++ ++ @Override ++ public java.util.List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) ++ { ++ java.util.List ret = new java.util.ArrayList(); ++ Random rand = world instanceof World ? ((World)world).rand : new Random(); ++ int chance = this.getSaplingDropChance(state); ++ ++ if (fortune > 0) ++ { ++ chance -= 2 << fortune; ++ if (chance < 10) chance = 10; ++ } ++ ++ if (rand.nextInt(chance) == 0) ++ ret.add(new ItemStack(getItemDropped(state, rand, fortune), 1, damageDropped(state))); ++ ++ chance = 200; ++ if (fortune > 0) ++ { ++ chance -= 10 << fortune; ++ if (chance < 40) chance = 40; ++ } ++ ++ this.captureDrops(true); ++ if (world instanceof World) ++ this.dropApple((World)world, pos, state, chance); // Dammet mojang ++ ret.addAll(this.captureDrops(false)); ++ return ret; ++ } ++ + } diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockLever.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockLever.java.patch new file mode 100644 index 000000000..3742cca4c --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockLever.java.patch @@ -0,0 +1,67 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockLever.java ++++ ../src-work/minecraft/net/minecraft/block/BlockLever.java +@@ -47,24 +47,24 @@ + + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { +- return side == EnumFacing.UP && World.doesBlockHaveSolidTopSurface(worldIn, pos.down()) ? true : this.canSustainLever(worldIn, pos.offset(side.getOpposite())); ++ return side == EnumFacing.UP && World.doesBlockHaveSolidTopSurface(worldIn, pos.down()) ? true : worldIn.isSideSolid(pos.offset(side.getOpposite()), side); + } + + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { +- return this.canSustainLever(worldIn, pos.west()) ? true : (this.canSustainLever(worldIn, pos.east()) ? true : (this.canSustainLever(worldIn, pos.north()) ? true : (this.canSustainLever(worldIn, pos.south()) ? true : (World.doesBlockHaveSolidTopSurface(worldIn, pos.down()) ? true : this.canSustainLever(worldIn, pos.up()))))); ++ return worldIn.isSideSolid(pos.west(), EnumFacing.EAST ) || ++ worldIn.isSideSolid(pos.east(), EnumFacing.WEST ) || ++ worldIn.isSideSolid(pos.north(), EnumFacing.SOUTH) || ++ worldIn.isSideSolid(pos.south(), EnumFacing.NORTH) || ++ worldIn.isSideSolid(pos.down(), EnumFacing.UP ) || ++ worldIn.isSideSolid(pos.up(), EnumFacing.DOWN ); + } + +- protected boolean canSustainLever(World worldIn, BlockPos pos) +- { +- return worldIn.getBlockState(pos).getBlock().isNormalCube(); +- } +- + public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + IBlockState iblockstate = this.getDefaultState().withProperty(POWERED, Boolean.valueOf(false)); + +- if (this.canSustainLever(worldIn, pos.offset(facing.getOpposite()))) ++ if (worldIn.isSideSolid(pos.offset(facing.getOpposite()), facing)) + { + return iblockstate.withProperty(FACING, BlockLever.EnumOrientation.forFacings(facing, placer.getHorizontalFacing())); + } +@@ -87,7 +87,7 @@ + + enumfacing1 = (EnumFacing)iterator.next(); + } +- while (enumfacing1 == facing || !this.canSustainLever(worldIn, pos.offset(enumfacing1.getOpposite()))); ++ while (enumfacing1 == facing || !worldIn.isSideSolid(pos.offset(enumfacing1.getOpposite()), enumfacing1)); + + return iblockstate.withProperty(FACING, BlockLever.EnumOrientation.forFacings(enumfacing1, placer.getHorizontalFacing())); + } +@@ -116,7 +116,8 @@ + + public void onNeighborBlockChange(World worldIn, BlockPos pos, IBlockState state, Block neighborBlock) + { +- if (this.checkForDrop(worldIn, pos) && !this.canSustainLever(worldIn, pos.offset(((BlockLever.EnumOrientation)state.getValue(FACING)).getFacing().getOpposite()))) ++ EnumFacing dir = ((BlockLever.EnumOrientation)state.getValue(FACING)).getFacing(); ++ if (this.checkForDrop(worldIn, pos) && !worldIn.isSideSolid(pos.offset(dir.getOpposite()), dir)) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); +@@ -235,6 +236,12 @@ + return new BlockState(this, new IProperty[] {FACING, POWERED}); + } + ++ ++ private boolean canAttach(World world, BlockPos pos, EnumFacing side) ++ { ++ return world.isSideSolid(pos, side); ++ } ++ + public static enum EnumOrientation implements IStringSerializable + { + DOWN_X(0, "down_x", EnumFacing.DOWN), diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockLog.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockLog.java.patch new file mode 100644 index 000000000..2690041c2 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockLog.java.patch @@ -0,0 +1,24 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockLog.java ++++ ../src-work/minecraft/net/minecraft/block/BlockLog.java +@@ -38,9 +38,9 @@ + BlockPos blockpos1 = (BlockPos)iterator.next(); + IBlockState iblockstate1 = worldIn.getBlockState(blockpos1); + +- if (iblockstate1.getBlock().getMaterial() == Material.leaves && !((Boolean)iblockstate1.getValue(BlockLeaves.CHECK_DECAY)).booleanValue()) ++ if (iblockstate1.getBlock().isLeaves(worldIn, blockpos1)) + { +- worldIn.setBlockState(blockpos1, iblockstate1.withProperty(BlockLeaves.CHECK_DECAY, Boolean.valueOf(true)), 4); ++ iblockstate1.getBlock().beginLeavesDecay(worldIn, blockpos1); + } + } + } +@@ -51,6 +51,9 @@ + return super.onBlockPlaced(worldIn, pos, facing, hitX, hitY, hitZ, meta, placer).withProperty(LOG_AXIS, BlockLog.EnumAxis.fromFacingAxis(facing.getAxis())); + } + ++ @Override public boolean canSustainLeaves(net.minecraft.world.IBlockAccess world, BlockPos pos){ return true; } ++ @Override public boolean isWood(net.minecraft.world.IBlockAccess world, BlockPos pos){ return true; } ++ + public static enum EnumAxis implements IStringSerializable + { + X("x"), diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockMobSpawner.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockMobSpawner.java.patch new file mode 100644 index 000000000..29a5e234a --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockMobSpawner.java.patch @@ -0,0 +1,19 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockMobSpawner.java ++++ ../src-work/minecraft/net/minecraft/block/BlockMobSpawner.java +@@ -39,10 +39,14 @@ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + super.dropBlockAsItemWithChance(worldIn, pos, state, chance, fortune); +- int j = 15 + worldIn.rand.nextInt(15) + worldIn.rand.nextInt(15); +- this.dropXpOnBlockBreak(worldIn, pos, j); + } + ++ @Override ++ public int getExpDrop(net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) ++ { ++ return 15 + RANDOM.nextInt(15) + RANDOM.nextInt(15); ++ } ++ + public boolean isOpaqueCube() + { + return false; diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockMushroom.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockMushroom.java.patch new file mode 100644 index 000000000..be26c64c3 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockMushroom.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockMushroom.java ++++ ../src-work/minecraft/net/minecraft/block/BlockMushroom.java +@@ -76,7 +76,7 @@ + if (pos.getY() >= 0 && pos.getY() < 256) + { + IBlockState iblockstate1 = worldIn.getBlockState(pos.down()); +- return iblockstate1.getBlock() == Blocks.mycelium ? true : (iblockstate1.getBlock() == Blocks.dirt && iblockstate1.getValue(BlockDirt.VARIANT) == BlockDirt.DirtType.PODZOL ? true : worldIn.getLight(pos) < 13 && this.canPlaceBlockOn(iblockstate1.getBlock())); ++ return iblockstate1.getBlock() == Blocks.mycelium ? true : (iblockstate1.getBlock() == Blocks.dirt && iblockstate1.getValue(BlockDirt.VARIANT) == BlockDirt.DirtType.PODZOL ? true : worldIn.getLight(pos) < 13 && iblockstate1.getBlock().canSustainPlant(worldIn, pos.down(), net.minecraft.util.EnumFacing.UP, this)); + } + else + { diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockMycelium.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockMycelium.java.patch new file mode 100644 index 000000000..554a24123 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockMycelium.java.patch @@ -0,0 +1,20 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockMycelium.java ++++ ../src-work/minecraft/net/minecraft/block/BlockMycelium.java +@@ -39,7 +39,7 @@ + { + if (!worldIn.isRemote) + { +- if (worldIn.getLightFromNeighbors(pos.up()) < 4 && worldIn.getBlockState(pos.up()).getBlock().getLightOpacity() > 2) ++ if (worldIn.getLightFromNeighbors(pos.up()) < 4 && worldIn.getBlockState(pos.up()).getBlock().getLightOpacity(worldIn, pos.up()) > 2) + { + worldIn.setBlockState(pos, Blocks.dirt.getDefaultState().withProperty(BlockDirt.VARIANT, BlockDirt.DirtType.DIRT)); + } +@@ -53,7 +53,7 @@ + IBlockState iblockstate1 = worldIn.getBlockState(blockpos1); + Block block = worldIn.getBlockState(blockpos1.up()).getBlock(); + +- if (iblockstate1.getBlock() == Blocks.dirt && iblockstate1.getValue(BlockDirt.VARIANT) == BlockDirt.DirtType.DIRT && worldIn.getLightFromNeighbors(blockpos1.up()) >= 4 && block.getLightOpacity() <= 2) ++ if (iblockstate1.getBlock() == Blocks.dirt && iblockstate1.getValue(BlockDirt.VARIANT) == BlockDirt.DirtType.DIRT && worldIn.getLightFromNeighbors(blockpos1.up()) >= 4 && block.getLightOpacity(worldIn, blockpos1.up()) <= 2) + { + worldIn.setBlockState(blockpos1, this.getDefaultState()); + } diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockNetherWart.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockNetherWart.java.patch new file mode 100644 index 000000000..e46eedd1b --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockNetherWart.java.patch @@ -0,0 +1,49 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockNetherWart.java ++++ ../src-work/minecraft/net/minecraft/block/BlockNetherWart.java +@@ -36,7 +36,7 @@ + + public boolean canBlockStay(World worldIn, BlockPos pos, IBlockState state) + { +- return this.canPlaceBlockOn(worldIn.getBlockState(pos.down()).getBlock()); ++ return super.canBlockStay(worldIn, pos, state); + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) +@@ -52,9 +52,11 @@ + super.updateTick(worldIn, pos, state, rand); + } + ++ @SuppressWarnings("unused") + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { +- if (!worldIn.isRemote) ++ super.dropBlockAsItemWithChance(worldIn, pos, state, chance, fortune); ++ if (false && !worldIn.isRemote) + { + int j = 1; + +@@ -105,4 +107,24 @@ + { + return new BlockState(this, new IProperty[] {AGE}); + } ++ ++ @Override ++ public java.util.List getDrops(net.minecraft.world.IBlockAccess world, BlockPos pos, IBlockState state, int fortune) ++ { ++ java.util.List ret = new java.util.ArrayList(); ++ Random rand = world instanceof World ? ((World)world).rand : new Random(); ++ int count = 1; ++ ++ if (((Integer)state.getValue(AGE)) >= 3) ++ { ++ count = 2 + rand.nextInt(3) + (fortune > 0 ? rand.nextInt(fortune + 1) : 0); ++ } ++ ++ for (int i = 0; i < count; i++) ++ { ++ ret.add(new ItemStack(Items.nether_wart)); ++ } ++ ++ return ret; ++ } + } diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockNewLeaf.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockNewLeaf.java.patch new file mode 100644 index 000000000..906f299da --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockNewLeaf.java.patch @@ -0,0 +1,24 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockNewLeaf.java ++++ ../src-work/minecraft/net/minecraft/block/BlockNewLeaf.java +@@ -105,14 +105,15 @@ + + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity te) + { +- if (!worldIn.isRemote && player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() == Items.shears) + { +- player.triggerAchievement(StatList.mineBlockStatArray[Block.getIdFromBlock(this)]); +- spawnAsEntity(worldIn, pos, new ItemStack(Item.getItemFromBlock(this), 1, ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata() - 4)); +- } +- else +- { + super.harvestBlock(worldIn, player, pos, state, te); + } + } ++ ++ @Override ++ public List onSheared(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) ++ { ++ IBlockState state = world.getBlockState(pos); ++ return new java.util.ArrayList(java.util.Arrays.asList(new ItemStack(this, 1, ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata() - 4))); ++ } + } diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockNote.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockNote.java.patch new file mode 100644 index 000000000..2ce222a73 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockNote.java.patch @@ -0,0 +1,23 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockNote.java ++++ ../src-work/minecraft/net/minecraft/block/BlockNote.java +@@ -58,7 +58,9 @@ + if (tileentity instanceof TileEntityNote) + { + TileEntityNote tileentitynote = (TileEntityNote)tileentity; ++ int old = tileentitynote.note; + tileentitynote.changePitch(); ++ if (old == tileentitynote.note) return false; + tileentitynote.triggerNote(worldIn, pos); + } + +@@ -96,6 +98,10 @@ + + public boolean onBlockEventReceived(World worldIn, BlockPos pos, IBlockState state, int eventID, int eventParam) + { ++ net.minecraftforge.event.world.NoteBlockEvent.Play e = new net.minecraftforge.event.world.NoteBlockEvent.Play(worldIn, pos, state, eventParam, eventID); ++ if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(e)) return false; ++ eventID = e.instrument.ordinal(); ++ eventParam = e.getVanillaNoteId(); + float f = (float)Math.pow(2.0D, (double)(eventParam - 12) / 12.0D); + worldIn.playSoundEffect((double)pos.getX() + 0.5D, (double)pos.getY() + 0.5D, (double)pos.getZ() + 0.5D, "note." + this.getInstrument(eventID), 3.0F, f); + worldIn.spawnParticle(EnumParticleTypes.NOTE, (double)pos.getX() + 0.5D, (double)pos.getY() + 1.2D, (double)pos.getZ() + 0.5D, (double)eventParam / 24.0D, 0.0D, 0.0D, new int[0]); diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockOldLeaf.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockOldLeaf.java.patch new file mode 100644 index 000000000..15acd8235 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockOldLeaf.java.patch @@ -0,0 +1,21 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockOldLeaf.java ++++ ../src-work/minecraft/net/minecraft/block/BlockOldLeaf.java +@@ -148,11 +148,17 @@ + if (!worldIn.isRemote && player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() == Items.shears) + { + player.triggerAchievement(StatList.mineBlockStatArray[Block.getIdFromBlock(this)]); +- spawnAsEntity(worldIn, pos, new ItemStack(Item.getItemFromBlock(this), 1, ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata())); + } + else + { + super.harvestBlock(worldIn, player, pos, state, te); + } + } ++ ++ @Override ++ public List onSheared(ItemStack item, IBlockAccess world, BlockPos pos, int fortune) ++ { ++ IBlockState state = world.getBlockState(pos); ++ return new java.util.ArrayList(java.util.Arrays.asList(new ItemStack(this, 1, ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata()))); ++ } + } diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockOre.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockOre.java.patch new file mode 100644 index 000000000..178e59206 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockOre.java.patch @@ -0,0 +1,59 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockOre.java ++++ ../src-work/minecraft/net/minecraft/block/BlockOre.java +@@ -10,6 +10,7 @@ + import net.minecraft.item.Item; + import net.minecraft.util.BlockPos; + import net.minecraft.util.MathHelper; ++import net.minecraft.world.IBlockAccess; + import net.minecraft.world.World; + + public class BlockOre extends Block +@@ -54,34 +55,40 @@ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + super.dropBlockAsItemWithChance(worldIn, pos, state, chance, fortune); +- +- if (this.getItemDropped(state, worldIn.rand, fortune) != Item.getItemFromBlock(this)) ++ } ++ @Override ++ public int getExpDrop(IBlockAccess world, BlockPos pos, int fortune) ++ { ++ IBlockState state = world.getBlockState(pos); ++ Random rand = world instanceof World ? ((World)world).rand : new Random(); ++ if (this.getItemDropped(state, rand, fortune) != Item.getItemFromBlock(this)) + { + int j = 0; + + if (this == Blocks.coal_ore) + { +- j = MathHelper.getRandomIntegerInRange(worldIn.rand, 0, 2); ++ j = MathHelper.getRandomIntegerInRange(rand, 0, 2); + } + else if (this == Blocks.diamond_ore) + { +- j = MathHelper.getRandomIntegerInRange(worldIn.rand, 3, 7); ++ j = MathHelper.getRandomIntegerInRange(rand, 3, 7); + } + else if (this == Blocks.emerald_ore) + { +- j = MathHelper.getRandomIntegerInRange(worldIn.rand, 3, 7); ++ j = MathHelper.getRandomIntegerInRange(rand, 3, 7); + } + else if (this == Blocks.lapis_ore) + { +- j = MathHelper.getRandomIntegerInRange(worldIn.rand, 2, 5); ++ j = MathHelper.getRandomIntegerInRange(rand, 2, 5); + } + else if (this == Blocks.quartz_ore) + { +- j = MathHelper.getRandomIntegerInRange(worldIn.rand, 2, 5); ++ j = MathHelper.getRandomIntegerInRange(rand, 2, 5); + } + +- this.dropXpOnBlockBreak(worldIn, pos, j); ++ return j; + } ++ return 0; + } + + public int getDamageValue(World worldIn, BlockPos pos) diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockPane.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockPane.java.patch new file mode 100644 index 000000000..bb91fe6ca --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockPane.java.patch @@ -0,0 +1,41 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockPane.java ++++ ../src-work/minecraft/net/minecraft/block/BlockPane.java +@@ -39,7 +39,10 @@ + + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { +- return state.withProperty(NORTH, Boolean.valueOf(this.canPaneConnectToBlock(worldIn.getBlockState(pos.north()).getBlock()))).withProperty(SOUTH, Boolean.valueOf(this.canPaneConnectToBlock(worldIn.getBlockState(pos.south()).getBlock()))).withProperty(WEST, Boolean.valueOf(this.canPaneConnectToBlock(worldIn.getBlockState(pos.west()).getBlock()))).withProperty(EAST, Boolean.valueOf(this.canPaneConnectToBlock(worldIn.getBlockState(pos.east()).getBlock()))); ++ return state.withProperty(NORTH, canPaneConnectTo(worldIn, pos, EnumFacing.NORTH)) ++ .withProperty(SOUTH, canPaneConnectTo(worldIn, pos, EnumFacing.SOUTH)) ++ .withProperty(WEST, canPaneConnectTo(worldIn, pos, EnumFacing.WEST)) ++ .withProperty(EAST, canPaneConnectTo(worldIn, pos, EnumFacing.EAST)); + } + + public Item getItemDropped(IBlockState state, Random rand, int fortune) +@@ -65,10 +68,10 @@ + + public void addCollisionBoxesToList(World worldIn, BlockPos pos, IBlockState state, AxisAlignedBB mask, List list, Entity collidingEntity) + { +- boolean flag = this.canPaneConnectToBlock(worldIn.getBlockState(pos.north()).getBlock()); +- boolean flag1 = this.canPaneConnectToBlock(worldIn.getBlockState(pos.south()).getBlock()); +- boolean flag2 = this.canPaneConnectToBlock(worldIn.getBlockState(pos.west()).getBlock()); +- boolean flag3 = this.canPaneConnectToBlock(worldIn.getBlockState(pos.east()).getBlock()); ++ boolean flag = this.canPaneConnectTo(worldIn, pos, EnumFacing.NORTH); ++ boolean flag1 = this.canPaneConnectTo(worldIn, pos, EnumFacing.SOUTH); ++ boolean flag2 = this.canPaneConnectTo(worldIn, pos, EnumFacing.WEST); ++ boolean flag3 = this.canPaneConnectTo(worldIn, pos, EnumFacing.EAST); + + if ((!flag2 || !flag3) && (flag2 || flag3 || flag || flag1)) + { +@@ -187,4 +190,11 @@ + { + return new BlockState(this, new IProperty[] {NORTH, EAST, WEST, SOUTH}); + } ++ ++ public boolean canPaneConnectTo(IBlockAccess world, BlockPos pos, EnumFacing dir) ++ { ++ BlockPos off = pos.offset(dir); ++ Block block = world.getBlockState(off).getBlock(); ++ return canPaneConnectToBlock(block) || block.isSideSolid(world, off, dir.getOpposite()); ++ } + } diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockPistonBase.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockPistonBase.java.patch new file mode 100644 index 000000000..669fa4fd5 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockPistonBase.java.patch @@ -0,0 +1,31 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockPistonBase.java ++++ ../src-work/minecraft/net/minecraft/block/BlockPistonBase.java +@@ -200,7 +200,7 @@ + } + } + +- if (!flag1 && block.getMaterial() != Material.air && canPush(block, worldIn, blockpos1, enumfacing.getOpposite(), false) && (block.getMobilityFlag() == 0 || block == Blocks.piston || block == Blocks.sticky_piston)) ++ if (!flag1 && !block.isAir(worldIn, blockpos1) && canPush(block, worldIn, blockpos1, enumfacing.getOpposite(), false) && (block.getMobilityFlag() == 0 || block == Blocks.piston || block == Blocks.sticky_piston)) + { + this.doMove(worldIn, pos, enumfacing, false); + } +@@ -344,7 +344,7 @@ + return false; + } + +- return !(blockIn instanceof ITileEntityProvider); ++ return !(blockIn.hasTileEntity(worldIn.getBlockState(pos))); + } + else + { +@@ -384,7 +384,9 @@ + { + blockpos1 = (BlockPos)list1.get(j); + Block block = worldIn.getBlockState(blockpos1).getBlock(); +- block.dropBlockAsItem(worldIn, blockpos1, worldIn.getBlockState(blockpos1), 0); ++ //With our change to how snowballs are dropped this needs to disallow to mimic vanilla behavior. ++ float chance = block instanceof BlockSnow ? -1.0f : 1.0f; ++ block.dropBlockAsItemWithChance(worldIn, blockpos1, worldIn.getBlockState(blockpos1), chance, 0); + worldIn.setBlockToAir(blockpos1); + --i; + ablock[i] = block; diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockPistonMoving.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockPistonMoving.java.patch new file mode 100644 index 000000000..0121d2a6e --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockPistonMoving.java.patch @@ -0,0 +1,37 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockPistonMoving.java ++++ ../src-work/minecraft/net/minecraft/block/BlockPistonMoving.java +@@ -110,16 +110,7 @@ + + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { +- if (!worldIn.isRemote) +- { +- TileEntityPiston tileentitypiston = this.getTileEntity(worldIn, pos); +- +- if (tileentitypiston != null) +- { +- IBlockState iblockstate1 = tileentitypiston.getPistonState(); +- iblockstate1.getBlock().dropBlockAsItem(worldIn, pos, iblockstate1, 0); +- } +- } ++ super.dropBlockAsItemWithChance(worldIn, pos, state, chance, fortune); + } + + public MovingObjectPosition collisionRayTrace(World worldIn, BlockPos pos, Vec3 start, Vec3 end) +@@ -283,4 +274,16 @@ + { + return new BlockState(this, new IProperty[] {FACING, TYPE}); + } ++ ++ @Override ++ public java.util.List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) ++ { ++ TileEntityPiston tileentitypiston = this.getTileEntity(world, pos); ++ if (tileentitypiston != null) ++ { ++ IBlockState pushed = tileentitypiston.getPistonState(); ++ return pushed.getBlock().getDrops(world, pos, pushed, fortune); ++ } ++ return new java.util.ArrayList(); ++ } + } diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockPotato.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockPotato.java.patch new file mode 100644 index 000000000..afe064e2b --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockPotato.java.patch @@ -0,0 +1,25 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockPotato.java ++++ ../src-work/minecraft/net/minecraft/block/BlockPotato.java +@@ -24,13 +24,14 @@ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + super.dropBlockAsItemWithChance(worldIn, pos, state, chance, fortune); +- +- if (!worldIn.isRemote) +- { +- if (((Integer)state.getValue(AGE)).intValue() >= 7 && worldIn.rand.nextInt(50) == 0) +- { +- spawnAsEntity(worldIn, pos, new ItemStack(Items.poisonous_potato)); +- } +- } + } ++ @Override ++ public java.util.List getDrops(net.minecraft.world.IBlockAccess world, BlockPos pos, IBlockState state, int fortune) ++ { ++ java.util.List ret = super.getDrops(world, pos, state, fortune); ++ java.util.Random rand = world instanceof World ? ((World)world).rand : new java.util.Random(); ++ if (((Integer)state.getValue(AGE)) >= 7 && rand.nextInt(50) == 0) ++ ret.add(new ItemStack(Items.poisonous_potato)); ++ return ret; ++ } + } diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockPumpkin.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockPumpkin.java.patch new file mode 100644 index 000000000..898ac8e07 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockPumpkin.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockPumpkin.java ++++ ../src-work/minecraft/net/minecraft/block/BlockPumpkin.java +@@ -109,7 +109,7 @@ + + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { +- return worldIn.getBlockState(pos).getBlock().blockMaterial.isReplaceable() && World.doesBlockHaveSolidTopSurface(worldIn, pos.down()); ++ return worldIn.getBlockState(pos).getBlock().isReplaceable(worldIn, pos) && World.doesBlockHaveSolidTopSurface(worldIn, pos.down()); + } + + public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) diff --git a/patches/minecraft/net/minecraft/block/BlockQuartz.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockQuartz.java.patch similarity index 63% rename from patches/minecraft/net/minecraft/block/BlockQuartz.java.patch rename to patches.mcp/minecraft/net/minecraft/block/BlockQuartz.java.patch index 6a6a75d2a..7c75b6cdc 100644 --- a/patches/minecraft/net/minecraft/block/BlockQuartz.java.patch +++ b/patches.mcp/minecraft/net/minecraft/block/BlockQuartz.java.patch @@ -1,23 +1,23 @@ --- ../src-base/minecraft/net/minecraft/block/BlockQuartz.java +++ ../src-work/minecraft/net/minecraft/block/BlockQuartz.java @@ -91,6 +91,26 @@ - return new BlockState(this, new IProperty[] {field_176335_a}); + return new BlockState(this, new IProperty[] {VARIANT}); } + public boolean rotateBlock(World world, BlockPos pos, EnumFacing axis) + { -+ IBlockState state = world.func_180495_p(pos); -+ for (IProperty prop : (java.util.Set)state.func_177228_b().keySet()) ++ IBlockState state = world.getBlockState(pos); ++ for (IProperty prop : (java.util.Set)state.getProperties().keySet()) + { -+ if (prop.func_177701_a().equals("variant") && prop.func_177699_b() == EnumType.class) ++ if (prop.getName().equals("variant") && prop.getValueClass() == EnumType.class) + { -+ EnumType current = (EnumType)state.func_177229_b(prop); ++ EnumType current = (EnumType)state.getValue(prop); + EnumType next = current == EnumType.LINES_X ? EnumType.LINES_Y : + current == EnumType.LINES_Y ? EnumType.LINES_Z : + current == EnumType.LINES_Z ? EnumType.LINES_X : current; + if (next == current) + return false; -+ world.func_175656_a(pos, state.func_177226_a(prop, next)); ++ world.setBlockState(pos, state.withProperty(prop, next)); + return true; + } + } diff --git a/patches/minecraft/net/minecraft/block/BlockRailBase.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockRailBase.java.patch similarity index 72% rename from patches/minecraft/net/minecraft/block/BlockRailBase.java.patch rename to patches.mcp/minecraft/net/minecraft/block/BlockRailBase.java.patch index 8c3b15468..46e1f211c 100644 --- a/patches/minecraft/net/minecraft/block/BlockRailBase.java.patch +++ b/patches.mcp/minecraft/net/minecraft/block/BlockRailBase.java.patch @@ -1,18 +1,18 @@ --- ../src-base/minecraft/net/minecraft/block/BlockRailBase.java +++ ../src-work/minecraft/net/minecraft/block/BlockRailBase.java @@ -33,7 +33,7 @@ - public static boolean func_176563_d(IBlockState p_176563_0_) + public static boolean isRailBlock(IBlockState state) { - Block block = p_176563_0_.func_177230_c(); -- return block == Blocks.field_150448_aq || block == Blocks.field_150318_D || block == Blocks.field_150319_E || block == Blocks.field_150408_cc; + Block block = state.getBlock(); +- return block == Blocks.rail || block == Blocks.golden_rail || block == Blocks.detector_rail || block == Blocks.activator_rail; + return block instanceof BlockRailBase; } - protected BlockRailBase(boolean p_i45389_1_) + protected BlockRailBase(boolean isPowered) @@ -174,7 +174,81 @@ } - public abstract IProperty func_176560_l(); + public abstract IProperty getShapeProperty(); + /* ======================================== FORGE START =====================================*/ + /** + * Return true if the rail can make corners. @@ -23,7 +23,7 @@ + */ + public boolean isFlexibleRail(IBlockAccess world, BlockPos pos) + { -+ return !this.field_150053_a; ++ return !this.isPowered; + } + /** @@ -74,12 +74,12 @@ + */ + public boolean rotateBlock(World world, BlockPos pos, EnumFacing axis) + { -+ IBlockState state = world.func_180495_p(pos); -+ for (IProperty prop : (java.util.Set)state.func_177228_b().keySet()) ++ IBlockState state = world.getBlockState(pos); ++ for (IProperty prop : (java.util.Set)state.getProperties().keySet()) + { -+ if (prop.func_177701_a().equals("shape")) ++ if (prop.getName().equals("shape")) + { -+ world.func_175656_a(pos, state.func_177231_a(prop)); ++ world.setBlockState(pos, state.cycleProperty(prop)); + return true; + } + } @@ -92,20 +92,20 @@ { NORTH_SOUTH(0, "north_south"), @@ -251,6 +325,7 @@ - private final boolean field_150656_f; + private final boolean isPowered; private final List field_150657_g = Lists.newArrayList(); private static final String __OBFID = "CL_00000196"; + private final boolean canMakeSlopes; - public Rail(World p_i45739_2_, BlockPos p_i45739_3_, IBlockState p_i45739_4_) + public Rail(World worldIn, BlockPos pos, IBlockState state) { @@ -259,7 +334,8 @@ - this.field_180366_e = p_i45739_4_; - this.field_180365_d = (BlockRailBase)p_i45739_4_.func_177230_c(); - BlockRailBase.EnumRailDirection enumraildirection = (BlockRailBase.EnumRailDirection)p_i45739_4_.func_177229_b(BlockRailBase.this.func_176560_l()); -- this.field_150656_f = this.field_180365_d.field_150053_a; -+ this.field_150656_f = !this.field_180365_d.isFlexibleRail(p_i45739_2_, p_i45739_3_); -+ canMakeSlopes = this.field_180365_d.canMakeSlopes(p_i45739_2_, p_i45739_3_); + this.state = state; + this.block = (BlockRailBase)state.getBlock(); + BlockRailBase.EnumRailDirection enumraildirection = (BlockRailBase.EnumRailDirection)state.getValue(BlockRailBase.this.getShapeProperty()); +- this.isPowered = this.block.isPowered; ++ this.isPowered = !this.block.isFlexibleRail(worldIn, pos); ++ canMakeSlopes = this.block.canMakeSlopes(worldIn, pos); this.func_180360_a(enumraildirection); } @@ -116,7 +116,7 @@ - if (enumraildirection == BlockRailBase.EnumRailDirection.NORTH_SOUTH) + if (enumraildirection == BlockRailBase.EnumRailDirection.NORTH_SOUTH && canMakeSlopes) { - if (BlockRailBase.func_176562_d(this.field_150660_b, blockpos.func_177984_a())) + if (BlockRailBase.isRailBlock(this.world, blockpos.up())) { @@ -461,7 +537,7 @@ } @@ -125,7 +125,7 @@ - if (enumraildirection == BlockRailBase.EnumRailDirection.EAST_WEST) + if (enumraildirection == BlockRailBase.EnumRailDirection.EAST_WEST && canMakeSlopes) { - if (BlockRailBase.func_176562_d(this.field_150660_b, blockpos3.func_177984_a())) + if (BlockRailBase.isRailBlock(this.world, blockpos3.up())) { @@ -604,7 +680,7 @@ } @@ -134,7 +134,7 @@ - if (enumraildirection == BlockRailBase.EnumRailDirection.NORTH_SOUTH) + if (enumraildirection == BlockRailBase.EnumRailDirection.NORTH_SOUTH && canMakeSlopes) { - if (BlockRailBase.func_176562_d(this.field_150660_b, blockpos.func_177984_a())) + if (BlockRailBase.isRailBlock(this.world, blockpos.up())) { @@ -617,7 +693,7 @@ } @@ -143,5 +143,5 @@ - if (enumraildirection == BlockRailBase.EnumRailDirection.EAST_WEST) + if (enumraildirection == BlockRailBase.EnumRailDirection.EAST_WEST && canMakeSlopes) { - if (BlockRailBase.func_176562_d(this.field_150660_b, blockpos3.func_177984_a())) + if (BlockRailBase.isRailBlock(this.world, blockpos3.up())) { diff --git a/patches/minecraft/net/minecraft/block/BlockRedstoneComparator.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockRedstoneComparator.java.patch similarity index 54% rename from patches/minecraft/net/minecraft/block/BlockRedstoneComparator.java.patch rename to patches.mcp/minecraft/net/minecraft/block/BlockRedstoneComparator.java.patch index 1ad9b4abf..6799d4271 100644 --- a/patches/minecraft/net/minecraft/block/BlockRedstoneComparator.java.patch +++ b/patches.mcp/minecraft/net/minecraft/block/BlockRedstoneComparator.java.patch @@ -1,15 +1,15 @@ --- ../src-base/minecraft/net/minecraft/block/BlockRedstoneComparator.java +++ ../src-work/minecraft/net/minecraft/block/BlockRedstoneComparator.java @@ -295,6 +295,21 @@ - return this.func_176223_P().func_177226_a(field_176387_N, p_180642_8_.func_174811_aO().func_176734_d()).func_177226_a(field_176464_a, Boolean.valueOf(false)).func_177226_a(field_176463_b, BlockRedstoneComparator.Mode.COMPARE); + return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite()).withProperty(POWERED, Boolean.valueOf(false)).withProperty(MODE, BlockRedstoneComparator.Mode.COMPARE); } + @Override + public void onNeighborChange(IBlockAccess world, BlockPos pos, BlockPos neighbor) + { -+ if (pos.func_177956_o() == neighbor.func_177956_o() && world instanceof World) ++ if (pos.getY() == neighbor.getY() && world instanceof World) + { -+ func_176204_a((World)world, pos, world.func_180495_p(pos), world.func_180495_p(neighbor).func_177230_c()); ++ onNeighborBlockChange((World)world, pos, world.getBlockState(pos), world.getBlockState(neighbor).getBlock()); + } + } + diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockRedstoneDiode.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockRedstoneDiode.java.patch new file mode 100644 index 000000000..e98007889 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockRedstoneDiode.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockRedstoneDiode.java ++++ ../src-work/minecraft/net/minecraft/block/BlockRedstoneDiode.java +@@ -200,6 +200,8 @@ + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + BlockPos blockpos1 = pos.offset(enumfacing.getOpposite()); ++ if(net.minecraftforge.event.ForgeEventFactory.onNeighborNotify(worldIn, pos, worldIn.getBlockState(pos), java.util.EnumSet.of(enumfacing.getOpposite())).isCanceled()) ++ return; + worldIn.notifyBlockOfStateChange(blockpos1, this); + worldIn.notifyNeighborsOfStateExcept(blockpos1, this, enumfacing); + } diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockRedstoneOre.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockRedstoneOre.java.patch new file mode 100644 index 000000000..df5eb2d3f --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockRedstoneOre.java.patch @@ -0,0 +1,22 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockRedstoneOre.java ++++ ../src-work/minecraft/net/minecraft/block/BlockRedstoneOre.java +@@ -92,12 +92,16 @@ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + super.dropBlockAsItemWithChance(worldIn, pos, state, chance, fortune); ++ } + +- if (this.getItemDropped(state, worldIn.rand, fortune) != Item.getItemFromBlock(this)) ++ @Override ++ public int getExpDrop(net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) ++ { ++ if (this.getItemDropped(world.getBlockState(pos), RANDOM, fortune) != Item.getItemFromBlock(this)) + { +- int j = 1 + worldIn.rand.nextInt(5); +- this.dropXpOnBlockBreak(worldIn, pos, j); ++ return 1 + RANDOM.nextInt(5); + } ++ return 0; + } + + @SideOnly(Side.CLIENT) diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockRedstoneWire.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockRedstoneWire.java.patch new file mode 100644 index 000000000..520e8486e --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockRedstoneWire.java.patch @@ -0,0 +1,59 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockRedstoneWire.java ++++ ../src-work/minecraft/net/minecraft/block/BlockRedstoneWire.java +@@ -60,10 +60,10 @@ + BlockPos blockpos1 = pos.offset(direction); + Block block = worldIn.getBlockState(pos.offset(direction)).getBlock(); + +- if (!canConnectTo(worldIn.getBlockState(blockpos1), direction) && (block.isSolidFullCube() || !canConnectUpwardsTo(worldIn.getBlockState(blockpos1.down())))) ++ if (!canRestoneConnect(worldIn, blockpos1, direction) && (block.isSolidFullCube() || !canRestoneConnect(worldIn, blockpos1.down(), null))) + { + Block block1 = worldIn.getBlockState(pos.up()).getBlock(); +- return !block1.isSolidFullCube() && block.isSolidFullCube() && canConnectUpwardsTo(worldIn.getBlockState(blockpos1.up())) ? BlockRedstoneWire.EnumAttachPosition.UP : BlockRedstoneWire.EnumAttachPosition.NONE; ++ return !block1.isSolidFullCube() && block.isSolidFullCube() && canRestoneConnect(worldIn, blockpos1.up(), null) ? BlockRedstoneWire.EnumAttachPosition.UP : BlockRedstoneWire.EnumAttachPosition.NONE; + } + else + { +@@ -393,35 +393,25 @@ + Block block = iblockstate.getBlock(); + boolean flag = block.isNormalCube(); + boolean flag1 = worldIn.getBlockState(pos.up()).getBlock().isNormalCube(); +- return !flag1 && flag && canConnectUpwardsTo(worldIn, blockpos1.up()) ? true : (canConnectTo(iblockstate, side) ? true : (block == Blocks.powered_repeater && iblockstate.getValue(BlockRedstoneDiode.FACING) == side ? true : !flag && canConnectUpwardsTo(worldIn, blockpos1.down()))); ++ return !flag1 && flag && canRestoneConnect(worldIn, blockpos1.up(), null) ? true : (canRestoneConnect(worldIn, blockpos1, side) ? true : (block == Blocks.powered_repeater && iblockstate.getValue(BlockRedstoneDiode.FACING) == side ? true : !flag && canRestoneConnect(worldIn, blockpos1.down(), null))); + } + +- protected static boolean canConnectUpwardsTo(IBlockAccess worldIn, BlockPos pos) ++ protected static boolean canRestoneConnect(IBlockAccess world, BlockPos pos, EnumFacing side) + { +- return canConnectUpwardsTo(worldIn.getBlockState(pos)); +- } ++ IBlockState state = world.getBlockState(pos); + +- protected static boolean canConnectUpwardsTo(IBlockState state) +- { +- return canConnectTo(state, (EnumFacing)null); +- } +- +- protected static boolean canConnectTo(IBlockState blockState, EnumFacing side) +- { +- Block block = blockState.getBlock(); +- +- if (block == Blocks.redstone_wire) ++ if (state.getBlock() == Blocks.redstone_wire) + { + return true; + } +- else if (Blocks.unpowered_repeater.isAssociated(block)) ++ else if (Blocks.unpowered_repeater.isAssociated(state.getBlock())) + { +- EnumFacing enumfacing1 = (EnumFacing)blockState.getValue(BlockRedstoneRepeater.FACING); +- return enumfacing1 == side || enumfacing1.getOpposite() == side; ++ EnumFacing direction = (EnumFacing)state.getValue(BlockRedstoneRepeater.FACING); ++ return direction == side || direction.getOpposite() == side; + } + else + { +- return block.canProvidePower() && side != null; ++ return state.getBlock().canConnectRedstone(world, pos, side); + } + } + diff --git a/patches/minecraft/net/minecraft/block/BlockReed.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockReed.java.patch similarity index 62% rename from patches/minecraft/net/minecraft/block/BlockReed.java.patch rename to patches.mcp/minecraft/net/minecraft/block/BlockReed.java.patch index ed23377c2..a117b9404 100644 --- a/patches/minecraft/net/minecraft/block/BlockReed.java.patch +++ b/patches.mcp/minecraft/net/minecraft/block/BlockReed.java.patch @@ -7,19 +7,19 @@ -public class BlockReed extends Block +public class BlockReed extends Block implements net.minecraftforge.common.IPlantable { - public static final PropertyInteger field_176355_a = PropertyInteger.func_177719_a("age", 0, 15); + public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 15); private static final String __OBFID = "CL_00000300"; @@ -67,6 +67,7 @@ - public boolean func_176196_c(World p_176196_1_, BlockPos p_176196_2_) + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) { - Block block = p_176196_1_.func_180495_p(p_176196_2_.func_177977_b()).func_177230_c(); -+ if (block.canSustainPlant(p_176196_1_, p_176196_2_.func_177977_b(), EnumFacing.UP, this)) return true; + Block block = worldIn.getBlockState(pos.down()).getBlock(); ++ if (block.canSustainPlant(worldIn, pos.down(), EnumFacing.UP, this)) return true; if (block == this) { @@ -172,4 +173,15 @@ { - return new BlockState(this, new IProperty[] {field_176355_a}); + return new BlockState(this, new IProperty[] {AGE}); } + + @Override @@ -30,6 +30,6 @@ + @Override + public IBlockState getPlant(IBlockAccess world, BlockPos pos) + { -+ return this.func_176223_P(); ++ return this.getDefaultState(); + } } diff --git a/patches/minecraft/net/minecraft/block/BlockRotatedPillar.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockRotatedPillar.java.patch similarity index 72% rename from patches/minecraft/net/minecraft/block/BlockRotatedPillar.java.patch rename to patches.mcp/minecraft/net/minecraft/block/BlockRotatedPillar.java.patch index dd9715ed0..2fdba40cd 100644 --- a/patches/minecraft/net/minecraft/block/BlockRotatedPillar.java.patch +++ b/patches.mcp/minecraft/net/minecraft/block/BlockRotatedPillar.java.patch @@ -10,17 +10,17 @@ public abstract class BlockRotatedPillar extends Block @@ -13,4 +14,18 @@ { - super(p_i45425_1_); + super(materialIn); } + + public boolean rotateBlock(net.minecraft.world.World world, net.minecraft.util.BlockPos pos, EnumFacing axis) + { -+ IBlockState state = world.func_180495_p(pos); -+ for (net.minecraft.block.properties.IProperty prop : (java.util.Set)state.func_177228_b().keySet()) ++ IBlockState state = world.getBlockState(pos); ++ for (net.minecraft.block.properties.IProperty prop : (java.util.Set)state.getProperties().keySet()) + { -+ if (prop.func_177701_a().equals("axis")) ++ if (prop.getName().equals("axis")) + { -+ world.func_175656_a(pos, state.func_177231_a(prop)); ++ world.setBlockState(pos, state.cycleProperty(prop)); + return true; + } + } diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockSapling.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockSapling.java.patch new file mode 100644 index 000000000..e061b2ac1 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockSapling.java.patch @@ -0,0 +1,10 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockSapling.java ++++ ../src-work/minecraft/net/minecraft/block/BlockSapling.java +@@ -66,6 +66,7 @@ + + public void generateTree(World worldIn, BlockPos pos, IBlockState state, Random rand) + { ++ if (!net.minecraftforge.event.terraingen.TerrainGen.saplingGrowTree(worldIn, rand, pos)) return; + Object object = rand.nextInt(10) == 0 ? new WorldGenBigTree(true) : new WorldGenTrees(true); + int i = 0; + int j = 0; diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockSkull.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockSkull.java.patch new file mode 100644 index 000000000..5841ef52d --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockSkull.java.patch @@ -0,0 +1,55 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockSkull.java ++++ ../src-work/minecraft/net/minecraft/block/BlockSkull.java +@@ -122,8 +122,6 @@ + return tileentity instanceof TileEntitySkull ? ((TileEntitySkull)tileentity).getSkullType() : super.getDamageValue(worldIn, pos); + } + +- public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) {} +- + public void onBlockHarvested(World worldIn, BlockPos pos, IBlockState state, EntityPlayer player) + { + if (player.capabilities.isCreativeMode) +@@ -131,13 +129,18 @@ + state = state.withProperty(NODROP, Boolean.valueOf(true)); + worldIn.setBlockState(pos, state, 4); + } ++ this.dropBlockAsItem(worldIn, pos, state, 0); + + super.onBlockHarvested(worldIn, pos, state, player); + } + + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { +- if (!worldIn.isRemote) ++ super.breakBlock(worldIn, pos, state); ++ } ++ public java.util.List getDrops(IBlockAccess worldIn, BlockPos pos, IBlockState state, int fortune) ++ { ++ java.util.List ret = new java.util.ArrayList(); + { + if (!((Boolean)state.getValue(NODROP)).booleanValue()) + { +@@ -146,7 +149,7 @@ + if (tileentity instanceof TileEntitySkull) + { + TileEntitySkull tileentityskull = (TileEntitySkull)tileentity; +- ItemStack itemstack = new ItemStack(Items.skull, 1, this.getDamageValue(worldIn, pos)); ++ ItemStack itemstack = new ItemStack(Items.skull, 1, tileentityskull.getSkullType()); + + if (tileentityskull.getSkullType() == 3 && tileentityskull.getPlayerProfile() != null) + { +@@ -156,12 +159,11 @@ + itemstack.getTagCompound().setTag("SkullOwner", nbttagcompound); + } + +- spawnAsEntity(worldIn, pos, itemstack); ++ ret.add(itemstack); + } + } +- +- super.breakBlock(worldIn, pos, state); + } ++ return ret; + } + + public Item getItemDropped(IBlockState state, Random rand, int fortune) diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockSnow.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockSnow.java.patch new file mode 100644 index 000000000..1ca183c63 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockSnow.java.patch @@ -0,0 +1,53 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockSnow.java ++++ ../src-work/minecraft/net/minecraft/block/BlockSnow.java +@@ -80,7 +80,7 @@ + { + IBlockState iblockstate = worldIn.getBlockState(pos.down()); + Block block = iblockstate.getBlock(); +- return block != Blocks.ice && block != Blocks.packed_ice ? (block.getMaterial() == Material.leaves ? true : (block == this && ((Integer)iblockstate.getValue(LAYERS)).intValue() == 7 ? true : block.isOpaqueCube() && block.blockMaterial.blocksMovement())) : false; ++ return block != Blocks.ice && block != Blocks.packed_ice ? (block.isLeaves(worldIn, pos.down()) ? true : (block == this && ((Integer)iblockstate.getValue(LAYERS)).intValue() == 7 ? true : block.isOpaqueCube() && block.blockMaterial.blocksMovement())) : false; + } + + public void onNeighborBlockChange(World worldIn, BlockPos pos, IBlockState state, Block neighborBlock) +@@ -92,7 +92,6 @@ + { + if (!this.canPlaceBlockAt(worldIn, p_176314_2_)) + { +- this.dropBlockAsItem(worldIn, p_176314_2_, p_176314_3_, 0); + worldIn.setBlockToAir(p_176314_2_); + return false; + } +@@ -104,9 +103,8 @@ + + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity te) + { +- spawnAsEntity(worldIn, pos, new ItemStack(Items.snowball, ((Integer)state.getValue(LAYERS)).intValue() + 1, 0)); ++ super.harvestBlock(worldIn, player, pos, state, te); + worldIn.setBlockToAir(pos); +- player.triggerAchievement(StatList.mineBlockStatArray[Block.getIdFromBlock(this)]); + } + + public Item getItemDropped(IBlockState state, Random rand, int fortune) +@@ -116,14 +114,13 @@ + + public int quantityDropped(Random random) + { +- return 0; ++ return 1; + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (worldIn.getLightFor(EnumSkyBlock.BLOCK, pos) > 11) + { +- this.dropBlockAsItem(worldIn, pos, worldIn.getBlockState(pos), 0); + worldIn.setBlockToAir(pos); + } + } +@@ -153,4 +150,6 @@ + { + return new BlockState(this, new IProperty[] {LAYERS}); + } ++ ++ @Override public int quantityDropped(IBlockState state, int fortune, Random random){ return ((Integer)state.getValue(LAYERS)) + 1; } + } diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockStem.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockStem.java.patch new file mode 100644 index 000000000..f00f753b8 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockStem.java.patch @@ -0,0 +1,42 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockStem.java ++++ ../src-work/minecraft/net/minecraft/block/BlockStem.java +@@ -108,7 +108,7 @@ + pos = pos.offset(EnumFacing.Plane.HORIZONTAL.random(rand)); + Block block = worldIn.getBlockState(pos.down()).getBlock(); + +- if (worldIn.getBlockState(pos).getBlock().blockMaterial == Material.air && (block == Blocks.farmland || block == Blocks.dirt || block == Blocks.grass)) ++ if (worldIn.isAirBlock(pos) && (block.canSustainPlant(worldIn, pos.down(), EnumFacing.UP, this) || block == Blocks.dirt || block == Blocks.grass)) + { + worldIn.setBlockState(pos, this.crop.getDefaultState()); + } +@@ -162,8 +162,12 @@ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + super.dropBlockAsItemWithChance(worldIn, pos, state, chance, fortune); ++ } + +- if (!worldIn.isRemote) ++ @Override ++ public java.util.List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) ++ { ++ java.util.List ret = new java.util.ArrayList(); + { + Item item = this.getSeedItem(); + +@@ -173,13 +177,14 @@ + + for (int k = 0; k < 3; ++k) + { +- if (worldIn.rand.nextInt(15) <= j) ++ if (RANDOM.nextInt(15) <= j) + { +- spawnAsEntity(worldIn, pos, new ItemStack(item)); ++ ret.add(new ItemStack(item)); + } + } + } + } ++ return ret; + } + + protected Item getSeedItem() diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockTallGrass.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockTallGrass.java.patch new file mode 100644 index 000000000..cba499e8f --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockTallGrass.java.patch @@ -0,0 +1,66 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockTallGrass.java ++++ ../src-work/minecraft/net/minecraft/block/BlockTallGrass.java +@@ -23,7 +23,7 @@ + import net.minecraftforge.fml.relauncher.Side; + import net.minecraftforge.fml.relauncher.SideOnly; + +-public class BlockTallGrass extends BlockBush implements IGrowable ++public class BlockTallGrass extends BlockBush implements IGrowable, net.minecraftforge.common.IShearable + { + public static final PropertyEnum TYPE = PropertyEnum.create("type", BlockTallGrass.EnumType.class); + private static final String __OBFID = "CL_00000321"; +@@ -44,7 +44,7 @@ + + public boolean canBlockStay(World worldIn, BlockPos pos, IBlockState state) + { +- return this.canPlaceBlockOn(worldIn.getBlockState(pos.down()).getBlock()); ++ return super.canBlockStay(worldIn, pos, state); + } + + public boolean isReplaceable(World worldIn, BlockPos pos) +@@ -74,7 +74,7 @@ + + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { +- return rand.nextInt(8) == 0 ? Items.wheat_seeds : null; ++ return null; + } + + public int quantityDroppedWithBonus(int fortune, Random random) +@@ -84,13 +84,7 @@ + + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity te) + { +- if (!worldIn.isRemote && player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() == Items.shears) + { +- player.triggerAchievement(StatList.mineBlockStatArray[Block.getIdFromBlock(this)]); +- spawnAsEntity(worldIn, pos, new ItemStack(Blocks.tallgrass, 1, ((BlockTallGrass.EnumType)state.getValue(TYPE)).getMeta())); +- } +- else +- { + super.harvestBlock(worldIn, player, pos, state, te); + } + } +@@ -210,4 +204,22 @@ + } + } + } ++ ++ @Override public boolean isShearable(ItemStack item, IBlockAccess world, BlockPos pos){ return true; } ++ @Override ++ public List onSheared(ItemStack item, IBlockAccess world, BlockPos pos, int fortune) ++ { ++ List ret = new java.util.ArrayList(); ++ ret.add(new ItemStack(Blocks.tallgrass, 1, ((BlockTallGrass.EnumType)world.getBlockState(pos).getValue(TYPE)).getMeta())); ++ return ret; ++ } ++ @Override ++ public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) ++ { ++ List ret = new java.util.ArrayList(); ++ if (RANDOM.nextInt(8) != 0) return ret; ++ ItemStack seed = net.minecraftforge.common.ForgeHooks.getGrassSeed(RANDOM); ++ if (seed != null) ret.add(seed); ++ return ret; ++ } + } diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockTorch.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockTorch.java.patch new file mode 100644 index 000000000..059911a36 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockTorch.java.patch @@ -0,0 +1,38 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockTorch.java ++++ ../src-work/minecraft/net/minecraft/block/BlockTorch.java +@@ -70,7 +70,7 @@ + else + { + Block block = worldIn.getBlockState(pos).getBlock(); +- return block instanceof BlockFence || block == Blocks.glass || block == Blocks.cobblestone_wall || block == Blocks.stained_glass; ++ return block.canPlaceTorchOnTop(worldIn, pos); + } + } + +@@ -97,7 +97,7 @@ + { + BlockPos blockpos1 = pos.offset(facing.getOpposite()); + boolean flag = facing.getAxis().isHorizontal(); +- return flag && worldIn.isBlockNormalCube(blockpos1, true) || facing.equals(EnumFacing.UP) && this.canPlaceOn(worldIn, blockpos1); ++ return flag && worldIn.isSideSolid(blockpos1, facing, true) || facing.equals(EnumFacing.UP) && this.canPlaceOn(worldIn, blockpos1); + } + + public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) +@@ -120,7 +120,7 @@ + + enumfacing1 = (EnumFacing)iterator.next(); + } +- while (!worldIn.isBlockNormalCube(pos.offset(enumfacing1.getOpposite()), true)); ++ while (!worldIn.isSideSolid(pos.offset(enumfacing1.getOpposite()), enumfacing1, true)); + + return this.getDefaultState().withProperty(FACING, enumfacing1); + } +@@ -149,7 +149,7 @@ + EnumFacing enumfacing1 = enumfacing.getOpposite(); + boolean flag = false; + +- if (axis.isHorizontal() && !worldIn.isBlockNormalCube(pos.offset(enumfacing1), true)) ++ if (axis.isHorizontal() && !worldIn.isSideSolid(pos.offset(enumfacing1), enumfacing1, true)) + { + flag = true; + } diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockTrapDoor.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockTrapDoor.java.patch new file mode 100644 index 000000000..d73a8a1e7 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockTrapDoor.java.patch @@ -0,0 +1,43 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockTrapDoor.java ++++ ../src-work/minecraft/net/minecraft/block/BlockTrapDoor.java +@@ -25,6 +25,8 @@ + + public class BlockTrapDoor extends Block + { ++ /** Set this to allow trapdoors to remain free-floating */ ++ public static boolean disableValidation = false; + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + public static final PropertyBool OPEN = PropertyBool.create("open"); + public static final PropertyEnum HALF = PropertyEnum.create("half", BlockTrapDoor.DoorHalf.class); +@@ -141,9 +143,10 @@ + { + if (!worldIn.isRemote) + { ++ EnumFacing direction = (EnumFacing)state.getValue(FACING); + BlockPos blockpos1 = pos.offset(((EnumFacing)state.getValue(FACING)).getOpposite()); + +- if (!isValidSupportBlock(worldIn.getBlockState(blockpos1).getBlock())) ++ if (!(isValidSupportBlock(worldIn.getBlockState(blockpos1).getBlock()) || worldIn.isSideSolid(blockpos1, direction, true))) + { + worldIn.setBlockToAir(pos); + this.dropBlockAsItem(worldIn, pos, state, 0); +@@ -187,7 +190,10 @@ + + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { +- return !side.getAxis().isVertical() && isValidSupportBlock(worldIn.getBlockState(pos.offset(side.getOpposite())).getBlock()); ++ if (disableValidation) return true; ++ EnumFacing dir = side.getOpposite(); ++ pos = pos.offset(dir); ++ return !side.getAxis().isVertical() && (isValidSupportBlock(worldIn.getBlockState(pos).getBlock()) || worldIn.isSideSolid(pos, side, true)); + } + + protected static EnumFacing getFacing(int meta) +@@ -224,6 +230,7 @@ + + private static boolean isValidSupportBlock(Block blockIn) + { ++ if (disableValidation) return true; + return blockIn.blockMaterial.isOpaque() && blockIn.isFullCube() || blockIn == Blocks.glowstone || blockIn instanceof BlockSlab || blockIn instanceof BlockStairs; + } + diff --git a/patches.mcp/minecraft/net/minecraft/block/BlockTripWireHook.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockTripWireHook.java.patch new file mode 100644 index 000000000..e5f0df6c5 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/BlockTripWireHook.java.patch @@ -0,0 +1,29 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockTripWireHook.java ++++ ../src-work/minecraft/net/minecraft/block/BlockTripWireHook.java +@@ -60,7 +60,7 @@ + + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { +- return side.getAxis().isHorizontal() && worldIn.getBlockState(pos.offset(side.getOpposite())).getBlock().isNormalCube(); ++ return side.getAxis().isHorizontal() && worldIn.isSideSolid(pos.offset(side.getOpposite()), side, true); + } + + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) +@@ -77,7 +77,7 @@ + + enumfacing = (EnumFacing)iterator.next(); + } +- while (!worldIn.getBlockState(pos.offset(enumfacing)).getBlock().isNormalCube()); ++ while (!worldIn.isSideSolid(pos.offset(enumfacing), enumfacing.getOpposite(), true)); + + return true; + } +@@ -107,7 +107,7 @@ + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + +- if (!worldIn.getBlockState(pos.offset(enumfacing.getOpposite())).getBlock().isNormalCube()) ++ if (!worldIn.isSideSolid(pos.offset(enumfacing.getOpposite()), enumfacing, true)) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); diff --git a/patches/minecraft/net/minecraft/block/BlockVine.java.patch b/patches.mcp/minecraft/net/minecraft/block/BlockVine.java.patch similarity index 57% rename from patches/minecraft/net/minecraft/block/BlockVine.java.patch rename to patches.mcp/minecraft/net/minecraft/block/BlockVine.java.patch index 5436620a3..911d961f2 100644 --- a/patches/minecraft/net/minecraft/block/BlockVine.java.patch +++ b/patches.mcp/minecraft/net/minecraft/block/BlockVine.java.patch @@ -7,20 +7,20 @@ -public class BlockVine extends Block +public class BlockVine extends Block implements net.minecraftforge.common.IShearable { - public static final PropertyBool field_176277_a = PropertyBool.func_177716_a("up"); - public static final PropertyBool field_176273_b = PropertyBool.func_177716_a("north"); + public static final PropertyBool UP = PropertyBool.create("up"); + public static final PropertyBool NORTH = PropertyBool.create("north"); @@ -416,13 +416,7 @@ - public void func_180657_a(World p_180657_1_, EntityPlayer p_180657_2_, BlockPos p_180657_3_, IBlockState p_180657_4_, TileEntity p_180657_5_) + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity te) { -- if (!p_180657_1_.field_72995_K && p_180657_2_.func_71045_bC() != null && p_180657_2_.func_71045_bC().func_77973_b() == Items.field_151097_aZ) +- if (!worldIn.isRemote && player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() == Items.shears) { -- p_180657_2_.func_71029_a(StatList.field_75934_C[Block.func_149682_b(this)]); -- func_180635_a(p_180657_1_, p_180657_3_, new ItemStack(Blocks.field_150395_bd, 1, 0)); +- player.triggerAchievement(StatList.mineBlockStatArray[Block.getIdFromBlock(this)]); +- spawnAsEntity(worldIn, pos, new ItemStack(Blocks.vine, 1, 0)); - } - else - { - super.func_180657_a(p_180657_1_, p_180657_2_, p_180657_3_, p_180657_4_, p_180657_5_); + super.harvestBlock(worldIn, player, pos, state, te); } } @@ -508,6 +502,16 @@ @@ -39,4 +39,4 @@ + static final class SwitchEnumFacing { - static final int[] field_177057_a = new int[EnumFacing.values().length]; + static final int[] FACING_LOOKUP = new int[EnumFacing.values().length]; diff --git a/patches.mcp/minecraft/net/minecraft/block/state/BlockPistonStructureHelper.java.patch b/patches.mcp/minecraft/net/minecraft/block/state/BlockPistonStructureHelper.java.patch new file mode 100644 index 000000000..3a0c759c1 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/block/state/BlockPistonStructureHelper.java.patch @@ -0,0 +1,29 @@ +--- ../src-base/minecraft/net/minecraft/block/state/BlockPistonStructureHelper.java ++++ ../src-work/minecraft/net/minecraft/block/state/BlockPistonStructureHelper.java +@@ -80,7 +80,7 @@ + { + Block block = this.world.getBlockState(origin).getBlock(); + +- if (block.getMaterial() == Material.air) ++ if (block.isAir(world, origin)) + { + return true; + } +@@ -111,7 +111,7 @@ + BlockPos blockpos1 = origin.offset(this.moveDirection.getOpposite(), i); + block = this.world.getBlockState(blockpos1).getBlock(); + +- if (block.getMaterial() == Material.air || !BlockPistonBase.canPush(block, this.world, blockpos1, this.moveDirection, false) || blockpos1.equals(this.pistonPos)) ++ if (block.isAir(world, blockpos1)|| !BlockPistonBase.canPush(block, this.world, blockpos1, this.moveDirection, false) || blockpos1.equals(this.pistonPos)) + { + break; + } +@@ -159,7 +159,7 @@ + + block = this.world.getBlockState(blockpos2).getBlock(); + +- if (block.getMaterial() == Material.air) ++ if (block.isAir(world, blockpos2)) + { + return true; + } diff --git a/patches/minecraft/net/minecraft/block/state/BlockState.java.patch b/patches.mcp/minecraft/net/minecraft/block/state/BlockState.java.patch similarity index 56% rename from patches/minecraft/net/minecraft/block/state/BlockState.java.patch rename to patches.mcp/minecraft/net/minecraft/block/state/BlockState.java.patch index 7168f0548..18159f17b 100644 --- a/patches/minecraft/net/minecraft/block/state/BlockState.java.patch +++ b/patches.mcp/minecraft/net/minecraft/block/state/BlockState.java.patch @@ -2,9 +2,9 @@ +++ ../src-work/minecraft/net/minecraft/block/state/BlockState.java @@ -47,6 +47,16 @@ - public BlockState(Block p_i45663_1_, IProperty ... p_i45663_2_) + public BlockState(Block blockIn, IProperty ... properties) { -+ this(p_i45663_1_, p_i45663_2_, null); ++ this(blockIn, properties, null); + } + + protected StateImplementation createState(Block block, ImmutableMap properties, ImmutableMap unlistedProperties) @@ -12,33 +12,33 @@ + return new StateImplementation(block, properties); + } + -+ protected BlockState(Block p_i45663_1_, IProperty[] p_i45663_2_, ImmutableMap unlistedProperties) ++ protected BlockState(Block blockIn, IProperty[] properties, ImmutableMap unlistedProperties) + { - this.field_177627_c = p_i45663_1_; - Arrays.sort(p_i45663_2_, new Comparator() + this.block = blockIn; + Arrays.sort(properties, new Comparator() { @@ -70,7 +80,7 @@ { List list = (List)iterator.next(); - Map map = MapPopulator.func_179400_b(this.field_177624_d, list); -- BlockState.StateImplementation stateimplementation = new BlockState.StateImplementation(p_i45663_1_, ImmutableMap.copyOf(map), null); -+ BlockState.StateImplementation stateimplementation = createState(p_i45663_1_, ImmutableMap.copyOf(map), unlistedProperties); + Map map = MapPopulator.createMap(this.properties, list); +- BlockState.StateImplementation stateimplementation = new BlockState.StateImplementation(blockIn, ImmutableMap.copyOf(map), null); ++ BlockState.StateImplementation stateimplementation = createState(blockIn, ImmutableMap.copyOf(map), unlistedProperties); linkedhashmap.put(map, stateimplementation); arraylist.add(stateimplementation); } @@ -135,6 +145,13 @@ - this.field_177239_a = p_i45660_1_; - this.field_177237_b = p_i45660_2_; + this.block = blockIn; + this.properties = propertiesIn; } + + protected StateImplementation(Block blockIn, ImmutableMap propertiesIn, ImmutableTable propertyValueTable) + { -+ this.field_177239_a = blockIn; -+ this.field_177237_b = propertiesIn; -+ this.field_177238_c = propertyValueTable; ++ this.block = blockIn; ++ this.properties = propertiesIn; ++ this.propertyValueTable = propertyValueTable; + } - public Collection func_177227_a() + public Collection getPropertyNames() { @@ -231,5 +248,10 @@ { @@ -47,7 +47,7 @@ + + public ImmutableTable getPropertyValueTable() + { -+ return field_177238_c; ++ return propertyValueTable; + } } } diff --git a/patches/minecraft/net/minecraft/block/state/BlockStateBase.java.patch b/patches.mcp/minecraft/net/minecraft/block/state/BlockStateBase.java.patch similarity index 100% rename from patches/minecraft/net/minecraft/block/state/BlockStateBase.java.patch rename to patches.mcp/minecraft/net/minecraft/block/state/BlockStateBase.java.patch diff --git a/patches/minecraft/net/minecraft/client/ClientBrandRetriever.java.patch b/patches.mcp/minecraft/net/minecraft/client/ClientBrandRetriever.java.patch similarity index 100% rename from patches/minecraft/net/minecraft/client/ClientBrandRetriever.java.patch rename to patches.mcp/minecraft/net/minecraft/client/ClientBrandRetriever.java.patch diff --git a/patches.mcp/minecraft/net/minecraft/client/LoadingScreenRenderer.java.patch b/patches.mcp/minecraft/net/minecraft/client/LoadingScreenRenderer.java.patch new file mode 100644 index 000000000..5a04f69b6 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/LoadingScreenRenderer.java.patch @@ -0,0 +1,26 @@ +--- ../src-base/minecraft/net/minecraft/client/LoadingScreenRenderer.java ++++ ../src-work/minecraft/net/minecraft/client/LoadingScreenRenderer.java +@@ -139,6 +139,10 @@ + GlStateManager.clear(16640); + } + ++ try ++ { ++ if (!net.minecraftforge.fml.client.FMLClientHandler.instance().handleLoadingScreen(scaledresolution)) //FML Don't render while FML's pre-screen is rendering ++ { + Tessellator tessellator = Tessellator.getInstance(); + WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + this.mc.getTextureManager().bindTexture(Gui.optionsBackground); +@@ -177,6 +181,12 @@ + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); + this.mc.fontRendererObj.drawStringWithShadow(this.currentlyDisplayedText, (float)((l - this.mc.fontRendererObj.getStringWidth(this.currentlyDisplayedText)) / 2), (float)(i1 / 2 - 4 - 16), 16777215); + this.mc.fontRendererObj.drawStringWithShadow(this.message, (float)((l - this.mc.fontRendererObj.getStringWidth(this.message)) / 2), (float)(i1 / 2 - 4 + 8), 16777215); ++ } ++ } ++ catch (java.io.IOException e) ++ { ++ com.google.common.base.Throwables.propagate(e); ++ } //FML End + this.framebuffer.unbindFramebuffer(); + + if (OpenGlHelper.isFramebufferEnabled()) diff --git a/patches.mcp/minecraft/net/minecraft/client/Minecraft.java.patch b/patches.mcp/minecraft/net/minecraft/client/Minecraft.java.patch new file mode 100644 index 000000000..883fbf527 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/Minecraft.java.patch @@ -0,0 +1,476 @@ +--- ../src-base/minecraft/net/minecraft/client/Minecraft.java ++++ ../src-work/minecraft/net/minecraft/client/Minecraft.java +@@ -296,7 +296,6 @@ + this.sessionService = (new YggdrasilAuthenticationService(gameConfig.userInfo.proxy, UUID.randomUUID().toString())).createMinecraftSessionService(); + this.session = gameConfig.userInfo.session; + logger.info("Setting user: " + this.session.getUsername()); +- logger.info("(Session ID is " + this.session.getSessionID() + ")"); + this.isDemo = gameConfig.gameInfo.isDemo; + this.displayWidth = gameConfig.displayInfo.width > 0 ? gameConfig.displayInfo.width : 1; + this.displayHeight = gameConfig.displayInfo.height > 0 ? gameConfig.displayInfo.height : 1; +@@ -410,10 +409,10 @@ + this.mcResourceManager = new SimpleReloadableResourceManager(this.metadataSerializer_); + this.mcLanguageManager = new LanguageManager(this.metadataSerializer_, this.gameSettings.language); + this.mcResourceManager.registerReloadListener(this.mcLanguageManager); +- this.refreshResources(); ++ net.minecraftforge.fml.client.FMLClientHandler.instance().beginMinecraftLoading(this, this.defaultResourcePacks, this.mcResourceManager); + this.renderEngine = new TextureManager(this.mcResourceManager); + this.mcResourceManager.registerReloadListener(this.renderEngine); +- this.drawSplashScreen(this.renderEngine); ++ net.minecraftforge.fml.client.SplashProgress.drawVanillaScreen(this.renderEngine); + this.initStream(); + this.skinManager = new SkinManager(this.renderEngine, new File(this.fileAssets, "skins"), this.sessionService); + this.saveLoader = new AnvilSaveConverter(new File(this.mcDataDir, "saves")); +@@ -449,6 +448,8 @@ + } + }); + this.mouseHelper = new MouseHelper(); ++ net.minecraftforge.fml.common.ProgressManager.ProgressBar bar= net.minecraftforge.fml.common.ProgressManager.push("Rendering Setup", 5, true); ++ bar.step("GL Setup"); + this.checkGLError("Pre startup"); + GlStateManager.enableTexture2D(); + GlStateManager.shadeModel(7425); +@@ -462,17 +463,21 @@ + GlStateManager.loadIdentity(); + GlStateManager.matrixMode(5888); + this.checkGLError("Startup"); +- this.textureMapBlocks = new TextureMap("textures"); ++ bar.step("Loading Texture Map"); ++ this.textureMapBlocks = new TextureMap("textures",true); + this.textureMapBlocks.setMipmapLevels(this.gameSettings.mipmapLevels); + this.renderEngine.loadTickableTexture(TextureMap.locationBlocksTexture, this.textureMapBlocks); + this.renderEngine.bindTexture(TextureMap.locationBlocksTexture); + this.textureMapBlocks.setBlurMipmapDirect(false, this.gameSettings.mipmapLevels > 0); ++ bar.step("Loading Model Manager"); + this.modelManager = new ModelManager(this.textureMapBlocks); + this.mcResourceManager.registerReloadListener(this.modelManager); ++ bar.step("Loading Item Renderer"); + this.renderItem = new RenderItem(this.renderEngine, this.modelManager); + this.renderManager = new RenderManager(this.renderEngine, this.renderItem); + this.itemRenderer = new ItemRenderer(this); + this.mcResourceManager.registerReloadListener(this.renderItem); ++ bar.step("Loading Entity Renderer"); + this.entityRenderer = new EntityRenderer(this, this.mcResourceManager); + this.mcResourceManager.registerReloadListener(this.entityRenderer); + this.blockRenderDispatcher = new BlockRendererDispatcher(this.modelManager.getBlockModelShapes(), this.gameSettings); +@@ -482,22 +487,25 @@ + this.guiAchievement = new GuiAchievement(this); + GlStateManager.viewport(0, 0, this.displayWidth, this.displayHeight); + this.effectRenderer = new EffectRenderer(this.theWorld, this.renderEngine); ++ net.minecraftforge.fml.common.ProgressManager.pop(bar); ++ net.minecraftforge.fml.client.FMLClientHandler.instance().finishMinecraftLoading(); + this.checkGLError("Post startup"); +- this.ingameGUI = new GuiIngame(this); ++ this.ingameGUI = new net.minecraftforge.client.GuiIngameForge(this); + + if (this.serverName != null) + { +- this.displayGuiScreen(new GuiConnecting(new GuiMainMenu(), this, this.serverName, this.serverPort)); ++ net.minecraftforge.fml.client.FMLClientHandler.instance().connectToServerAtStartup(this.serverName, this.serverPort); + } + else + { + this.displayGuiScreen(new GuiMainMenu()); + } + +- this.renderEngine.deleteTexture(this.mojangLogo); ++ net.minecraftforge.fml.client.SplashProgress.clearVanillaResources(renderEngine, mojangLogo); + this.mojangLogo = null; + this.loadingScreen = new LoadingScreenRenderer(this); + ++ net.minecraftforge.fml.client.FMLClientHandler.instance().onInitializationComplete(); + if (this.gameSettings.fullScreen && !this.fullscreen) + { + this.toggleFullscreen(); +@@ -681,21 +689,23 @@ + File file2 = new File(file1, "crash-" + (new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss")).format(new Date()) + "-client.txt"); + Bootstrap.printToSYSOUT(crashReportIn.getCompleteReport()); + ++ int retVal; + if (crashReportIn.getFile() != null) + { + Bootstrap.printToSYSOUT("#@!@# Game crashed! Crash report saved to: #@!@# " + crashReportIn.getFile()); +- System.exit(-1); ++ retVal = -1; + } + else if (crashReportIn.saveToFile(file2)) + { + Bootstrap.printToSYSOUT("#@!@# Game crashed! Crash report saved to: #@!@# " + file2.getAbsolutePath()); +- System.exit(-1); ++ retVal = -1; + } + else + { + Bootstrap.printToSYSOUT("#@?@# Game crashed! Crash report could not be saved. #@?@#"); +- System.exit(-2); ++ retVal = -2; + } ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().handleExit(retVal); + } + + public boolean isUnicode() +@@ -887,11 +897,6 @@ + + public void displayGuiScreen(GuiScreen guiScreenIn) + { +- if (this.currentScreen != null) +- { +- this.currentScreen.onGuiClosed(); +- } +- + if (guiScreenIn == null && this.theWorld == null) + { + guiScreenIn = new GuiMainMenu(); +@@ -901,6 +906,17 @@ + guiScreenIn = new GuiGameOver(); + } + ++ GuiScreen old = this.currentScreen; ++ net.minecraftforge.client.event.GuiOpenEvent event = new net.minecraftforge.client.event.GuiOpenEvent(guiScreenIn); ++ ++ if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) return; ++ ++ guiScreenIn = event.gui; ++ if (old != null && guiScreenIn != old) ++ { ++ old.onGuiClosed(); ++ } ++ + if (guiScreenIn instanceof GuiMainMenu) + { + this.gameSettings.showDebugInfo = false; +@@ -999,7 +1015,7 @@ + { + while (!this.scheduledTasks.isEmpty()) + { +- ((FutureTask)this.scheduledTasks.poll()).run(); ++ net.minecraftforge.fml.common.FMLCommonHandler.callFuture(((FutureTask)this.scheduledTasks.poll())); + } + } + +@@ -1034,9 +1050,11 @@ + + if (!this.skipRenderWorld) + { ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().onRenderTickStart(this.timer.renderPartialTicks); + this.mcProfiler.endStartSection("gameRenderer"); + this.entityRenderer.updateCameraAndRender(this.timer.renderPartialTicks); + this.mcProfiler.endSection(); ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().onRenderTickEnd(this.timer.renderPartialTicks); + } + + this.mcProfiler.endSection(); +@@ -1382,7 +1400,7 @@ + + if (this.theWorld.getBlockState(blockpos).getBlock().getMaterial() != Material.air && this.playerController.func_180512_c(blockpos, this.objectMouseOver.sideHit)) + { +- this.effectRenderer.addBlockHitEffects(blockpos, this.objectMouseOver.sideHit); ++ this.effectRenderer.addBlockHitEffects(blockpos, this.objectMouseOver); + this.thePlayer.swingItem(); + } + } +@@ -1462,15 +1480,19 @@ + case 2: + BlockPos blockpos = this.objectMouseOver.getBlockPos(); + +- if (this.theWorld.getBlockState(blockpos).getBlock().getMaterial() != Material.air) ++ if (!this.theWorld.isAirBlock(blockpos)) + { + int i = itemstack != null ? itemstack.stackSize : 0; + ++ ++ boolean result = !net.minecraftforge.event.ForgeEventFactory.onPlayerInteract(thePlayer, net.minecraftforge.event.entity.player.PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK, this.theWorld, blockpos, this.objectMouseOver.sideHit).isCanceled(); ++ if (result) { //Forge: Kept separate to simplify patch + if (this.playerController.func_178890_a(this.thePlayer, this.theWorld, itemstack, blockpos, this.objectMouseOver.sideHit, this.objectMouseOver.hitVec)) + { + flag = false; + this.thePlayer.swingItem(); + } ++ } + + if (itemstack == null) + { +@@ -1493,7 +1515,8 @@ + { + ItemStack itemstack1 = this.thePlayer.inventory.getCurrentItem(); + +- if (itemstack1 != null && this.playerController.sendUseItem(this.thePlayer, this.theWorld, itemstack1)) ++ boolean result = !net.minecraftforge.event.ForgeEventFactory.onPlayerInteract(thePlayer, net.minecraftforge.event.entity.player.PlayerInteractEvent.Action.RIGHT_CLICK_AIR, theWorld, null, null).isCanceled(); ++ if (result && itemstack1 != null && this.playerController.sendUseItem(this.thePlayer, this.theWorld, itemstack1)) + { + this.entityRenderer.itemRenderer.resetEquippedProgress2(); + } +@@ -1591,6 +1614,8 @@ + --this.rightClickDelayTimer; + } + ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().onPreClientTick(); ++ + this.mcProfiler.startSection("gui"); + + if (!this.isGamePaused) +@@ -1689,6 +1714,8 @@ + + while (Mouse.next()) + { ++ if (net.minecraftforge.client.ForgeHooksClient.postMouseEvent()) continue; ++ + i = Mouse.getEventButton(); + KeyBinding.setKeyBindState(i - 100, Mouse.getEventButtonState()); + +@@ -1744,6 +1771,7 @@ + this.currentScreen.handleMouseInput(); + } + } ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().fireMouseInput(); + } + + if (this.leftClickCounter > 0) +@@ -1920,6 +1948,7 @@ + } + } + } ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().fireKeyInput(); + } + + for (i = 0; i < 9; ++i) +@@ -2120,12 +2149,15 @@ + this.myNetworkManager.processReceivedPackets(); + } + ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().onPostClientTick(); ++ + this.mcProfiler.endSection(); + this.systemTime = getSystemTime(); + } + + public void launchIntegratedServer(String folderName, String worldName, WorldSettings worldSettingsIn) + { ++ net.minecraftforge.fml.client.FMLClientHandler.instance().startIntegratedServer(folderName, worldName, worldSettingsIn); + this.loadWorld((WorldClient)null); + System.gc(); + ISaveHandler isavehandler = this.saveLoader.getSaveLoader(folderName, false); +@@ -2161,6 +2193,12 @@ + + while (!this.theIntegratedServer.serverIsInRunLoop()) + { ++ if (!net.minecraftforge.fml.common.StartupQuery.check()) ++ { ++ loadWorld(null); ++ displayGuiScreen(null); ++ return; ++ } + String s2 = this.theIntegratedServer.getUserMessage(); + + if (s2 != null) +@@ -2186,8 +2224,14 @@ + SocketAddress socketaddress = this.theIntegratedServer.getNetworkSystem().addLocalEndpoint(); + NetworkManager networkmanager = NetworkManager.provideLocalClient(socketaddress); + networkmanager.setNetHandler(new NetHandlerLoginClient(networkmanager, this, (GuiScreen)null)); +- networkmanager.sendPacket(new C00Handshake(47, socketaddress.toString(), 0, EnumConnectionState.LOGIN)); +- networkmanager.sendPacket(new C00PacketLoginStart(this.getSession().getProfile())); ++ networkmanager.sendPacket(new C00Handshake(47, socketaddress.toString(), 0, EnumConnectionState.LOGIN, true)); ++ com.mojang.authlib.GameProfile gameProfile = this.getSession().getProfile(); ++ if (!this.getSession().hasCachedProperties()) ++ { ++ gameProfile = sessionService.fillProfileProperties(gameProfile, true); //Forge: Fill profile properties upon game load. Fixes MC-52974. ++ this.getSession().setProperties(gameProfile.getProperties()); ++ } ++ networkmanager.sendPacket(new C00PacketLoginStart(gameProfile)); + this.myNetworkManager = networkmanager; + } + +@@ -2198,6 +2242,8 @@ + + public void loadWorld(WorldClient worldClientIn, String loadingMessage) + { ++ if (theWorld != null) net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.WorldEvent.Unload(theWorld)); ++ + if (worldClientIn == null) + { + NetHandlerPlayClient nethandlerplayclient = this.getNetHandler(); +@@ -2211,6 +2257,18 @@ + { + this.theIntegratedServer.initiateShutdown(); + this.theIntegratedServer.setStaticInstance(); ++ if (loadingScreen != null) ++ { ++ this.loadingScreen.displayLoadingString(I18n.format("forge.client.shutdown.internal")); ++ } ++ while (!theIntegratedServer.isServerStopped()) ++ { ++ try ++ { ++ Thread.sleep(10); ++ } ++ catch (InterruptedException ie) {} ++ } + } + + this.theIntegratedServer = null; +@@ -2237,6 +2295,7 @@ + + this.setServerData((ServerData)null); + this.integratedServerIsRunning = false; ++ net.minecraftforge.fml.client.FMLClientHandler.instance().handleClientWorldClosing(this.theWorld); + } + + this.mcSoundHandler.stopSounds(); +@@ -2341,134 +2400,11 @@ + if (this.objectMouseOver != null) + { + boolean flag = this.thePlayer.capabilities.isCreativeMode; +- int i = 0; +- boolean flag1 = false; +- TileEntity tileentity = null; +- Object object; + +- if (this.objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) +- { +- BlockPos blockpos = this.objectMouseOver.getBlockPos(); +- Block block = this.theWorld.getBlockState(blockpos).getBlock(); +- +- if (block.getMaterial() == Material.air) +- { +- return; +- } +- +- object = block.getItem(this.theWorld, blockpos); +- +- if (object == null) +- { +- return; +- } +- +- if (flag && GuiScreen.isCtrlKeyDown()) +- { +- tileentity = this.theWorld.getTileEntity(blockpos); +- } +- +- Block block1 = object instanceof ItemBlock && !block.isFlowerPot() ? Block.getBlockFromItem((Item)object) : block; +- i = block1.getDamageValue(this.theWorld, blockpos); +- flag1 = ((Item)object).getHasSubtypes(); +- } +- else +- { +- if (this.objectMouseOver.typeOfHit != MovingObjectPosition.MovingObjectType.ENTITY || this.objectMouseOver.entityHit == null || !flag) +- { +- return; +- } +- +- if (this.objectMouseOver.entityHit instanceof EntityPainting) +- { +- object = Items.painting; +- } +- else if (this.objectMouseOver.entityHit instanceof EntityLeashKnot) +- { +- object = Items.lead; +- } +- else if (this.objectMouseOver.entityHit instanceof EntityItemFrame) +- { +- EntityItemFrame entityitemframe = (EntityItemFrame)this.objectMouseOver.entityHit; +- ItemStack itemstack = entityitemframe.getDisplayedItem(); +- +- if (itemstack == null) +- { +- object = Items.item_frame; +- } +- else +- { +- object = itemstack.getItem(); +- i = itemstack.getMetadata(); +- flag1 = true; +- } +- } +- else if (this.objectMouseOver.entityHit instanceof EntityMinecart) +- { +- EntityMinecart entityminecart = (EntityMinecart)this.objectMouseOver.entityHit; +- +- switch (Minecraft.SwitchEnumMinecartType.field_178901_b[entityminecart.getMinecartType().ordinal()]) +- { +- case 1: +- object = Items.furnace_minecart; +- break; +- case 2: +- object = Items.chest_minecart; +- break; +- case 3: +- object = Items.tnt_minecart; +- break; +- case 4: +- object = Items.hopper_minecart; +- break; +- case 5: +- object = Items.command_block_minecart; +- break; +- default: +- object = Items.minecart; +- } +- } +- else if (this.objectMouseOver.entityHit instanceof EntityBoat) +- { +- object = Items.boat; +- } +- else if (this.objectMouseOver.entityHit instanceof EntityArmorStand) +- { +- object = Items.armor_stand; +- } +- else +- { +- object = Items.spawn_egg; +- i = EntityList.getEntityID(this.objectMouseOver.entityHit); +- flag1 = true; +- +- if (!EntityList.entityEggs.containsKey(Integer.valueOf(i))) +- { +- return; +- } +- } +- } +- + InventoryPlayer inventoryplayer = this.thePlayer.inventory; + +- if (tileentity == null) +- { +- inventoryplayer.setCurrentItem((Item)object, i, flag1, flag); +- } +- else +- { +- NBTTagCompound nbttagcompound1 = new NBTTagCompound(); +- tileentity.writeToNBT(nbttagcompound1); +- ItemStack itemstack1 = new ItemStack((Item)object, 1, i); +- itemstack1.setTagInfo("BlockEntityTag", nbttagcompound1); +- NBTTagCompound nbttagcompound = new NBTTagCompound(); +- NBTTagList nbttaglist = new NBTTagList(); +- nbttaglist.appendTag(new NBTTagString("(+NBT)")); +- nbttagcompound.setTag("Lore", nbttaglist); +- itemstack1.setTagInfo("display", nbttagcompound); +- inventoryplayer.setInventorySlotContents(inventoryplayer.currentItem, itemstack1); +- } +- ++ if (!net.minecraftforge.common.ForgeHooks.onPickBlock(this.objectMouseOver, this.thePlayer, this.theWorld)) return; ++ // We delete this code wholly instead of commenting it out, to make sure we detect changes in it between MC versions + if (flag) + { + int j = this.thePlayer.inventoryContainer.inventorySlots.size() - 9 + inventoryplayer.currentItem; +@@ -2726,18 +2662,8 @@ + + public static int getGLMaximumTextureSize() + { +- for (int i = 16384; i > 0; i >>= 1) +- { +- GL11.glTexImage2D(GL11.GL_PROXY_TEXTURE_2D, 0, GL11.GL_RGBA, i, i, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, (ByteBuffer)null); +- int j = GL11.glGetTexLevelParameteri(GL11.GL_PROXY_TEXTURE_2D, 0, GL11.GL_TEXTURE_WIDTH); +- +- if (j != 0) +- { +- return i; +- } +- } +- +- return -1; ++ //Forge we redirect this to our code which caches the value before any splash screen stuff is done. ++ return net.minecraftforge.fml.client.SplashProgress.getMaxTextureSize(); + } + + public boolean isSnooperEnabled() diff --git a/patches/minecraft/net/minecraft/client/audio/SoundManager.java.patch b/patches.mcp/minecraft/net/minecraft/client/audio/SoundManager.java.patch similarity index 52% rename from patches/minecraft/net/minecraft/client/audio/SoundManager.java.patch rename to patches.mcp/minecraft/net/minecraft/client/audio/SoundManager.java.patch index 0aaeff108..e58577e04 100644 --- a/patches/minecraft/net/minecraft/client/audio/SoundManager.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/audio/SoundManager.java.patch @@ -21,32 +21,32 @@ { @@ -81,6 +86,7 @@ { - this.func_148613_b(); - this.func_148608_i(); + this.unloadSoundSystem(); + this.loadSoundSystem(); + MinecraftForge.EVENT_BUS.post(new SoundLoadEvent(this)); } - private synchronized void func_148608_i() + private synchronized void loadSoundSystem() @@ -329,6 +335,9 @@ } else { -+ p_148611_1_ = ForgeHooksClient.playSound(this, p_148611_1_); -+ if (p_148611_1_ == null) return; ++ sound = ForgeHooksClient.playSound(this, sound); ++ if (sound == null) return; + - SoundEventAccessorComposite soundeventaccessorcomposite = this.field_148622_c.func_147680_a(p_148611_1_.func_147650_b()); + SoundEventAccessorComposite soundeventaccessorcomposite = this.sndHandler.getSound(sound.getSoundLocation()); if (soundeventaccessorcomposite == null) @@ -370,10 +379,12 @@ - if (soundpoolentry.func_148648_d()) + if (soundpoolentry.isStreamingSound()) { - this.field_148620_e.newStreamingSource(false, s, func_148612_a(resourcelocation), resourcelocation.toString(), flag, p_148611_1_.func_147649_g(), p_148611_1_.func_147654_h(), p_148611_1_.func_147651_i(), p_148611_1_.func_147656_j().func_148586_a(), f1); -+ MinecraftForge.EVENT_BUS.post(new PlayStreamingSourceEvent(this, p_148611_1_, s)); + this.sndSystem.newStreamingSource(false, s, getURLForSoundResource(resourcelocation), resourcelocation.toString(), flag, sound.getXPosF(), sound.getYPosF(), sound.getZPosF(), sound.getAttenuationType().getTypeInt(), f1); ++ MinecraftForge.EVENT_BUS.post(new PlayStreamingSourceEvent(this, sound, s)); } else { - this.field_148620_e.newSource(false, s, func_148612_a(resourcelocation), resourcelocation.toString(), flag, p_148611_1_.func_147649_g(), p_148611_1_.func_147654_h(), p_148611_1_.func_147651_i(), p_148611_1_.func_147656_j().func_148586_a(), f1); -+ MinecraftForge.EVENT_BUS.post(new PlaySoundSourceEvent(this, p_148611_1_, s)); + this.sndSystem.newSource(false, s, getURLForSoundResource(resourcelocation), resourcelocation.toString(), flag, sound.getXPosF(), sound.getYPosF(), sound.getZPosF(), sound.getAttenuationType().getTypeInt(), f1); ++ MinecraftForge.EVENT_BUS.post(new PlaySoundSourceEvent(this, sound, s)); } - field_148621_b.debug(field_148623_a, "Playing sound {} for event {} as channel {}", new Object[] {soundpoolentry.func_148652_a(), soundeventaccessorcomposite.func_148729_c(), s}); + logger.debug(LOG_MARKER, "Playing sound {} for event {} as channel {}", new Object[] {soundpoolentry.getSoundPoolEntryLocation(), soundeventaccessorcomposite.getSoundEventLocation(), s}); diff --git a/patches/minecraft/net/minecraft/client/entity/AbstractClientPlayer.java.patch b/patches.mcp/minecraft/net/minecraft/client/entity/AbstractClientPlayer.java.patch similarity index 100% rename from patches/minecraft/net/minecraft/client/entity/AbstractClientPlayer.java.patch rename to patches.mcp/minecraft/net/minecraft/client/entity/AbstractClientPlayer.java.patch diff --git a/patches.mcp/minecraft/net/minecraft/client/entity/EntityPlayerSP.java.patch b/patches.mcp/minecraft/net/minecraft/client/entity/EntityPlayerSP.java.patch new file mode 100644 index 000000000..8b3b22b9e --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/entity/EntityPlayerSP.java.patch @@ -0,0 +1,80 @@ +--- ../src-base/minecraft/net/minecraft/client/entity/EntityPlayerSP.java ++++ ../src-work/minecraft/net/minecraft/client/entity/EntityPlayerSP.java +@@ -53,6 +53,9 @@ + import net.minecraft.world.World; + import net.minecraftforge.fml.relauncher.Side; + import net.minecraftforge.fml.relauncher.SideOnly; ++import net.minecraftforge.client.ForgeHooksClient; ++import net.minecraftforge.common.MinecraftForge; ++import net.minecraftforge.event.entity.PlaySoundAtEntityEvent; + + @SideOnly(Side.CLIENT) + public class EntityPlayerSP extends AbstractClientPlayer +@@ -342,6 +345,15 @@ + this.mc.ingameGUI.getChatGUI().printChatMessage(chatComponent); + } + ++ private boolean isHeadspaceFree(BlockPos pos, int height) ++ { ++ for (int y = 0; y < height; y++) ++ { ++ if (isOpenBlockSpace(pos.add(0, y, 0))) return false; ++ } ++ return true; ++ } ++ + protected boolean pushOutOfBlocks(double x, double y, double z) + { + if (this.noClip) +@@ -354,30 +366,34 @@ + double d3 = x - (double)blockpos.getX(); + double d4 = z - (double)blockpos.getZ(); + +- if (!this.isOpenBlockSpace(blockpos)) ++ int entHeight = Math.max(Math.round(this.height), 1); ++ ++ boolean inTranslucentBlock = this.isHeadspaceFree(blockpos, entHeight); ++ ++ if (inTranslucentBlock) + { + byte b0 = -1; + double d5 = 9999.0D; + +- if (this.isOpenBlockSpace(blockpos.west()) && d3 < d5) ++ if (!this.isHeadspaceFree(blockpos.west(), entHeight) && d3 < d5) + { + d5 = d3; + b0 = 0; + } + +- if (this.isOpenBlockSpace(blockpos.east()) && 1.0D - d3 < d5) ++ if (!this.isHeadspaceFree(blockpos.east(), entHeight) && 1.0D - d3 < d5) + { + d5 = 1.0D - d3; + b0 = 1; + } + +- if (this.isOpenBlockSpace(blockpos.north()) && d4 < d5) ++ if (!this.isHeadspaceFree(blockpos.north(), entHeight) && d4 < d5) + { + d5 = d4; + b0 = 4; + } + +- if (this.isOpenBlockSpace(blockpos.south()) && 1.0D - d4 < d5) ++ if (!this.isHeadspaceFree(blockpos.south(), entHeight) && 1.0D - d4 < d5) + { + d5 = 1.0D - d4; + b0 = 5; +@@ -445,6 +461,11 @@ + + public void playSound(String name, float volume, float pitch) + { ++ PlaySoundAtEntityEvent event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(this, name, volume, pitch); ++ if (event.isCanceled() || event.name == null) return; ++ name = event.name; ++ volume = event.newVolume; ++ pitch = event.newPitch; + this.worldObj.playSound(this.posX, this.posY, this.posZ, name, volume, pitch, false); + } + diff --git a/patches.mcp/minecraft/net/minecraft/client/gui/FontRenderer.java.patch b/patches.mcp/minecraft/net/minecraft/client/gui/FontRenderer.java.patch new file mode 100644 index 000000000..08bb966fe --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/gui/FontRenderer.java.patch @@ -0,0 +1,155 @@ +--- ../src-base/minecraft/net/minecraft/client/gui/FontRenderer.java ++++ ../src-work/minecraft/net/minecraft/client/gui/FontRenderer.java +@@ -57,7 +57,7 @@ + this.locationFontTexture = p_i1035_2_; + this.renderEngine = p_i1035_3_; + this.unicodeFlag = p_i1035_4_; +- p_i1035_3_.bindTexture(this.locationFontTexture); ++ bindTexture(this.locationFontTexture); + + for (int i = 0; i < 32; ++i) + { +@@ -97,6 +97,7 @@ + public void onResourceManagerReload(IResourceManager resourceManager) + { + this.readFontTexture(); ++ this.readGlyphSizes(); + } + + private void readFontTexture() +@@ -105,7 +106,7 @@ + + try + { +- bufferedimage = TextureUtil.readBufferedImage(Minecraft.getMinecraft().getResourceManager().getResource(this.locationFontTexture).getInputStream()); ++ bufferedimage = TextureUtil.readBufferedImage(getResourceInputStream(this.locationFontTexture)); + } + catch (IOException ioexception) + { +@@ -172,7 +173,7 @@ + + try + { +- inputstream = Minecraft.getMinecraft().getResourceManager().getResource(new ResourceLocation("font/glyph_sizes.bin")).getInputStream(); ++ inputstream = getResourceInputStream(new ResourceLocation("font/glyph_sizes.bin")); + inputstream.read(this.glyphWidth); + } + catch (IOException ioexception) +@@ -195,7 +196,7 @@ + float f = (float)(p_78266_1_ % 16 * 8); + float f1 = (float)(p_78266_1_ / 16 * 8); + float f2 = p_78266_2_ ? 1.0F : 0.0F; +- this.renderEngine.bindTexture(this.locationFontTexture); ++ bindTexture(this.locationFontTexture); + float f3 = (float)this.charWidth[p_78266_1_] - 0.01F; + GL11.glBegin(GL11.GL_TRIANGLE_STRIP); + GL11.glTexCoord2f(f / 128.0F, f1 / 128.0F); +@@ -222,7 +223,7 @@ + + private void loadGlyphTexture(int p_78257_1_) + { +- this.renderEngine.bindTexture(this.getUnicodePageLocation(p_78257_1_)); ++ bindTexture(this.getUnicodePageLocation(p_78257_1_)); + } + + protected float renderUnicodeChar(char p_78277_1_, boolean p_78277_2_) +@@ -269,7 +270,7 @@ + + public int drawString(String p_175065_1_, float p_175065_2_, float p_175065_3_, int p_175065_4_, boolean p_175065_5_) + { +- GlStateManager.enableAlpha(); ++ enableAlpha(); + this.resetStyles(); + int j; + +@@ -341,7 +342,7 @@ + + k = this.colorCode[j]; + this.textColor = k; +- GlStateManager.color((float)(k >> 16) / 255.0F, (float)(k >> 8 & 255) / 255.0F, (float)(k & 255) / 255.0F, this.alpha); ++ setColor((float)(k >> 16) / 255.0F, (float)(k >> 8 & 255) / 255.0F, (float)(k & 255) / 255.0F, this.alpha); + } + else if (j == 16) + { +@@ -370,7 +371,7 @@ + this.strikethroughStyle = false; + this.underlineStyle = false; + this.italicStyle = false; +- GlStateManager.color(this.red, this.blue, this.green, this.alpha); ++ setColor(this.red, this.blue, this.green, this.alpha); + } + + ++i; +@@ -390,7 +391,7 @@ + j = k; + } + +- float f1 = this.unicodeFlag ? 0.5F : 1.0F; ++ float f1 = getCharWidth(c0) / 32f; + boolean flag1 = (c0 == 0 || j == -1 || this.unicodeFlag) && p_78255_2_; + + if (flag1) +@@ -429,6 +430,15 @@ + ++f; + } + ++ doDraw(f); ++ } ++ } ++ } ++ ++ protected void doDraw(float f) ++ { ++ { ++ { + Tessellator tessellator; + WorldRenderer worldrenderer; + +@@ -504,7 +514,7 @@ + this.blue = (float)(p_180455_4_ >> 8 & 255) / 255.0F; + this.green = (float)(p_180455_4_ & 255) / 255.0F; + this.alpha = (float)(p_180455_4_ >> 24 & 255) / 255.0F; +- GlStateManager.color(this.red, this.blue, this.green, this.alpha); ++ setColor(this.red, this.blue, this.green, this.alpha); + this.posX = p_180455_2_; + this.posY = p_180455_3_; + this.renderStringAtPos(p_180455_1_, p_180455_5_); +@@ -583,11 +593,6 @@ + int j = this.glyphWidth[p_78263_1_] >>> 4; + int k = this.glyphWidth[p_78263_1_] & 15; + +- if (k > 7) +- { +- k = 15; +- j = 0; +- } + + ++k; + return (k - j) / 2 + 1; +@@ -842,6 +847,26 @@ + return this.bidiFlag; + } + ++ protected void setColor(float r, float g, float b, float a) ++ { ++ GlStateManager.color(r,g,b,a); ++ } ++ ++ protected void enableAlpha() ++ { ++ GlStateManager.enableAlpha(); ++ } ++ ++ protected void bindTexture(ResourceLocation location) ++ { ++ renderEngine.bindTexture(location); ++ } ++ ++ protected InputStream getResourceInputStream(ResourceLocation location) throws IOException ++ { ++ return Minecraft.getMinecraft().getResourceManager().getResource(location).getInputStream(); ++ } ++ + public int getColorCode(char p_175064_1_) + { + return this.colorCode["0123456789abcdef".indexOf(p_175064_1_)]; diff --git a/patches/minecraft/net/minecraft/client/gui/GuiButton.java.patch b/patches.mcp/minecraft/net/minecraft/client/gui/GuiButton.java.patch similarity index 56% rename from patches/minecraft/net/minecraft/client/gui/GuiButton.java.patch rename to patches.mcp/minecraft/net/minecraft/client/gui/GuiButton.java.patch index 1366ae5b5..0ccb62296 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiButton.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/gui/GuiButton.java.patch @@ -1,24 +1,24 @@ --- ../src-base/minecraft/net/minecraft/client/gui/GuiButton.java +++ ../src-work/minecraft/net/minecraft/client/gui/GuiButton.java @@ -22,6 +22,7 @@ - public boolean field_146125_m; - protected boolean field_146123_n; + public boolean visible; + protected boolean hovered; private static final String __OBFID = "CL_00000668"; + public int packedFGColour; //FML - public GuiButton(int p_i1020_1_, int p_i1020_2_, int p_i1020_3_, String p_i1020_4_) + public GuiButton(int buttonId, int x, int y, String buttonText) { @@ -75,8 +76,12 @@ - this.func_146119_b(p_146112_1_, p_146112_2_, p_146112_3_); + this.mouseDragged(mc, mouseX, mouseY); int l = 14737632; -- if (!this.field_146124_l) +- if (!this.enabled) + if (packedFGColour != 0) { + l = packedFGColour; + } -+ else if (!this.field_146124_l) ++ else if (!this.enabled) + { l = 10526880; } - else if (this.field_146123_n) + else if (this.hovered) diff --git a/patches/minecraft/net/minecraft/client/gui/GuiChat.java.patch b/patches.mcp/minecraft/net/minecraft/client/gui/GuiChat.java.patch similarity index 59% rename from patches/minecraft/net/minecraft/client/gui/GuiChat.java.patch rename to patches.mcp/minecraft/net/minecraft/client/gui/GuiChat.java.patch index e6f87a374..f336b38d2 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiChat.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/gui/GuiChat.java.patch @@ -1,21 +1,21 @@ --- ../src-base/minecraft/net/minecraft/client/gui/GuiChat.java +++ ../src-work/minecraft/net/minecraft/client/gui/GuiChat.java @@ -217,13 +217,14 @@ - this.field_146297_k.field_71456_v.func_146158_b().func_146234_a(new ChatComponentText(stringbuilder.toString()), 1); + this.mc.ingameGUI.getChatGUI().printChatMessageWithOptionalDeletion(new ChatComponentText(stringbuilder.toString()), 1); } -- this.field_146415_a.func_146191_b((String)this.field_146412_t.get(this.field_146413_s++)); -+ this.field_146415_a.func_146191_b(net.minecraft.util.EnumChatFormatting.func_110646_a((String)this.field_146412_t.get(this.field_146413_s++))); +- this.inputField.writeText((String)this.foundPlayerNames.get(this.autocompleteIndex++)); ++ this.inputField.writeText(net.minecraft.util.EnumChatFormatting.getTextWithoutFormattingCodes((String)this.foundPlayerNames.get(this.autocompleteIndex++))); } - private void func_146405_a(String p_146405_1_, String p_146405_2_) + private void sendAutocompleteRequest(String p_146405_1_, String p_146405_2_) { if (p_146405_1_.length() >= 1) { + net.minecraftforge.client.ClientCommandHandler.instance.autoComplete(p_146405_1_, p_146405_2_); BlockPos blockpos = null; - if (this.field_146297_k.field_71476_x != null && this.field_146297_k.field_71476_x.field_72313_a == MovingObjectPosition.MovingObjectType.BLOCK) + if (this.mc.objectMouseOver != null && this.mc.objectMouseOver.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) @@ -285,6 +286,13 @@ String[] astring1 = p_146406_1_; int i = p_146406_1_.length; diff --git a/patches.mcp/minecraft/net/minecraft/client/gui/GuiCreateWorld.java.patch b/patches.mcp/minecraft/net/minecraft/client/gui/GuiCreateWorld.java.patch new file mode 100644 index 000000000..bf1617dab --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/gui/GuiCreateWorld.java.patch @@ -0,0 +1,36 @@ +--- ../src-base/minecraft/net/minecraft/client/gui/GuiCreateWorld.java ++++ ../src-work/minecraft/net/minecraft/client/gui/GuiCreateWorld.java +@@ -213,6 +213,8 @@ + } + } + ++ WorldType.worldTypes[this.selectedIndex].onGUICreateWorldPress(); ++ + WorldSettings.GameType gametype = WorldSettings.GameType.getByName(this.field_146342_r); + WorldSettings worldsettings = new WorldSettings(i, gametype, this.field_146341_s, this.field_146337_w, WorldType.worldTypes[this.selectedIndex]); + worldsettings.setWorldName(this.chunkProviderSettingsJson); +@@ -320,14 +322,7 @@ + } + else if (button.id == 8) + { +- if (WorldType.worldTypes[this.selectedIndex] == WorldType.FLAT) +- { +- this.mc.displayGuiScreen(new GuiCreateFlatWorld(this, this.chunkProviderSettingsJson)); +- } +- else +- { +- this.mc.displayGuiScreen(new GuiCustomizeWorldScreen(this, this.chunkProviderSettingsJson)); +- } ++ WorldType.worldTypes[this.selectedIndex].onCustomizeButton(mc, this); + } + } + } +@@ -379,7 +374,7 @@ + this.btnBonusItems.visible = this.field_146344_y; + this.btnMapType.visible = this.field_146344_y; + this.btnAllowCommands.visible = this.field_146344_y; +- this.btnCustomizeType.visible = this.field_146344_y && (WorldType.worldTypes[this.selectedIndex] == WorldType.FLAT || WorldType.worldTypes[this.selectedIndex] == WorldType.CUSTOMIZED); ++ this.btnCustomizeType.visible = this.field_146344_y && WorldType.worldTypes[this.selectedIndex].isCustomizable(); + } + + this.func_146319_h(); diff --git a/patches.mcp/minecraft/net/minecraft/client/gui/GuiIngameMenu.java.patch b/patches.mcp/minecraft/net/minecraft/client/gui/GuiIngameMenu.java.patch new file mode 100644 index 000000000..dc621b142 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/gui/GuiIngameMenu.java.patch @@ -0,0 +1,33 @@ +--- ../src-base/minecraft/net/minecraft/client/gui/GuiIngameMenu.java ++++ ../src-work/minecraft/net/minecraft/client/gui/GuiIngameMenu.java +@@ -30,8 +30,9 @@ + + this.buttonList.add(new GuiButton(4, this.width / 2 - 100, this.height / 4 + 24 + b0, I18n.format("menu.returnToGame", new Object[0]))); + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 96 + b0, 98, 20, I18n.format("menu.options", new Object[0]))); ++ this.buttonList.add(new GuiButton(12, this.width / 2 + 2, this.height / 4 + 96 + b0, 98, 20, I18n.format("fml.menu.modoptions"))); + GuiButton guibutton; +- this.buttonList.add(guibutton = new GuiButton(7, this.width / 2 + 2, this.height / 4 + 96 + b0, 98, 20, I18n.format("menu.shareToLan", new Object[0]))); ++ this.buttonList.add(guibutton = new GuiButton(7, this.width / 2 - 100, this.height / 4 + 72 + b0, 200, 20, I18n.format("menu.shareToLan", new Object[0]))); + this.buttonList.add(new GuiButton(5, this.width / 2 - 100, this.height / 4 + 48 + b0, 98, 20, I18n.format("gui.achievements", new Object[0]))); + this.buttonList.add(new GuiButton(6, this.width / 2 + 2, this.height / 4 + 48 + b0, 98, 20, I18n.format("gui.stats", new Object[0]))); + guibutton.enabled = this.mc.isSingleplayer() && !this.mc.getIntegratedServer().getPublic(); +@@ -58,13 +59,19 @@ + this.mc.setIngameFocus(); + break; + case 5: ++ if (this.mc.thePlayer != null) + this.mc.displayGuiScreen(new GuiAchievements(this, this.mc.thePlayer.getStatFileWriter())); + break; + case 6: ++ if (this.mc.thePlayer != null) + this.mc.displayGuiScreen(new GuiStats(this, this.mc.thePlayer.getStatFileWriter())); + break; + case 7: + this.mc.displayGuiScreen(new GuiShareToLan(this)); ++ break; ++ case 12: ++ net.minecraftforge.fml.client.FMLClientHandler.instance().showInGameModOptions(this); ++ break; + } + } + diff --git a/patches.mcp/minecraft/net/minecraft/client/gui/GuiMainMenu.java.patch b/patches.mcp/minecraft/net/minecraft/client/gui/GuiMainMenu.java.patch new file mode 100644 index 000000000..62e8f7c30 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/gui/GuiMainMenu.java.patch @@ -0,0 +1,44 @@ +--- ../src-base/minecraft/net/minecraft/client/gui/GuiMainMenu.java ++++ ../src-work/minecraft/net/minecraft/client/gui/GuiMainMenu.java +@@ -198,6 +198,11 @@ + this.buttonList.add(new GuiButton(1, this.width / 2 - 100, p_73969_1_, I18n.format("menu.singleplayer", new Object[0]))); + this.buttonList.add(new GuiButton(2, this.width / 2 - 100, p_73969_1_ + p_73969_2_ * 1, I18n.format("menu.multiplayer", new Object[0]))); + this.buttonList.add(this.realmsButton = new GuiButton(14, this.width / 2 - 100, p_73969_1_ + p_73969_2_ * 2, I18n.format("menu.online", new Object[0]))); ++ GuiButton fmlModButton = new GuiButton(6, this.width / 2 - 100, p_73969_1_ + p_73969_2_ * 2, I18n.format("fml.menu.mods")); ++ fmlModButton.xPosition = this.width / 2 + 2; ++ realmsButton.width = 98; ++ fmlModButton.width = 98; ++ this.buttonList.add(fmlModButton); + } + + private void addDemoButtons(int p_73972_1_, int p_73972_2_) +@@ -245,6 +250,11 @@ + this.mc.shutdown(); + } + ++ if (button.id == 6) ++ { ++ this.mc.displayGuiScreen(new net.minecraftforge.fml.client.GuiModList(this)); ++ } ++ + if (button.id == 11) + { + this.mc.launchIntegratedServer("Demo_World", "Demo_World", DemoWorldServer.demoWorldSettings); +@@ -492,7 +502,16 @@ + s = s + " Demo"; + } + +- this.drawString(this.fontRendererObj, s, 2, this.height - 10, -1); ++ java.util.List brandings = com.google.common.collect.Lists.reverse(net.minecraftforge.fml.common.FMLCommonHandler.instance().getBrandings(true)); ++ for (int i = 0; i < brandings.size(); i++) ++ { ++ String brd = brandings.get(i); ++ if (!com.google.common.base.Strings.isNullOrEmpty(brd)) ++ { ++ this.drawString(this.fontRendererObj, brd, 2, this.height - ( 10 + i * (this.fontRendererObj.FONT_HEIGHT + 1)), 16777215); ++ } ++ } ++ net.minecraftforge.client.ForgeHooksClient.renderMainMenu(this, this.fontRendererObj, this.width, this.height); + String s1 = "Copyright Mojang AB. Do not distribute!"; + this.drawString(this.fontRendererObj, s1, this.width - this.fontRendererObj.getStringWidth(s1) - 2, this.height - 10, -1); + diff --git a/patches.mcp/minecraft/net/minecraft/client/gui/GuiMultiplayer.java.patch b/patches.mcp/minecraft/net/minecraft/client/gui/GuiMultiplayer.java.patch new file mode 100644 index 000000000..b4563e39b --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/gui/GuiMultiplayer.java.patch @@ -0,0 +1,19 @@ +--- ../src-base/minecraft/net/minecraft/client/gui/GuiMultiplayer.java ++++ ../src-work/minecraft/net/minecraft/client/gui/GuiMultiplayer.java +@@ -41,6 +41,7 @@ + public GuiMultiplayer(GuiScreen parentScreen) + { + this.parentScreen = parentScreen; ++ net.minecraftforge.fml.client.FMLClientHandler.instance().setupServerList(); + } + + public void initGui() +@@ -373,7 +374,7 @@ + + private void connectToServer(ServerData server) + { +- this.mc.displayGuiScreen(new GuiConnecting(this, this.mc, server)); ++ net.minecraftforge.fml.client.FMLClientHandler.instance().connectToServer(this, server); + } + + public void selectServer(int index) diff --git a/patches.mcp/minecraft/net/minecraft/client/gui/GuiOverlayDebug.java.patch b/patches.mcp/minecraft/net/minecraft/client/gui/GuiOverlayDebug.java.patch new file mode 100644 index 000000000..909dc5dbc --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/gui/GuiOverlayDebug.java.patch @@ -0,0 +1,12 @@ +--- ../src-base/minecraft/net/minecraft/client/gui/GuiOverlayDebug.java ++++ ../src-work/minecraft/net/minecraft/client/gui/GuiOverlayDebug.java +@@ -170,6 +170,9 @@ + long l = j - k; + ArrayList arraylist = Lists.newArrayList(new String[] {String.format("Java: %s %dbit", new Object[]{System.getProperty("java.version"), Integer.valueOf(this.mc.isJava64bit() ? 64 : 32)}), String.format("Mem: % 2d%% %03d/%03dMB", new Object[]{Long.valueOf(l * 100L / i), Long.valueOf(bytesToMb(l)), Long.valueOf(bytesToMb(i))}), String.format("Allocated: % 2d%% %03dMB", new Object[]{Long.valueOf(j * 100L / i), Long.valueOf(bytesToMb(j))}), "", String.format("Display: %dx%d (%s)", new Object[]{Integer.valueOf(Display.getWidth()), Integer.valueOf(Display.getHeight()), GL11.glGetString(GL11.GL_VENDOR)}), GL11.glGetString(GL11.GL_RENDERER), GL11.glGetString(GL11.GL_VERSION)}); + ++ arraylist.add(""); ++ arraylist.addAll(net.minecraftforge.fml.common.FMLCommonHandler.instance().getBrandings(false)); ++ + if (this.isReducedDebug()) + { + return arraylist; diff --git a/patches.mcp/minecraft/net/minecraft/client/gui/GuiScreen.java.patch b/patches.mcp/minecraft/net/minecraft/client/gui/GuiScreen.java.patch new file mode 100644 index 000000000..c6e3b5403 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/gui/GuiScreen.java.patch @@ -0,0 +1,113 @@ +--- ../src-base/minecraft/net/minecraft/client/gui/GuiScreen.java ++++ ../src-work/minecraft/net/minecraft/client/gui/GuiScreen.java +@@ -37,6 +37,9 @@ + import net.minecraft.util.ChatComponentTranslation; + import net.minecraft.util.EnumChatFormatting; + import net.minecraft.util.IChatComponent; ++import net.minecraftforge.client.event.GuiScreenEvent.ActionPerformedEvent; ++import net.minecraftforge.client.event.GuiScreenEvent.InitGuiEvent; ++import net.minecraftforge.common.MinecraftForge; + import net.minecraftforge.fml.relauncher.Side; + import net.minecraftforge.fml.relauncher.SideOnly; + import org.apache.commons.lang3.StringUtils; +@@ -146,7 +149,8 @@ + } + } + +- this.drawHoveringText(list, x, y); ++ FontRenderer font = stack.getItem().getFontRenderer(stack); ++ this.drawHoveringText(list, x, y, (font == null ? fontRendererObj : font)); + } + + protected void drawCreativeTabHoveringText(String tabName, int mouseX, int mouseY) +@@ -156,6 +160,11 @@ + + protected void drawHoveringText(List textLines, int x, int y) + { ++ drawHoveringText(textLines, x, y, fontRendererObj); ++ } ++ ++ protected void drawHoveringText(List textLines, int x, int y, FontRenderer font) ++ { + if (!textLines.isEmpty()) + { + GlStateManager.disableRescaleNormal(); +@@ -168,7 +177,7 @@ + while (iterator.hasNext()) + { + String s = (String)iterator.next(); +- int l = this.fontRendererObj.getStringWidth(s); ++ int l = font.getStringWidth(s); + + if (l > k) + { +@@ -213,7 +222,7 @@ + for (int i2 = 0; i2 < textLines.size(); ++i2) + { + String s1 = (String)textLines.get(i2); +- this.fontRendererObj.drawStringWithShadow(s1, (float)j2, (float)k2, -1); ++ font.drawStringWithShadow(s1, j2, k2, -1); + + if (i2 == 0) + { +@@ -441,6 +450,7 @@ + this.mc.ingameGUI.getChatGUI().addToSentMessages(msg); + } + ++ if (net.minecraftforge.client.ClientCommandHandler.instance.executeCommand(mc.thePlayer, msg) != 0) return; + this.mc.thePlayer.sendChatMessage(msg); + } + +@@ -454,9 +464,14 @@ + + if (guibutton.mousePressed(this.mc, mouseX, mouseY)) + { +- this.selectedButton = guibutton; +- guibutton.playPressSound(this.mc.getSoundHandler()); +- this.actionPerformed(guibutton); ++ ActionPerformedEvent.Pre event = new ActionPerformedEvent.Pre(this, guibutton, this.buttonList); ++ if (MinecraftForge.EVENT_BUS.post(event)) ++ break; ++ this.selectedButton = event.button; ++ event.button.playPressSound(this.mc.getSoundHandler()); ++ this.actionPerformed(event.button); ++ if (this.equals(this.mc.currentScreen)) ++ MinecraftForge.EVENT_BUS.post(new ActionPerformedEvent.Post(this, event.button, this.buttonList)); + } + } + } +@@ -482,8 +497,12 @@ + this.fontRendererObj = mc.fontRendererObj; + this.width = width; + this.height = height; +- this.buttonList.clear(); +- this.initGui(); ++ if (!MinecraftForge.EVENT_BUS.post(new InitGuiEvent.Pre(this, this.buttonList))) ++ { ++ this.buttonList.clear(); ++ this.initGui(); ++ } ++ MinecraftForge.EVENT_BUS.post(new InitGuiEvent.Post(this, this.buttonList)); + } + + public void initGui() {} +@@ -494,7 +513,9 @@ + { + while (Mouse.next()) + { ++ if (MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.MouseInputEvent.Pre(this))) continue; + this.handleMouseInput(); ++ if (this.equals(this.mc.currentScreen)) MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.MouseInputEvent.Post(this)); + } + } + +@@ -502,7 +523,9 @@ + { + while (Keyboard.next()) + { ++ if (MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.KeyboardInputEvent.Pre(this))) continue; + this.handleKeyboardInput(); ++ if (this.equals(this.mc.currentScreen)) MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.KeyboardInputEvent.Post(this)); + } + } + } diff --git a/patches/minecraft/net/minecraft/client/gui/GuiSelectWorld.java.patch b/patches.mcp/minecraft/net/minecraft/client/gui/GuiSelectWorld.java.patch similarity index 68% rename from patches/minecraft/net/minecraft/client/gui/GuiSelectWorld.java.patch rename to patches.mcp/minecraft/net/minecraft/client/gui/GuiSelectWorld.java.patch index d4be0db7a..83c8e4e05 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiSelectWorld.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/gui/GuiSelectWorld.java.patch @@ -2,9 +2,9 @@ +++ ../src-work/minecraft/net/minecraft/client/gui/GuiSelectWorld.java @@ -187,7 +187,7 @@ - if (this.field_146297_k.func_71359_d().func_90033_f(s)) + if (this.mc.getSaveLoader().canLoadWorld(s)) { -- this.field_146297_k.func_71371_a(s, s1, (WorldSettings)null); +- this.mc.launchIntegratedServer(s, s1, (WorldSettings)null); + net.minecraftforge.fml.client.FMLClientHandler.instance().tryLoadExistingWorld(this, s, s1); } } diff --git a/patches.mcp/minecraft/net/minecraft/client/gui/GuiSleepMP.java.patch b/patches.mcp/minecraft/net/minecraft/client/gui/GuiSleepMP.java.patch new file mode 100644 index 000000000..5df4b471b --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/gui/GuiSleepMP.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/client/gui/GuiSleepMP.java ++++ ../src-work/minecraft/net/minecraft/client/gui/GuiSleepMP.java +@@ -34,7 +34,7 @@ + + if (!s.isEmpty()) + { +- this.mc.thePlayer.sendChatMessage(s); ++ this.sendChatMessage(s); // Forge: fix vanilla not adding messages to the sent list while sleeping + } + + this.inputField.setText(""); diff --git a/patches.mcp/minecraft/net/minecraft/client/gui/GuiSlot.java.patch b/patches.mcp/minecraft/net/minecraft/client/gui/GuiSlot.java.patch new file mode 100644 index 000000000..0ae54f80c --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/gui/GuiSlot.java.patch @@ -0,0 +1,40 @@ +--- ../src-base/minecraft/net/minecraft/client/gui/GuiSlot.java ++++ ../src-work/minecraft/net/minecraft/client/gui/GuiSlot.java +@@ -185,16 +185,7 @@ + GlStateManager.disableFog(); + Tessellator tessellator = Tessellator.getInstance(); + WorldRenderer worldrenderer = tessellator.getWorldRenderer(); +- this.mc.getTextureManager().bindTexture(Gui.optionsBackground); +- GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); +- float f1 = 32.0F; +- worldrenderer.startDrawingQuads(); +- worldrenderer.setColorOpaque_I(2105376); +- worldrenderer.addVertexWithUV((double)this.left, (double)this.bottom, 0.0D, (double)((float)this.left / f1), (double)((float)(this.bottom + (int)this.amountScrolled) / f1)); +- worldrenderer.addVertexWithUV((double)this.right, (double)this.bottom, 0.0D, (double)((float)this.right / f1), (double)((float)(this.bottom + (int)this.amountScrolled) / f1)); +- worldrenderer.addVertexWithUV((double)this.right, (double)this.top, 0.0D, (double)((float)this.right / f1), (double)((float)(this.top + (int)this.amountScrolled) / f1)); +- worldrenderer.addVertexWithUV((double)this.left, (double)this.top, 0.0D, (double)((float)this.left / f1), (double)((float)(this.top + (int)this.amountScrolled) / f1)); +- tessellator.draw(); ++ this.drawContainerBackground(tessellator); + int i1 = this.left + this.width / 2 - this.getListWidth() / 2 + 2; + int j1 = this.top + 4 - (int)this.amountScrolled; + +@@ -456,4 +447,19 @@ + { + return this.slotHeight; + } ++ ++ protected void drawContainerBackground(Tessellator tessellator) ++ { ++ WorldRenderer worldrenderer = tessellator.getWorldRenderer(); ++ this.mc.getTextureManager().bindTexture(Gui.optionsBackground); ++ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); ++ float f1 = 32.0F; ++ worldrenderer.startDrawingQuads(); ++ worldrenderer.setColorOpaque_I(2105376); ++ worldrenderer.addVertexWithUV((double)this.left, (double)this.bottom, 0.0D, (double)((float)this.left / f1), (double)((float)(this.bottom + (int)this.amountScrolled) / f1)); ++ worldrenderer.addVertexWithUV((double)this.right, (double)this.bottom, 0.0D, (double)((float)this.right / f1), (double)((float)(this.bottom + (int)this.amountScrolled) / f1)); ++ worldrenderer.addVertexWithUV((double)this.right, (double)this.top, 0.0D, (double)((float)this.right / f1), (double)((float)(this.top + (int)this.amountScrolled) / f1)); ++ worldrenderer.addVertexWithUV((double)this.left, (double)this.top, 0.0D, (double)((float)this.left / f1), (double)((float)(this.top + (int)this.amountScrolled) / f1)); ++ tessellator.draw(); ++ } + } diff --git a/patches.mcp/minecraft/net/minecraft/client/gui/ServerListEntryNormal.java.patch b/patches.mcp/minecraft/net/minecraft/client/gui/ServerListEntryNormal.java.patch new file mode 100644 index 000000000..a5e77286b --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/gui/ServerListEntryNormal.java.patch @@ -0,0 +1,23 @@ +--- ../src-base/minecraft/net/minecraft/client/gui/ServerListEntryNormal.java ++++ ../src-work/minecraft/net/minecraft/client/gui/ServerListEntryNormal.java +@@ -84,7 +84,7 @@ + boolean flag2 = this.field_148301_e.version < 47; + boolean flag3 = flag1 || flag2; + this.field_148300_d.fontRendererObj.drawString(this.field_148301_e.serverName, x + 32 + 3, y + 1, 16777215); +- List list = this.field_148300_d.fontRendererObj.listFormattedStringToWidth(this.field_148301_e.serverMOTD, listWidth - 32 - 2); ++ List list = this.field_148300_d.fontRendererObj.listFormattedStringToWidth(net.minecraftforge.fml.client.FMLClientHandler.instance().fixDescription(this.field_148301_e.serverMOTD), listWidth - 48 - 2); + + for (int l1 = 0; l1 < Math.min(list.size(), 2); ++l1) + { +@@ -178,6 +178,11 @@ + int k2 = mouseX - x; + int l2 = mouseY - y; + ++ String tooltip = net.minecraftforge.fml.client.FMLClientHandler.instance().enhanceServerListEntry(this, this.field_148301_e, x, listWidth, y, k2, l2); ++ if (tooltip != null) ++ { ++ this.field_148303_c.func_146793_a(tooltip); ++ } else + if (k2 >= listWidth - 15 && k2 <= listWidth - 5 && l2 >= 0 && l2 <= 8) + { + this.field_148303_c.func_146793_a(s1); diff --git a/patches.mcp/minecraft/net/minecraft/client/gui/achievement/GuiAchievements.java.patch b/patches.mcp/minecraft/net/minecraft/client/gui/achievement/GuiAchievements.java.patch new file mode 100644 index 000000000..fa2823869 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/gui/achievement/GuiAchievements.java.patch @@ -0,0 +1,127 @@ +--- ../src-base/minecraft/net/minecraft/client/gui/achievement/GuiAchievements.java ++++ ../src-work/minecraft/net/minecraft/client/gui/achievement/GuiAchievements.java +@@ -24,6 +24,9 @@ + import net.minecraftforge.fml.relauncher.Side; + import net.minecraftforge.fml.relauncher.SideOnly; + import org.lwjgl.input.Mouse; ++import java.util.LinkedList; ++import java.util.List; ++import net.minecraftforge.common.AchievementPage; + + @SideOnly(Side.CLIENT) + public class GuiAchievements extends GuiScreen implements IProgressMeter +@@ -50,6 +53,10 @@ + private boolean loadingAchievements = true; + private static final String __OBFID = "CL_00000722"; + ++ private int currentPage = -1; ++ private GuiButton button; ++ private LinkedList minecraftAchievements = new LinkedList(); ++ + public GuiAchievements(GuiScreen p_i45026_1_, StatFileWriter p_i45026_2_) + { + this.parentScreen = p_i45026_1_; +@@ -58,6 +65,14 @@ + short short2 = 141; + this.field_146569_s = this.field_146567_u = this.field_146565_w = (double)(AchievementList.openInventory.displayColumn * 24 - short1 / 2 - 12); + this.field_146568_t = this.field_146566_v = this.field_146573_x = (double)(AchievementList.openInventory.displayRow * 24 - short2 / 2); ++ minecraftAchievements.clear(); ++ for (Object achievement : AchievementList.achievementList) ++ { ++ if (!AchievementPage.isAchievementInPages((Achievement)achievement)) ++ { ++ minecraftAchievements.add((Achievement)achievement); ++ } ++ } + } + + public void initGui() +@@ -65,6 +80,7 @@ + this.mc.getNetHandler().addToSendQueue(new C16PacketClientStatus(C16PacketClientStatus.EnumState.REQUEST_STATS)); + this.buttonList.clear(); + this.buttonList.add(new GuiOptionButton(1, this.width / 2 + 24, this.height / 2 + 74, 80, 20, I18n.format("gui.done", new Object[0]))); ++ this.buttonList.add(button = new GuiButton(2, (width - field_146555_f) / 2 + 24, height / 2 + 74, 125, 20, AchievementPage.getTitle(currentPage))); + } + + protected void actionPerformed(GuiButton button) throws IOException +@@ -75,6 +91,16 @@ + { + this.mc.displayGuiScreen(this.parentScreen); + } ++ ++ if (button.id == 2) ++ { ++ currentPage++; ++ if (currentPage >= AchievementPage.getAchievementPages().size()) ++ { ++ currentPage = -1; ++ } ++ this.button.displayString = AchievementPage.getTitle(currentPage); ++ } + } + } + +@@ -260,7 +286,9 @@ + GlStateManager.depthFunc(518); + GlStateManager.pushMatrix(); + GlStateManager.translate((float)k1, (float)l1, -200.0F); +- GlStateManager.scale(1.0F / this.field_146570_r, 1.0F / this.field_146570_r, 0.0F); ++ // FIXES models rendering weirdly in the acheivements pane ++ // see https://github.com/MinecraftForge/MinecraftForge/commit/1b7ce7592caafb760ec93066184182ae0711e793#commitcomment-10512284 ++ GlStateManager.scale(1.0F / this.field_146570_r, 1.0F / this.field_146570_r, 1.0F); + GlStateManager.enableTexture2D(); + GlStateManager.disableLighting(); + GlStateManager.enableRescaleNormal(); +@@ -341,11 +369,12 @@ + int i4; + int l4; + +- for (i3 = 0; i3 < AchievementList.achievementList.size(); ++i3) ++ List achievementList = (currentPage == -1 ? minecraftAchievements : AchievementPage.getAchievementPage(currentPage).getAchievements()); ++ for (i3 = 0; i3 < achievementList.size(); ++i3) + { +- Achievement achievement1 = (Achievement)AchievementList.achievementList.get(i3); ++ Achievement achievement1 = achievementList.get(i3); + +- if (achievement1.parentAchievement != null) ++ if (achievement1.parentAchievement != null && achievementList.contains(achievement1.parentAchievement)) + { + j3 = achievement1.displayColumn * 24 - k + 11; + k3 = achievement1.displayRow * 24 - l + 11; +@@ -401,9 +430,9 @@ + int i5; + int j5; + +- for (k3 = 0; k3 < AchievementList.achievementList.size(); ++k3) ++ for (k3 = 0; k3 < achievementList.size(); ++k3) + { +- Achievement achievement2 = (Achievement)AchievementList.achievementList.get(k3); ++ Achievement achievement2 = (Achievement)achievementList.get(k3); + l4 = achievement2.displayColumn * 24 - k; + i5 = achievement2.displayRow * 24 - l; + +@@ -445,6 +474,7 @@ + + this.mc.getTextureManager().bindTexture(field_146561_C); + ++ GlStateManager.enableBlend(); // Forge: Specifically enable blend because it is needed here. And we fix Generic RenderItem's leakage of it. + if (achievement2.getSpecial()) + { + this.drawTexturedModalRect(l4 - 2, i5 - 2, 26, 202, 26, 26); +@@ -453,6 +483,7 @@ + { + this.drawTexturedModalRect(l4 - 2, i5 - 2, 0, 202, 26, 26); + } ++ GlStateManager.disableBlend(); //Forge: Cleanup states we set. + + if (!this.statFileWriter.canUnlockAchievement(achievement2)) + { +@@ -461,7 +492,7 @@ + this.itemRender.func_175039_a(false); + } + +- GlStateManager.enableLighting(); ++ GlStateManager.disableLighting(); //Forge: Make sure Lighting is disabled. Fixes MC-33065 + GlStateManager.enableCull(); + this.itemRender.renderItemAndEffectIntoGUI(achievement2.theItemStack, l4 + 3, i5 + 3); + GlStateManager.blendFunc(770, 771); diff --git a/patches.mcp/minecraft/net/minecraft/client/gui/achievement/GuiStats.java.patch b/patches.mcp/minecraft/net/minecraft/client/gui/achievement/GuiStats.java.patch new file mode 100644 index 000000000..2b81ff699 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/gui/achievement/GuiStats.java.patch @@ -0,0 +1,19 @@ +--- ../src-base/minecraft/net/minecraft/client/gui/achievement/GuiStats.java ++++ ../src-work/minecraft/net/minecraft/client/gui/achievement/GuiStats.java +@@ -769,6 +769,7 @@ + super(mcIn, GuiStats.this.width, GuiStats.this.height, 32, GuiStats.this.height - 64, GuiStats.this.fontRendererObj.FONT_HEIGHT * 4); + this.setShowSelectionBox(false); + Iterator iterator = EntityList.entityEggs.values().iterator(); ++ iterator = com.google.common.collect.Iterators.concat(iterator, net.minecraftforge.fml.common.registry.EntityRegistry.getEggs().values().iterator()); + + while (iterator.hasNext()) + { +@@ -806,7 +807,7 @@ + protected void drawSlot(int entryID, int p_180791_2_, int p_180791_3_, int p_180791_4_, int p_180791_5_, int p_180791_6_) + { + EntityList.EntityEggInfo entityegginfo = (EntityList.EntityEggInfo)this.field_148222_l.get(entryID); +- String s = I18n.format("entity." + EntityList.getStringFromID(entityegginfo.spawnedID) + ".name", new Object[0]); ++ String s = I18n.format("entity." + entityegginfo.name + ".name", new Object[0]); + int k1 = GuiStats.this.field_146546_t.readStat(entityegginfo.field_151512_d); + int l1 = GuiStats.this.field_146546_t.readStat(entityegginfo.field_151513_e); + String s1 = I18n.format("stat.entityKills", new Object[] {Integer.valueOf(k1), s}); diff --git a/patches.mcp/minecraft/net/minecraft/client/gui/inventory/GuiContainer.java.patch b/patches.mcp/minecraft/net/minecraft/client/gui/inventory/GuiContainer.java.patch new file mode 100644 index 000000000..c72e0db72 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/gui/inventory/GuiContainer.java.patch @@ -0,0 +1,65 @@ +--- ../src-base/minecraft/net/minecraft/client/gui/inventory/GuiContainer.java ++++ ../src-work/minecraft/net/minecraft/client/gui/inventory/GuiContainer.java +@@ -5,6 +5,7 @@ + import java.util.Iterator; + import java.util.Set; + import net.minecraft.client.Minecraft; ++import net.minecraft.client.gui.FontRenderer; + import net.minecraft.client.gui.GuiScreen; + import net.minecraft.client.renderer.GlStateManager; + import net.minecraft.client.renderer.OpenGlHelper; +@@ -178,8 +179,11 @@ + GlStateManager.translate(0.0F, 0.0F, 32.0F); + this.zLevel = 200.0F; + this.itemRender.zLevel = 200.0F; ++ FontRenderer font = null; ++ if (stack != null) font = stack.getItem().getFontRenderer(stack); ++ if (font == null) font = fontRendererObj; + this.itemRender.renderItemAndEffectIntoGUI(stack, x, y); +- this.itemRender.renderItemOverlayIntoGUI(this.fontRendererObj, stack, x, y - (this.draggedStack == null ? 0 : 8), altText); ++ this.itemRender.renderItemOverlayIntoGUI(font, stack, x, y - (this.draggedStack == null ? 0 : 8), altText); + this.zLevel = 0.0F; + this.itemRender.zLevel = 0.0F; + } +@@ -240,13 +244,12 @@ + + if (itemstack == null) + { +- String s1 = slotIn.getSlotTexture(); ++ TextureAtlasSprite textureatlassprite = slotIn.getBackgroundSprite(); + +- if (s1 != null) ++ if (textureatlassprite != null) + { +- TextureAtlasSprite textureatlassprite = this.mc.getTextureMapBlocks().getAtlasSprite(s1); + GlStateManager.disableLighting(); +- this.mc.getTextureManager().bindTexture(TextureMap.locationBlocksTexture); ++ this.mc.getTextureManager().bindTexture(slotIn.getBackgroundLocation()); + this.drawTexturedModalRect(i, j, textureatlassprite, 16, 16); + GlStateManager.enableLighting(); + flag1 = true; +@@ -465,6 +468,7 @@ + + protected void mouseReleased(int mouseX, int mouseY, int state) + { ++ super.mouseReleased(mouseX, mouseY, state); //Forge, Call parent to release buttons + Slot slot = this.getSlotAtPosition(mouseX, mouseY); + int l = this.guiLeft; + int i1 = this.guiTop; +@@ -698,4 +702,16 @@ + this.mc.thePlayer.closeScreen(); + } + } ++ ++ /* ======================================== FORGE START =====================================*/ ++ ++ /** ++ * Returns the slot that is currently displayed under the mouse. ++ */ ++ public Slot getSlotUnderMouse() ++ { ++ return this.theSlot; ++ } ++ ++ /* ======================================== FORGE END =====================================*/ + } diff --git a/patches.mcp/minecraft/net/minecraft/client/gui/inventory/GuiContainerCreative.java.patch b/patches.mcp/minecraft/net/minecraft/client/gui/inventory/GuiContainerCreative.java.patch new file mode 100644 index 000000000..736edfcb9 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/gui/inventory/GuiContainerCreative.java.patch @@ -0,0 +1,267 @@ +--- ../src-base/minecraft/net/minecraft/client/gui/inventory/GuiContainerCreative.java ++++ ../src-work/minecraft/net/minecraft/client/gui/inventory/GuiContainerCreative.java +@@ -49,6 +49,8 @@ + private boolean field_147057_D; + private CreativeCrafting field_147059_E; + private static final String __OBFID = "CL_00000752"; ++ private static int tabPage = 0; ++ private int maxPages = 0; + + public GuiContainerCreative(EntityPlayer p_i1088_1_) + { +@@ -187,7 +189,7 @@ + return; + } + +- if (itemstack1 != null && itemstack2 != null && itemstack1.isItemEqual(itemstack2)) ++ if (itemstack1 != null && itemstack2 != null && itemstack1.isItemEqual(itemstack2) && ItemStack.areItemStackTagsEqual(itemstack1, itemstack2)) //Forge: Bugfix, Compare NBT data, allow for deletion of enchanted books, MC-12770 + { + if (clickedButton == 0) + { +@@ -262,6 +264,13 @@ + this.setCurrentCreativeTab(CreativeTabs.creativeTabArray[i]); + this.field_147059_E = new CreativeCrafting(this.mc); + this.mc.thePlayer.inventoryContainer.addCraftingToCrafters(this.field_147059_E); ++ int tabCount = CreativeTabs.creativeTabArray.length; ++ if (tabCount > 12) ++ { ++ buttonList.add(new GuiButton(101, guiLeft, guiTop - 50, 20, 20, "<")); ++ buttonList.add(new GuiButton(102, guiLeft + xSize - 20, guiTop - 50, 20, 20, ">")); ++ maxPages = ((tabCount - 12) / 10) + 1; ++ } + } + else + { +@@ -283,7 +292,7 @@ + + protected void keyTyped(char typedChar, int keyCode) throws IOException + { +- if (selectedTabIndex != CreativeTabs.tabAllSearch.getTabIndex()) ++ if (!CreativeTabs.creativeTabArray[selectedTabIndex].hasSearchBar()) + { + if (GameSettings.isKeyDown(this.mc.gameSettings.keyBindChat)) + { +@@ -320,6 +329,15 @@ + { + GuiContainerCreative.ContainerCreative containercreative = (GuiContainerCreative.ContainerCreative)this.inventorySlots; + containercreative.itemList.clear(); ++ ++ CreativeTabs tab = CreativeTabs.creativeTabArray[selectedTabIndex]; ++ if (tab.hasSearchBar() && tab != CreativeTabs.tabAllSearch) ++ { ++ tab.displayAllReleventItems(containercreative.itemList); ++ updateFilteredItems(containercreative); ++ return; ++ } ++ + Iterator iterator = Item.itemRegistry.iterator(); + + while (iterator.hasNext()) +@@ -331,10 +349,17 @@ + item.getSubItems(item, (CreativeTabs)null, containercreative.itemList); + } + } ++ updateFilteredItems(containercreative); ++ } + ++ //split from above for custom search tabs ++ private void updateFilteredItems(GuiContainerCreative.ContainerCreative containercreative) ++ { ++ Iterator iterator; + Enchantment[] aenchantment = Enchantment.enchantmentsBookList; + int j = aenchantment.length; + ++ if (CreativeTabs.creativeTabArray[selectedTabIndex] != CreativeTabs.tabAllSearch) j = 0; //Forge: Don't add enchants to custom tabs. + for (int i = 0; i < j; ++i) + { + Enchantment enchantment = aenchantment[i]; +@@ -385,7 +410,7 @@ + { + CreativeTabs creativetabs = CreativeTabs.creativeTabArray[selectedTabIndex]; + +- if (creativetabs.drawInForegroundOfTab()) ++ if (creativetabs != null && creativetabs.drawInForegroundOfTab()) + { + GlStateManager.disableBlend(); + this.fontRendererObj.drawString(I18n.format(creativetabs.getTranslatedTabLabel(), new Object[0]), 8, 6, 4210752); +@@ -428,7 +453,7 @@ + { + CreativeTabs creativetabs = acreativetabs[k1]; + +- if (this.func_147049_a(creativetabs, l, i1)) ++ if (creativetabs != null && this.func_147049_a(creativetabs, l, i1)) + { + this.setCurrentCreativeTab(creativetabs); + return; +@@ -441,11 +466,13 @@ + + private boolean needsScrollBars() + { ++ if (CreativeTabs.creativeTabArray[selectedTabIndex] == null) return false; + return selectedTabIndex != CreativeTabs.tabInventory.getTabIndex() && CreativeTabs.creativeTabArray[selectedTabIndex].shouldHidePlayerInventory() && ((GuiContainerCreative.ContainerCreative)this.inventorySlots).func_148328_e(); + } + + private void setCurrentCreativeTab(CreativeTabs p_147050_1_) + { ++ if (p_147050_1_ == null) return; + int i = selectedTabIndex; + selectedTabIndex = p_147050_1_.getTabIndex(); + GuiContainerCreative.ContainerCreative containercreative = (GuiContainerCreative.ContainerCreative)this.inventorySlots; +@@ -514,12 +541,14 @@ + + if (this.searchField != null) + { +- if (p_147050_1_ == CreativeTabs.tabAllSearch) ++ if (p_147050_1_.hasSearchBar()) + { + this.searchField.setVisible(true); + this.searchField.setCanLoseFocus(false); + this.searchField.setFocused(true); + this.searchField.setText(""); ++ this.searchField.width = p_147050_1_.getSearchbarWidth(); ++ this.searchField.xPosition = this.guiLeft + (82 /*default left*/ + 89 /*default width*/) - this.searchField.width; + this.updateCreativeSearch(); + } + else +@@ -590,23 +619,45 @@ + + super.drawScreen(mouseX, mouseY, partialTicks); + CreativeTabs[] acreativetabs = CreativeTabs.creativeTabArray; +- int i2 = acreativetabs.length; ++ int start = tabPage * 10; ++ int i2 = Math.min(acreativetabs.length, ((tabPage + 1) * 10) + 2); ++ if (tabPage != 0) start += 2; ++ boolean rendered = false; + +- for (int j2 = 0; j2 < i2; ++j2) ++ for (int j2 = start; j2 < i2; ++j2) + { + CreativeTabs creativetabs = acreativetabs[j2]; + ++ if (creativetabs == null) continue; + if (this.renderCreativeInventoryHoveringText(creativetabs, mouseX, mouseY)) + { ++ rendered = true; + break; + } + } + ++ if (!rendered && renderCreativeInventoryHoveringText(CreativeTabs.tabAllSearch, mouseX, mouseY)) ++ { ++ renderCreativeInventoryHoveringText(CreativeTabs.tabInventory, mouseX, mouseY); ++ } ++ + if (this.field_147064_C != null && selectedTabIndex == CreativeTabs.tabInventory.getTabIndex() && this.isPointInRegion(this.field_147064_C.xDisplayPosition, this.field_147064_C.yDisplayPosition, 16, 16, mouseX, mouseY)) + { + this.drawCreativeTabHoveringText(I18n.format("inventory.binSlot", new Object[0]), mouseX, mouseY); + } + ++ if (maxPages != 0) ++ { ++ String page = String.format("%d / %d", tabPage + 1, maxPages + 1); ++ int width = fontRendererObj.getStringWidth(page); ++ GlStateManager.disableLighting(); ++ this.zLevel = 300.0F; ++ itemRender.zLevel = 300.0F; ++ fontRendererObj.drawString(page, guiLeft + (xSize / 2) - (width / 2), guiTop - 44, -1); ++ this.zLevel = 0.0F; ++ itemRender.zLevel = 0.0F; ++ } ++ + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableLighting(); + } +@@ -675,17 +726,36 @@ + int k = acreativetabs.length; + int l; + +- for (l = 0; l < k; ++l) ++ int start = tabPage * 10; ++ k = Math.min(acreativetabs.length, ((tabPage + 1) * 10 + 2)); ++ if (tabPage != 0) start += 2; ++ ++ for (l = start; l < k; ++l) + { + CreativeTabs creativetabs1 = acreativetabs[l]; + this.mc.getTextureManager().bindTexture(creativeInventoryTabs); + ++ if (creativetabs1 == null) continue; + if (creativetabs1.getTabIndex() != selectedTabIndex) + { + this.func_147051_a(creativetabs1); + } + } + ++ if (tabPage != 0) ++ { ++ if (creativetabs != CreativeTabs.tabAllSearch) ++ { ++ this.mc.getTextureManager().bindTexture(creativeInventoryTabs); ++ func_147051_a(CreativeTabs.tabAllSearch); ++ } ++ if (creativetabs != CreativeTabs.tabInventory) ++ { ++ this.mc.getTextureManager().bindTexture(creativeInventoryTabs); ++ func_147051_a(CreativeTabs.tabInventory); ++ } ++ } ++ + this.mc.getTextureManager().bindTexture(new ResourceLocation("textures/gui/container/creative_inventory/tab_" + creativetabs.getBackgroundImageName())); + this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize); + this.searchField.drawTextBox(); +@@ -700,6 +770,14 @@ + this.drawTexturedModalRect(i1, k + (int)((float)(l - k - 17) * this.currentScroll), 232 + (this.needsScrollBars() ? 0 : 12), 0, 12, 15); + } + ++ if (creativetabs == null || creativetabs.getTabPage() != tabPage) ++ { ++ if (creativetabs != CreativeTabs.tabAllSearch && creativetabs != CreativeTabs.tabInventory) ++ { ++ return; ++ } ++ } ++ + this.func_147051_a(creativetabs); + + if (creativetabs == CreativeTabs.tabInventory) +@@ -710,6 +788,15 @@ + + protected boolean func_147049_a(CreativeTabs p_147049_1_, int p_147049_2_, int p_147049_3_) + { ++ if (p_147049_1_.getTabPage() != tabPage) ++ { ++ if (p_147049_1_ != CreativeTabs.tabAllSearch && ++ p_147049_1_ != CreativeTabs.tabInventory) ++ { ++ return false; ++ } ++ } ++ + int k = p_147049_1_.getTabColumn(); + int l = 28 * k; + byte b0 = 0; +@@ -810,6 +897,8 @@ + } + + GlStateManager.disableLighting(); ++ GlStateManager.color(1F, 1F, 1F); //Forge: Reset color in case Items change it. ++ GlStateManager.enableBlend(); //Forge: Make sure blend is enabled else tabs show a white border. + this.drawTexturedModalRect(l, i1, j, k, 28, b0); + this.zLevel = 100.0F; + this.itemRender.zLevel = 100.0F; +@@ -836,6 +925,15 @@ + { + this.mc.displayGuiScreen(new GuiStats(this, this.mc.thePlayer.getStatFileWriter())); + } ++ ++ if (button.id == 101) ++ { ++ tabPage = Math.max(tabPage - 1, 0); ++ } ++ else if (button.id == 102) ++ { ++ tabPage = Math.min(tabPage + 1, maxPages); ++ } + } + + public int getSelectedTabIndex() diff --git a/patches/minecraft/net/minecraft/client/model/ModelBase.java.patch b/patches.mcp/minecraft/net/minecraft/client/model/ModelBase.java.patch similarity index 90% rename from patches/minecraft/net/minecraft/client/model/ModelBase.java.patch rename to patches.mcp/minecraft/net/minecraft/client/model/ModelBase.java.patch index 04667710a..4f3c8aede 100644 --- a/patches/minecraft/net/minecraft/client/model/ModelBase.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/model/ModelBase.java.patch @@ -7,4 +7,4 @@ -@SideOnly(Side.CLIENT) public abstract class ModelBase { - public float field_78095_p; + public float swingProgress; diff --git a/patches/minecraft/net/minecraft/client/model/ModelBox.java.patch b/patches.mcp/minecraft/net/minecraft/client/model/ModelBox.java.patch similarity index 66% rename from patches/minecraft/net/minecraft/client/model/ModelBox.java.patch rename to patches.mcp/minecraft/net/minecraft/client/model/ModelBox.java.patch index 36bd887e5..ed3cab955 100644 --- a/patches/minecraft/net/minecraft/client/model/ModelBox.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/model/ModelBox.java.patch @@ -7,12 +7,12 @@ -@SideOnly(Side.CLIENT) public class ModelBox { - private PositionTextureVertex[] field_78253_h; + private PositionTextureVertex[] vertexPositions; @@ -82,6 +81,7 @@ } } + @SideOnly(Side.CLIENT) - public void func_178780_a(WorldRenderer p_178780_1_, float p_178780_2_) + public void render(WorldRenderer p_178780_1_, float p_178780_2_) { - for (int i = 0; i < this.field_78254_i.length; ++i) + for (int i = 0; i < this.quadList.length; ++i) diff --git a/patches/minecraft/net/minecraft/client/model/ModelRenderer.java.patch b/patches.mcp/minecraft/net/minecraft/client/model/ModelRenderer.java.patch similarity index 57% rename from patches/minecraft/net/minecraft/client/model/ModelRenderer.java.patch rename to patches.mcp/minecraft/net/minecraft/client/model/ModelRenderer.java.patch index daaf765f9..737fdac2f 100644 --- a/patches/minecraft/net/minecraft/client/model/ModelRenderer.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/model/ModelRenderer.java.patch @@ -7,36 +7,36 @@ -@SideOnly(Side.CLIENT) public class ModelRenderer { - public float field_78801_a; + public float textureWidth; @@ -110,6 +109,7 @@ - this.field_78798_e = p_78793_3_; + this.rotationPointZ = p_78793_3_; } + @SideOnly(Side.CLIENT) - public void func_78785_a(float p_78785_1_) + public void render(float p_78785_1_) { - if (!this.field_78807_k) + if (!this.isHidden) @@ -192,6 +192,7 @@ } } + @SideOnly(Side.CLIENT) - public void func_78791_b(float p_78791_1_) + public void renderWithRotation(float p_78791_1_) { - if (!this.field_78807_k) + if (!this.isHidden) @@ -227,6 +228,7 @@ } } + @SideOnly(Side.CLIENT) - public void func_78794_c(float p_78794_1_) + public void postRender(float p_78794_1_) { - if (!this.field_78807_k) + if (!this.isHidden) @@ -268,6 +270,7 @@ } } + @SideOnly(Side.CLIENT) - private void func_78788_d(float p_78788_1_) + private void compileDisplayList(float p_78788_1_) { - this.field_78811_r = GLAllocation.func_74526_a(1); + this.displayList = GLAllocation.generateDisplayLists(1); diff --git a/patches/minecraft/net/minecraft/client/model/PositionTextureVertex.java.patch b/patches.mcp/minecraft/net/minecraft/client/model/PositionTextureVertex.java.patch similarity index 92% rename from patches/minecraft/net/minecraft/client/model/PositionTextureVertex.java.patch rename to patches.mcp/minecraft/net/minecraft/client/model/PositionTextureVertex.java.patch index dbe66e303..c3d2571d6 100644 --- a/patches/minecraft/net/minecraft/client/model/PositionTextureVertex.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/model/PositionTextureVertex.java.patch @@ -10,4 +10,4 @@ -@SideOnly(Side.CLIENT) public class PositionTextureVertex { - public Vec3 field_78243_a; + public Vec3 vector3D; diff --git a/patches/minecraft/net/minecraft/client/model/TexturedQuad.java.patch b/patches.mcp/minecraft/net/minecraft/client/model/TexturedQuad.java.patch similarity index 89% rename from patches/minecraft/net/minecraft/client/model/TexturedQuad.java.patch rename to patches.mcp/minecraft/net/minecraft/client/model/TexturedQuad.java.patch index 25d766877..54dcb21f4 100644 --- a/patches/minecraft/net/minecraft/client/model/TexturedQuad.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/model/TexturedQuad.java.patch @@ -10,4 +10,4 @@ -@SideOnly(Side.CLIENT) public class TexturedQuad { - public PositionTextureVertex[] field_78239_a; + public PositionTextureVertex[] vertexPositions; diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ChunkProviderClient.java.patch b/patches.mcp/minecraft/net/minecraft/client/multiplayer/ChunkProviderClient.java.patch similarity index 56% rename from patches/minecraft/net/minecraft/client/multiplayer/ChunkProviderClient.java.patch rename to patches.mcp/minecraft/net/minecraft/client/multiplayer/ChunkProviderClient.java.patch index 0b34576b0..faf4f9779 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/ChunkProviderClient.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/multiplayer/ChunkProviderClient.java.patch @@ -1,10 +1,10 @@ --- ../src-base/minecraft/net/minecraft/client/multiplayer/ChunkProviderClient.java +++ ../src-work/minecraft/net/minecraft/client/multiplayer/ChunkProviderClient.java @@ -56,6 +56,7 @@ - Chunk chunk = new Chunk(this.field_73235_d, p_73158_1_, p_73158_2_); - this.field_73236_b.func_76163_a(ChunkCoordIntPair.func_77272_a(p_73158_1_, p_73158_2_), chunk); - this.field_73237_c.add(chunk); + Chunk chunk = new Chunk(this.worldObj, p_73158_1_, p_73158_2_); + this.chunkMapping.add(ChunkCoordIntPair.chunkXZ2Int(p_73158_1_, p_73158_2_), chunk); + this.chunkListing.add(chunk); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.ChunkEvent.Load(chunk)); - chunk.func_177417_c(true); + chunk.setChunkLoaded(true); return chunk; } diff --git a/patches.mcp/minecraft/net/minecraft/client/multiplayer/GuiConnecting.java.patch b/patches.mcp/minecraft/net/minecraft/client/multiplayer/GuiConnecting.java.patch new file mode 100644 index 000000000..74de972f3 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/multiplayer/GuiConnecting.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/client/multiplayer/GuiConnecting.java ++++ ../src-work/minecraft/net/minecraft/client/multiplayer/GuiConnecting.java +@@ -69,7 +69,7 @@ + inetaddress = InetAddress.getByName(ip); + GuiConnecting.this.networkManager = NetworkManager.provideLanClient(inetaddress, port); + GuiConnecting.this.networkManager.setNetHandler(new NetHandlerLoginClient(GuiConnecting.this.networkManager, GuiConnecting.this.mc, GuiConnecting.this.previousGuiScreen)); +- GuiConnecting.this.networkManager.sendPacket(new C00Handshake(47, ip, port, EnumConnectionState.LOGIN)); ++ GuiConnecting.this.networkManager.sendPacket(new C00Handshake(47, ip, port, EnumConnectionState.LOGIN, true)); + GuiConnecting.this.networkManager.sendPacket(new C00PacketLoginStart(GuiConnecting.this.mc.getSession().getProfile())); + } + catch (UnknownHostException unknownhostexception) diff --git a/patches.mcp/minecraft/net/minecraft/client/multiplayer/PlayerControllerMP.java.patch b/patches.mcp/minecraft/net/minecraft/client/multiplayer/PlayerControllerMP.java.patch new file mode 100644 index 000000000..14f4f3c9b --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/multiplayer/PlayerControllerMP.java.patch @@ -0,0 +1,69 @@ +--- ../src-base/minecraft/net/minecraft/client/multiplayer/PlayerControllerMP.java ++++ ../src-work/minecraft/net/minecraft/client/multiplayer/PlayerControllerMP.java +@@ -113,6 +113,12 @@ + } + } + ++ ItemStack stack = mc.thePlayer.getCurrentEquippedItem(); ++ if (stack != null && stack.getItem() != null && stack.getItem().onBlockStartBreak(stack, pos, mc.thePlayer)) ++ { ++ return false; ++ } ++ + if (this.currentGameType.isCreative() && this.mc.thePlayer.getHeldItem() != null && this.mc.thePlayer.getHeldItem().getItem() instanceof ItemSword) + { + return false; +@@ -130,7 +136,7 @@ + else + { + worldclient.playAuxSFX(2001, pos, Block.getStateId(iblockstate)); +- boolean flag = worldclient.setBlockToAir(pos); ++ boolean flag = block1.removedByPlayer(worldclient, pos, mc.thePlayer, false); + + if (flag) + { +@@ -360,11 +366,19 @@ + { + if (this.currentGameType != WorldSettings.GameType.SPECTATOR) + { ++ ++ if (p_178890_3_ != null && ++ p_178890_3_.getItem() != null && ++ p_178890_3_.getItem().onItemUseFirst(p_178890_3_, p_178890_1_, p_178890_2_, p_178890_4_, p_178890_5_, f, f1, f2)) ++ { ++ return true; ++ } ++ + IBlockState iblockstate = p_178890_2_.getBlockState(p_178890_4_); + +- if ((!p_178890_1_.isSneaking() || p_178890_1_.getHeldItem() == null) && iblockstate.getBlock().onBlockActivated(p_178890_2_, p_178890_4_, iblockstate, p_178890_1_, p_178890_5_, f, f1, f2)) ++ if ((!p_178890_1_.isSneaking() || p_178890_1_.getHeldItem() == null || p_178890_1_.getHeldItem().getItem().doesSneakBypassUse(p_178890_2_, p_178890_4_, p_178890_1_))) + { +- flag = true; ++ flag = iblockstate.getBlock().onBlockActivated(p_178890_2_, p_178890_4_, iblockstate, p_178890_1_, p_178890_5_, f, f1, f2); + } + + if (!flag && p_178890_3_ != null && p_178890_3_.getItem() instanceof ItemBlock) +@@ -397,7 +411,9 @@ + } + else + { +- return p_178890_3_.onItemUse(p_178890_1_, p_178890_2_, p_178890_4_, p_178890_5_, f, f1, f2); ++ if (!p_178890_3_.onItemUse(p_178890_1_, p_178890_2_, p_178890_4_, p_178890_5_, f, f1, f2)) return false; ++ if (p_178890_3_.stackSize <= 0) net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(p_178890_1_, p_178890_3_); ++ return true; + } + } + else +@@ -428,9 +444,10 @@ + { + playerIn.inventory.mainInventory[playerIn.inventory.currentItem] = itemstack1; + +- if (itemstack1.stackSize == 0) ++ if (itemstack1.stackSize <= 0) + { + playerIn.inventory.mainInventory[playerIn.inventory.currentItem] = null; ++ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(playerIn, itemstack1); + } + + return true; diff --git a/patches.mcp/minecraft/net/minecraft/client/multiplayer/WorldClient.java.patch b/patches.mcp/minecraft/net/minecraft/client/multiplayer/WorldClient.java.patch new file mode 100644 index 000000000..bd5159cf2 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/multiplayer/WorldClient.java.patch @@ -0,0 +1,17 @@ +--- ../src-base/minecraft/net/minecraft/client/multiplayer/WorldClient.java ++++ ../src-work/minecraft/net/minecraft/client/multiplayer/WorldClient.java +@@ -54,12 +54,13 @@ + super(new SaveHandlerMP(), new WorldInfo(p_i45063_2_, "MpServer"), WorldProvider.getProviderForDimension(p_i45063_3_), p_i45063_5_, true); + this.sendQueue = p_i45063_1_; + this.getWorldInfo().setDifficulty(p_i45063_4_); +- this.setSpawnPoint(new BlockPos(8, 64, 8)); + this.provider.registerWorld(this); ++ this.setSpawnPoint(new BlockPos(8, 64, 8)); //Forge: Moved below registerWorld to prevent NPE in our redirect. + this.chunkProvider = this.createChunkProvider(); + this.mapStorage = new SaveDataMemoryStorage(); + this.calculateInitialSkylight(); + this.calculateInitialWeather(); ++ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.WorldEvent.Load(this)); + } + + public void tick() diff --git a/patches.mcp/minecraft/net/minecraft/client/network/NetHandlerHandshakeMemory.java.patch b/patches.mcp/minecraft/net/minecraft/client/network/NetHandlerHandshakeMemory.java.patch new file mode 100644 index 000000000..c84d9a2d2 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/network/NetHandlerHandshakeMemory.java.patch @@ -0,0 +1,10 @@ +--- ../src-base/minecraft/net/minecraft/client/network/NetHandlerHandshakeMemory.java ++++ ../src-work/minecraft/net/minecraft/client/network/NetHandlerHandshakeMemory.java +@@ -24,6 +24,7 @@ + + public void processHandshake(C00Handshake packetIn) + { ++ if (!net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerHandshake(packetIn, this.networkManager)) return; + this.networkManager.setConnectionState(packetIn.getRequestedState()); + this.networkManager.setNetHandler(new NetHandlerLoginServer(this.mcServer, this.networkManager)); + } diff --git a/patches.mcp/minecraft/net/minecraft/client/network/NetHandlerLoginClient.java.patch b/patches.mcp/minecraft/net/minecraft/client/network/NetHandlerLoginClient.java.patch new file mode 100644 index 000000000..e2dc0d668 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/network/NetHandlerLoginClient.java.patch @@ -0,0 +1,14 @@ +--- ../src-base/minecraft/net/minecraft/client/network/NetHandlerLoginClient.java ++++ ../src-work/minecraft/net/minecraft/client/network/NetHandlerLoginClient.java +@@ -92,7 +92,10 @@ + { + this.gameProfile = packetIn.getProfile(); + this.networkManager.setConnectionState(EnumConnectionState.PLAY); +- this.networkManager.setNetHandler(new NetHandlerPlayClient(this.mc, this.previousGuiScreen, this.networkManager, this.gameProfile)); ++ net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.fmlClientHandshake(this.networkManager); ++ NetHandlerPlayClient nhpc = new NetHandlerPlayClient(this.mc, this.previousGuiScreen, this.networkManager, this.gameProfile); ++ this.networkManager.setNetHandler(nhpc); ++ net.minecraftforge.fml.client.FMLClientHandler.instance().setPlayClient(nhpc); + } + + public void onDisconnect(IChatComponent reason) diff --git a/patches.mcp/minecraft/net/minecraft/client/network/NetHandlerPlayClient.java.patch b/patches.mcp/minecraft/net/minecraft/client/network/NetHandlerPlayClient.java.patch new file mode 100644 index 000000000..14bdf5825 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/network/NetHandlerPlayClient.java.patch @@ -0,0 +1,72 @@ +--- ../src-base/minecraft/net/minecraft/client/network/NetHandlerPlayClient.java ++++ ../src-work/minecraft/net/minecraft/client/network/NetHandlerPlayClient.java +@@ -247,7 +247,7 @@ + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + this.gameController.playerController = new PlayerControllerMP(this.gameController, this); +- this.clientWorldController = new WorldClient(this, new WorldSettings(0L, packetIn.getGameType(), false, packetIn.isHardcoreMode(), packetIn.getWorldType()), packetIn.getDimension(), packetIn.getDifficulty(), this.gameController.mcProfiler); ++ this.clientWorldController = new WorldClient(this, new WorldSettings(0L, packetIn.getGameType(), false, packetIn.isHardcoreMode(), packetIn.getWorldType()), net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.get(getNetworkManager()).getOverrideDimension(packetIn), packetIn.getDifficulty(), this.gameController.mcProfiler); + this.gameController.gameSettings.difficulty = packetIn.getDifficulty(); + this.gameController.loadWorld(this.clientWorldController); + this.gameController.thePlayer.dimension = packetIn.getDimension(); +@@ -410,7 +410,8 @@ + public void handleSpawnExperienceOrb(S11PacketSpawnExperienceOrb packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); +- EntityXPOrb entityxporb = new EntityXPOrb(this.clientWorldController, (double)packetIn.func_148984_d(), (double)packetIn.func_148983_e(), (double)packetIn.func_148982_f(), packetIn.func_148986_g()); ++ EntityXPOrb entityxporb = new EntityXPOrb(this.clientWorldController, (double)packetIn.func_148984_d() / 32.0D, (double)packetIn.func_148983_e() / 32.0D, (double)packetIn.func_148982_f() / 32.0D, packetIn.func_148986_g()); ++ // FORGE: BugFix MC-12013 Wrong XP orb clientside spawn position + entityxporb.serverPosX = packetIn.func_148984_d(); + entityxporb.serverPosY = packetIn.func_148983_e(); + entityxporb.serverPosZ = packetIn.func_148982_f(); +@@ -754,14 +755,16 @@ + public void handleChat(S02PacketChat packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); ++ net.minecraft.util.IChatComponent message = net.minecraftforge.event.ForgeEventFactory.onClientChat(packetIn.func_179841_c(), packetIn.func_148915_c()); ++ if (message == null) return; + + if (packetIn.func_179841_c() == 2) + { +- this.gameController.ingameGUI.func_175188_a(packetIn.func_148915_c(), false); ++ this.gameController.ingameGUI.func_175188_a(message, false); + } + else + { +- this.gameController.ingameGUI.getChatGUI().printChatMessage(packetIn.func_148915_c()); ++ this.gameController.ingameGUI.getChatGUI().printChatMessage(message); + } + } + +@@ -812,6 +815,11 @@ + float f = (float)(packetIn.func_149028_l() * 360) / 256.0F; + float f1 = (float)(packetIn.func_149030_m() * 360) / 256.0F; + EntityLivingBase entitylivingbase = (EntityLivingBase)EntityList.createEntityByID(packetIn.func_149025_e(), this.gameController.theWorld); ++ if (entitylivingbase == null) ++ { ++ net.minecraftforge.fml.common.FMLLog.info("Server attempted to spawn an unknown entity using ID: {0} at ({1}, {2}, {3}) Skipping!", packetIn.func_149025_e(), d0, d1, d2); ++ return; ++ } + entitylivingbase.serverPosX = packetIn.func_149023_f(); + entitylivingbase.serverPosY = packetIn.func_149034_g(); + entitylivingbase.serverPosZ = packetIn.func_149029_h(); +@@ -1137,6 +1145,10 @@ + { + tileentity.readFromNBT(packetIn.getNbtCompound()); + } ++ else ++ { ++ tileentity.onDataPacket(netManager, packetIn); ++ } + } + } + +@@ -1346,7 +1358,7 @@ + + if (entity instanceof EntityLivingBase) + { +- PotionEffect potioneffect = new PotionEffect(packetIn.func_149427_e(), packetIn.func_180755_e(), packetIn.func_149428_f(), false, packetIn.func_179707_f()); ++ PotionEffect potioneffect = new PotionEffect(packetIn.func_149427_e() & 0xff, packetIn.func_180755_e(), packetIn.func_149428_f(), false, packetIn.func_179707_f()); + potioneffect.setPotionDurationMax(packetIn.func_149429_c()); + ((EntityLivingBase)entity).addPotionEffect(potioneffect); + } diff --git a/patches/minecraft/net/minecraft/client/network/OldServerPinger.java.patch b/patches.mcp/minecraft/net/minecraft/client/network/OldServerPinger.java.patch similarity index 52% rename from patches/minecraft/net/minecraft/client/network/OldServerPinger.java.patch rename to patches.mcp/minecraft/net/minecraft/client/network/OldServerPinger.java.patch index f85c95d04..5072ca555 100644 --- a/patches/minecraft/net/minecraft/client/network/OldServerPinger.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/network/OldServerPinger.java.patch @@ -1,10 +1,10 @@ --- ../src-base/minecraft/net/minecraft/client/network/OldServerPinger.java +++ ../src-work/minecraft/net/minecraft/client/network/OldServerPinger.java @@ -148,6 +148,7 @@ - p_147224_1_.func_147407_a((String)null); + server.setBase64EncodedIconData((String)null); } -+ net.minecraftforge.fml.client.FMLClientHandler.instance().bindServerListData(p_147224_1_, serverstatusresponse); - this.field_175092_e = Minecraft.func_71386_F(); - networkmanager.func_179290_a(new C01PacketPing(this.field_175092_e)); ++ net.minecraftforge.fml.client.FMLClientHandler.instance().bindServerListData(server, serverstatusresponse); + this.field_175092_e = Minecraft.getSystemTime(); + networkmanager.sendPacket(new C01PacketPing(this.field_175092_e)); this.field_147403_d = true; diff --git a/patches/minecraft/net/minecraft/client/particle/EffectRenderer.java.patch b/patches.mcp/minecraft/net/minecraft/client/particle/EffectRenderer.java.patch similarity index 51% rename from patches/minecraft/net/minecraft/client/particle/EffectRenderer.java.patch rename to patches.mcp/minecraft/net/minecraft/client/particle/EffectRenderer.java.patch index e8fb36209..5d8ab91b2 100644 --- a/patches/minecraft/net/minecraft/client/particle/EffectRenderer.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/particle/EffectRenderer.java.patch @@ -2,20 +2,20 @@ +++ ../src-work/minecraft/net/minecraft/client/particle/EffectRenderer.java @@ -135,6 +135,7 @@ - public void func_78873_a(EntityFX p_78873_1_) + public void addEffect(EntityFX p_78873_1_) { + if (p_78873_1_ == null) return; //Forge: Prevent modders from being bad and adding nulls causing untraceable NPEs. - int i = p_78873_1_.func_70537_b(); + int i = p_78873_1_.getFXLayer(); int j = p_78873_1_.func_174838_j() != 1.0F ? 0 : 1; @@ -361,7 +362,7 @@ public void func_180533_a(BlockPos p_180533_1_, IBlockState p_180533_2_) { -- if (p_180533_2_.func_177230_c().func_149688_o() != Material.field_151579_a) -+ if (!p_180533_2_.func_177230_c().isAir(field_78878_a, p_180533_1_) && !p_180533_2_.func_177230_c().addDestroyEffects(field_78878_a, p_180533_1_, this)) +- if (p_180533_2_.getBlock().getMaterial() != Material.air) ++ if (!p_180533_2_.getBlock().isAir(worldObj, p_180533_1_) && !p_180533_2_.getBlock().addDestroyEffects(worldObj, p_180533_1_, this)) { - p_180533_2_ = p_180533_2_.func_177230_c().func_176221_a(p_180533_2_, this.field_78878_a, p_180533_1_); + p_180533_2_ = p_180533_2_.getBlock().getActualState(p_180533_2_, this.worldObj, p_180533_1_); byte b0 = 4; @@ -467,4 +468,13 @@ @@ -24,10 +24,10 @@ + + public void addBlockHitEffects(BlockPos pos, net.minecraft.util.MovingObjectPosition target) + { -+ Block block = field_78878_a.func_180495_p(pos).func_177230_c(); -+ if (block != null && !block.addHitEffects(field_78878_a, target, this)) ++ Block block = worldObj.getBlockState(pos).getBlock(); ++ if (block != null && !block.addHitEffects(worldObj, target, this)) + { -+ func_180532_a(pos, target.field_178784_b); ++ addBlockHitEffects(pos, target.sideHit); + } + } } diff --git a/patches/minecraft/net/minecraft/client/renderer/BlockModelRenderer.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/BlockModelRenderer.java.patch similarity index 100% rename from patches/minecraft/net/minecraft/client/renderer/BlockModelRenderer.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/BlockModelRenderer.java.patch diff --git a/patches/minecraft/net/minecraft/client/renderer/BlockModelShapes.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/BlockModelShapes.java.patch similarity index 100% rename from patches/minecraft/net/minecraft/client/renderer/BlockModelShapes.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/BlockModelShapes.java.patch diff --git a/patches/minecraft/net/minecraft/client/renderer/BlockRendererDispatcher.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/BlockRendererDispatcher.java.patch similarity index 57% rename from patches/minecraft/net/minecraft/client/renderer/BlockRendererDispatcher.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/BlockRendererDispatcher.java.patch index e52101bb6..5890b09e3 100644 --- a/patches/minecraft/net/minecraft/client/renderer/BlockRendererDispatcher.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/BlockRendererDispatcher.java.patch @@ -2,17 +2,17 @@ +++ ../src-work/minecraft/net/minecraft/client/renderer/BlockRendererDispatcher.java @@ -24,7 +24,7 @@ { - private BlockModelShapes field_175028_a; - private final GameSettings field_175026_b; -- private final BlockModelRenderer field_175027_c = new BlockModelRenderer(); -+ private final BlockModelRenderer field_175027_c = new net.minecraftforge.client.model.pipeline.ForgeBlockModelRenderer(); - private final ChestRenderer field_175024_d = new ChestRenderer(); - private final BlockFluidRenderer field_175025_e = new BlockFluidRenderer(); + private BlockModelShapes blockModelShapes; + private final GameSettings gameSettings; +- private final BlockModelRenderer blockModelRenderer = new BlockModelRenderer(); ++ private final BlockModelRenderer blockModelRenderer = new net.minecraftforge.client.model.pipeline.ForgeBlockModelRenderer(); + private final ChestRenderer chestRenderer = new ChestRenderer(); + private final BlockFluidRenderer fluidRenderer = new BlockFluidRenderer(); private static final String __OBFID = "CL_00002520"; @@ -49,6 +49,24 @@ { - p_175020_1_ = block.func_176221_a(p_175020_1_, p_175020_4_, p_175020_2_); - IBakedModel ibakedmodel = this.field_175028_a.func_178125_b(p_175020_1_); + p_175020_1_ = block.getActualState(p_175020_1_, p_175020_4_, p_175020_2_); + IBakedModel ibakedmodel = this.blockModelShapes.getModelForState(p_175020_1_); + + if(ibakedmodel instanceof net.minecraftforge.client.model.ISmartBlockModel) + { @@ -24,18 +24,18 @@ + net.minecraftforge.client.ForgeHooksClient.setRenderLayer(layer); + + IBakedModel targetLayer = ((net.minecraftforge.client.model.ISmartBlockModel)ibakedmodel).handleBlockState(extendedState); -+ IBakedModel damageModel = (new SimpleBakedModel.Builder(targetLayer, p_175020_3_)).func_177645_b(); -+ this.field_175027_c.func_178259_a(p_175020_4_, damageModel, p_175020_1_, p_175020_2_, Tessellator.func_178181_a().func_178180_c()); ++ IBakedModel damageModel = (new SimpleBakedModel.Builder(targetLayer, p_175020_3_)).makeBakedModel(); ++ this.blockModelRenderer.renderModel(p_175020_4_, damageModel, p_175020_1_, p_175020_2_, Tessellator.getInstance().getWorldRenderer()); + } + } + return; + } + - IBakedModel ibakedmodel1 = (new SimpleBakedModel.Builder(ibakedmodel, p_175020_3_)).func_177645_b(); - this.field_175027_c.func_178259_a(p_175020_4_, ibakedmodel1, p_175020_1_, p_175020_2_, Tessellator.func_178181_a().func_178180_c()); + IBakedModel ibakedmodel1 = (new SimpleBakedModel.Builder(ibakedmodel, p_175020_3_)).makeBakedModel(); + this.blockModelRenderer.renderModel(p_175020_4_, ibakedmodel1, p_175020_1_, p_175020_2_, Tessellator.getInstance().getWorldRenderer()); } @@ -129,6 +147,12 @@ - ibakedmodel = ((WeightedBakedModel)ibakedmodel).func_177564_a(MathHelper.func_180186_a(p_175022_3_)); + ibakedmodel = ((WeightedBakedModel)ibakedmodel).getAlternativeModel(MathHelper.getPositionRandom(p_175022_3_)); } + if(ibakedmodel instanceof net.minecraftforge.client.model.ISmartBlockModel) diff --git a/patches.mcp/minecraft/net/minecraft/client/renderer/EntityRenderer.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/EntityRenderer.java.patch new file mode 100644 index 000000000..24ac4e8e1 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/EntityRenderer.java.patch @@ -0,0 +1,176 @@ +--- ../src-base/minecraft/net/minecraft/client/renderer/EntityRenderer.java ++++ ../src-work/minecraft/net/minecraft/client/renderer/EntityRenderer.java +@@ -403,7 +403,7 @@ + + if (d3 < d2 || d2 == 0.0D) + { +- if (entity1 == entity.ridingEntity) ++ if (entity1 == entity.ridingEntity && !entity.canRiderInteract()) + { + if (d2 == 0.0D) + { +@@ -556,14 +556,8 @@ + { + BlockPos blockpos = new BlockPos(entity); + IBlockState iblockstate = this.mc.theWorld.getBlockState(blockpos); +- Block block = iblockstate.getBlock(); ++ net.minecraftforge.client.ForgeHooksClient.orientBedCamera(this.mc.theWorld, blockpos, iblockstate, entity); + +- if (block == Blocks.bed) +- { +- int j = ((EnumFacing)iblockstate.getValue(BlockBed.FACING)).getHorizontalIndex(); +- GlStateManager.rotate((float)(j * 90), 0.0F, 1.0F, 0.0F); +- } +- + GlStateManager.rotate(entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * p_78467_1_ + 180.0F, 0.0F, -1.0F, 0.0F); + GlStateManager.rotate(entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * p_78467_1_, -1.0F, 0.0F, 0.0F); + } +@@ -630,17 +624,20 @@ + + if (!this.mc.gameSettings.debugCamEnable) + { +- GlStateManager.rotate(entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * p_78467_1_, 1.0F, 0.0F, 0.0F); +- ++ float yaw = entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * p_78467_1_ + 180.0F; ++ float pitch = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * p_78467_1_; ++ float roll = 0.0F; + if (entity instanceof EntityAnimal) + { + EntityAnimal entityanimal = (EntityAnimal)entity; +- GlStateManager.rotate(entityanimal.prevRotationYawHead + (entityanimal.rotationYawHead - entityanimal.prevRotationYawHead) * p_78467_1_ + 180.0F, 0.0F, 1.0F, 0.0F); ++ yaw = entityanimal.prevRotationYawHead + (entityanimal.rotationYawHead - entityanimal.prevRotationYawHead) * p_78467_1_ + 180.0F; + } +- else +- { +- GlStateManager.rotate(entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * p_78467_1_ + 180.0F, 0.0F, 1.0F, 0.0F); +- } ++ Block block = ActiveRenderInfo.getBlockAtEntityViewpoint(this.mc.theWorld, entity, p_78467_1_); ++ net.minecraftforge.client.event.EntityViewRenderEvent.CameraSetup event = new net.minecraftforge.client.event.EntityViewRenderEvent.CameraSetup(this, entity, block, p_78467_1_, yaw, pitch, roll); ++ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event); ++ GlStateManager.rotate(event.roll, 0.0F, 0.0F, 1.0F); ++ GlStateManager.rotate(event.pitch, 1.0F, 0.0F, 0.0F); ++ GlStateManager.rotate(event.yaw, 0.0F, 1.0F, 0.0F); + } + + GlStateManager.translate(0.0F, -f1, 0.0F); +@@ -1081,7 +1078,7 @@ + + try + { +- this.mc.currentScreen.drawScreen(l, i1, partialTicks); ++ net.minecraftforge.client.ForgeHooksClient.drawScreen(this.mc.currentScreen, l, i1, partialTicks); + } + catch (Throwable throwable) + { +@@ -1145,7 +1142,7 @@ + + if (this.mc.playerController.getCurrentGameType() == WorldSettings.GameType.SPECTATOR) + { +- flag = block.hasTileEntity() && this.mc.theWorld.getTileEntity(blockpos) instanceof IInventory; ++ flag = block.hasTileEntity(this.mc.theWorld.getBlockState(blockpos)) && this.mc.theWorld.getTileEntity(blockpos) instanceof IInventory; + } + else + { +@@ -1296,7 +1293,9 @@ + GlStateManager.pushMatrix(); + RenderHelper.enableStandardItemLighting(); + this.mc.mcProfiler.endStartSection("entities"); ++ net.minecraftforge.client.ForgeHooksClient.setRenderPass(0); + renderglobal.renderEntities(entity, frustum, partialTicks); ++ net.minecraftforge.client.ForgeHooksClient.setRenderPass(0); + RenderHelper.disableStandardItemLighting(); + this.disableLightmap(); + GlStateManager.matrixMode(5888); +@@ -1308,6 +1307,7 @@ + entityplayer = (EntityPlayer)entity; + GlStateManager.disableAlpha(); + this.mc.mcProfiler.endStartSection("outline"); ++ if (!net.minecraftforge.client.ForgeHooksClient.onDrawBlockHighlight(renderglobal, entityplayer, mc.objectMouseOver, 0, entityplayer.getHeldItem(), partialTicks)) + renderglobal.drawSelectionBox(entityplayer, this.mc.objectMouseOver, 0, partialTicks); + GlStateManager.enableAlpha(); + } +@@ -1321,6 +1321,7 @@ + entityplayer = (EntityPlayer)entity; + GlStateManager.disableAlpha(); + this.mc.mcProfiler.endStartSection("outline"); ++ if (!net.minecraftforge.client.ForgeHooksClient.onDrawBlockHighlight(renderglobal, entityplayer, mc.objectMouseOver, 0, entityplayer.getHeldItem(), partialTicks)) + renderglobal.drawSelectionBox(entityplayer, this.mc.objectMouseOver, 0, partialTicks); + GlStateManager.enableAlpha(); + } +@@ -1373,6 +1374,16 @@ + renderglobal.renderBlockLayer(EnumWorldBlockLayer.TRANSLUCENT, (double)partialTicks, pass, entity); + } + ++ if (!this.debugView) //Only render if render pass 0 happens as well. ++ { ++ RenderHelper.enableStandardItemLighting(); ++ this.mc.mcProfiler.endStartSection("entities"); ++ net.minecraftforge.client.ForgeHooksClient.setRenderPass(1); ++ renderglobal.renderEntities(entity, frustum, partialTicks); ++ net.minecraftforge.client.ForgeHooksClient.setRenderPass(-1); ++ RenderHelper.disableStandardItemLighting(); ++ } ++ + GlStateManager.shadeModel(7424); + GlStateManager.depthMask(true); + GlStateManager.enableCull(); +@@ -1385,8 +1396,12 @@ + this.renderCloudsCheck(renderglobal, partialTicks, pass); + } + ++ this.mc.mcProfiler.endStartSection("forge_render_last"); ++ net.minecraftforge.client.ForgeHooksClient.dispatchRenderLast(renderglobal, partialTicks); ++ + this.mc.mcProfiler.endStartSection("hand"); + ++ if (!net.minecraftforge.client.ForgeHooksClient.renderFirstPersonHand(renderglobal, partialTicks, pass)) + if (this.renderHand) + { + GlStateManager.clear(256); +@@ -1498,6 +1513,13 @@ + + protected void renderRainSnow(float partialTicks) + { ++ net.minecraftforge.client.IRenderHandler renderer = this.mc.theWorld.provider.getWeatherRenderer(); ++ if (renderer != null) ++ { ++ renderer.render(partialTicks, this.mc.theWorld, mc); ++ return; ++ } ++ + float f1 = this.mc.theWorld.getRainStrength(partialTicks); + + if (f1 > 0.0F) +@@ -1835,6 +1857,13 @@ + this.fogColorBlue = f8; + } + ++ net.minecraftforge.client.event.EntityViewRenderEvent.FogColors event = new net.minecraftforge.client.event.EntityViewRenderEvent.FogColors(this, entity, block, partialTicks, this.fogColorRed, this.fogColorGreen, this.fogColorBlue); ++ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event); ++ ++ this.fogColorRed = event.red; ++ this.fogColorGreen = event.green; ++ this.fogColorBlue = event.blue; ++ + GlStateManager.clearColor(this.fogColorRed, this.fogColorGreen, this.fogColorBlue, 0.0F); + } + +@@ -1854,6 +1883,10 @@ + Block block = ActiveRenderInfo.getBlockAtEntityViewpoint(this.mc.theWorld, entity, partialTicks); + float f1; + ++ float hook = net.minecraftforge.client.ForgeHooksClient.getFogDensity(this, entity, block, partialTicks, 0.1F); ++ if (hook >= 0) ++ GlStateManager.setFogDensity(hook); ++ else + if (entity instanceof EntityLivingBase && ((EntityLivingBase)entity).isPotionActive(Potion.blindness)) + { + f1 = 5.0F; +@@ -1931,6 +1964,7 @@ + GlStateManager.setFogStart(f1 * 0.05F); + GlStateManager.setFogEnd(Math.min(f1, 192.0F) * 0.5F); + } ++ net.minecraftforge.client.ForgeHooksClient.onFogRender(this, entity, block, partialTicks, p_78468_1_, f1); + } + + GlStateManager.enableColorMaterial(); diff --git a/patches/minecraft/net/minecraft/client/renderer/InventoryEffectRenderer.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/InventoryEffectRenderer.java.patch similarity index 57% rename from patches/minecraft/net/minecraft/client/renderer/InventoryEffectRenderer.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/InventoryEffectRenderer.java.patch index 63e6a2672..c9a499ab0 100644 --- a/patches/minecraft/net/minecraft/client/renderer/InventoryEffectRenderer.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/InventoryEffectRenderer.java.patch @@ -1,11 +1,11 @@ --- ../src-base/minecraft/net/minecraft/client/renderer/InventoryEffectRenderer.java +++ ../src-work/minecraft/net/minecraft/client/renderer/InventoryEffectRenderer.java @@ -83,6 +83,8 @@ - this.func_73729_b(i + 6, j + 7, 0 + l % 8 * 18, 198 + l / 8 * 18, 18, 18); + this.drawTexturedModalRect(i + 6, j + 7, 0 + l % 8 * 18, 198 + l / 8 * 18, 18, 18); } -+ potion.renderInventoryEffect(i, j, potioneffect, field_146297_k); ++ potion.renderInventoryEffect(i, j, potioneffect, mc); + if (!potion.shouldRenderInvText(potioneffect)) continue; - String s1 = I18n.func_135052_a(potion.func_76393_a(), new Object[0]); + String s1 = I18n.format(potion.getName(), new Object[0]); - if (potioneffect.func_76458_c() == 1) + if (potioneffect.getAmplifier() == 1) diff --git a/patches/minecraft/net/minecraft/client/renderer/ItemModelMesher.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/ItemModelMesher.java.patch similarity index 77% rename from patches/minecraft/net/minecraft/client/renderer/ItemModelMesher.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/ItemModelMesher.java.patch index dbe123b28..a71a73e5c 100644 --- a/patches/minecraft/net/minecraft/client/renderer/ItemModelMesher.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/ItemModelMesher.java.patch @@ -6,9 +6,9 @@ + if(ibakedmodel instanceof net.minecraftforge.client.model.ISmartItemModel) + { -+ ibakedmodel = ((net.minecraftforge.client.model.ISmartItemModel)ibakedmodel).handleItemState(p_178089_1_); ++ ibakedmodel = ((net.minecraftforge.client.model.ISmartItemModel)ibakedmodel).handleItemState(stack); + } + if (ibakedmodel == null) { - ibakedmodel = this.field_178090_d.func_174951_a(); + ibakedmodel = this.modelManager.getMissingModel(); diff --git a/patches.mcp/minecraft/net/minecraft/client/renderer/ItemRenderer.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/ItemRenderer.java.patch new file mode 100644 index 000000000..cee99ddff --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/ItemRenderer.java.patch @@ -0,0 +1,65 @@ +--- ../src-base/minecraft/net/minecraft/client/renderer/ItemRenderer.java ++++ ../src-work/minecraft/net/minecraft/client/renderer/ItemRenderer.java +@@ -308,7 +308,7 @@ + + if (this.itemToRender != null) + { +- if (this.itemToRender.getItem() == Items.filled_map) ++ if (this.itemToRender.getItem() instanceof net.minecraft.item.ItemMap) + { + this.func_178097_a(entityplayersp, f3, f1, f2); + } +@@ -359,7 +359,8 @@ + + if (this.mc.thePlayer.isEntityInsideOpaqueBlock()) + { +- IBlockState iblockstate = this.mc.theWorld.getBlockState(new BlockPos(this.mc.thePlayer)); ++ BlockPos blockpos = new BlockPos(this.mc.thePlayer); ++ IBlockState iblockstate = this.mc.theWorld.getBlockState(blockpos); + EntityPlayerSP entityplayersp = this.mc.thePlayer; + + for (int i = 0; i < 8; ++i) +@@ -367,7 +368,7 @@ + double d0 = entityplayersp.posX + (double)(((float)((i >> 0) % 2) - 0.5F) * entityplayersp.width * 0.8F); + double d1 = entityplayersp.posY + (double)(((float)((i >> 1) % 2) - 0.5F) * 0.1F); + double d2 = entityplayersp.posZ + (double)(((float)((i >> 2) % 2) - 0.5F) * entityplayersp.width * 0.8F); +- BlockPos blockpos = new BlockPos(d0, d1 + (double)entityplayersp.getEyeHeight(), d2); ++ blockpos = new BlockPos(d0, d1 + (double)entityplayersp.getEyeHeight(), d2); + IBlockState iblockstate1 = this.mc.theWorld.getBlockState(blockpos); + + if (iblockstate1.getBlock().isVisuallyOpaque()) +@@ -378,6 +379,7 @@ + + if (iblockstate.getBlock().getRenderType() != -1) + { ++ if (!net.minecraftforge.event.ForgeEventFactory.renderBlockOverlay(mc.thePlayer, p_78447_1_, net.minecraftforge.client.event.RenderBlockOverlayEvent.OverlayType.BLOCK, iblockstate, blockpos)) + this.func_178108_a(p_78447_1_, this.mc.getBlockRendererDispatcher().getBlockModelShapes().getTexture(iblockstate)); + } + } +@@ -386,11 +388,13 @@ + { + if (this.mc.thePlayer.isInsideOfMaterial(Material.water)) + { ++ if (!net.minecraftforge.event.ForgeEventFactory.renderWaterOverlay(mc.thePlayer, p_78447_1_)) + this.renderWaterOverlayTexture(p_78447_1_); + } + + if (this.mc.thePlayer.isBurning()) + { ++ if (!net.minecraftforge.event.ForgeEventFactory.renderFireOverlay(mc.thePlayer, p_78447_1_)) + this.renderFireInFirstPerson(p_78447_1_); + } + } +@@ -507,6 +511,12 @@ + { + if (!this.itemToRender.getIsItemStackEqual(itemstack)) + { ++ if (!this.itemToRender.getItem().shouldCauseReequipAnimation(this.itemToRender, itemstack, equippedItemSlot != entityplayersp.inventory.currentItem)) ++ { ++ this.itemToRender = itemstack; ++ this.equippedItemSlot = entityplayersp.inventory.currentItem; ++ return; ++ } + flag = true; + } + } diff --git a/patches/minecraft/net/minecraft/client/renderer/OpenGlHelper.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/OpenGlHelper.java.patch similarity index 75% rename from patches/minecraft/net/minecraft/client/renderer/OpenGlHelper.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/OpenGlHelper.java.patch index c10aed1e5..22beb0e0f 100644 --- a/patches/minecraft/net/minecraft/client/renderer/OpenGlHelper.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/OpenGlHelper.java.patch @@ -1,14 +1,14 @@ --- ../src-base/minecraft/net/minecraft/client/renderer/OpenGlHelper.java +++ ../src-work/minecraft/net/minecraft/client/renderer/OpenGlHelper.java @@ -78,6 +78,10 @@ - public static int field_148826_e; + public static int GL_STATIC_DRAW; private static final String __OBFID = "CL_00001179"; + /* Stores the last values sent into setLightmapTextureCoords */ + public static float lastBrightnessX = 0.0f; + public static float lastBrightnessY = 0.0f; + - public static void func_77474_a() + public static void initializeTextures() { ContextCapabilities contextcapabilities = GLContext.getCapabilities(); @@ -813,6 +817,12 @@ @@ -16,11 +16,11 @@ GL13.glMultiTexCoord2f(p_77475_0_, p_77475_1_, p_77475_2_); } + -+ if (p_77475_0_ == field_77476_b) ++ if (p_77475_0_ == lightmapTexUnit) + { + lastBrightnessX = p_77475_1_; + lastBrightnessY = p_77475_2_; + } } - public static void func_148821_a(int p_148821_0_, int p_148821_1_, int p_148821_2_, int p_148821_3_) + public static void glBlendFunc(int p_148821_0_, int p_148821_1_, int p_148821_2_, int p_148821_3_) diff --git a/patches.mcp/minecraft/net/minecraft/client/renderer/RenderGlobal.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/RenderGlobal.java.patch new file mode 100644 index 000000000..15582220b --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/RenderGlobal.java.patch @@ -0,0 +1,134 @@ +--- ../src-base/minecraft/net/minecraft/client/renderer/RenderGlobal.java ++++ ../src-work/minecraft/net/minecraft/client/renderer/RenderGlobal.java +@@ -517,8 +517,10 @@ + + public void renderEntities(Entity p_180446_1_, ICamera p_180446_2_, float partialTicks) + { ++ int pass = net.minecraftforge.client.MinecraftForgeClient.getRenderPass(); + if (this.renderEntitiesStartupCounter > 0) + { ++ if (pass > 0) return; + --this.renderEntitiesStartupCounter; + } + else +@@ -529,9 +531,12 @@ + this.theWorld.theProfiler.startSection("prepare"); + TileEntityRendererDispatcher.instance.cacheActiveRenderInfo(this.theWorld, this.mc.getTextureManager(), this.mc.fontRendererObj, this.mc.getRenderViewEntity(), partialTicks); + this.renderManager.cacheActiveRenderInfo(this.theWorld, this.mc.fontRendererObj, this.mc.getRenderViewEntity(), this.mc.pointedEntity, this.mc.gameSettings, partialTicks); ++ if (pass == 0) // no indentation to shrink patch ++ { + this.countEntitiesTotal = 0; + this.countEntitiesRendered = 0; + this.countEntitiesHidden = 0; ++ } + Entity entity1 = this.mc.getRenderViewEntity(); + double d3 = entity1.lastTickPosX + (entity1.posX - entity1.lastTickPosX) * (double)partialTicks; + double d4 = entity1.lastTickPosY + (entity1.posY - entity1.lastTickPosY) * (double)partialTicks; +@@ -543,13 +548,17 @@ + this.mc.entityRenderer.enableLightmap(); + this.theWorld.theProfiler.endStartSection("global"); + List list = this.theWorld.getLoadedEntityList(); ++ if (pass == 0) // no indentation to shrink patch ++ { + this.countEntitiesTotal = list.size(); ++ } + int i; + Entity entity2; + + for (i = 0; i < this.theWorld.weatherEffects.size(); ++i) + { + entity2 = (Entity)this.theWorld.weatherEffects.get(i); ++ if (!entity2.shouldRenderInPass(pass)) continue; + ++this.countEntitiesRendered; + + if (entity2.isInRangeToRender3d(d0, d1, d2)) +@@ -571,6 +580,7 @@ + for (i = 0; i < list.size(); ++i) + { + entity2 = (Entity)list.get(i); ++ if (!entity2.shouldRenderInPass(pass)) continue; + boolean flag = this.mc.getRenderViewEntity() instanceof EntityLivingBase && ((EntityLivingBase)this.mc.getRenderViewEntity()).isPlayerSleeping(); + boolean flag1 = entity2.isInRangeToRender3d(d0, d1, d2) && (entity2.ignoreFrustumCheck || p_180446_2_.isBoundingBoxInFrustum(entity2.getEntityBoundingBox()) || entity2.riddenByEntity == this.mc.thePlayer) && entity2 instanceof EntityPlayer; + +@@ -605,6 +615,7 @@ + while (iterator2.hasNext()) + { + Entity entity3 = (Entity)iterator2.next(); ++ if (!entity3.shouldRenderInPass(pass)) continue; + boolean flag2 = this.renderManager.shouldRender(entity3, p_180446_2_, d0, d1, d2) || entity3.riddenByEntity == this.mc.thePlayer; + + if (flag2) +@@ -640,6 +651,7 @@ + while (iterator1.hasNext()) + { + tileentity = (TileEntity)iterator1.next(); ++ if (!tileentity.shouldRenderInPass(pass) || !p_180446_2_.isBoundingBoxInFrustum(tileentity.getRenderBoundingBox())) continue; + TileEntityRendererDispatcher.instance.renderTileEntity(tileentity, partialTicks, -1); + } + } +@@ -671,7 +683,7 @@ + + Block block = this.theWorld.getBlockState(blockpos).getBlock(); + +- if (tileentity != null && (block instanceof BlockChest || block instanceof BlockEnderChest || block instanceof BlockSign || block instanceof BlockSkull)) ++ if (tileentity != null && tileentity.shouldRenderInPass(pass) && tileentity.canRenderBreaking() && p_180446_2_.isBoundingBoxInFrustum(tileentity.getRenderBoundingBox())) + { + TileEntityRendererDispatcher.instance.renderTileEntity(tileentity, partialTicks, destroyblockprogress.getPartialBlockDamage()); + } +@@ -1151,6 +1163,12 @@ + + public void renderSky(float partialTicks, int pass) + { ++ net.minecraftforge.client.IRenderHandler renderer = this.theWorld.provider.getSkyRenderer(); ++ if (renderer != null) ++ { ++ renderer.render(partialTicks, theWorld, mc); ++ return; ++ } + if (this.mc.theWorld.provider.getDimensionId() == 1) + { + this.renderSkyEnd(); +@@ -1381,6 +1399,12 @@ + + public void renderClouds(float p_180447_1_, int p_180447_2_) + { ++ net.minecraftforge.client.IRenderHandler renderer = this.mc.theWorld.provider.getCloudRenderer(); ++ if (renderer != null) ++ { ++ renderer.render(p_180447_1_, this.mc.theWorld, mc); ++ return; ++ } + if (this.mc.theWorld.provider.isSurfaceWorld()) + { + if (this.mc.gameSettings.fancyGraphics) +@@ -1805,8 +1829,11 @@ + double d4 = (double)blockpos.getY() - d1; + double d5 = (double)blockpos.getZ() - d2; + Block block = this.theWorld.getBlockState(blockpos).getBlock(); ++ TileEntity te = this.theWorld.getTileEntity(blockpos); ++ boolean hasBreak = block instanceof BlockChest || block instanceof BlockEnderChest || block instanceof BlockSign || block instanceof BlockSkull; ++ if (!hasBreak) hasBreak = te != null && te.canRenderBreaking(); + +- if (!(block instanceof BlockChest) && !(block instanceof BlockEnderChest) && !(block instanceof BlockSign) && !(block instanceof BlockSkull)) ++ if (!hasBreak) + { + if (d3 * d3 + d4 * d4 + d5 * d5 > 1024.0D) + { +@@ -1949,13 +1976,16 @@ + if (recordName != null) + { + ItemRecord itemrecord = ItemRecord.getRecord(recordName); ++ ResourceLocation resource = null; + + if (itemrecord != null) + { + this.mc.ingameGUI.setRecordPlayingMessage(itemrecord.getRecordNameLocal()); ++ resource = itemrecord.getRecordResource(recordName); + } + +- PositionedSoundRecord positionedsoundrecord = PositionedSoundRecord.create(new ResourceLocation(recordName), (float)blockPosIn.getX(), (float)blockPosIn.getY(), (float)blockPosIn.getZ()); ++ if (resource == null) resource = new ResourceLocation(recordName); ++ PositionedSoundRecord positionedsoundrecord = PositionedSoundRecord.create(resource, (float)blockPosIn.getX(), (float)blockPosIn.getY(), (float)blockPosIn.getZ()); + this.mapSoundPositions.put(blockPosIn, positionedsoundrecord); + this.mc.getSoundHandler().playSound(positionedsoundrecord); + } diff --git a/patches/minecraft/net/minecraft/client/renderer/WorldRenderer.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/WorldRenderer.java.patch similarity index 70% rename from patches/minecraft/net/minecraft/client/renderer/WorldRenderer.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/WorldRenderer.java.patch index 6d9a3666c..2f3b084ad 100644 --- a/patches/minecraft/net/minecraft/client/renderer/WorldRenderer.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/WorldRenderer.java.patch @@ -6,9 +6,9 @@ + public void checkAndGrow() + { -+ if (this.field_179008_i >= this.field_179009_s - this.field_179011_q.func_177338_f()) ++ if (this.rawBufferIndex >= this.bufferSize - this.vertexFormat.getNextOffset()) + { -+ this.func_178983_e(2097152); ++ this.growBuffer(2097152); + } + } + diff --git a/patches/minecraft/net/minecraft/client/renderer/WorldVertexBufferUploader.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/WorldVertexBufferUploader.java.patch similarity index 65% rename from patches/minecraft/net/minecraft/client/renderer/WorldVertexBufferUploader.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/WorldVertexBufferUploader.java.patch index bf398cbd5..548fa5d6d 100644 --- a/patches/minecraft/net/minecraft/client/renderer/WorldVertexBufferUploader.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/WorldVertexBufferUploader.java.patch @@ -6,65 +6,65 @@ { + // moved to VertexFormatElement.preDraw vertexformatelement = (VertexFormatElement)iterator.next(); -- enumusage = vertexformatelement.func_177375_c(); -- k = vertexformatelement.func_177367_b().func_177397_c(); -- int l = vertexformatelement.func_177369_e(); +- enumusage = vertexformatelement.getUsage(); +- k = vertexformatelement.getType().getGlConstant(); +- int l = vertexformatelement.getIndex(); - -- switch (WorldVertexBufferUploader.SwitchEnumUsage.field_178958_a[enumusage.ordinal()]) +- switch (WorldVertexBufferUploader.SwitchEnumUsage.VALUES[enumusage.ordinal()]) - { - case 1: -- bytebuffer.position(vertexformatelement.func_177373_a()); -- GL11.glVertexPointer(vertexformatelement.func_177370_d(), k, j, bytebuffer); +- bytebuffer.position(vertexformatelement.getOffset()); +- GL11.glVertexPointer(vertexformatelement.getElementCount(), k, j, bytebuffer); - GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY); - break; - case 2: -- bytebuffer.position(vertexformatelement.func_177373_a()); -- OpenGlHelper.func_77472_b(OpenGlHelper.field_77478_a + l); -- GL11.glTexCoordPointer(vertexformatelement.func_177370_d(), k, j, bytebuffer); +- bytebuffer.position(vertexformatelement.getOffset()); +- OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit + l); +- GL11.glTexCoordPointer(vertexformatelement.getElementCount(), k, j, bytebuffer); - GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY); -- OpenGlHelper.func_77472_b(OpenGlHelper.field_77478_a); +- OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit); - break; - case 3: -- bytebuffer.position(vertexformatelement.func_177373_a()); -- GL11.glColorPointer(vertexformatelement.func_177370_d(), k, j, bytebuffer); +- bytebuffer.position(vertexformatelement.getOffset()); +- GL11.glColorPointer(vertexformatelement.getElementCount(), k, j, bytebuffer); - GL11.glEnableClientState(GL11.GL_COLOR_ARRAY); - break; - case 4: -- bytebuffer.position(vertexformatelement.func_177373_a()); +- bytebuffer.position(vertexformatelement.getOffset()); - GL11.glNormalPointer(k, j, bytebuffer); - GL11.glEnableClientState(GL11.GL_NORMAL_ARRAY); - } -+ vertexformatelement.func_177375_c().preDraw(vertexformatelement, j, bytebuffer); ++ vertexformatelement.getUsage().preDraw(vertexformatelement, j, bytebuffer); } - GL11.glDrawArrays(p_178177_1_.func_178979_i(), 0, p_178177_1_.func_178989_h()); + GL11.glDrawArrays(p_178177_1_.getDrawMode(), 0, p_178177_1_.getVertexCount()); @@ -65,27 +39,9 @@ while (iterator.hasNext()) { + // moved to VertexFormatElement.postDraw vertexformatelement = (VertexFormatElement)iterator.next(); -- enumusage = vertexformatelement.func_177375_c(); -- k = vertexformatelement.func_177369_e(); +- enumusage = vertexformatelement.getUsage(); +- k = vertexformatelement.getIndex(); - -- switch (WorldVertexBufferUploader.SwitchEnumUsage.field_178958_a[enumusage.ordinal()]) +- switch (WorldVertexBufferUploader.SwitchEnumUsage.VALUES[enumusage.ordinal()]) - { - case 1: - GL11.glDisableClientState(GL11.GL_VERTEX_ARRAY); - break; - case 2: -- OpenGlHelper.func_77472_b(OpenGlHelper.field_77478_a + k); +- OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit + k); - GL11.glDisableClientState(GL11.GL_TEXTURE_COORD_ARRAY); -- OpenGlHelper.func_77472_b(OpenGlHelper.field_77478_a); +- OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit); - break; - case 3: - GL11.glDisableClientState(GL11.GL_COLOR_ARRAY); -- GlStateManager.func_179117_G(); +- GlStateManager.resetColor(); - break; - case 4: - GL11.glDisableClientState(GL11.GL_NORMAL_ARRAY); - } -+ vertexformatelement.func_177375_c().postDraw(vertexformatelement, j, bytebuffer); ++ vertexformatelement.getUsage().postDraw(vertexformatelement, j, bytebuffer); } } diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/BakedQuad.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/block/model/BakedQuad.java.patch similarity index 81% rename from patches/minecraft/net/minecraft/client/renderer/block/model/BakedQuad.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/block/model/BakedQuad.java.patch index 656fce0df..97dc4cd38 100644 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/BakedQuad.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/block/model/BakedQuad.java.patch @@ -8,6 +8,6 @@ +public class BakedQuad implements net.minecraftforge.client.model.pipeline.IVertexProducer { + @Override public void pipe(net.minecraftforge.client.model.pipeline.IVertexConsumer consumer) { net.minecraftforge.client.model.pipeline.LightUtil.putBakedQuad(consumer, this); } - protected final int[] field_178215_a; - protected final int field_178213_b; - protected final EnumFacing field_178214_c; + protected final int[] vertexData; + protected final int tintIndex; + protected final EnumFacing face; diff --git a/patches.mcp/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.java.patch new file mode 100644 index 000000000..530af67af --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.java.patch @@ -0,0 +1,68 @@ +--- ../src-base/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.java ++++ ../src-work/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.java +@@ -22,6 +22,11 @@ + + public BakedQuad makeBakedQuad(Vector3f posFrom, Vector3f posTo, BlockPartFace face, TextureAtlasSprite sprite, EnumFacing facing, ModelRotation modelRotationIn, BlockPartRotation partRotation, boolean uvLocked, boolean shade) + { ++ return makeBakedQuad(posFrom, posTo, face, sprite, facing, (net.minecraftforge.client.model.ITransformation)modelRotationIn, partRotation, uvLocked, shade); ++ } ++ ++ public BakedQuad makeBakedQuad(Vector3f posFrom, Vector3f posTo, BlockPartFace face, TextureAtlasSprite sprite, EnumFacing facing, net.minecraftforge.client.model.ITransformation modelRotationIn, BlockPartRotation partRotation, boolean uvLocked, boolean shade) ++ { + int[] aint = this.makeQuadVertexData(face, sprite, facing, this.getPositionsDiv16(posFrom, posTo), modelRotationIn, partRotation, uvLocked, shade); + EnumFacing enumfacing1 = getFacingFromVertexData(aint); + +@@ -35,11 +40,17 @@ + this.func_178408_a(aint, enumfacing1); + } + ++ net.minecraftforge.client.ForgeHooksClient.fillNormal(aint, enumfacing1); + return new BakedQuad(aint, face.tintIndex, enumfacing1); + } + + private int[] makeQuadVertexData(BlockPartFace p_178405_1_, TextureAtlasSprite p_178405_2_, EnumFacing p_178405_3_, float[] p_178405_4_, ModelRotation p_178405_5_, BlockPartRotation p_178405_6_, boolean p_178405_7_, boolean shade) + { ++ return makeQuadVertexData(p_178405_1_, p_178405_2_, p_178405_3_, p_178405_4_, (net.minecraftforge.client.model.ITransformation)p_178405_5_, p_178405_6_, p_178405_7_, shade); ++ } ++ ++ private int[] makeQuadVertexData(BlockPartFace p_178405_1_, TextureAtlasSprite p_178405_2_, EnumFacing p_178405_3_, float[] p_178405_4_, net.minecraftforge.client.model.ITransformation p_178405_5_, BlockPartRotation p_178405_6_, boolean p_178405_7_, boolean shade) ++ { + int[] aint = new int[28]; + + for (int i = 0; i < 4; ++i) +@@ -90,7 +101,12 @@ + + private void fillVertexData(int[] faceData, int vertexIndex, EnumFacing facing, BlockPartFace partFace, float[] p_178402_5_, TextureAtlasSprite sprite, ModelRotation modelRotationIn, BlockPartRotation partRotation, boolean uvLocked, boolean shade) + { +- EnumFacing enumfacing1 = modelRotationIn.rotateFace(facing); ++ fillVertexData(faceData, vertexIndex, facing, partFace, p_178402_5_, sprite, (net.minecraftforge.client.model.ITransformation)modelRotationIn, partRotation, uvLocked, shade); ++ } ++ ++ private void fillVertexData(int[] faceData, int vertexIndex, EnumFacing facing, BlockPartFace partFace, float[] p_178402_5_, TextureAtlasSprite sprite, net.minecraftforge.client.model.ITransformation modelRotationIn, BlockPartRotation partRotation, boolean uvLocked, boolean shade) ++ { ++ EnumFacing enumfacing1 = modelRotationIn.rotate(facing); + int j = shade ? this.getFaceShadeColor(enumfacing1) : -1; + EnumFaceDirection.VertexInformation vertexinformation = EnumFaceDirection.getFacing(facing).func_179025_a(vertexIndex); + Vector3d vector3d = new Vector3d((double)p_178402_5_[vertexinformation.field_179184_a], (double)p_178402_5_[vertexinformation.field_179182_b], (double)p_178402_5_[vertexinformation.field_179183_c]); +@@ -156,14 +172,19 @@ + + public int rotateVertex(Vector3d position, EnumFacing facing, int vertexIndex, ModelRotation modelRotationIn, boolean uvLocked) + { ++ return rotateVertex(position, facing, vertexIndex, (net.minecraftforge.client.model.ITransformation)modelRotationIn, uvLocked); ++ } ++ ++ public int rotateVertex(Vector3d position, EnumFacing facing, int vertexIndex, net.minecraftforge.client.model.ITransformation modelRotationIn, boolean uvLocked) ++ { + if (modelRotationIn == ModelRotation.X0_Y0) + { + return vertexIndex; + } + else + { +- this.rotateScale(position, new Vector3d(0.5D, 0.5D, 0.5D), modelRotationIn.getMatrix4d(), new Vector3d(1.0D, 1.0D, 1.0D)); +- return modelRotationIn.rotateVertex(facing, vertexIndex); ++ net.minecraftforge.client.ForgeHooksClient.transform(position, modelRotationIn.getMatrix()); ++ return modelRotationIn.rotate(facing, vertexIndex); + } + } + diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/ItemCameraTransforms.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/block/model/ItemCameraTransforms.java.patch similarity index 67% rename from patches/minecraft/net/minecraft/client/renderer/block/model/ItemCameraTransforms.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/block/model/ItemCameraTransforms.java.patch index 48a2d8d09..5641c8a60 100644 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/ItemCameraTransforms.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/block/model/ItemCameraTransforms.java.patch @@ -11,4 +11,4 @@ +@Deprecated public class ItemCameraTransforms { - public static final ItemCameraTransforms field_178357_a = new ItemCameraTransforms(ItemTransformVec3f.field_178366_a, ItemTransformVec3f.field_178366_a, ItemTransformVec3f.field_178366_a, ItemTransformVec3f.field_178366_a); + public static final ItemCameraTransforms DEFAULT = new ItemCameraTransforms(ItemTransformVec3f.DEFAULT, ItemTransformVec3f.DEFAULT, ItemTransformVec3f.DEFAULT, ItemTransformVec3f.DEFAULT); diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/ItemTransformVec3f.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/block/model/ItemTransformVec3f.java.patch similarity index 77% rename from patches/minecraft/net/minecraft/client/renderer/block/model/ItemTransformVec3f.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/block/model/ItemTransformVec3f.java.patch index ef42bfbc9..81410fc8c 100644 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/ItemTransformVec3f.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/block/model/ItemTransformVec3f.java.patch @@ -13,6 +13,6 @@ +public class ItemTransformVec3f implements net.minecraftforge.client.model.IModelState { + public net.minecraftforge.client.model.TRSRTransformation apply(net.minecraftforge.client.model.IModelPart part) { return new net.minecraftforge.client.model.TRSRTransformation(this); } - public static final ItemTransformVec3f field_178366_a = new ItemTransformVec3f(new Vector3f(), new Vector3f(), new Vector3f(1.0F, 1.0F, 1.0F)); - public final Vector3f field_178364_b; - public final Vector3f field_178365_c; + public static final ItemTransformVec3f DEFAULT = new ItemTransformVec3f(new Vector3f(), new Vector3f(), new Vector3f(1.0F, 1.0F, 1.0F)); + public final Vector3f rotation; + public final Vector3f translation; diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/ModelBlockDefinition.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/block/model/ModelBlockDefinition.java.patch similarity index 53% rename from patches/minecraft/net/minecraft/client/renderer/block/model/ModelBlockDefinition.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/block/model/ModelBlockDefinition.java.patch index 3e878fba9..63ac31ca9 100644 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/ModelBlockDefinition.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/block/model/ModelBlockDefinition.java.patch @@ -2,28 +2,28 @@ +++ ../src-work/minecraft/net/minecraft/client/renderer/block/model/ModelBlockDefinition.java @@ -32,7 +32,7 @@ - public static ModelBlockDefinition func_178331_a(Reader p_178331_0_) + public static ModelBlockDefinition parseFromReader(Reader p_178331_0_) { -- return (ModelBlockDefinition)field_178333_a.fromJson(p_178331_0_, ModelBlockDefinition.class); -+ return net.minecraftforge.client.model.BlockStateLoader.load(p_178331_0_, field_178333_a); +- return (ModelBlockDefinition)GSON.fromJson(p_178331_0_, ModelBlockDefinition.class); ++ return net.minecraftforge.client.model.BlockStateLoader.load(p_178331_0_, GSON); } public ModelBlockDefinition(Collection p_i46221_1_) @@ -178,11 +178,17 @@ - return this.field_178437_a; + return this.modelLocation; } + @Deprecated - public ModelRotation func_178432_b() + public ModelRotation getRotation() { - return this.field_178435_b; + return this.modelRotation; } + public net.minecraftforge.client.model.IModelState getState() + { -+ return this.field_178435_b; ++ return this.modelRotation; + } + - public boolean func_178433_c() + public boolean isUvLocked() { - return this.field_178436_c; + return this.uvLock; diff --git a/patches.mcp/minecraft/net/minecraft/client/renderer/block/statemap/StateMap.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/block/statemap/StateMap.java.patch new file mode 100644 index 000000000..543153388 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/block/statemap/StateMap.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/client/renderer/block/statemap/StateMap.java ++++ ../src-work/minecraft/net/minecraft/client/renderer/block/statemap/StateMap.java +@@ -40,7 +40,7 @@ + } + else + { +- s = this.property.getName((Comparable)linkedhashmap.remove(this.property)); ++ s = String.format("%s:%s", ((ResourceLocation)Block.blockRegistry.getNameForObject(p_178132_1_.getBlock())).getResourceDomain(), this.property.getName((Comparable)linkedhashmap.remove(this.property))); + } + + if (this.suffix != null) diff --git a/patches/minecraft/net/minecraft/client/renderer/chunk/RenderChunk.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/chunk/RenderChunk.java.patch similarity index 75% rename from patches/minecraft/net/minecraft/client/renderer/chunk/RenderChunk.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/chunk/RenderChunk.java.patch index 4de9b1458..b176e3567 100644 --- a/patches/minecraft/net/minecraft/client/renderer/chunk/RenderChunk.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/chunk/RenderChunk.java.patch @@ -4,33 +4,33 @@ return; } -- regionrendercache = new RegionRenderCache(this.field_178588_d, blockpos.func_177982_a(-1, -1, -1), blockpos1.func_177982_a(1, 1, 1), 1); -+ regionrendercache = createRegionRenderCache(this.field_178588_d, blockpos.func_177982_a(-1, -1, -1), blockpos1.func_177982_a(1, 1, 1), 1); - p_178581_4_.func_178543_a(compiledchunk); +- regionrendercache = new RegionRenderCache(this.world, blockpos.add(-1, -1, -1), blockpos1.add(1, 1, 1), 1); ++ regionrendercache = createRegionRenderCache(this.world, blockpos.add(-1, -1, -1), blockpos1.add(1, 1, 1), 1); + p_178581_4_.setCompiledChunk(compiledchunk); } finally @@ -150,7 +150,7 @@ visgraph.func_178606_a(mutableblockpos); } -- if (block.func_149716_u()) +- if (block.hasTileEntity()) + if (block.hasTileEntity(iblockstate)) { - TileEntity tileentity = regionrendercache.func_175625_s(new BlockPos(mutableblockpos)); + TileEntity tileentity = regionrendercache.getTileEntity(new BlockPos(mutableblockpos)); @@ -160,7 +160,9 @@ } } -- EnumWorldBlockLayer enumworldblocklayer1 = block.func_180664_k(); +- EnumWorldBlockLayer enumworldblocklayer1 = block.getBlockLayer(); + for(EnumWorldBlockLayer enumworldblocklayer1 : EnumWorldBlockLayer.values()) { + if(!block.canRenderInLayer(enumworldblocklayer1)) continue; + net.minecraftforge.client.ForgeHooksClient.setRenderLayer(enumworldblocklayer1); int i = enumworldblocklayer1.ordinal(); - if (block.func_149645_b() != -1) + if (block.getRenderType() != -1) @@ -178,6 +180,7 @@ - compiledchunk.func_178486_a(enumworldblocklayer1); + compiledchunk.setLayerUsed(enumworldblocklayer1); } } + } @@ -39,7 +39,7 @@ EnumWorldBlockLayer[] aenumworldblocklayer = EnumWorldBlockLayer.values(); @@ -374,4 +377,24 @@ { - return this.field_178593_n; + return this.needsUpdate; } + + /* ======================================== FORGE START =====================================*/ diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/RenderEntityItem.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/entity/RenderEntityItem.java.patch similarity index 63% rename from patches/minecraft/net/minecraft/client/renderer/entity/RenderEntityItem.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/entity/RenderEntityItem.java.patch index ce3002981..35faeffcb 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/RenderEntityItem.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/entity/RenderEntityItem.java.patch @@ -1,12 +1,12 @@ --- ../src-base/minecraft/net/minecraft/client/renderer/entity/RenderEntityItem.java +++ ../src-work/minecraft/net/minecraft/client/renderer/entity/RenderEntityItem.java @@ -42,7 +42,7 @@ - boolean flag = p_177077_9_.func_177556_c(); + boolean flag = p_177077_9_.isGui3d(); int i = this.func_177078_a(itemstack); float f1 = 0.25F; -- float f2 = MathHelper.func_76126_a(((float)p_177077_1_.func_174872_o() + p_177077_8_) / 10.0F + p_177077_1_.field_70290_d) * 0.1F + 0.1F; -+ float f2 = shouldBob() ? MathHelper.func_76126_a(((float)p_177077_1_.func_174872_o() + p_177077_8_) / 10.0F + p_177077_1_.field_70290_d) * 0.1F + 0.1F : 0.0F; - GlStateManager.func_179109_b((float)p_177077_2_, (float)p_177077_4_ + f2 + 0.25F, (float)p_177077_6_); +- float f2 = MathHelper.sin(((float)p_177077_1_.getAge() + p_177077_8_) / 10.0F + p_177077_1_.hoverStart) * 0.1F + 0.1F; ++ float f2 = shouldBob() ? MathHelper.sin(((float)p_177077_1_.getAge() + p_177077_8_) / 10.0F + p_177077_1_.hoverStart) * 0.1F + 0.1F : 0.0F; + GlStateManager.translate((float)p_177077_2_, (float)p_177077_4_ + f2 + 0.25F, (float)p_177077_6_); float f3; @@ -129,6 +129,14 @@ @@ -19,14 +19,14 @@ + float f2 = (this.field_177079_e.nextFloat() * 2.0F - 1.0F) * 0.15F; + float f3 = (this.field_177079_e.nextFloat() * 2.0F - 1.0F) * 0.15F; + float f4 = (this.field_177079_e.nextFloat() * 2.0F - 1.0F) * 0.15F; -+ GlStateManager.func_179109_b(f2, f3, 0); ++ GlStateManager.translate(f2, f3, 0); + } - this.field_177080_a.func_180454_a(itemstack, ibakedmodel); - GlStateManager.func_179109_b(0.0F, 0.0F, 0.046875F); + this.field_177080_a.renderItem(itemstack, ibakedmodel); + GlStateManager.translate(0.0F, 0.0F, 0.046875F); } @@ -161,4 +169,25 @@ { - this.func_177075_a((EntityItem)p_76986_1_, p_76986_2_, p_76986_4_, p_76986_6_, p_76986_8_, p_76986_9_); + this.func_177075_a((EntityItem)entity, x, y, z, p_76986_8_, partialTicks); } + + /*==================================== FORGE START ===========================================*/ diff --git a/patches.mcp/minecraft/net/minecraft/client/renderer/entity/RenderItem.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/entity/RenderItem.java.patch new file mode 100644 index 000000000..715166828 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/entity/RenderItem.java.patch @@ -0,0 +1,128 @@ +--- ../src-base/minecraft/net/minecraft/client/renderer/entity/RenderItem.java ++++ ../src-work/minecraft/net/minecraft/client/renderer/entity/RenderItem.java +@@ -83,7 +83,7 @@ + public RenderItem(TextureManager textureManager, ModelManager modelManager) + { + this.textureManager = textureManager; +- this.itemModelMesher = new ItemModelMesher(modelManager); ++ this.itemModelMesher = new net.minecraftforge.client.ItemModelMesherForge(modelManager); + this.registerItems(); + } + +@@ -222,7 +222,7 @@ + BakedQuad bakedquad; + int j; + +- for (Iterator iterator = quads.iterator(); iterator.hasNext(); this.renderQuad(renderer, bakedquad, j)) ++ for (Iterator iterator = quads.iterator(); iterator.hasNext(); net.minecraftforge.client.model.pipeline.LightUtil.renderQuadColor(renderer, bakedquad, j)) + { + bakedquad = (BakedQuad)iterator.next(); + j = color; +@@ -302,6 +302,10 @@ + modelresourcelocation = new ModelResourceLocation("bow_pulling_0", "inventory"); + } + } ++ else ++ { ++ modelresourcelocation = item.getModel(stack, entityplayer, entityplayer.getItemInUseCount()); ++ } + + if (modelresourcelocation != null) + { +@@ -314,6 +318,11 @@ + + protected void applyTransform(ItemTransformVec3f transform) + { ++ applyVanillaTransform(transform); ++ } ++ ++ public static void applyVanillaTransform(ItemTransformVec3f transform) ++ { + if (transform != ItemTransformVec3f.DEFAULT) + { + GlStateManager.translate(transform.translation.x + debugItemOffsetX, transform.translation.y + debugItemOffsetY, transform.translation.z + debugItemOffsetZ); +@@ -335,23 +344,7 @@ + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); + GlStateManager.pushMatrix(); + +- switch (RenderItem.SwitchTransformType.TRANSFORM_LOOKUP[cameraTransformType.ordinal()]) +- { +- case 1: +- default: +- break; +- case 2: +- this.applyTransform(model.getItemCameraTransforms().thirdPerson); +- break; +- case 3: +- this.applyTransform(model.getItemCameraTransforms().firstPerson); +- break; +- case 4: +- this.applyTransform(model.getItemCameraTransforms().head); +- break; +- case 5: +- this.applyTransform(model.getItemCameraTransforms().gui); +- } ++ model = net.minecraftforge.client.ForgeHooksClient.handleCameraTransforms(model, cameraTransformType); + + this.renderItem(stack, model); + GlStateManager.popMatrix(); +@@ -374,7 +367,7 @@ + GlStateManager.blendFunc(770, 771); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.setupGuiTransform(x, y, ibakedmodel.isGui3d()); +- this.applyTransform(ibakedmodel.getItemCameraTransforms().gui); ++ ibakedmodel = net.minecraftforge.client.ForgeHooksClient.handleCameraTransforms(ibakedmodel, ItemCameraTransforms.TransformType.GUI); + this.renderItem(stack, ibakedmodel); + GlStateManager.disableAlpha(); + GlStateManager.disableRescaleNormal(); +@@ -485,10 +478,11 @@ + GlStateManager.enableDepth(); + } + +- if (stack.isItemDamaged()) ++ if (stack.getItem().showDurabilityBar(stack)) + { +- int j1 = (int)Math.round(13.0D - (double)stack.getItemDamage() * 13.0D / (double)stack.getMaxDamage()); +- int k = (int)Math.round(255.0D - (double)stack.getItemDamage() * 255.0D / (double)stack.getMaxDamage()); ++ double health = stack.getItem().getDurabilityForDisplay(stack); ++ int j1 = (int)Math.round(13.0D - health * 13.0D); ++ int k = (int)Math.round(255.0D - health * 255.0D); + GlStateManager.disableLighting(); + GlStateManager.disableDepth(); + GlStateManager.disableTexture2D(); +@@ -501,7 +495,7 @@ + this.drawRect(worldrenderer, xPosition + 2, yPosition + 13, 13, 2, 0); + this.drawRect(worldrenderer, xPosition + 2, yPosition + 13, 12, 1, i1); + this.drawRect(worldrenderer, xPosition + 2, yPosition + 13, j1, 1, l); +- GlStateManager.enableBlend(); ++ //GlStateManager.enableBlend(); // Forge: Disable Bled because it screws with a lot of things down the line. + GlStateManager.enableAlpha(); + GlStateManager.enableTexture2D(); + GlStateManager.enableLighting(); +@@ -1072,12 +1066,26 @@ + this.registerBlock(Blocks.brown_mushroom_block, BlockHugeMushroom.EnumType.ALL_INSIDE.getMetadata(), "brown_mushroom_block"); + this.registerBlock(Blocks.red_mushroom_block, BlockHugeMushroom.EnumType.ALL_INSIDE.getMetadata(), "red_mushroom_block"); + this.registerBlock(Blocks.dragon_egg, "dragon_egg"); ++ net.minecraftforge.client.model.ModelLoader.onRegisterItems(this.itemModelMesher); + } + + public void onResourceManagerReload(IResourceManager resourceManager) + { + this.itemModelMesher.rebuildCache(); + } ++ /*==================================== FORGE START ===========================================* / ++ private static RenderItem instance; ++ /** ++ * Returns a single lazy loaded instance of RenderItem, for use in mods who ++ * don't care about the interaction of other objects on the current state of the RenderItem they are using. ++ * @return A global instance of RenderItem ++ * / ++ public static RenderItem getInstance() ++ { ++ if (instance == null) instance = new RenderItem(); ++ return instance; ++ } ++ /*==================================== FORGE END =============================================*/ + + @SideOnly(Side.CLIENT) + diff --git a/patches.mcp/minecraft/net/minecraft/client/renderer/entity/RenderManager.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/entity/RenderManager.java.patch new file mode 100644 index 000000000..7513d3e08 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/entity/RenderManager.java.patch @@ -0,0 +1,25 @@ +--- ../src-base/minecraft/net/minecraft/client/renderer/entity/RenderManager.java ++++ ../src-work/minecraft/net/minecraft/client/renderer/entity/RenderManager.java +@@ -193,6 +193,10 @@ + this.skinMap.put("default", this.field_178637_m); + this.skinMap.put("slim", new RenderPlayer(this, true)); + } ++ ++ public Map getSkinMap() { ++ return (Map) java.util.Collections.unmodifiableMap(skinMap); ++ } + + public void setRenderPosition(double p_178628_1_, double p_178628_3_, double p_178628_5_) + { +@@ -241,9 +245,9 @@ + IBlockState iblockstate = worldIn.getBlockState(new BlockPos(p_180597_3_)); + Block block = iblockstate.getBlock(); + +- if (block == Blocks.bed) ++ if (block.isBed(worldIn, new BlockPos(p_180597_3_), (EntityLivingBase)p_180597_3_)) + { +- int i = ((EnumFacing)iblockstate.getValue(BlockBed.FACING)).getHorizontalIndex(); ++ int i = block.getBedDirection(worldIn, new BlockPos(p_180597_3_)).getHorizontalIndex(); + this.playerViewY = (float)(i * 90 + 180); + this.playerViewX = 0.0F; + } diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/RenderPlayer.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/entity/RenderPlayer.java.patch similarity index 81% rename from patches/minecraft/net/minecraft/client/renderer/entity/RenderPlayer.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/entity/RenderPlayer.java.patch index 73c21a8cb..5d1296a17 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/RenderPlayer.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/entity/RenderPlayer.java.patch @@ -5,12 +5,12 @@ public void func_180596_a(AbstractClientPlayer p_180596_1_, double p_180596_2_, double p_180596_4_, double p_180596_6_, float p_180596_8_, float p_180596_9_) { + if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderPlayerEvent.Pre(p_180596_1_, this, p_180596_9_, p_180596_2_, p_180596_4_, p_180596_6_))) return; - if (!p_180596_1_.func_175144_cb() || this.field_76990_c.field_78734_h == p_180596_1_) + if (!p_180596_1_.isUser() || this.renderManager.livingPlayer == p_180596_1_) { double d3 = p_180596_4_; @@ -65,6 +66,7 @@ this.func_177137_d(p_180596_1_); - super.func_76986_a((EntityLivingBase)p_180596_1_, p_180596_2_, d3, p_180596_6_, p_180596_8_, p_180596_9_); + super.doRender((EntityLivingBase)p_180596_1_, p_180596_2_, d3, p_180596_6_, p_180596_8_, p_180596_9_); } + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderPlayerEvent.Post(p_180596_1_, this, p_180596_9_, p_180596_2_, p_180596_4_, p_180596_6_)); } diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/RenderVillager.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/entity/RenderVillager.java.patch similarity index 65% rename from patches/minecraft/net/minecraft/client/renderer/entity/RenderVillager.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/entity/RenderVillager.java.patch index 899e6b69b..3b71964a4 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/RenderVillager.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/entity/RenderVillager.java.patch @@ -2,10 +2,10 @@ +++ ../src-work/minecraft/net/minecraft/client/renderer/entity/RenderVillager.java @@ -48,7 +48,7 @@ case 4: - return field_110906_m; + return butcherVillagerTextures; default: -- return field_110903_f; -+ return net.minecraftforge.fml.common.registry.VillagerRegistry.getVillagerSkin(p_110775_1_.func_70946_n(), field_110903_f); +- return villagerTextures; ++ return net.minecraftforge.fml.common.registry.VillagerRegistry.getVillagerSkin(entity.getProfession(), villagerTextures); } } diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/RendererLivingEntity.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/entity/RendererLivingEntity.java.patch similarity index 52% rename from patches/minecraft/net/minecraft/client/renderer/entity/RendererLivingEntity.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/entity/RendererLivingEntity.java.patch index 8ec1b5cbc..f151beeef 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/RendererLivingEntity.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/entity/RendererLivingEntity.java.patch @@ -1,7 +1,7 @@ --- ../src-base/minecraft/net/minecraft/client/renderer/entity/RendererLivingEntity.java +++ ../src-work/minecraft/net/minecraft/client/renderer/entity/RendererLivingEntity.java @@ -40,6 +40,9 @@ - protected boolean field_177098_i = false; + protected boolean renderOutlines = false; private static final String __OBFID = "CL_00001012"; + public static float NAME_TAG_RANGE = 64.0f; @@ -12,30 +12,30 @@ super(p_i46156_1_); @@ -83,6 +86,7 @@ - public void func_76986_a(EntityLivingBase p_76986_1_, double p_76986_2_, double p_76986_4_, double p_76986_6_, float p_76986_8_, float p_76986_9_) + public void doRender(EntityLivingBase entity, double x, double y, double z, float p_76986_8_, float partialTicks) { -+ if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderLivingEvent.Pre(p_76986_1_, this, p_76986_2_, p_76986_4_, p_76986_6_))) return; - GlStateManager.func_179094_E(); - GlStateManager.func_179129_p(); - this.field_77045_g.field_78095_p = this.func_77040_d(p_76986_1_, p_76986_9_); ++ if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderLivingEvent.Pre(entity, this, x, y, z))) return; + GlStateManager.pushMatrix(); + GlStateManager.disableCull(); + this.mainModel.swingProgress = this.getSwingProgress(entity, partialTicks); @@ -193,6 +197,7 @@ { - super.func_76986_a(p_76986_1_, p_76986_2_, p_76986_4_, p_76986_6_, p_76986_8_, p_76986_9_); + super.doRender(entity, x, y, z, p_76986_8_, partialTicks); } -+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderLivingEvent.Post(p_76986_1_, this, p_76986_2_, p_76986_4_, p_76986_6_)); ++ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderLivingEvent.Post(entity, this, x, y, z)); } protected boolean func_177088_c(EntityLivingBase p_177088_1_) @@ -472,10 +477,11 @@ - public void func_77033_b(EntityLivingBase p_77033_1_, double p_77033_2_, double p_77033_4_, double p_77033_6_) + public void passSpecialRender(EntityLivingBase p_77033_1_, double p_77033_2_, double p_77033_4_, double p_77033_6_) { + if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderLivingEvent.Specials.Pre(p_77033_1_, this, p_77033_2_, p_77033_4_, p_77033_6_))) return; - if (this.func_110813_b(p_77033_1_)) + if (this.canRenderName(p_77033_1_)) { - double d3 = p_77033_1_.func_70068_e(this.field_76990_c.field_78734_h); -- float f = p_77033_1_.func_70093_af() ? 32.0F : 64.0F; -+ float f = p_77033_1_.func_70093_af() ? NAME_TAG_RANGE_SNEAK : NAME_TAG_RANGE; + double d3 = p_77033_1_.getDistanceSqToEntity(this.renderManager.livingPlayer); +- float f = p_77033_1_.isSneaking() ? 32.0F : 64.0F; ++ float f = p_77033_1_.isSneaking() ? NAME_TAG_RANGE_SNEAK : NAME_TAG_RANGE; if (d3 < (double)(f * f)) { @@ -46,4 +46,4 @@ + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderLivingEvent.Specials.Post(p_77033_1_, this, p_77033_2_, p_77033_4_, p_77033_6_)); } - protected boolean func_110813_b(EntityLivingBase p_110813_1_) + protected boolean canRenderName(EntityLivingBase targetEntity) diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/layers/LayerArmorBase.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/entity/layers/LayerArmorBase.java.patch similarity index 62% rename from patches/minecraft/net/minecraft/client/renderer/entity/layers/LayerArmorBase.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/entity/layers/LayerArmorBase.java.patch index 18df6de02..bfa7ac052 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/layers/LayerArmorBase.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/entity/layers/LayerArmorBase.java.patch @@ -2,40 +2,40 @@ +++ ../src-work/minecraft/net/minecraft/client/renderer/entity/layers/LayerArmorBase.java @@ -56,31 +56,32 @@ ModelBase modelbase = this.func_177175_a(p_177182_9_); - modelbase.func_178686_a(this.field_177190_a.func_177087_b()); - modelbase.func_78086_a(p_177182_1_, p_177182_2_, p_177182_3_, p_177182_4_); + modelbase.setModelAttributes(this.field_177190_a.getMainModel()); + modelbase.setLivingAnimations(p_177182_1_, p_177182_2_, p_177182_3_, p_177182_4_); + modelbase = net.minecraftforge.client.ForgeHooksClient.getArmorModel(p_177182_1_, itemstack, p_177182_9_, modelbase); this.func_177179_a(modelbase, p_177182_9_); boolean flag = this.func_177180_b(p_177182_9_); -- this.field_177190_a.func_110776_a(this.func_177181_a(itemarmor, flag)); -+ this.field_177190_a.func_110776_a(this.getArmorResource(p_177182_1_, itemstack, flag ? 2 : 1, null)); +- this.field_177190_a.bindTexture(this.getArmorResource(itemarmor, flag)); ++ this.field_177190_a.bindTexture(this.getArmorResource(p_177182_1_, itemstack, flag ? 2 : 1, null)); -- switch (LayerArmorBase.SwitchArmorMaterial.field_178747_a[itemarmor.func_82812_d().ordinal()]) +- switch (LayerArmorBase.SwitchArmorMaterial.field_178747_a[itemarmor.getArmorMaterial().ordinal()]) { - case 1: -- int j = itemarmor.func_82814_b(itemstack); -+ int j = itemarmor.func_82814_b(itemstack); +- int j = itemarmor.getColor(itemstack); ++ int j = itemarmor.getColor(itemstack); + if (j != -1) //Allow this for anything, not only cloth. + { float f7 = (float)(j >> 16 & 255) / 255.0F; float f8 = (float)(j >> 8 & 255) / 255.0F; float f9 = (float)(j & 255) / 255.0F; - GlStateManager.func_179131_c(this.field_177184_f * f7, this.field_177185_g * f8, this.field_177192_h * f9, this.field_177187_e); - modelbase.func_78088_a(p_177182_1_, p_177182_2_, p_177182_3_, p_177182_5_, p_177182_6_, p_177182_7_, p_177182_8_); -- this.field_177190_a.func_110776_a(this.func_177178_a(itemarmor, flag, "overlay")); + GlStateManager.color(this.field_177184_f * f7, this.field_177185_g * f8, this.field_177192_h * f9, this.field_177187_e); + modelbase.render(p_177182_1_, p_177182_2_, p_177182_3_, p_177182_5_, p_177182_6_, p_177182_7_, p_177182_8_); +- this.field_177190_a.bindTexture(this.getArmorResource(itemarmor, flag, "overlay")); - case 2: - case 3: - case 4: - case 5: -+ this.field_177190_a.func_110776_a(this.getArmorResource(p_177182_1_, itemstack, flag ? 2 : 1, "overlay")); ++ this.field_177190_a.bindTexture(this.getArmorResource(p_177182_1_, itemstack, flag ? 2 : 1, "overlay")); + } + { // Non-cloth - GlStateManager.func_179131_c(this.field_177184_f, this.field_177185_g, this.field_177192_h, this.field_177187_e); - modelbase.func_78088_a(p_177182_1_, p_177182_2_, p_177182_3_, p_177182_5_, p_177182_6_, p_177182_7_, p_177182_8_); + GlStateManager.color(this.field_177184_f, this.field_177185_g, this.field_177192_h, this.field_177187_e); + modelbase.render(p_177182_1_, p_177182_2_, p_177182_3_, p_177182_5_, p_177182_6_, p_177182_7_, p_177182_8_); - default: + } + { // Default, Why is this a switch? there were no breaks. - if (!this.field_177193_i && itemstack.func_77948_v()) + if (!this.field_177193_i && itemstack.isItemEnchanted()) { this.func_177183_a(p_177182_1_, modelbase, p_177182_2_, p_177182_3_, p_177182_4_, p_177182_5_, p_177182_6_, p_177182_7_, p_177182_8_); } @@ -44,19 +44,19 @@ } } @@ -135,11 +136,13 @@ - GlStateManager.func_179084_k(); + GlStateManager.disableBlend(); } + @Deprecated //Use the more sensitive version getArmorResource below - private ResourceLocation func_177181_a(ItemArmor p_177181_1_, boolean p_177181_2_) + private ResourceLocation getArmorResource(ItemArmor p_177181_1_, boolean p_177181_2_) { - return this.func_177178_a(p_177181_1_, p_177181_2_, (String)null); + return this.getArmorResource(p_177181_1_, p_177181_2_, (String)null); } + @Deprecated //Use the more sensitive version getArmorResource below - private ResourceLocation func_177178_a(ItemArmor p_177178_1_, boolean p_177178_2_, String p_177178_3_) + private ResourceLocation getArmorResource(ItemArmor p_177178_1_, boolean p_177178_2_, String p_177178_3_) { - String s1 = String.format("textures/models/armor/%s_layer_%d%s.png", new Object[] {p_177178_1_.func_82812_d().func_179242_c(), Integer.valueOf(p_177178_2_ ? 2 : 1), p_177178_3_ == null ? "" : String.format("_%s", new Object[]{p_177178_3_})}); + String s1 = String.format("textures/models/armor/%s_layer_%d%s.png", new Object[] {p_177178_1_.getArmorMaterial().getName(), Integer.valueOf(p_177178_2_ ? 2 : 1), p_177178_3_ == null ? "" : String.format("_%s", new Object[]{p_177178_3_})}); @@ -158,6 +161,42 @@ protected abstract void func_177179_a(ModelBase p_177179_1_, int p_177179_2_); @@ -73,8 +73,8 @@ + */ + public ResourceLocation getArmorResource(net.minecraft.entity.Entity entity, ItemStack stack, int slot, String type) + { -+ ItemArmor item = (ItemArmor)stack.func_77973_b(); -+ String texture = ((ItemArmor)stack.func_77973_b()).func_82812_d().func_179242_c(); ++ ItemArmor item = (ItemArmor)stack.getItem(); ++ String texture = ((ItemArmor)stack.getItem()).getArmorMaterial().getName(); + String domain = "minecraft"; + int idx = texture.indexOf(':'); + if (idx != -1) diff --git a/patches/minecraft/net/minecraft/client/renderer/texture/Stitcher.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/texture/Stitcher.java.patch similarity index 58% rename from patches/minecraft/net/minecraft/client/renderer/texture/Stitcher.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/texture/Stitcher.java.patch index 564cdfb40..fe1185a58 100644 --- a/patches/minecraft/net/minecraft/client/renderer/texture/Stitcher.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/texture/Stitcher.java.patch @@ -1,9 +1,9 @@ --- ../src-base/minecraft/net/minecraft/client/renderer/texture/Stitcher.java +++ ../src-work/minecraft/net/minecraft/client/renderer/texture/Stitcher.java @@ -60,6 +60,7 @@ - public void func_94305_f() + public void doStitch() { - Stitcher.Holder[] aholder = (Stitcher.Holder[])this.field_94319_a.toArray(new Stitcher.Holder[this.field_94319_a.size()]); + Stitcher.Holder[] aholder = (Stitcher.Holder[])this.setStitchHolders.toArray(new Stitcher.Holder[this.setStitchHolders.size()]); + net.minecraftforge.fml.common.ProgressManager.ProgressBar bar = net.minecraftforge.fml.common.ProgressManager.push("Texture stitching", aholder.length); Arrays.sort(aholder); Stitcher.Holder[] aholder1 = aholder; @@ -12,11 +12,11 @@ for (int j = 0; j < i; ++j) { Stitcher.Holder holder = aholder1[j]; -+ bar.step(holder.func_98150_a().func_94215_i()); ++ bar.step(holder.getAtlasSprite().getIconName()); - if (!this.func_94310_b(holder)) + if (!this.allocateSlot(holder)) { - String s = String.format("Unable to fit: %s - size: %dx%d - Maybe try a lowerresolution resourcepack?", new Object[] {holder.func_98150_a().func_94215_i(), Integer.valueOf(holder.func_98150_a().func_94211_a()), Integer.valueOf(holder.func_98150_a().func_94216_b())}); + String s = String.format("Unable to fit: %s - size: %dx%d - Maybe try a lowerresolution resourcepack?", new Object[] {holder.getAtlasSprite().getIconName(), Integer.valueOf(holder.getAtlasSprite().getIconWidth()), Integer.valueOf(holder.getAtlasSprite().getIconHeight())}); + net.minecraftforge.fml.common.FMLLog.info(s); + for (Stitcher.Holder h : aholder) + net.minecraftforge.fml.common.FMLLog.info(" %s", h); @@ -24,19 +24,19 @@ } } @@ -80,6 +85,7 @@ - this.field_94318_c = MathHelper.func_151236_b(this.field_94318_c); - this.field_94315_d = MathHelper.func_151236_b(this.field_94315_d); + this.currentWidth = MathHelper.roundUpToPowerOfTwo(this.currentWidth); + this.currentHeight = MathHelper.roundUpToPowerOfTwo(this.currentHeight); } + net.minecraftforge.fml.common.ProgressManager.pop(bar); } - public List func_94309_g() + public List getStichSlots() @@ -273,7 +279,7 @@ public String toString() { -- return "Holder{width=" + this.field_94204_c + ", height=" + this.field_94201_d + '}'; -+ return "Holder{width=" + this.field_94204_c + ", height=" + this.field_94201_d + ", name=" + this.field_98151_a.func_94215_i() + '}'; +- return "Holder{width=" + this.width + ", height=" + this.height + '}'; ++ return "Holder{width=" + this.width + ", height=" + this.height + ", name=" + this.theTexture.getIconName() + '}'; } public int compareTo(Stitcher.Holder p_compareTo_1_) diff --git a/patches/minecraft/net/minecraft/client/renderer/texture/TextureAtlasSprite.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/texture/TextureAtlasSprite.java.patch similarity index 76% rename from patches/minecraft/net/minecraft/client/renderer/texture/TextureAtlasSprite.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/texture/TextureAtlasSprite.java.patch index 8b755ed75..88f5b1c6f 100644 --- a/patches/minecraft/net/minecraft/client/renderer/texture/TextureAtlasSprite.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/texture/TextureAtlasSprite.java.patch @@ -2,7 +2,7 @@ +++ ../src-work/minecraft/net/minecraft/client/renderer/texture/TextureAtlasSprite.java @@ -410,4 +410,30 @@ { - return "TextureAtlasSprite{name=\'" + this.field_110984_i + '\'' + ", frameCount=" + this.field_110976_a.size() + ", rotated=" + this.field_130222_e + ", x=" + this.field_110975_c + ", y=" + this.field_110974_d + ", height=" + this.field_130224_d + ", width=" + this.field_130223_c + ", u0=" + this.field_110979_l + ", u1=" + this.field_110980_m + ", v0=" + this.field_110977_n + ", v1=" + this.field_110978_o + '}'; + return "TextureAtlasSprite{name=\'" + this.iconName + '\'' + ", frameCount=" + this.framesTextureData.size() + ", rotated=" + this.rotated + ", x=" + this.originX + ", y=" + this.originY + ", height=" + this.height + ", width=" + this.width + ", u0=" + this.minU + ", u1=" + this.maxU + ", v0=" + this.minV + ", v1=" + this.maxV + '}'; } + + /*===================================== FORGE START =====================================*/ diff --git a/patches/minecraft/net/minecraft/client/renderer/texture/TextureManager.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/texture/TextureManager.java.patch similarity index 63% rename from patches/minecraft/net/minecraft/client/renderer/texture/TextureManager.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/texture/TextureManager.java.patch index 727f57e75..d51da4fc9 100644 --- a/patches/minecraft/net/minecraft/client/renderer/texture/TextureManager.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/texture/TextureManager.java.patch @@ -2,16 +2,16 @@ +++ ../src-work/minecraft/net/minecraft/client/renderer/texture/TextureManager.java @@ -143,12 +143,15 @@ - public void func_110549_a(IResourceManager p_110549_1_) + public void onResourceManagerReload(IResourceManager resourceManager) { -+ net.minecraftforge.fml.common.ProgressManager.ProgressBar bar = net.minecraftforge.fml.common.ProgressManager.push("Reloading Texture Manager", this.field_110585_a.keySet().size(), true); - Iterator iterator = this.field_110585_a.entrySet().iterator(); ++ net.minecraftforge.fml.common.ProgressManager.ProgressBar bar = net.minecraftforge.fml.common.ProgressManager.push("Reloading Texture Manager", this.mapTextureObjects.keySet().size(), true); + Iterator iterator = this.mapTextureObjects.entrySet().iterator(); while (iterator.hasNext()) { Entry entry = (Entry)iterator.next(); + bar.step(entry.getKey().toString()); - this.func_110579_a((ResourceLocation)entry.getKey(), (ITextureObject)entry.getValue()); + this.loadTexture((ResourceLocation)entry.getKey(), (ITextureObject)entry.getValue()); } + net.minecraftforge.fml.common.ProgressManager.pop(bar); } diff --git a/patches/minecraft/net/minecraft/client/renderer/texture/TextureMap.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/texture/TextureMap.java.patch similarity index 60% rename from patches/minecraft/net/minecraft/client/renderer/texture/TextureMap.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/texture/TextureMap.java.patch index 1aec43664..93a0cefb4 100644 --- a/patches/minecraft/net/minecraft/client/renderer/texture/TextureMap.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/texture/TextureMap.java.patch @@ -5,12 +5,12 @@ public class TextureMap extends AbstractTexture implements ITickableTextureObject { + private static final boolean ENABLE_SKIP = Boolean.parseBoolean(System.getProperty("fml.skipFirstTextureLoad", "true")); - private static final Logger field_147635_d = LogManager.getLogger(); - public static final ResourceLocation field_174945_f = new ResourceLocation("missingno"); - public static final ResourceLocation field_110575_b = new ResourceLocation("textures/atlas/blocks.png"); + private static final Logger logger = LogManager.getLogger(); + public static final ResourceLocation LOCATION_MISSING_TEXTURE = new ResourceLocation("missingno"); + public static final ResourceLocation locationBlocksTexture = new ResourceLocation("textures/atlas/blocks.png"); @@ -40,6 +41,7 @@ - private int field_147636_j; - private final TextureAtlasSprite field_94249_f; + private int mipmapLevels; + private final TextureAtlasSprite missingImage; private static final String __OBFID = "CL_00001058"; + private boolean skipFirst = false; @@ -18,9 +18,9 @@ { @@ -48,12 +50,23 @@ - public TextureMap(String p_i46100_1_, IIconCreator p_i46100_2_) + public TextureMap(String p_i46100_1_, IIconCreator iconCreatorIn) { -+ this(p_i46100_1_, p_i46100_2_, false); ++ this(p_i46100_1_, iconCreatorIn, false); + } + + public TextureMap(String p_i46100_1_, boolean skipFirst) @@ -30,91 +30,90 @@ + + public TextureMap(String p_i46100_1_, IIconCreator iconCreatorIn, boolean skipFirst) + { - this.field_94258_i = Lists.newArrayList(); - this.field_110574_e = Maps.newHashMap(); - this.field_94252_e = Maps.newHashMap(); - this.field_94249_f = new TextureAtlasSprite("missingno"); - this.field_94254_c = p_i46100_1_; -- this.field_174946_m = p_i46100_2_; -+ this.field_174946_m = iconCreatorIn; + this.listAnimatedSprites = Lists.newArrayList(); + this.mapRegisteredSprites = Maps.newHashMap(); + this.mapUploadedSprites = Maps.newHashMap(); + this.missingImage = new TextureAtlasSprite("missingno"); + this.basePath = p_i46100_1_; + this.iconCreator = iconCreatorIn; + this.skipFirst = skipFirst && ENABLE_SKIP; } - private void func_110569_e() + private void initMissingImage() @@ -91,15 +104,29 @@ - this.field_94258_i.clear(); + this.listAnimatedSprites.clear(); int j = Integer.MAX_VALUE; - int k = 1 << this.field_147636_j; + int k = 1 << this.mipmapLevels; + net.minecraftforge.client.ForgeHooksClient.onTextureStitchedPre(this); + net.minecraftforge.fml.common.FMLLog.info("Max texture size: %d", i); -+ net.minecraftforge.fml.common.ProgressManager.ProgressBar bar = net.minecraftforge.fml.common.ProgressManager.push("Texture stitching", skipFirst ? 0 : this.field_110574_e.size()); - Iterator iterator = this.field_110574_e.entrySet().iterator(); ++ net.minecraftforge.fml.common.ProgressManager.ProgressBar bar = net.minecraftforge.fml.common.ProgressManager.push("Texture stitching", skipFirst ? 0 : this.mapRegisteredSprites.size()); + Iterator iterator = this.mapRegisteredSprites.entrySet().iterator(); - while (iterator.hasNext()) + while (!skipFirst && iterator.hasNext()) { Entry entry = (Entry)iterator.next(); TextureAtlasSprite textureatlassprite = (TextureAtlasSprite)entry.getValue(); - ResourceLocation resourcelocation = new ResourceLocation(textureatlassprite.func_94215_i()); - ResourceLocation resourcelocation1 = this.func_147634_a(resourcelocation, 0); -+ bar.step(resourcelocation1.func_110623_a()); + ResourceLocation resourcelocation = new ResourceLocation(textureatlassprite.getIconName()); + ResourceLocation resourcelocation1 = this.completeResourceLocation(resourcelocation, 0); ++ bar.step(resourcelocation1.getResourcePath()); -+ if (textureatlassprite.hasCustomLoader(p_110571_1_, resourcelocation)) ++ if (textureatlassprite.hasCustomLoader(resourceManager, resourcelocation)) + { -+ if (!textureatlassprite.load(p_110571_1_, resourcelocation)) ++ if (!textureatlassprite.load(resourceManager, resourcelocation)) + { -+ j = Math.min(j, Math.min(textureatlassprite.func_94211_a(), textureatlassprite.func_94216_b())); -+ stitcher.func_110934_a(textureatlassprite); ++ j = Math.min(j, Math.min(textureatlassprite.getIconWidth(), textureatlassprite.getIconHeight())); ++ stitcher.addSprite(textureatlassprite); + } + continue; + } + try { - IResource iresource = p_110571_1_.func_110536_a(resourcelocation1); + IResource iresource = resourceManager.getResource(resourcelocation1); @@ -150,12 +177,14 @@ } catch (RuntimeException runtimeexception) { -- field_147635_d.error("Unable to parse metadata from " + resourcelocation1, runtimeexception); +- logger.error("Unable to parse metadata from " + resourcelocation1, runtimeexception); + //logger.error("Unable to parse metadata from " + resourcelocation1, runtimeexception); + net.minecraftforge.fml.client.FMLClientHandler.instance().trackBrokenTexture(resourcelocation1, runtimeexception.getMessage()); continue; } catch (IOException ioexception1) { -- field_147635_d.error("Using missing texture, unable to load " + resourcelocation1, ioexception1); +- logger.error("Using missing texture, unable to load " + resourcelocation1, ioexception1); + //logger.error("Using missing texture, unable to load " + resourcelocation1, ioexception1); + net.minecraftforge.fml.client.FMLClientHandler.instance().trackMissingTexture(resourcelocation1); continue; } @@ -171,6 +200,7 @@ - stitcher.func_110934_a(textureatlassprite); + stitcher.addSprite(textureatlassprite); } + net.minecraftforge.fml.common.ProgressManager.pop(bar); int j1 = Math.min(j, k); - int k1 = MathHelper.func_151239_c(j1); + int k1 = MathHelper.calculateLogBaseTwo(j1); @@ -181,10 +211,12 @@ } - Iterator iterator1 = this.field_110574_e.values().iterator(); -+ bar = net.minecraftforge.fml.common.ProgressManager.push("Mipmap generation", skipFirst ? 0 : this.field_110574_e.size()); + Iterator iterator1 = this.mapRegisteredSprites.values().iterator(); ++ bar = net.minecraftforge.fml.common.ProgressManager.push("Mipmap generation", skipFirst ? 0 : this.mapRegisteredSprites.size()); - while (iterator1.hasNext()) + while (!skipFirst && iterator1.hasNext()) { final TextureAtlasSprite textureatlassprite1 = (TextureAtlasSprite)iterator1.next(); -+ bar.step(textureatlassprite1.func_94215_i()); ++ bar.step(textureatlassprite1.getIconName()); try { @@ -225,9 +257,13 @@ - this.field_94249_f.func_147963_d(this.field_147636_j); - stitcher.func_110934_a(this.field_94249_f); + this.missingImage.generateMipmaps(this.mipmapLevels); + stitcher.addSprite(this.missingImage); + net.minecraftforge.fml.common.ProgressManager.pop(bar); + skipFirst = false; + bar = net.minecraftforge.fml.common.ProgressManager.push("Texture creation", 3); @@ -122,17 +121,17 @@ try { + bar.step("Stitching"); - stitcher.func_94305_f(); + stitcher.doStitch(); } catch (StitcherException stitcherexception) @@ -236,11 +272,13 @@ } - field_147635_d.info("Created: {}x{} {}-atlas", new Object[] {Integer.valueOf(stitcher.func_110935_a()), Integer.valueOf(stitcher.func_110936_b()), this.field_94254_c}); + logger.info("Created: {}x{} {}-atlas", new Object[] {Integer.valueOf(stitcher.getCurrentWidth()), Integer.valueOf(stitcher.getCurrentHeight()), this.basePath}); + bar.step("Allocating GL texture"); - TextureUtil.func_180600_a(this.func_110552_b(), this.field_147636_j, stitcher.func_110935_a(), stitcher.func_110936_b()); - HashMap hashmap = Maps.newHashMap(this.field_110574_e); - Iterator iterator2 = stitcher.func_94309_g().iterator(); + TextureUtil.allocateTextureImpl(this.getGlTextureId(), this.mipmapLevels, stitcher.getCurrentWidth(), stitcher.getCurrentHeight()); + HashMap hashmap = Maps.newHashMap(this.mapRegisteredSprites); + Iterator iterator2 = stitcher.getStichSlots().iterator(); TextureAtlasSprite textureatlassprite2; + bar.step("Uploading GL texture"); @@ -140,20 +139,20 @@ { textureatlassprite2 = (TextureAtlasSprite)iterator2.next(); @@ -275,7 +313,11 @@ - textureatlassprite2.func_94217_a(this.field_94249_f); + textureatlassprite2.copyFrom(this.missingImage); } + net.minecraftforge.client.ForgeHooksClient.onTextureStitchedPost(this); + + if (!net.minecraftforge.common.ForgeModContainer.disableStitchedFileSaving) - TextureUtil.func_177055_a(this.field_94254_c.replaceAll("/", "_"), this.func_110552_b(), this.field_147636_j, stitcher.func_110935_a(), stitcher.func_110936_b()); + TextureUtil.saveGlTexture(this.basePath.replaceAll("/", "_"), this.getGlTextureId(), this.mipmapLevels, stitcher.getCurrentWidth(), stitcher.getCurrentHeight()); + net.minecraftforge.fml.common.ProgressManager.pop(bar); } - private ResourceLocation func_147634_a(ResourceLocation p_147634_1_, int p_147634_2_) + private ResourceLocation completeResourceLocation(ResourceLocation location, int p_147634_2_) @@ -341,4 +383,37 @@ { - return this.field_94249_f; + return this.missingImage; } + + //=================================================================================================== @@ -168,7 +167,7 @@ + */ + public TextureAtlasSprite getTextureExtry(String name) + { -+ return (TextureAtlasSprite)field_110574_e.get(name); ++ return (TextureAtlasSprite)mapRegisteredSprites.get(name); + } + + /** @@ -181,9 +180,9 @@ + */ + public boolean setTextureEntry(String name, TextureAtlasSprite entry) + { -+ if (!field_110574_e.containsKey(name)) ++ if (!mapRegisteredSprites.containsKey(name)) + { -+ field_110574_e.put(name, entry); ++ mapRegisteredSprites.put(name, entry); + return true; + } + return false; diff --git a/patches/minecraft/net/minecraft/client/renderer/texture/TextureUtil.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/texture/TextureUtil.java.patch similarity index 69% rename from patches/minecraft/net/minecraft/client/renderer/texture/TextureUtil.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/texture/TextureUtil.java.patch index 4e5c66c9f..bd098bb10 100644 --- a/patches/minecraft/net/minecraft/client/renderer/texture/TextureUtil.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/texture/TextureUtil.java.patch @@ -2,12 +2,12 @@ +++ ../src-work/minecraft/net/minecraft/client/renderer/texture/TextureUtil.java @@ -202,9 +202,11 @@ - public static void func_180600_a(int p_180600_0_, int p_180600_1_, int p_180600_2_, int p_180600_3_) + public static void allocateTextureImpl(int p_180600_0_, int p_180600_1_, int p_180600_2_, int p_180600_3_) { + synchronized (net.minecraftforge.fml.client.SplashProgress.class) + { - func_147942_a(p_180600_0_); - func_94277_a(p_180600_0_); + deleteTexture(p_180600_0_); + bindTexture(p_180600_0_); - + } if (p_180600_1_ >= 0) diff --git a/patches/minecraft/net/minecraft/client/renderer/tileentity/RenderItemFrame.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/tileentity/RenderItemFrame.java.patch similarity index 56% rename from patches/minecraft/net/minecraft/client/renderer/tileentity/RenderItemFrame.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/tileentity/RenderItemFrame.java.patch index d0ec3a7d9..d05ff8ac8 100644 --- a/patches/minecraft/net/minecraft/client/renderer/tileentity/RenderItemFrame.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/tileentity/RenderItemFrame.java.patch @@ -1,31 +1,31 @@ --- ../src-base/minecraft/net/minecraft/client/renderer/tileentity/RenderItemFrame.java +++ ../src-work/minecraft/net/minecraft/client/renderer/tileentity/RenderItemFrame.java @@ -99,15 +99,18 @@ - GlStateManager.func_179140_f(); - int i = p_82402_1_.func_82333_j(); + GlStateManager.disableLighting(); + int i = p_82402_1_.getRotation(); -- if (item == Items.field_151098_aY) +- if (item == Items.filled_map) + if (item instanceof net.minecraft.item.ItemMap) { i = i % 4 * 2; } - GlStateManager.func_179114_b((float)i * 360.0F / 8.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.rotate((float)i * 360.0F / 8.0F, 0.0F, 0.0F, 1.0F); -- if (item == Items.field_151098_aY) +- if (item == Items.filled_map) + net.minecraftforge.client.event.RenderItemInFrameEvent event = new net.minecraftforge.client.event.RenderItemInFrameEvent(p_82402_1_, this); + if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) { + if (item instanceof net.minecraft.item.ItemMap) + { - this.field_76990_c.field_78724_e.func_110577_a(field_110789_a); - GlStateManager.func_179114_b(180.0F, 0.0F, 0.0F, 1.0F); + this.renderManager.renderEngine.bindTexture(mapBackgroundTextures); + GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); float f = 0.0078125F; @@ -165,6 +168,7 @@ - textureatlassprite.func_94219_l(); + textureatlassprite.updateAnimation(); } } + } - GlStateManager.func_179145_e(); - GlStateManager.func_179121_F(); + GlStateManager.enableLighting(); + GlStateManager.popMatrix(); diff --git a/patches.mcp/minecraft/net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.java.patch new file mode 100644 index 000000000..9137aa309 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.java.patch @@ -0,0 +1,10 @@ +--- ../src-base/minecraft/net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.java ++++ ../src-work/minecraft/net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.java +@@ -79,6 +79,7 @@ + { + TileEntityRendererDispatcher.instance.renderTileEntityAt(this.field_147718_c, 0.0D, 0.0D, 0.0D, 0.0F); + } ++ else if (block != Blocks.chest) net.minecraftforge.client.ForgeHooksClient.renderTileItem(p_179022_1_.getItem(), p_179022_1_.getMetadata()); + else + { + TileEntityRendererDispatcher.instance.renderTileEntityAt(this.field_147717_b, 0.0D, 0.0D, 0.0D, 0.0F); diff --git a/patches/minecraft/net/minecraft/client/renderer/vertex/VertexFormatElement.java.patch b/patches.mcp/minecraft/net/minecraft/client/renderer/vertex/VertexFormatElement.java.patch similarity index 92% rename from patches/minecraft/net/minecraft/client/renderer/vertex/VertexFormatElement.java.patch rename to patches.mcp/minecraft/net/minecraft/client/renderer/vertex/VertexFormatElement.java.patch index 5c3f9e29e..31665ebe0 100644 --- a/patches/minecraft/net/minecraft/client/renderer/vertex/VertexFormatElement.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/renderer/vertex/VertexFormatElement.java.patch @@ -25,9 +25,9 @@ + //UINT_2_10_10_10_REV(4, "Unsigned Int 2-10-10-10 reversed", org.lwjgl.opengl.GL12.GL_UNSIGNED_INT_2_10_10_10_REV), + //UINT_10F_11F_11F_REV(4, "Unsigned Int 10F 11F 11F reversed", GL_UNSIGNED_INT_10F_11F_11F_REV); + - private final int field_177407_h; - private final String field_177408_i; - private final int field_177405_j; + private final int size; + private final String displayName; + private final int glConstant; @@ -157,9 +164,17 @@ NORMAL("Normal"), COLOR("Vertex Color"), @@ -44,6 +44,6 @@ + public void preDraw(VertexFormatElement element, int stride, java.nio.ByteBuffer buffer) { net.minecraftforge.client.ForgeHooksClient.preDraw(this, element, stride, buffer); } + public void postDraw(VertexFormatElement element, int stride, java.nio.ByteBuffer buffer) { net.minecraftforge.client.ForgeHooksClient.postDraw(this, element, stride, buffer); } + - private final String field_177392_h; + private final String displayName; private static final String __OBFID = "CL_00002397"; diff --git a/patches.mcp/minecraft/net/minecraft/client/resources/AbstractResourcePack.java.patch b/patches.mcp/minecraft/net/minecraft/client/resources/AbstractResourcePack.java.patch new file mode 100644 index 000000000..b55e36165 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/resources/AbstractResourcePack.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/client/resources/AbstractResourcePack.java ++++ ../src-work/minecraft/net/minecraft/client/resources/AbstractResourcePack.java +@@ -58,7 +58,7 @@ + + protected void logNameNotLowercase(String p_110594_1_) + { +- resourceLog.warn("ResourcePack: ignored non-lowercase namespace: %s in %s", new Object[] {p_110594_1_, this.resourcePackFile}); ++ resourceLog.warn("ResourcePack: ignored non-lowercase namespace: {} in {}", new Object[] {p_110594_1_, this.resourcePackFile}); + } + + public IMetadataSection getPackMetadata(IMetadataSerializer p_135058_1_, String p_135058_2_) throws IOException diff --git a/patches/minecraft/net/minecraft/client/resources/FallbackResourceManager.java.patch b/patches.mcp/minecraft/net/minecraft/client/resources/FallbackResourceManager.java.patch similarity index 61% rename from patches/minecraft/net/minecraft/client/resources/FallbackResourceManager.java.patch rename to patches.mcp/minecraft/net/minecraft/client/resources/FallbackResourceManager.java.patch index c002dd01f..9d8482917 100644 --- a/patches/minecraft/net/minecraft/client/resources/FallbackResourceManager.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/resources/FallbackResourceManager.java.patch @@ -5,6 +5,6 @@ } + @SuppressWarnings("resource") - protected InputStream func_177245_a(ResourceLocation p_177245_1_, IResourcePack p_177245_2_) throws IOException + protected InputStream getInputStream(ResourceLocation p_177245_1_, IResourcePack p_177245_2_) throws IOException { - InputStream inputstream = p_177245_2_.func_110590_a(p_177245_1_); + InputStream inputstream = p_177245_2_.getInputStream(p_177245_1_); diff --git a/patches/minecraft/net/minecraft/client/resources/LanguageManager.java.patch b/patches.mcp/minecraft/net/minecraft/client/resources/LanguageManager.java.patch similarity index 54% rename from patches/minecraft/net/minecraft/client/resources/LanguageManager.java.patch rename to patches.mcp/minecraft/net/minecraft/client/resources/LanguageManager.java.patch index de7ea2b62..3a799d2e9 100644 --- a/patches/minecraft/net/minecraft/client/resources/LanguageManager.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/resources/LanguageManager.java.patch @@ -3,8 +3,8 @@ @@ -83,6 +83,7 @@ } - field_135049_a.func_135022_a(p_110549_1_, arraylist); -+ net.minecraftforge.fml.common.registry.LanguageRegistry.instance().mergeLanguageTable(field_135049_a.field_135032_a, this.field_135048_c); - StringTranslate.func_135063_a(field_135049_a.field_135032_a); + currentLocale.loadLocaleDataFiles(resourceManager, arraylist); ++ net.minecraftforge.fml.common.registry.LanguageRegistry.instance().mergeLanguageTable(currentLocale.properties, this.currentLanguage); + StringTranslate.replaceWith(currentLocale.properties); } diff --git a/patches/minecraft/net/minecraft/client/resources/Locale.java.patch b/patches.mcp/minecraft/net/minecraft/client/resources/Locale.java.patch similarity index 74% rename from patches/minecraft/net/minecraft/client/resources/Locale.java.patch rename to patches.mcp/minecraft/net/minecraft/client/resources/Locale.java.patch index fc84931f7..9d053f76d 100644 --- a/patches/minecraft/net/minecraft/client/resources/Locale.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/resources/Locale.java.patch @@ -2,9 +2,9 @@ +++ ../src-work/minecraft/net/minecraft/client/resources/Locale.java @@ -107,6 +107,8 @@ - private void func_135021_a(InputStream p_135021_1_) throws IOException + private void loadLocaleData(InputStream p_135021_1_) throws IOException { -+ p_135021_1_ = net.minecraftforge.fml.common.FMLCommonHandler.instance().loadLanguage(field_135032_a, p_135021_1_); ++ p_135021_1_ = net.minecraftforge.fml.common.FMLCommonHandler.instance().loadLanguage(properties, p_135021_1_); + if (p_135021_1_ == null) return; Iterator iterator = IOUtils.readLines(p_135021_1_, Charsets.UTF_8).iterator(); diff --git a/patches/minecraft/net/minecraft/client/resources/SimpleReloadableResourceManager.java.patch b/patches.mcp/minecraft/net/minecraft/client/resources/SimpleReloadableResourceManager.java.patch similarity index 66% rename from patches/minecraft/net/minecraft/client/resources/SimpleReloadableResourceManager.java.patch rename to patches.mcp/minecraft/net/minecraft/client/resources/SimpleReloadableResourceManager.java.patch index 8d8b19f58..839265f93 100644 --- a/patches/minecraft/net/minecraft/client/resources/SimpleReloadableResourceManager.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/resources/SimpleReloadableResourceManager.java.patch @@ -1,45 +1,45 @@ --- ../src-base/minecraft/net/minecraft/client/resources/SimpleReloadableResourceManager.java +++ ../src-work/minecraft/net/minecraft/client/resources/SimpleReloadableResourceManager.java @@ -95,6 +95,7 @@ - public void func_110541_a(List p_110541_1_) + public void reloadResources(List p_110541_1_) { - this.func_110543_a(); + this.clearResources(); + net.minecraftforge.fml.common.ProgressManager.ProgressBar resReload = net.minecraftforge.fml.common.ProgressManager.push("Loading Resources", p_110541_1_.size()+1, true); - field_147967_a.info("Reloading ResourceManager: " + field_130074_a.join(Iterables.transform(p_110541_1_, new Function() + logger.info("Reloading ResourceManager: " + joinerResourcePacks.join(Iterables.transform(p_110541_1_, new Function() { private static final String __OBFID = "CL_00001092"; @@ -112,26 +113,35 @@ while (iterator.hasNext()) { IResourcePack iresourcepack = (IResourcePack)iterator.next(); -+ resReload.step(iresourcepack.func_130077_b()); - this.func_110545_a(iresourcepack); ++ resReload.step(iresourcepack.getPackName()); + this.reloadResourcePack(iresourcepack); } + resReload.step("Reloading listeners"); - this.func_110544_b(); + this.notifyReloadListeners(); + net.minecraftforge.fml.common.ProgressManager.pop(resReload); } - public void func_110542_a(IResourceManagerReloadListener p_110542_1_) + public void registerReloadListener(IResourceManagerReloadListener p_110542_1_) { - this.field_110546_b.add(p_110542_1_); + this.reloadListeners.add(p_110542_1_); + net.minecraftforge.fml.common.ProgressManager.ProgressBar resReload = net.minecraftforge.fml.common.ProgressManager.push("Loading Resource", 1); + resReload.step(p_110542_1_.getClass()); - p_110542_1_.func_110549_a(this); + p_110542_1_.onResourceManagerReload(this); + net.minecraftforge.fml.common.ProgressManager.pop(resReload); } - private void func_110544_b() + private void notifyReloadListeners() { - Iterator iterator = this.field_110546_b.iterator(); + Iterator iterator = this.reloadListeners.iterator(); -+ net.minecraftforge.fml.common.ProgressManager.ProgressBar resReload = net.minecraftforge.fml.common.ProgressManager.push("Reloading", this.field_110546_b.size()); ++ net.minecraftforge.fml.common.ProgressManager.ProgressBar resReload = net.minecraftforge.fml.common.ProgressManager.push("Reloading", this.reloadListeners.size()); while (iterator.hasNext()) { IResourceManagerReloadListener iresourcemanagerreloadlistener = (IResourceManagerReloadListener)iterator.next(); + resReload.step(iresourcemanagerreloadlistener.getClass()); - iresourcemanagerreloadlistener.func_110549_a(this); + iresourcemanagerreloadlistener.onResourceManagerReload(this); } + net.minecraftforge.fml.common.ProgressManager.pop(resReload); } diff --git a/patches/minecraft/net/minecraft/client/resources/SkinManager.java.patch b/patches.mcp/minecraft/net/minecraft/client/resources/SkinManager.java.patch similarity index 52% rename from patches/minecraft/net/minecraft/client/resources/SkinManager.java.patch rename to patches.mcp/minecraft/net/minecraft/client/resources/SkinManager.java.patch index 9784b8e90..48764cbfc 100644 --- a/patches/minecraft/net/minecraft/client/resources/SkinManager.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/resources/SkinManager.java.patch @@ -2,12 +2,12 @@ +++ ../src-work/minecraft/net/minecraft/client/resources/SkinManager.java @@ -129,7 +129,9 @@ - if (hashmap.isEmpty() && p_152790_1_.getId().equals(Minecraft.func_71410_x().func_110432_I().func_148256_e().getId())) + if (hashmap.isEmpty() && p_152790_1_.getId().equals(Minecraft.getMinecraft().getSession().getProfile().getId())) { -- hashmap.putAll(SkinManager.this.field_152797_e.getTextures(SkinManager.this.field_152797_e.fillProfileProperties(p_152790_1_, false), false)); +- hashmap.putAll(SkinManager.this.sessionService.getTextures(SkinManager.this.sessionService.fillProfileProperties(p_152790_1_, false), false)); + // FORGE: Use already filled profile from session rather + // than getting rate limited by filling the input profile -+ hashmap.putAll(SkinManager.this.field_152797_e.getTextures(Minecraft.func_71410_x().func_110432_I().func_148256_e(), false)); ++ hashmap.putAll(SkinManager.this.sessionService.getTextures(Minecraft.getMinecraft().getSession().getProfile(), false)); } - Minecraft.func_71410_x().func_152344_a(new Runnable() + Minecraft.getMinecraft().addScheduledTask(new Runnable() diff --git a/patches/minecraft/net/minecraft/client/resources/model/IBakedModel.java.patch b/patches.mcp/minecraft/net/minecraft/client/resources/model/IBakedModel.java.patch similarity index 79% rename from patches/minecraft/net/minecraft/client/resources/model/IBakedModel.java.patch rename to patches.mcp/minecraft/net/minecraft/client/resources/model/IBakedModel.java.patch index 92a87972d..1b59a084d 100644 --- a/patches/minecraft/net/minecraft/client/resources/model/IBakedModel.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/resources/model/IBakedModel.java.patch @@ -11,11 +11,11 @@ +@Deprecated public interface IBakedModel { - List func_177551_a(EnumFacing p_177551_1_); + List getFaceQuads(EnumFacing p_177551_1_); @@ -22,5 +26,6 @@ - TextureAtlasSprite func_177554_e(); + TextureAtlasSprite getTexture(); + @Deprecated - ItemCameraTransforms func_177552_f(); + ItemCameraTransforms getItemCameraTransforms(); } diff --git a/patches.mcp/minecraft/net/minecraft/client/resources/model/ModelBakery.java.patch b/patches.mcp/minecraft/net/minecraft/client/resources/model/ModelBakery.java.patch new file mode 100644 index 000000000..e6b109684 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/resources/model/ModelBakery.java.patch @@ -0,0 +1,98 @@ +--- ../src-base/minecraft/net/minecraft/client/resources/model/ModelBakery.java ++++ ../src-work/minecraft/net/minecraft/client/resources/model/ModelBakery.java +@@ -123,7 +123,7 @@ + } + catch (Exception exception) + { +- LOGGER.warn("Unable to load variant: " + modelresourcelocation.getVariant() + " from " + modelresourcelocation); ++ LOGGER.warn("Unable to load variant: " + modelresourcelocation.getVariant() + " from " + modelresourcelocation, exception); + } + } + catch (Exception exception1) +@@ -172,6 +172,7 @@ + } + } + } ++ catch (FileNotFoundException e) {} + catch (IOException ioexception) + { + throw new RuntimeException("Encountered an exception when loading model definition of model " + resourcelocation1.toString(), ioexception); +@@ -318,6 +319,7 @@ + + protected void registerVariantNames() + { ++ this.variantNames.clear(); //FML clear this to prevent double ups. + this.variantNames.put(Item.getItemFromBlock(Blocks.stone), Lists.newArrayList(new String[] {"stone", "granite", "granite_smooth", "diorite", "diorite_smooth", "andesite", "andesite_smooth"})); + this.variantNames.put(Item.getItemFromBlock(Blocks.dirt), Lists.newArrayList(new String[] {"dirt", "coarse_dirt", "podzol"})); + this.variantNames.put(Item.getItemFromBlock(Blocks.planks), Lists.newArrayList(new String[] {"oak_planks", "spruce_planks", "birch_planks", "jungle_planks", "acacia_planks", "dark_oak_planks"})); +@@ -360,6 +362,10 @@ + this.variantNames.put(Item.getItemFromBlock(Blocks.oak_fence_gate), Lists.newArrayList(new String[] {"oak_fence_gate"})); + this.variantNames.put(Item.getItemFromBlock(Blocks.oak_fence), Lists.newArrayList(new String[] {"oak_fence"})); + this.variantNames.put(Items.oak_door, Lists.newArrayList(new String[] {"oak_door"})); ++ for (Entry, Set> e : customVariantNames.entrySet()) ++ { ++ this.variantNames.put(e.getKey().get(), Lists.newArrayList(e.getValue().iterator())); ++ } + } + + protected List getVariantNames(Item p_177596_1_) +@@ -494,6 +500,11 @@ + + private IBakedModel bakeModel(ModelBlock modelBlockIn, ModelRotation modelRotationIn, boolean uvLocked) + { ++ return bakeModel(modelBlockIn, (net.minecraftforge.client.model.ITransformation)modelRotationIn, uvLocked); ++ } ++ ++ protected IBakedModel bakeModel(ModelBlock modelBlockIn, net.minecraftforge.client.model.ITransformation modelRotationIn, boolean uvLocked) ++ { + TextureAtlasSprite textureatlassprite = (TextureAtlasSprite)this.sprites.get(new ResourceLocation(modelBlockIn.resolveTextureName("particle"))); + SimpleBakedModel.Builder builder = (new SimpleBakedModel.Builder(modelBlockIn)).setTexture(textureatlassprite); + Iterator iterator = modelBlockIn.getElements().iterator(); +@@ -509,13 +520,13 @@ + BlockPartFace blockpartface = (BlockPartFace)blockpart.mapFaces.get(enumfacing); + TextureAtlasSprite textureatlassprite1 = (TextureAtlasSprite)this.sprites.get(new ResourceLocation(modelBlockIn.resolveTextureName(blockpartface.texture))); + +- if (blockpartface.cullFace == null) ++ if (blockpartface.cullFace == null || !net.minecraftforge.client.model.TRSRTransformation.isInteger(modelRotationIn.getMatrix())) + { + builder.addGeneralQuad(this.makeBakedQuad(blockpart, blockpartface, textureatlassprite1, enumfacing, modelRotationIn, uvLocked)); + } + else + { +- builder.addFaceQuad(modelRotationIn.rotateFace(blockpartface.cullFace), this.makeBakedQuad(blockpart, blockpartface, textureatlassprite1, enumfacing, modelRotationIn, uvLocked)); ++ builder.addFaceQuad(modelRotationIn.rotate(blockpartface.cullFace), this.makeBakedQuad(blockpart, blockpartface, textureatlassprite1, enumfacing, modelRotationIn, uvLocked)); + } + } + } +@@ -525,6 +536,11 @@ + + private BakedQuad makeBakedQuad(BlockPart p_177589_1_, BlockPartFace p_177589_2_, TextureAtlasSprite p_177589_3_, EnumFacing p_177589_4_, ModelRotation p_177589_5_, boolean p_177589_6_) + { ++ return makeBakedQuad(p_177589_1_, p_177589_2_, p_177589_3_, p_177589_4_, (net.minecraftforge.client.model.ITransformation)p_177589_5_, p_177589_6_); ++ } ++ ++ protected BakedQuad makeBakedQuad(BlockPart p_177589_1_, BlockPartFace p_177589_2_, TextureAtlasSprite p_177589_3_, EnumFacing p_177589_4_, net.minecraftforge.client.model.ITransformation p_177589_5_, boolean p_177589_6_) ++ { + return this.faceBakery.makeBakedQuad(p_177589_1_.positionFrom, p_177589_1_.positionTo, p_177589_2_, p_177589_3_, p_177589_4_, p_177589_5_, p_177589_1_.partRotation, p_177589_6_, p_177589_1_.shade); + } + +@@ -809,4 +825,19 @@ + MODEL_CLOCK.name = "class generation marker"; + MODEL_ENTITY.name = "block entity marker"; + } ++ ++ /*********************************************************** ++ * FML Start ++ ***********************************************************/ ++ private static Map, Set> customVariantNames = Maps.newHashMap(); ++ public static void addVariantName(Item item, String... names) ++ { ++ if (customVariantNames.containsKey(item.delegate)) ++ customVariantNames.get(item.delegate).addAll(Lists.newArrayList(names)); ++ else ++ customVariantNames.put(item.delegate, Sets.newHashSet(names)); ++ } ++ /*********************************************************** ++ * FML End ++ ***********************************************************/ + } diff --git a/patches.mcp/minecraft/net/minecraft/client/resources/model/ModelManager.java.patch b/patches.mcp/minecraft/net/minecraft/client/resources/model/ModelManager.java.patch new file mode 100644 index 000000000..cdc1701f2 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/client/resources/model/ModelManager.java.patch @@ -0,0 +1,14 @@ +--- ../src-base/minecraft/net/minecraft/client/resources/model/ModelManager.java ++++ ../src-work/minecraft/net/minecraft/client/resources/model/ModelManager.java +@@ -25,9 +25,10 @@ + + public void onResourceManagerReload(IResourceManager resourceManager) + { +- ModelBakery modelbakery = new ModelBakery(resourceManager, this.texMap, this.modelProvider); ++ ModelBakery modelbakery = new net.minecraftforge.client.model.ModelLoader(resourceManager, this.texMap, this.modelProvider); + this.modelRegistry = modelbakery.setupModelRegistry(); + this.defaultModel = (IBakedModel)this.modelRegistry.getObject(ModelBakery.MODEL_MISSING); ++ net.minecraftforge.client.ForgeHooksClient.onModelBake(this, this.modelRegistry, modelbakery); + this.modelProvider.reloadModels(); + } + diff --git a/patches/minecraft/net/minecraft/client/resources/model/ModelRotation.java.patch b/patches.mcp/minecraft/net/minecraft/client/resources/model/ModelRotation.java.patch similarity index 81% rename from patches/minecraft/net/minecraft/client/resources/model/ModelRotation.java.patch rename to patches.mcp/minecraft/net/minecraft/client/resources/model/ModelRotation.java.patch index fc6faa7d5..a97ecb1a3 100644 --- a/patches/minecraft/net/minecraft/client/resources/model/ModelRotation.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/resources/model/ModelRotation.java.patch @@ -10,12 +10,12 @@ X0_Y0(0, 0), X0_Y90(0, 90), @@ -122,4 +122,9 @@ - field_177546_q.put(Integer.valueOf(var3.field_177545_r), var3); + mapRotations.put(Integer.valueOf(var3.combinedXY), var3); } } + + public net.minecraftforge.client.model.TRSRTransformation apply(net.minecraftforge.client.model.IModelPart part) { return new net.minecraftforge.client.model.TRSRTransformation(getMatrix()); } + public javax.vecmath.Matrix4f getMatrix() { return net.minecraftforge.client.ForgeHooksClient.getMatrix(this); } -+ public EnumFacing rotate(EnumFacing facing) { return func_177523_a(facing); } -+ public int rotate(EnumFacing facing, int vertexIndex) { return func_177520_a(facing, vertexIndex); } ++ public EnumFacing rotate(EnumFacing facing) { return rotateFace(facing); } ++ public int rotate(EnumFacing facing, int vertexIndex) { return rotateVertex(facing, vertexIndex); } } diff --git a/patches/minecraft/net/minecraft/client/settings/GameSettings.java.patch b/patches.mcp/minecraft/net/minecraft/client/settings/GameSettings.java.patch similarity index 85% rename from patches/minecraft/net/minecraft/client/settings/GameSettings.java.patch rename to patches.mcp/minecraft/net/minecraft/client/settings/GameSettings.java.patch index 74702821a..fe8f10615 100644 --- a/patches/minecraft/net/minecraft/client/settings/GameSettings.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/settings/GameSettings.java.patch @@ -2,9 +2,9 @@ +++ ../src-work/minecraft/net/minecraft/client/settings/GameSettings.java @@ -1067,6 +1067,7 @@ - public void func_74303_b() + public void saveOptions() { + if (net.minecraftforge.fml.client.FMLClientHandler.instance().isLoading()) return; try { - PrintWriter printwriter = new PrintWriter(new FileWriter(this.field_74354_ai)); + PrintWriter printwriter = new PrintWriter(new FileWriter(this.optionsFile)); diff --git a/patches/minecraft/net/minecraft/client/shader/Framebuffer.java.patch b/patches.mcp/minecraft/net/minecraft/client/shader/Framebuffer.java.patch similarity index 55% rename from patches/minecraft/net/minecraft/client/shader/Framebuffer.java.patch rename to patches.mcp/minecraft/net/minecraft/client/shader/Framebuffer.java.patch index b552a439c..c3b400a6b 100644 --- a/patches/minecraft/net/minecraft/client/shader/Framebuffer.java.patch +++ b/patches.mcp/minecraft/net/minecraft/client/shader/Framebuffer.java.patch @@ -1,26 +1,26 @@ --- ../src-base/minecraft/net/minecraft/client/shader/Framebuffer.java +++ ../src-work/minecraft/net/minecraft/client/shader/Framebuffer.java @@ -119,8 +119,17 @@ - if (this.field_147619_e) + if (this.useDepth) { - OpenGlHelper.func_153176_h(OpenGlHelper.field_153199_f, this.field_147624_h); + OpenGlHelper.glBindRenderbuffer(OpenGlHelper.GL_RENDERBUFFER, this.depthBuffer); + if (!this.stencilEnabled) + { - OpenGlHelper.func_153186_a(OpenGlHelper.field_153199_f, 33190, this.field_147622_a, this.field_147620_b); - OpenGlHelper.func_153190_b(OpenGlHelper.field_153198_e, OpenGlHelper.field_153201_h, OpenGlHelper.field_153199_f, this.field_147624_h); + OpenGlHelper.glRenderbufferStorage(OpenGlHelper.GL_RENDERBUFFER, 33190, this.framebufferTextureWidth, this.framebufferTextureHeight); + OpenGlHelper.glFramebufferRenderbuffer(OpenGlHelper.GL_FRAMEBUFFER, OpenGlHelper.GL_DEPTH_ATTACHMENT, OpenGlHelper.GL_RENDERBUFFER, this.depthBuffer); + } + else + { -+ OpenGlHelper.func_153186_a(OpenGlHelper.field_153199_f, org.lwjgl.opengl.EXTPackedDepthStencil.GL_DEPTH24_STENCIL8_EXT, this.field_147622_a, this.field_147620_b); -+ OpenGlHelper.func_153190_b(OpenGlHelper.field_153198_e, org.lwjgl.opengl.EXTFramebufferObject.GL_DEPTH_ATTACHMENT_EXT, OpenGlHelper.field_153199_f, this.field_147624_h); -+ OpenGlHelper.func_153190_b(OpenGlHelper.field_153198_e, org.lwjgl.opengl.EXTFramebufferObject.GL_STENCIL_ATTACHMENT_EXT, OpenGlHelper.field_153199_f, this.field_147624_h); ++ OpenGlHelper.glRenderbufferStorage(OpenGlHelper.GL_RENDERBUFFER, org.lwjgl.opengl.EXTPackedDepthStencil.GL_DEPTH24_STENCIL8_EXT, this.framebufferTextureWidth, this.framebufferTextureHeight); ++ OpenGlHelper.glFramebufferRenderbuffer(OpenGlHelper.GL_FRAMEBUFFER, org.lwjgl.opengl.EXTFramebufferObject.GL_DEPTH_ATTACHMENT_EXT, OpenGlHelper.GL_RENDERBUFFER, this.depthBuffer); ++ OpenGlHelper.glFramebufferRenderbuffer(OpenGlHelper.GL_FRAMEBUFFER, org.lwjgl.opengl.EXTFramebufferObject.GL_STENCIL_ATTACHMENT_EXT, OpenGlHelper.GL_RENDERBUFFER, this.depthBuffer); + } } - this.func_147614_f(); + this.framebufferClear(); @@ -281,4 +290,36 @@ - GlStateManager.func_179086_m(i); - this.func_147609_e(); + GlStateManager.clear(i); + this.unbindFramebuffer(); } + + /*================================ FORGE START ================================================*/ @@ -39,9 +39,9 @@ + */ + public boolean enableStencil() + { -+ if (!OpenGlHelper.func_148822_b()) return false; ++ if (!OpenGlHelper.isFramebufferEnabled()) return false; + stencilEnabled = true; -+ this.func_147613_a(field_147621_c, field_147618_d); ++ this.createBindFramebuffer(framebufferWidth, framebufferHeight); + return true; //TODO: Find a way to detect if this failed? + } + diff --git a/patches.mcp/minecraft/net/minecraft/command/CommandEnchant.java.patch b/patches.mcp/minecraft/net/minecraft/command/CommandEnchant.java.patch new file mode 100644 index 000000000..c6ea2fffb --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/command/CommandEnchant.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/command/CommandEnchant.java ++++ ../src-work/minecraft/net/minecraft/command/CommandEnchant.java +@@ -95,7 +95,7 @@ + { + Enchantment enchantment2 = Enchantment.getEnchantmentById(short1); + +- if (!enchantment2.canApplyTogether(enchantment1)) ++ if (!enchantment2.canApplyTogether(enchantment1) || !enchantment1.canApplyTogether(enchantment2)) //Forge BugFix: Let Both enchantments veto being together + { + throw new CommandException("commands.enchant.cantCombine", new Object[] {enchantment1.getTranslatedName(j), enchantment2.getTranslatedName(nbttaglist.getCompoundTagAt(k).getShort("lvl"))}); + } diff --git a/patches.mcp/minecraft/net/minecraft/command/CommandFill.java.patch b/patches.mcp/minecraft/net/minecraft/command/CommandFill.java.patch new file mode 100644 index 000000000..205a36382 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/command/CommandFill.java.patch @@ -0,0 +1,28 @@ +--- ../src-base/minecraft/net/minecraft/command/CommandFill.java ++++ ../src-work/minecraft/net/minecraft/command/CommandFill.java +@@ -52,6 +52,7 @@ + { + i = parseInt(args[7], 0, 15); + } ++ IBlockState state = block.getStateFromMeta(i); + + BlockPos blockpos2 = new BlockPos(Math.min(blockpos.getX(), blockpos1.getX()), Math.min(blockpos.getY(), blockpos1.getY()), Math.min(blockpos.getZ(), blockpos1.getZ())); + BlockPos blockpos3 = new BlockPos(Math.max(blockpos.getX(), blockpos1.getX()), Math.max(blockpos.getY(), blockpos1.getY()), Math.max(blockpos.getZ(), blockpos1.getZ())); +@@ -79,7 +80,7 @@ + NBTTagCompound nbttagcompound = new NBTTagCompound(); + boolean flag = false; + +- if (args.length >= 10 && block.hasTileEntity()) ++ if (args.length >= 10 && block.hasTileEntity(state)) + { + String s = getChatComponentFromNthArg(sender, args, 9).getUnformattedText(); + +@@ -121,7 +122,7 @@ + continue; + } + } +- else if (args[8].equals("replace") && !block.hasTileEntity()) ++ else if (args[8].equals("replace") && !block.hasTileEntity(state)) + { + if (args.length > 9) + { diff --git a/patches/minecraft/net/minecraft/command/CommandHandler.java.patch b/patches.mcp/minecraft/net/minecraft/command/CommandHandler.java.patch similarity index 73% rename from patches/minecraft/net/minecraft/command/CommandHandler.java.patch rename to patches.mcp/minecraft/net/minecraft/command/CommandHandler.java.patch index 0d3e80726..08c37a03d 100644 --- a/patches/minecraft/net/minecraft/command/CommandHandler.java.patch +++ b/patches.mcp/minecraft/net/minecraft/command/CommandHandler.java.patch @@ -2,9 +2,9 @@ +++ ../src-work/minecraft/net/minecraft/command/CommandHandler.java @@ -48,6 +48,16 @@ } - else if (icommand.func_71519_b(p_71556_1_)) + else if (icommand.canCommandSenderUse(sender)) { -+ net.minecraftforge.event.CommandEvent event = new net.minecraftforge.event.CommandEvent(icommand, p_71556_1_, astring); ++ net.minecraftforge.event.CommandEvent event = new net.minecraftforge.event.CommandEvent(icommand, sender, astring); + if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) + { + if (event.exception != null) @@ -16,4 +16,4 @@ + if (i > -1) { - List list = PlayerSelector.func_179656_b(p_71556_1_, astring[i], Entity.class); + List list = PlayerSelector.matchEntities(sender, astring[i], Entity.class); diff --git a/patches.mcp/minecraft/net/minecraft/command/server/CommandSetBlock.java.patch b/patches.mcp/minecraft/net/minecraft/command/server/CommandSetBlock.java.patch new file mode 100644 index 000000000..44ccb6290 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/command/server/CommandSetBlock.java.patch @@ -0,0 +1,20 @@ +--- ../src-base/minecraft/net/minecraft/command/server/CommandSetBlock.java ++++ ../src-work/minecraft/net/minecraft/command/server/CommandSetBlock.java +@@ -54,6 +54,8 @@ + i = parseInt(args[4], 0, 15); + } + ++ IBlockState state = block.getStateFromMeta(i); ++ + World world = sender.getEntityWorld(); + + if (!world.isBlockLoaded(blockpos)) +@@ -65,7 +67,7 @@ + NBTTagCompound nbttagcompound = new NBTTagCompound(); + boolean flag = false; + +- if (args.length >= 7 && block.hasTileEntity()) ++ if (args.length >= 7 && block.hasTileEntity(state)) + { + String s = getChatComponentFromNthArg(sender, args, 6).getUnformattedText(); + diff --git a/patches/minecraft/net/minecraft/command/server/CommandTestForBlock.java.patch b/patches.mcp/minecraft/net/minecraft/command/server/CommandTestForBlock.java.patch similarity index 55% rename from patches/minecraft/net/minecraft/command/server/CommandTestForBlock.java.patch rename to patches.mcp/minecraft/net/minecraft/command/server/CommandTestForBlock.java.patch index 0542a21e8..c37587222 100644 --- a/patches/minecraft/net/minecraft/command/server/CommandTestForBlock.java.patch +++ b/patches.mcp/minecraft/net/minecraft/command/server/CommandTestForBlock.java.patch @@ -4,8 +4,8 @@ NBTTagCompound nbttagcompound = new NBTTagCompound(); boolean flag = false; -- if (p_71515_2_.length >= 6 && block.func_149716_u()) -+ if (p_71515_2_.length >= 6 && block.hasTileEntity(block.func_176203_a(i))) +- if (args.length >= 6 && block.hasTileEntity()) ++ if (args.length >= 6 && block.hasTileEntity(block.getStateFromMeta(i))) { - String s = func_147178_a(p_71515_1_, p_71515_2_, 5).func_150260_c(); + String s = getChatComponentFromNthArg(sender, args, 5).getUnformattedText(); diff --git a/patches/minecraft/net/minecraft/crash/CrashReport.java.patch b/patches.mcp/minecraft/net/minecraft/crash/CrashReport.java.patch similarity index 77% rename from patches/minecraft/net/minecraft/crash/CrashReport.java.patch rename to patches.mcp/minecraft/net/minecraft/crash/CrashReport.java.patch index 224cdfd43..1ff0379f3 100644 --- a/patches/minecraft/net/minecraft/crash/CrashReport.java.patch +++ b/patches.mcp/minecraft/net/minecraft/crash/CrashReport.java.patch @@ -1,13 +1,13 @@ --- ../src-base/minecraft/net/minecraft/crash/CrashReport.java +++ ../src-work/minecraft/net/minecraft/crash/CrashReport.java @@ -126,6 +126,7 @@ - return IntCache.func_85144_b(); + return IntCache.getCacheSizes(); } }); -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().enhanceCrashReport(this, this.field_85061_c); ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().enhanceCrashReport(this, this.theReportCategory); } - public String func_71501_a() + public String getDescription() @@ -220,6 +221,8 @@ { StringBuilder stringbuilder = new StringBuilder(); @@ -15,5 +15,5 @@ + net.minecraftforge.fml.common.asm.transformers.BlamingTransformer.onCrash(stringbuilder); + net.minecraftforge.fml.relauncher.CoreModManager.onCrash(stringbuilder); stringbuilder.append("// "); - stringbuilder.append(func_71503_h()); + stringbuilder.append(getWittyComment()); stringbuilder.append("\n\n"); diff --git a/patches.mcp/minecraft/net/minecraft/crash/CrashReportCategory.java.patch b/patches.mcp/minecraft/net/minecraft/crash/CrashReportCategory.java.patch new file mode 100644 index 000000000..775be4459 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/crash/CrashReportCategory.java.patch @@ -0,0 +1,16 @@ +--- ../src-base/minecraft/net/minecraft/crash/CrashReportCategory.java ++++ ../src-work/minecraft/net/minecraft/crash/CrashReportCategory.java +@@ -128,8 +128,11 @@ + } + else + { +- this.stackTrace = new StackTraceElement[astacktraceelement.length - 3 - size]; +- System.arraycopy(astacktraceelement, 3 + size, this.stackTrace, 0, this.stackTrace.length); ++ int len = astacktraceelement.length - 3 - size; ++ // Really Mojang, Still, god damn... ++ if (len <= 0) len = astacktraceelement.length; ++ this.stackTrace = new StackTraceElement[len]; ++ System.arraycopy(astacktraceelement, astacktraceelement.length - len, this.stackTrace, 0, this.stackTrace.length); + return this.stackTrace.length; + } + } diff --git a/patches/minecraft/net/minecraft/creativetab/CreativeTabs.java.patch b/patches.mcp/minecraft/net/minecraft/creativetab/CreativeTabs.java.patch similarity index 57% rename from patches/minecraft/net/minecraft/creativetab/CreativeTabs.java.patch rename to patches.mcp/minecraft/net/minecraft/creativetab/CreativeTabs.java.patch index 5e24561f7..c2f5798b4 100644 --- a/patches/minecraft/net/minecraft/creativetab/CreativeTabs.java.patch +++ b/patches.mcp/minecraft/net/minecraft/creativetab/CreativeTabs.java.patch @@ -1,7 +1,7 @@ --- ../src-base/minecraft/net/minecraft/creativetab/CreativeTabs.java +++ ../src-work/minecraft/net/minecraft/creativetab/CreativeTabs.java @@ -139,8 +139,22 @@ - private ItemStack field_151245_t; + private ItemStack iconItemStack; private static final String __OBFID = "CL_00000005"; + public CreativeTabs(String label) @@ -9,39 +9,39 @@ + this(getNextID(), label); + } + - public CreativeTabs(int p_i1853_1_, String p_i1853_2_) + public CreativeTabs(int index, String label) { -+ if (p_i1853_1_ >= field_78032_a.length) ++ if (index >= creativeTabArray.length) + { -+ CreativeTabs[] tmp = new CreativeTabs[p_i1853_1_ + 1]; -+ for (int x = 0; x < field_78032_a.length; x++) ++ CreativeTabs[] tmp = new CreativeTabs[index + 1]; ++ for (int x = 0; x < creativeTabArray.length; x++) + { -+ tmp[x] = field_78032_a[x]; ++ tmp[x] = creativeTabArray[x]; + } -+ field_78032_a = tmp; ++ creativeTabArray = tmp; + } - this.field_78033_n = p_i1853_1_; - this.field_78034_o = p_i1853_2_; - field_78032_a[p_i1853_1_] = this; + this.tabIndex = index; + this.tabLabel = label; + creativeTabArray[index] = this; @@ -223,12 +237,20 @@ @SideOnly(Side.CLIENT) - public int func_78020_k() + public int getTabColumn() { -+ if (field_78033_n > 11) ++ if (tabIndex > 11) + { -+ return ((field_78033_n - 12) % 10) % 5; ++ return ((tabIndex - 12) % 10) % 5; + } - return this.field_78033_n % 6; + return this.tabIndex % 6; } @SideOnly(Side.CLIENT) - public boolean func_78023_l() + public boolean isTabInFirstRow() { -+ if (field_78033_n > 11) ++ if (tabIndex > 11) + { -+ return ((field_78033_n - 12) % 10) < 5; ++ return ((tabIndex - 12) % 10) < 5; + } - return this.field_78033_n < 6; + return this.tabIndex < 6; } @@ -278,10 +300,17 @@ @@ -53,13 +53,13 @@ + continue; + } -- if (item != null && item.func_77640_w() == this) +- if (item != null && item.getCreativeTab() == this) + for (CreativeTabs tab : item.getCreativeTabs()) { -- item.func_150895_a(item, this, p_78018_1_); +- item.getSubItems(item, this, p_78018_1_); + if (tab == this) + { -+ item.func_150895_a(item, this, p_78018_1_); ++ item.getSubItems(item, this, p_78018_1_); + } } } @@ -71,16 +71,16 @@ + + public int getTabPage() + { -+ if (field_78033_n > 11) ++ if (tabIndex > 11) + { -+ return ((field_78033_n - 12) / 10) + 1; ++ return ((tabIndex - 12) / 10) + 1; + } + return 0; + } + + public static int getNextID() + { -+ return field_78032_a.length; ++ return creativeTabArray.length; + } + + /** @@ -90,7 +90,7 @@ + */ + public boolean hasSearchBar() + { -+ return field_78033_n == CreativeTabs.field_78027_g.field_78033_n; ++ return tabIndex == CreativeTabs.tabAllSearch.tabIndex; + } + + /** diff --git a/patches/minecraft/net/minecraft/enchantment/Enchantment.java.patch b/patches.mcp/minecraft/net/minecraft/enchantment/Enchantment.java.patch similarity index 68% rename from patches/minecraft/net/minecraft/enchantment/Enchantment.java.patch rename to patches.mcp/minecraft/net/minecraft/enchantment/Enchantment.java.patch index 604488bc9..4173a9d40 100644 --- a/patches/minecraft/net/minecraft/enchantment/Enchantment.java.patch +++ b/patches.mcp/minecraft/net/minecraft/enchantment/Enchantment.java.patch @@ -2,24 +2,24 @@ +++ ../src-work/minecraft/net/minecraft/enchantment/Enchantment.java @@ -62,7 +62,7 @@ - if (field_180311_a[p_i45771_1_] != null) + if (enchantmentsList[enchID] != null) { - throw new IllegalArgumentException("Duplicate enchantment id!"); -+ throw new IllegalArgumentException("Duplicate enchantment id! " + this.getClass() + " and " + field_180311_a[p_i45771_1_].getClass() + " Enchantment ID:" + p_i45771_1_); ++ throw new IllegalArgumentException("Duplicate enchantment id! " + this.getClass() + " and " + enchantmentsList[enchID].getClass() + " Enchantment ID:" + enchID); } else { @@ -149,13 +149,52 @@ - public boolean func_92089_a(ItemStack p_92089_1_) + public boolean canApply(ItemStack stack) { -- return this.field_77351_y.func_77557_a(p_92089_1_.func_77973_b()); -+ return canApplyAtEnchantingTable(p_92089_1_); +- return this.type.canEnchantItem(stack.getItem()); ++ return canApplyAtEnchantingTable(stack); } - public void func_151368_a(EntityLivingBase p_151368_1_, Entity p_151368_2_, int p_151368_3_) {} + public void onEntityDamaged(EntityLivingBase user, Entity target, int level) {} - public void func_151367_b(EntityLivingBase p_151367_1_, Entity p_151367_2_, int p_151367_3_) {} + public void onUserHurt(EntityLivingBase user, Entity attacker, int level) {} + /** + * This applies specifically to applying at the enchanting table. The other method {@link #canApply(ItemStack)} @@ -29,7 +29,7 @@ + */ + public boolean canApplyAtEnchantingTable(ItemStack stack) + { -+ return this.field_77351_y.func_77557_a(stack.func_77973_b()); ++ return this.type.canEnchantItem(stack.getItem()); + } + + private static final java.lang.reflect.Field bookSetter = Enchantment.class.getDeclaredFields()[1]; @@ -43,7 +43,7 @@ + try + { + net.minecraftforge.common.util.EnumHelper.setFailsafeFieldValue(bookSetter, null, -+ com.google.common.collect.ObjectArrays.concat(field_77331_b, enchantment)); ++ com.google.common.collect.ObjectArrays.concat(enchantmentsBookList, enchantment)); + } + catch (Exception e) + { diff --git a/patches/minecraft/net/minecraft/enchantment/EnchantmentHelper.java.patch b/patches.mcp/minecraft/net/minecraft/enchantment/EnchantmentHelper.java.patch similarity index 50% rename from patches/minecraft/net/minecraft/enchantment/EnchantmentHelper.java.patch rename to patches.mcp/minecraft/net/minecraft/enchantment/EnchantmentHelper.java.patch index 1f684188d..fa0235c3a 100644 --- a/patches/minecraft/net/minecraft/enchantment/EnchantmentHelper.java.patch +++ b/patches.mcp/minecraft/net/minecraft/enchantment/EnchantmentHelper.java.patch @@ -1,19 +1,19 @@ --- ../src-base/minecraft/net/minecraft/enchantment/EnchantmentHelper.java +++ ../src-work/minecraft/net/minecraft/enchantment/EnchantmentHelper.java @@ -308,7 +308,7 @@ - public static int func_77514_a(Random p_77514_0_, int p_77514_1_, int p_77514_2_, ItemStack p_77514_3_) + public static int calcItemStackEnchantability(Random p_77514_0_, int p_77514_1_, int p_77514_2_, ItemStack p_77514_3_) { - Item item = p_77514_3_.func_77973_b(); -- int k = item.func_77619_b(); + Item item = p_77514_3_.getItem(); +- int k = item.getItemEnchantability(); + int k = item.getItemEnchantability(p_77514_3_); if (k <= 0) { @@ -361,7 +361,7 @@ - public static List func_77513_b(Random p_77513_0_, ItemStack p_77513_1_, int p_77513_2_) + public static List buildEnchantmentList(Random p_77513_0_, ItemStack p_77513_1_, int p_77513_2_) { - Item item = p_77513_1_.func_77973_b(); -- int j = item.func_77619_b(); + Item item = p_77513_1_.getItem(); +- int j = item.getItemEnchantability(); + int j = item.getItemEnchantability(p_77513_1_); if (j <= 0) @@ -22,10 +22,10 @@ { EnchantmentData enchantmentdata1 = (EnchantmentData)iterator1.next(); -- if (enchantmentdata1.field_76302_b.func_77326_a(Enchantment.func_180306_c(integer.intValue()))) -+ Enchantment e1 = enchantmentdata1.field_76302_b; -+ Enchantment e2 = Enchantment.func_180306_c(integer.intValue()); -+ if (e1.func_77326_a(e2) && e2.func_77326_a(e1)) //Forge BugFix: Let Both enchantments veto being together +- if (enchantmentdata1.enchantmentobj.canApplyTogether(Enchantment.getEnchantmentById(integer.intValue()))) ++ Enchantment e1 = enchantmentdata1.enchantmentobj; ++ Enchantment e2 = Enchantment.getEnchantmentById(integer.intValue()); ++ if (e1.canApplyTogether(e2) && e2.canApplyTogether(e1)) //Forge BugFix: Let Both enchantments veto being together { continue; } @@ -33,9 +33,9 @@ { Enchantment enchantment = aenchantment[k]; -- if (enchantment != null && (enchantment.field_77351_y.func_77557_a(item) || flag)) +- if (enchantment != null && (enchantment.type.canEnchantItem(item) || flag)) + if (enchantment == null) continue; -+ if (enchantment.canApplyAtEnchantingTable(p_77505_1_) || ((item == Items.field_151122_aG) && enchantment.isAllowedOnBooks())) ++ if (enchantment.canApplyAtEnchantingTable(p_77505_1_) || ((item == Items.book) && enchantment.isAllowedOnBooks())) { - for (int l = enchantment.func_77319_d(); l <= enchantment.func_77325_b(); ++l) + for (int l = enchantment.getMinLevel(); l <= enchantment.getMaxLevel(); ++l) { diff --git a/patches/minecraft/net/minecraft/entity/Entity.java.patch b/patches.mcp/minecraft/net/minecraft/entity/Entity.java.patch similarity index 69% rename from patches/minecraft/net/minecraft/entity/Entity.java.patch rename to patches.mcp/minecraft/net/minecraft/entity/Entity.java.patch index c120a7df7..6631d32c3 100644 --- a/patches/minecraft/net/minecraft/entity/Entity.java.patch +++ b/patches.mcp/minecraft/net/minecraft/entity/Entity.java.patch @@ -1,7 +1,7 @@ --- ../src-base/minecraft/net/minecraft/entity/Entity.java +++ ../src-work/minecraft/net/minecraft/entity/Entity.java @@ -128,6 +128,14 @@ - private final CommandResultStats field_174837_as; + private final CommandResultStats cmdResultStats; private static final String __OBFID = "CL_00001533"; + /** Forge: Used to store custom data for each entity. */ @@ -12,41 +12,41 @@ + + protected java.util.HashMap extendedProperties = new java.util.HashMap(); + - public int func_145782_y() + public int getEntityId() { - return this.field_145783_c; + return this.entityId; @@ -171,6 +179,8 @@ - this.field_70180_af.func_75682_a(2, ""); - this.field_70180_af.func_75682_a(4, Byte.valueOf((byte)0)); - this.func_70088_a(); + this.dataWatcher.addObject(2, ""); + this.dataWatcher.addObject(4, Byte.valueOf((byte)0)); + this.entityInit(); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.EntityEvent.EntityConstructing(this)); -+ for (net.minecraftforge.common.IExtendedEntityProperties props : extendedProperties.values()) props.init(this, p_i1582_1_); ++ for (net.minecraftforge.common.IExtendedEntityProperties props : extendedProperties.values()) props.init(this, worldIn); } - protected abstract void func_70088_a(); + protected abstract void entityInit(); @@ -1010,10 +1020,7 @@ - if (block.func_149688_o() == p_70055_1_) + if (block.getMaterial() == materialIn) { -- float f = BlockLiquid.func_149801_b(iblockstate.func_177230_c().func_176201_c(iblockstate)) - 0.11111111F; -- float f1 = (float)(blockpos.func_177956_o() + 1) - f; +- float f = BlockLiquid.getLiquidHeightPercent(iblockstate.getBlock().getMetaFromState(iblockstate)) - 0.11111111F; +- float f1 = (float)(blockpos.getY() + 1) - f; - boolean flag = d0 < (double)f1; - return !flag && this instanceof EntityPlayer ? false : flag; -+ return net.minecraftforge.common.ForgeHooks.isInsideOfMaterial(p_70055_1_, this, blockpos); ++ return net.minecraftforge.common.ForgeHooks.isInsideOfMaterial(materialIn, this, blockpos); } else { @@ -1378,6 +1385,21 @@ - p_70109_1_.func_74757_a("Silent", this.func_174814_R()); + tagCompund.setBoolean("Silent", this.isSilent()); } -+ if (customEntityData != null) p_70109_1_.func_74782_a("ForgeData", customEntityData); ++ if (customEntityData != null) tagCompund.setTag("ForgeData", customEntityData); + for (String identifier : this.extendedProperties.keySet()) + { + try + { + net.minecraftforge.common.IExtendedEntityProperties props = this.extendedProperties.get(identifier); -+ props.saveNBTData(p_70109_1_); ++ props.saveNBTData(tagCompund); + } + catch (Throwable t) + { @@ -55,21 +55,21 @@ + } + } + - this.func_70014_b(p_70109_1_); + this.writeEntityToNBT(tagCompund); - if (this.field_70154_o != null) + if (this.ridingEntity != null) @@ -1458,6 +1480,28 @@ - this.func_174805_g(p_70020_1_.func_74767_n("CustomNameVisible")); - this.field_174837_as.func_179668_a(p_70020_1_); - this.func_174810_b(p_70020_1_.func_74767_n("Silent")); + this.setAlwaysRenderNameTag(tagCompund.getBoolean("CustomNameVisible")); + this.cmdResultStats.func_179668_a(tagCompund); + this.setSilent(tagCompund.getBoolean("Silent")); + -+ if (p_70020_1_.func_74764_b("ForgeData")) customEntityData = p_70020_1_.func_74775_l("ForgeData"); ++ if (tagCompund.hasKey("ForgeData")) customEntityData = tagCompund.getCompoundTag("ForgeData"); + for (String identifier : this.extendedProperties.keySet()) + { + try + { + net.minecraftforge.common.IExtendedEntityProperties props = this.extendedProperties.get(identifier); -+ props.loadNBTData(p_70020_1_); ++ props.loadNBTData(tagCompund); + } + catch (Throwable t) + { @@ -79,52 +79,52 @@ + } + + //Rawr, legacy code, Vanilla added a UUID, keep this so older maps will convert properly -+ if (p_70020_1_.func_74764_b("PersistentIDMSB") && p_70020_1_.func_74764_b("PersistentIDLSB")) ++ if (tagCompund.hasKey("PersistentIDMSB") && tagCompund.hasKey("PersistentIDLSB")) + { -+ this.field_96093_i = new UUID(p_70020_1_.func_74763_f("PersistentIDMSB"), p_70020_1_.func_74763_f("PersistentIDLSB")); ++ this.entityUniqueID = new UUID(tagCompund.getLong("PersistentIDMSB"), tagCompund.getLong("PersistentIDLSB")); + } + - this.func_70037_a(p_70020_1_); + this.readEntityFromNBT(tagCompund); - if (this.func_142008_O()) + if (this.shouldSetPosAfterLoading()) @@ -1536,7 +1580,10 @@ { - EntityItem entityitem = new EntityItem(this.field_70170_p, this.field_70165_t, this.field_70163_u + (double)p_70099_2_, this.field_70161_v, p_70099_1_); - entityitem.func_174869_p(); -- this.field_70170_p.func_72838_d(entityitem); + EntityItem entityitem = new EntityItem(this.worldObj, this.posX, this.posY + (double)offsetY, this.posZ, itemStackIn); + entityitem.setDefaultPickupDelay(); +- this.worldObj.spawnEntityInWorld(entityitem); + if (captureDrops) + this.capturedDrops.add(entityitem); + else -+ this.field_70170_p.func_72838_d(entityitem); ++ this.worldObj.spawnEntityInWorld(entityitem); return entityitem; } else @@ -1672,6 +1719,7 @@ - public void func_70078_a(Entity p_70078_1_) + public void mountEntity(Entity entityIn) { -+ if(!(this instanceof EntityLivingBase) && !net.minecraftforge.event.ForgeEventFactory.canMountEntity(this, p_70078_1_, true)){ return; } - this.field_70149_e = 0.0D; - this.field_70147_f = 0.0D; ++ if(!(this instanceof EntityLivingBase) && !net.minecraftforge.event.ForgeEventFactory.canMountEntity(this, entityIn, true)){ return; } + this.entityRiderPitchDelta = 0.0D; + this.entityRiderYawDelta = 0.0D; @@ -1810,7 +1858,7 @@ - public boolean func_70115_ae() + public boolean isRiding() { -- return this.field_70154_o != null; -+ return this.field_70154_o != null && field_70154_o.shouldRiderSit(); +- return this.ridingEntity != null; ++ return this.ridingEntity != null && ridingEntity.shouldRiderSit(); } - public boolean func_70093_af() + public boolean isSneaking() @@ -2103,7 +2151,7 @@ - public float func_180428_a(Explosion p_180428_1_, World p_180428_2_, BlockPos p_180428_3_, IBlockState p_180428_4_) + public float getExplosionResistance(Explosion p_180428_1_, World worldIn, BlockPos p_180428_3_, IBlockState p_180428_4_) { -- return p_180428_4_.func_177230_c().func_149638_a(this); -+ return p_180428_4_.func_177230_c().getExplosionResistance(p_180428_2_, p_180428_3_.func_177963_a(0, func_70047_e(), 0), this, p_180428_1_); +- return p_180428_4_.getBlock().getExplosionResistance(this); ++ return p_180428_4_.getBlock().getExplosionResistance(worldIn, p_180428_3_.add(0, getEyeHeight(), 0), this, p_180428_1_); } - public boolean func_174816_a(Explosion p_174816_1_, World p_174816_2_, BlockPos p_174816_3_, IBlockState p_174816_4_, float p_174816_5_) + public boolean func_174816_a(Explosion p_174816_1_, World worldIn, BlockPos p_174816_3_, IBlockState p_174816_4_, float p_174816_5_) @@ -2357,4 +2405,184 @@ EnchantmentHelper.func_151385_b(p_174815_1_, p_174815_2_); @@ -164,22 +164,22 @@ + { + if (this instanceof net.minecraft.entity.item.EntityPainting) + { -+ return new ItemStack(net.minecraft.init.Items.field_151159_an); ++ return new ItemStack(net.minecraft.init.Items.painting); + } + else if (this instanceof EntityLeashKnot) + { -+ return new ItemStack(net.minecraft.init.Items.field_151058_ca); ++ return new ItemStack(net.minecraft.init.Items.lead); + } + else if (this instanceof net.minecraft.entity.item.EntityItemFrame) + { -+ ItemStack held = ((net.minecraft.entity.item.EntityItemFrame)this).func_82335_i(); ++ ItemStack held = ((net.minecraft.entity.item.EntityItemFrame)this).getDisplayedItem(); + if (held == null) + { -+ return new ItemStack(net.minecraft.init.Items.field_151160_bD); ++ return new ItemStack(net.minecraft.init.Items.item_frame); + } + else + { -+ return held.func_77946_l(); ++ return held.copy(); + } + } + else if (this instanceof net.minecraft.entity.item.EntityMinecart) @@ -188,24 +188,24 @@ + } + else if (this instanceof net.minecraft.entity.item.EntityBoat) + { -+ return new ItemStack(net.minecraft.init.Items.field_151124_az); ++ return new ItemStack(net.minecraft.init.Items.boat); + } + else if (this instanceof net.minecraft.entity.item.EntityArmorStand) + { -+ return new ItemStack(net.minecraft.init.Items.field_179565_cj); ++ return new ItemStack(net.minecraft.init.Items.armor_stand); + } + else + { -+ int id = EntityList.func_75619_a(this); -+ if (id > 0 && EntityList.field_75627_a.containsKey(id)) ++ int id = EntityList.getEntityID(this); ++ if (id > 0 && EntityList.entityEggs.containsKey(id)) + { -+ return new ItemStack(net.minecraft.init.Items.field_151063_bx, 1, id); ++ return new ItemStack(net.minecraft.init.Items.spawn_egg, 1, id); + } -+ String name = EntityList.func_75621_b(this); ++ String name = EntityList.getEntityString(this); + if (name != null && net.minecraftforge.fml.common.registry.EntityRegistry.getEggs().containsKey(name)) + { -+ ItemStack stack = new ItemStack(net.minecraft.init.Items.field_151063_bx); -+ stack.func_77983_a("entity_name", new net.minecraft.nbt.NBTTagString(name)); ++ ItemStack stack = new ItemStack(net.minecraft.init.Items.spawn_egg); ++ stack.setTagInfo("entity_name", new net.minecraft.nbt.NBTTagString(name)); + return stack; + } + } @@ -214,7 +214,7 @@ + + public UUID getPersistentID() + { -+ return field_96093_i; ++ return entityUniqueID; + } + + /** @@ -222,7 +222,7 @@ + */ + public final void resetEntityId() + { -+ this.field_145783_c = field_70152_a++; ++ this.entityId = nextEntityID++; + } + + public boolean shouldRenderInPass(int pass) @@ -238,8 +238,8 @@ + */ + public boolean isCreatureType(EnumCreatureType type, boolean forSpawnCount) + { -+ if (forSpawnCount && (this instanceof EntityLiving) && ((EntityLiving)this).func_104002_bU()) return false; -+ return type.func_75598_a().isAssignableFrom(this.getClass()); ++ if (forSpawnCount && (this instanceof EntityLiving) && ((EntityLiving)this).isNoDespawnRequired()) return false; ++ return type.getCreatureClass().isAssignableFrom(this.getClass()); + } + + /** diff --git a/patches.mcp/minecraft/net/minecraft/entity/EntityHanging.java.patch b/patches.mcp/minecraft/net/minecraft/entity/EntityHanging.java.patch new file mode 100644 index 000000000..a9cab8a70 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/entity/EntityHanging.java.patch @@ -0,0 +1,12 @@ +--- ../src-base/minecraft/net/minecraft/entity/EntityHanging.java ++++ ../src-work/minecraft/net/minecraft/entity/EntityHanging.java +@@ -124,6 +124,9 @@ + { + BlockPos blockpos1 = blockpos.offset(enumfacing, k).up(l); + Block block = this.worldObj.getBlockState(blockpos1).getBlock(); ++ ++ if ( block.isSideSolid( this.worldObj, blockpos1, this.field_174860_b )) ++ continue; + + if (!block.getMaterial().isSolid() && !BlockRedstoneDiode.isRedstoneRepeaterBlockID(block)) + { diff --git a/patches/minecraft/net/minecraft/entity/EntityList.java.patch b/patches.mcp/minecraft/net/minecraft/entity/EntityList.java.patch similarity index 62% rename from patches/minecraft/net/minecraft/entity/EntityList.java.patch rename to patches.mcp/minecraft/net/minecraft/entity/EntityList.java.patch index 800d27c1b..2c4220234 100644 --- a/patches/minecraft/net/minecraft/entity/EntityList.java.patch +++ b/patches.mcp/minecraft/net/minecraft/entity/EntityList.java.patch @@ -2,21 +2,21 @@ +++ ../src-work/minecraft/net/minecraft/entity/EntityList.java @@ -90,6 +90,7 @@ - public static void func_75618_a(Class p_75618_0_, String p_75618_1_, int p_75618_2_) + public static void addMapping(Class p_75618_0_, String p_75618_1_, int p_75618_2_) { + if (p_75618_2_ < 0 || p_75618_2_ > 255) throw new IllegalArgumentException("Attempted to register a entity with invalid ID: " + p_75618_2_ + " Name: " + p_75618_1_ + " Class: " + p_75618_0_); - if (field_75625_b.containsKey(p_75618_1_)) + if (stringToClassMapping.containsKey(p_75618_1_)) { throw new IllegalArgumentException("ID is already registered: " + p_75618_1_); @@ -153,9 +154,10 @@ - p_75615_0_.func_82580_o("Type"); + p_75615_0_.removeTag("Type"); } + Class oclass = null; try { -- Class oclass = (Class)field_75625_b.get(p_75615_0_.func_74779_i("id")); -+ oclass = (Class)field_75625_b.get(p_75615_0_.func_74779_i("id")); +- Class oclass = (Class)stringToClassMapping.get(p_75615_0_.getString("id")); ++ oclass = (Class)stringToClassMapping.get(p_75615_0_.getString("id")); if (oclass != null) { @@ -26,13 +26,13 @@ { + try + { - entity.func_70020_e(p_75615_0_); + entity.readFromNBT(p_75615_0_); + } + catch (Exception e) + { + net.minecraftforge.fml.common.FMLLog.log(org.apache.logging.log4j.Level.ERROR, e, + "An Entity %s(%s) has thrown an exception during loading, its state cannot be restored. Report this to the mod author", -+ p_75615_0_.func_74779_i("id"), oclass.getName()); ++ p_75615_0_.getString("id"), oclass.getName()); + entity = null; + } } @@ -43,26 +43,26 @@ public static class EntityEggInfo { + @Deprecated // This is not always a valid number in the global ID list. - public final int field_75613_a; + public final int spawnedID; + public final String name; - public final int field_75611_b; - public final int field_75612_c; + public final int primaryColor; + public final int secondaryColor; public final StatBase field_151512_d; @@ -358,6 +372,17 @@ - this.field_75612_c = p_i1583_3_; - this.field_151512_d = StatList.func_151182_a(this); - this.field_151513_e = StatList.func_151176_b(this); -+ this.name = EntityList.func_75617_a(p_i1583_1_); + this.secondaryColor = p_i1583_3_; + this.field_151512_d = StatList.getStatKillEntity(this); + this.field_151513_e = StatList.getStatEntityKilledBy(this); ++ this.name = EntityList.getStringFromID(p_i1583_1_); } + + public EntityEggInfo(String name, int primaryColor, int secondaryColor) + { -+ this.field_75613_a = -1; ++ this.spawnedID = -1; + this.name = name; -+ this.field_75611_b = primaryColor; -+ this.field_75612_c = secondaryColor; -+ this.field_151512_d = (new StatBase("stat.killEntity." + name, new net.minecraft.util.ChatComponentTranslation("stat.entityKill", new net.minecraft.util.ChatComponentTranslation("entity." + name + ".name")))).func_75971_g(); -+ this.field_151513_e = (new StatBase("stat.entityKilledBy." + name, new net.minecraft.util.ChatComponentTranslation("stat.entityKilledBy", new net.minecraft.util.ChatComponentTranslation("entity." + name + ".name")))).func_75971_g(); ++ this.primaryColor = primaryColor; ++ this.secondaryColor = secondaryColor; ++ this.field_151512_d = (new StatBase("stat.killEntity." + name, new net.minecraft.util.ChatComponentTranslation("stat.entityKill", new net.minecraft.util.ChatComponentTranslation("entity." + name + ".name")))).registerStat(); ++ this.field_151513_e = (new StatBase("stat.entityKilledBy." + name, new net.minecraft.util.ChatComponentTranslation("stat.entityKilledBy", new net.minecraft.util.ChatComponentTranslation("entity." + name + ".name")))).registerStat(); + } } } diff --git a/patches.mcp/minecraft/net/minecraft/entity/EntityLiving.java.patch b/patches.mcp/minecraft/net/minecraft/entity/EntityLiving.java.patch new file mode 100644 index 000000000..876ec7925 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/entity/EntityLiving.java.patch @@ -0,0 +1,41 @@ +--- ../src-base/minecraft/net/minecraft/entity/EntityLiving.java ++++ ../src-work/minecraft/net/minecraft/entity/EntityLiving.java +@@ -124,6 +124,7 @@ + public void setAttackTarget(EntityLivingBase p_70624_1_) + { + this.attackTarget = p_70624_1_; ++ net.minecraftforge.common.ForgeHooks.onLivingSetAttackTarget(this, p_70624_1_); + } + + public boolean canAttackClass(Class p_70686_1_) +@@ -507,10 +508,22 @@ + + protected void despawnEntity() + { ++ net.minecraftforge.fml.common.eventhandler.Event.Result result = null; + if (this.persistenceRequired) + { + this.entityAge = 0; + } ++ else if ((this.entityAge & 0x1F) == 0x1F && (result = net.minecraftforge.event.ForgeEventFactory.canEntityDespawn(this)) != net.minecraftforge.fml.common.eventhandler.Event.Result.DEFAULT) ++ { ++ if (result == net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) ++ { ++ this.entityAge = 0; ++ } ++ else ++ { ++ this.setDead(); ++ } ++ } + else + { + EntityPlayer entityplayer = this.worldObj.getClosestPlayerToEntity(this, -1.0D); +@@ -628,7 +641,6 @@ + return this.worldObj.checkNoEntityCollision(this.getEntityBoundingBox(), this) && this.worldObj.getCollidingBoundingBoxes(this, this.getEntityBoundingBox()).isEmpty() && !this.worldObj.isAnyLiquid(this.getEntityBoundingBox()); + } + +- @SideOnly(Side.CLIENT) + public float getRenderSizeModifier() + { + return 1.0F; diff --git a/patches.mcp/minecraft/net/minecraft/entity/EntityLivingBase.java.patch b/patches.mcp/minecraft/net/minecraft/entity/EntityLivingBase.java.patch new file mode 100644 index 000000000..42dd1f820 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/entity/EntityLivingBase.java.patch @@ -0,0 +1,212 @@ +--- ../src-base/minecraft/net/minecraft/entity/EntityLivingBase.java ++++ ../src-work/minecraft/net/minecraft/entity/EntityLivingBase.java +@@ -233,7 +233,7 @@ + } + } + +- if (!this.worldObj.isRemote && this.isRiding() && this.ridingEntity instanceof EntityLivingBase) ++ if (!this.worldObj.isRemote && this.isRiding() && this.ridingEntity != null && ridingEntity.shouldDismountInWater(this)) + { + this.mountEntity((Entity)null); + } +@@ -316,7 +316,7 @@ + if (!this.worldObj.isRemote && (this.recentlyHit > 0 || this.isPlayer()) && this.func_146066_aG() && this.worldObj.getGameRules().getGameRuleBooleanValue("doMobLoot")) + { + i = this.getExperiencePoints(this.attackingPlayer); +- ++ i = net.minecraftforge.event.ForgeEventFactory.getExperienceDrop(this, this.attackingPlayer, i); + while (i > 0) + { + int j = EntityXPOrb.getXPSplit(i); +@@ -377,6 +377,7 @@ + { + this.entityLivingToAttack = livingBase; + this.revengeTimer = this.ticksExisted; ++ net.minecraftforge.common.ForgeHooks.onLivingSetAttackTarget(this, livingBase); + } + + public EntityLivingBase getLastAttacker() +@@ -672,7 +673,6 @@ + return this.getCreatureAttribute() == EnumCreatureAttribute.UNDEAD; + } + +- @SideOnly(Side.CLIENT) + public void removePotionEffectClient(int p_70618_1_) + { + this.activePotionsMap.remove(Integer.valueOf(p_70618_1_)); +@@ -721,6 +721,8 @@ + + public void heal(float healAmount) + { ++ healAmount = net.minecraftforge.event.ForgeEventFactory.onLivingHeal(this, healAmount); ++ if (healAmount <= 0) return; + float f1 = this.getHealth(); + + if (f1 > 0.0F) +@@ -741,6 +743,7 @@ + + public boolean attackEntityFrom(DamageSource source, float amount) + { ++ if (!net.minecraftforge.common.ForgeHooks.onLivingAttack(this, source, amount)) return false; + if (this.isEntityInvulnerable(source)) + { + return false; +@@ -806,9 +809,9 @@ + this.recentlyHit = 100; + this.attackingPlayer = (EntityPlayer)entity; + } +- else if (entity instanceof EntityWolf) ++ else if (entity instanceof net.minecraft.entity.passive.EntityTameable) + { +- EntityWolf entitywolf = (EntityWolf)entity; ++ net.minecraft.entity.passive.EntityTameable entitywolf = (net.minecraft.entity.passive.EntityTameable)entity; + + if (entitywolf.isTamed()) + { +@@ -894,6 +897,7 @@ + + public void onDeath(DamageSource cause) + { ++ if (net.minecraftforge.common.ForgeHooks.onLivingDeath(this, cause)) return; + Entity entity = cause.getEntity(); + EntityLivingBase entitylivingbase = this.func_94060_bK(); + +@@ -919,6 +923,9 @@ + i = EnchantmentHelper.getLootingModifier((EntityLivingBase)entity); + } + ++ captureDrops = true; ++ capturedDrops.clear(); ++ + if (this.func_146066_aG() && this.worldObj.getGameRules().getGameRuleBooleanValue("doMobLoot")) + { + this.dropFewItems(this.recentlyHit > 0, i); +@@ -929,6 +936,16 @@ + this.addRandomArmor(); + } + } ++ ++ captureDrops = false; ++ ++ if (!net.minecraftforge.common.ForgeHooks.onLivingDrops(this, cause, capturedDrops, i, recentlyHit > 0)) ++ { ++ for (EntityItem item : capturedDrops) ++ { ++ worldObj.spawnEntityInWorld(item); ++ } ++ } + } + + this.worldObj.setEntityState(this, (byte)3); +@@ -977,7 +994,7 @@ + int j = MathHelper.floor_double(this.getEntityBoundingBox().minY); + int k = MathHelper.floor_double(this.posZ); + Block block = this.worldObj.getBlockState(new BlockPos(i, j, k)).getBlock(); +- return (block == Blocks.ladder || block == Blocks.vine) && (!(this instanceof EntityPlayer) || !((EntityPlayer)this).isSpectator()); ++ return net.minecraftforge.common.ForgeHooks.isLivingOnLadder(block, worldObj, new BlockPos(i, j, k), this); + } + + public boolean isEntityAlive() +@@ -987,6 +1004,9 @@ + + public void fall(float distance, float damageMultiplier) + { ++ float[] ret = net.minecraftforge.common.ForgeHooks.onLivingFall(this, distance, damageMultiplier); ++ if (ret == null) return; ++ distance = ret[0]; damageMultiplier = ret[1]; + super.fall(distance, damageMultiplier); + PotionEffect potioneffect = this.getActivePotionEffect(Potion.jump); + float f2 = potioneffect != null ? (float)(potioneffect.getAmplifier() + 1) : 0.0F; +@@ -1105,6 +1125,8 @@ + { + if (!this.isEntityInvulnerable(damageSrc)) + { ++ damageAmount = net.minecraftforge.common.ForgeHooks.onLivingHurt(this, damageSrc, damageAmount); ++ if (damageAmount <= 0) return; + damageAmount = this.applyArmorCalculations(damageSrc, damageAmount); + damageAmount = this.applyPotionDamageCalculations(damageSrc, damageAmount); + float f1 = damageAmount; +@@ -1153,6 +1175,11 @@ + + public void swingItem() + { ++ ItemStack stack = this.getHeldItem(); ++ if (stack != null && stack.getItem() != null) ++ { ++ if (stack.getItem().onEntitySwing(this, stack)) return; ++ } + if (!this.isSwingInProgress || this.swingProgressInt >= this.getArmSwingAnimationEnd() / 2 || this.swingProgressInt < 0) + { + this.swingProgressInt = -1; +@@ -1294,6 +1321,7 @@ + + public void dismountEntity(Entity p_110145_1_) + { ++ if(!net.minecraftforge.event.ForgeEventFactory.canMountEntity(this, p_110145_1_, false)){ return; } + double d0 = p_110145_1_.posX; + double d1 = p_110145_1_.getEntityBoundingBox().minY + (double)p_110145_1_.height; + double d2 = p_110145_1_.posZ; +@@ -1359,6 +1387,7 @@ + } + + this.isAirBorne = true; ++ net.minecraftforge.common.ForgeHooks.onLivingJump(this); + } + + protected void updateAITick() +@@ -1545,6 +1574,7 @@ + + public void onUpdate() + { ++ if (net.minecraftforge.common.ForgeHooks.onLivingUpdate(this)) return; + super.onUpdate(); + + if (!this.worldObj.isRemote) +@@ -1828,6 +1858,7 @@ + + public void mountEntity(Entity entityIn) + { ++ if(!net.minecraftforge.event.ForgeEventFactory.canMountEntity(this, entityIn, true)){ return; } + if (this.ridingEntity != null && entityIn == null) + { + if (!this.worldObj.isRemote) +@@ -2000,4 +2031,39 @@ + { + this.potionsNeedUpdate = true; + } ++ ++ /*** ++ * Removes all potion effects that have curativeItem as a curative item for its effect ++ * @param curativeItem The itemstack we are using to cure potion effects ++ */ ++ public void curePotionEffects(ItemStack curativeItem) ++ { ++ Iterator potionKey = activePotionsMap.keySet().iterator(); ++ if (worldObj.isRemote) return; ++ ++ while (potionKey.hasNext()) ++ { ++ Integer key = potionKey.next(); ++ PotionEffect effect = (PotionEffect)activePotionsMap.get(key); ++ ++ if (effect.isCurativeItem(curativeItem)) ++ { ++ potionKey.remove(); ++ onFinishedPotionEffect(effect); ++ this.potionsNeedUpdate = true; ++ } ++ } ++ } ++ ++ /** ++ * Returns true if the entity's rider (EntityPlayer) should face forward when mounted. ++ * currently only used in vanilla code by pigs. ++ * ++ * @param player The player who is riding the entity. ++ * @return If the player should orient the same direction as this entity. ++ */ ++ public boolean shouldRiderFaceForward(EntityPlayer player) ++ { ++ return this instanceof net.minecraft.entity.passive.EntityPig; ++ } + } diff --git a/patches/minecraft/net/minecraft/entity/EntityMinecartCommandBlock.java.patch b/patches.mcp/minecraft/net/minecraft/entity/EntityMinecartCommandBlock.java.patch similarity index 68% rename from patches/minecraft/net/minecraft/entity/EntityMinecartCommandBlock.java.patch rename to patches.mcp/minecraft/net/minecraft/entity/EntityMinecartCommandBlock.java.patch index db7a4fe19..ad187ed62 100644 --- a/patches/minecraft/net/minecraft/entity/EntityMinecartCommandBlock.java.patch +++ b/patches.mcp/minecraft/net/minecraft/entity/EntityMinecartCommandBlock.java.patch @@ -2,9 +2,9 @@ +++ ../src-work/minecraft/net/minecraft/entity/EntityMinecartCommandBlock.java @@ -111,6 +111,7 @@ - public boolean func_130002_c(EntityPlayer p_130002_1_) + public boolean interactFirst(EntityPlayer playerIn) { -+ if(net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.minecart.MinecartInteractEvent(this, p_130002_1_))) return true; - this.field_145824_a.func_175574_a(p_130002_1_); ++ if(net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.minecart.MinecartInteractEvent(this, playerIn))) return true; + this.commandBlockLogic.func_175574_a(playerIn); return false; } diff --git a/patches/minecraft/net/minecraft/entity/EntitySpawnPlacementRegistry.java.patch b/patches.mcp/minecraft/net/minecraft/entity/EntitySpawnPlacementRegistry.java.patch similarity index 100% rename from patches/minecraft/net/minecraft/entity/EntitySpawnPlacementRegistry.java.patch rename to patches.mcp/minecraft/net/minecraft/entity/EntitySpawnPlacementRegistry.java.patch diff --git a/patches/minecraft/net/minecraft/entity/EntityTracker.java.patch b/patches.mcp/minecraft/net/minecraft/entity/EntityTracker.java.patch similarity index 84% rename from patches/minecraft/net/minecraft/entity/EntityTracker.java.patch rename to patches.mcp/minecraft/net/minecraft/entity/EntityTracker.java.patch index 74d6449d4..7b2ba0345 100644 --- a/patches/minecraft/net/minecraft/entity/EntityTracker.java.patch +++ b/patches.mcp/minecraft/net/minecraft/entity/EntityTracker.java.patch @@ -2,13 +2,13 @@ +++ ../src-work/minecraft/net/minecraft/entity/EntityTracker.java @@ -58,6 +58,8 @@ - public void func_72786_a(Entity p_72786_1_) + public void trackEntity(Entity p_72786_1_) { + if (net.minecraftforge.fml.common.registry.EntityRegistry.instance().tryTrackingEntity(this, p_72786_1_)) return; + if (p_72786_1_ instanceof EntityPlayerMP) { - this.func_72791_a(p_72786_1_, 512, 2); + this.trackEntity(p_72786_1_, 512, 2); @@ -355,4 +357,23 @@ } } @@ -24,11 +24,11 @@ + */ + public Set getTrackingPlayers(Entity entity) + { -+ EntityTrackerEntry entry = (EntityTrackerEntry) field_72794_c.func_76041_a(entity.func_145782_y()); ++ EntityTrackerEntry entry = (EntityTrackerEntry) trackedEntityHashTable.lookup(entity.getEntityId()); + if (entry == null) + return java.util.Collections.emptySet(); + else -+ return java.util.Collections.unmodifiableSet(entry.field_73134_o); ++ return java.util.Collections.unmodifiableSet(entry.trackingPlayers); + } + + /* ======================================== FORGE END =====================================*/ diff --git a/patches.mcp/minecraft/net/minecraft/entity/EntityTrackerEntry.java.patch b/patches.mcp/minecraft/net/minecraft/entity/EntityTrackerEntry.java.patch new file mode 100644 index 000000000..047889a3d --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/entity/EntityTrackerEntry.java.patch @@ -0,0 +1,42 @@ +--- ../src-base/minecraft/net/minecraft/entity/EntityTrackerEntry.java ++++ ../src-work/minecraft/net/minecraft/entity/EntityTrackerEntry.java +@@ -388,6 +388,14 @@ + this.lastTrackedEntityMotionY = this.trackedEntity.motionY; + this.motionZ = this.trackedEntity.motionZ; + ++ int posX = MathHelper.floor_double(this.trackedEntity.posX * 32.0D); ++ int posY = MathHelper.floor_double(this.trackedEntity.posY * 32.0D); ++ int posZ = MathHelper.floor_double(this.trackedEntity.posZ * 32.0D); ++ if (posX != this.encodedPosX || posY != this.encodedPosY || posZ != this.encodedPosZ) ++ { ++ net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.makeEntitySpawnAdjustment(this.trackedEntity, p_73117_1_, this.encodedPosX, this.encodedPosY, this.encodedPosZ); ++ } ++ + if (this.sendVelocityUpdates && !(packet instanceof S0FPacketSpawnMob)) + { + p_73117_1_.playerNetServerHandler.sendPacket(new S12PacketEntityVelocity(this.trackedEntity.getEntityId(), this.trackedEntity.motionX, this.trackedEntity.motionY, this.trackedEntity.motionZ)); +@@ -437,12 +445,14 @@ + p_73117_1_.playerNetServerHandler.sendPacket(new S1DPacketEntityEffect(this.trackedEntity.getEntityId(), potioneffect)); + } + } ++ net.minecraftforge.event.ForgeEventFactory.onStartEntityTracking(trackedEntity, p_73117_1_); + } + } + else if (this.trackingPlayers.contains(p_73117_1_)) + { + this.trackingPlayers.remove(p_73117_1_); + p_73117_1_.func_152339_d(this.trackedEntity); ++ net.minecraftforge.event.ForgeEventFactory.onStopEntityTracking(trackedEntity, p_73117_1_); + } + } + } +@@ -474,6 +484,9 @@ + logger.warn("Fetching addPacket for removed entity"); + } + ++ Packet pkt = net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.getEntitySpawningPacket(this.trackedEntity); ++ if (pkt != null) return pkt; ++ + if (this.trackedEntity instanceof EntityItem) + { + return new S0EPacketSpawnObject(this.trackedEntity, 2, 1); diff --git a/patches/minecraft/net/minecraft/entity/ai/EntityAIAttackOnCollide.java.patch b/patches.mcp/minecraft/net/minecraft/entity/ai/EntityAIAttackOnCollide.java.patch similarity index 61% rename from patches/minecraft/net/minecraft/entity/ai/EntityAIAttackOnCollide.java.patch rename to patches.mcp/minecraft/net/minecraft/entity/ai/EntityAIAttackOnCollide.java.patch index 453f8aaea..edc78f44e 100644 --- a/patches/minecraft/net/minecraft/entity/ai/EntityAIAttackOnCollide.java.patch +++ b/patches.mcp/minecraft/net/minecraft/entity/ai/EntityAIAttackOnCollide.java.patch @@ -10,8 +10,8 @@ public EntityAIAttackOnCollide(EntityCreature p_i1635_1_, Class p_i1635_2_, double p_i1635_3_, boolean p_i1635_5_) { this(p_i1635_1_, p_i1635_3_, p_i1635_5_); - this.field_75444_h = p_i1635_2_; -+ canPenalize = field_75444_h == null || !net.minecraft.entity.player.EntityPlayer.class.isAssignableFrom(field_75444_h); //Only enable delaying when not targeting players. + this.classTarget = p_i1635_2_; ++ canPenalize = classTarget == null || !net.minecraft.entity.player.EntityPlayer.class.isAssignableFrom(classTarget); //Only enable delaying when not targeting players. } public EntityAIAttackOnCollide(EntityCreature p_i1636_1_, double p_i1636_2_, boolean p_i1636_4_) @@ -23,29 +23,29 @@ + { + if (--this.field_75445_i <= 0) + { -+ this.field_75438_g = this.field_75441_b.func_70661_as().func_75494_a(entitylivingbase); -+ this.field_151497_i = 4 + this.field_75441_b.func_70681_au().nextInt(7); -+ return this.field_75438_g != null; ++ this.entityPathEntity = this.attacker.getNavigator().getPathToEntityLiving(entitylivingbase); ++ this.field_151497_i = 4 + this.attacker.getRNG().nextInt(7); ++ return this.entityPathEntity != null; + } + else + { + return true; + } + } - this.field_75438_g = this.field_75441_b.func_70661_as().func_75494_a(entitylivingbase); - return this.field_75438_g != null; + this.entityPathEntity = this.attacker.getNavigator().getPathToEntityLiving(entitylivingbase); + return this.entityPathEntity != null; } @@ -91,6 +107,23 @@ - this.field_151496_k = entitylivingbase.field_70161_v; - this.field_75445_i = 4 + this.field_75441_b.func_70681_au().nextInt(7); + this.field_151496_k = entitylivingbase.posZ; + this.field_75445_i = 4 + this.attacker.getRNG().nextInt(7); + if (this.canPenalize) + { + this.field_151497_i += failedPathFindingPenalty; -+ if (this.field_75441_b.func_70661_as().func_75505_d() != null) ++ if (this.attacker.getNavigator().getPath() != null) + { -+ net.minecraft.pathfinding.PathPoint finalPathPoint = this.field_75441_b.func_70661_as().func_75505_d().func_75870_c(); -+ if (finalPathPoint != null && entitylivingbase.func_70092_e(finalPathPoint.field_75839_a, finalPathPoint.field_75837_b, finalPathPoint.field_75838_c) < 1) ++ net.minecraft.pathfinding.PathPoint finalPathPoint = this.attacker.getNavigator().getPath().getFinalPathPoint(); ++ if (finalPathPoint != null && entitylivingbase.getDistanceSq(finalPathPoint.xCoord, finalPathPoint.yCoord, finalPathPoint.zCoord) < 1) + failedPathFindingPenalty = 0; + else + failedPathFindingPenalty += 10; diff --git a/patches.mcp/minecraft/net/minecraft/entity/boss/EntityDragon.java.patch b/patches.mcp/minecraft/net/minecraft/entity/boss/EntityDragon.java.patch new file mode 100644 index 000000000..a1da34e91 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/entity/boss/EntityDragon.java.patch @@ -0,0 +1,14 @@ +--- ../src-base/minecraft/net/minecraft/entity/boss/EntityDragon.java ++++ ../src-work/minecraft/net/minecraft/entity/boss/EntityDragon.java +@@ -486,9 +486,9 @@ + { + Block block = this.worldObj.getBlockState(new BlockPos(k1, l1, i2)).getBlock(); + +- if (block.getMaterial() != Material.air) ++ if (!block.isAir(worldObj, new BlockPos(k1, l1, i2))) + { +- if (block != Blocks.barrier && block != Blocks.obsidian && block != Blocks.end_stone && block != Blocks.bedrock && block != Blocks.command_block && this.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing")) ++ if (block.canEntityDestroy(worldObj, new BlockPos(k1, l1, i2), this) && this.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing")) + { + flag1 = this.worldObj.setBlockToAir(new BlockPos(k1, l1, i2)) || flag1; + } diff --git a/patches.mcp/minecraft/net/minecraft/entity/boss/EntityWither.java.patch b/patches.mcp/minecraft/net/minecraft/entity/boss/EntityWither.java.patch new file mode 100644 index 000000000..f4a070815 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/entity/boss/EntityWither.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/entity/boss/EntityWither.java ++++ ../src-work/minecraft/net/minecraft/entity/boss/EntityWither.java +@@ -351,7 +351,7 @@ + int l = j1 + i2; + Block block = this.worldObj.getBlockState(new BlockPos(j2, k, l)).getBlock(); + +- if (block.getMaterial() != Material.air && block != Blocks.bedrock && block != Blocks.end_portal && block != Blocks.end_portal_frame && block != Blocks.command_block && block != Blocks.barrier) ++ if (!block.isAir(worldObj, new BlockPos(j2, k, l)) && block.canEntityDestroy(worldObj, new BlockPos(j2, k, l), this)) + { + flag = this.worldObj.destroyBlock(new BlockPos(j2, k, l), true) || flag; + } diff --git a/patches/minecraft/net/minecraft/entity/boss/IBossDisplayData.java.patch b/patches.mcp/minecraft/net/minecraft/entity/boss/IBossDisplayData.java.patch similarity index 91% rename from patches/minecraft/net/minecraft/entity/boss/IBossDisplayData.java.patch rename to patches.mcp/minecraft/net/minecraft/entity/boss/IBossDisplayData.java.patch index ee9c56e4c..98bf84269 100644 --- a/patches/minecraft/net/minecraft/entity/boss/IBossDisplayData.java.patch +++ b/patches.mcp/minecraft/net/minecraft/entity/boss/IBossDisplayData.java.patch @@ -7,4 +7,4 @@ -@SideOnly(Side.CLIENT) public interface IBossDisplayData { - float func_110138_aP(); + float getMaxHealth(); diff --git a/patches/minecraft/net/minecraft/entity/effect/EntityLightningBolt.java.patch b/patches.mcp/minecraft/net/minecraft/entity/effect/EntityLightningBolt.java.patch similarity index 80% rename from patches/minecraft/net/minecraft/entity/effect/EntityLightningBolt.java.patch rename to patches.mcp/minecraft/net/minecraft/entity/effect/EntityLightningBolt.java.patch index 6a8a40087..61146d333 100644 --- a/patches/minecraft/net/minecraft/entity/effect/EntityLightningBolt.java.patch +++ b/patches.mcp/minecraft/net/minecraft/entity/effect/EntityLightningBolt.java.patch @@ -4,9 +4,9 @@ for (int i = 0; i < list.size(); ++i) { Entity entity = (Entity)list.get(i); -- entity.func_70077_a(this); +- entity.onStruckByLightning(this); + if (!net.minecraftforge.event.ForgeEventFactory.onEntityStruckByLightning(entity, this)) -+ entity.func_70077_a(this); ++ entity.onStruckByLightning(this); } } } diff --git a/patches.mcp/minecraft/net/minecraft/entity/item/EntityEnderPearl.java.patch b/patches.mcp/minecraft/net/minecraft/entity/item/EntityEnderPearl.java.patch new file mode 100644 index 000000000..9086df4b3 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/entity/item/EntityEnderPearl.java.patch @@ -0,0 +1,25 @@ +--- ../src-base/minecraft/net/minecraft/entity/item/EntityEnderPearl.java ++++ ../src-work/minecraft/net/minecraft/entity/item/EntityEnderPearl.java +@@ -50,6 +50,9 @@ + + if (entityplayermp.playerNetServerHandler.getNetworkManager().isChannelOpen() && entityplayermp.worldObj == this.worldObj && !entityplayermp.isPlayerSleeping()) + { ++ net.minecraftforge.event.entity.living.EnderTeleportEvent event = new net.minecraftforge.event.entity.living.EnderTeleportEvent(entityplayermp, this.posX, this.posY, this.posZ, 5.0F); ++ if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) ++ { // Don't indent to lower patch size + if (this.rand.nextFloat() < 0.05F && this.worldObj.getGameRules().getGameRuleBooleanValue("doMobSpawning")) + { + EntityEndermite entityendermite = new EntityEndermite(this.worldObj); +@@ -63,9 +66,10 @@ + entitylivingbase.mountEntity((Entity)null); + } + +- entitylivingbase.setPositionAndUpdate(this.posX, this.posY, this.posZ); ++ entitylivingbase.setPositionAndUpdate(event.targetX, event.targetY, event.targetZ); + entitylivingbase.fallDistance = 0.0F; +- entitylivingbase.attackEntityFrom(DamageSource.fall, 5.0F); ++ entitylivingbase.attackEntityFrom(DamageSource.fall, event.attackDamage); ++ } + } + } + diff --git a/patches.mcp/minecraft/net/minecraft/entity/item/EntityItem.java.patch b/patches.mcp/minecraft/net/minecraft/entity/item/EntityItem.java.patch new file mode 100644 index 000000000..be95fe9e9 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/entity/item/EntityItem.java.patch @@ -0,0 +1,94 @@ +--- ../src-base/minecraft/net/minecraft/entity/item/EntityItem.java ++++ ../src-work/minecraft/net/minecraft/entity/item/EntityItem.java +@@ -31,6 +31,11 @@ + public float hoverStart; + private static final String __OBFID = "CL_00001669"; + ++ /** ++ * The maximum age of this EntityItem. The item is expired once this is reached. ++ */ ++ public int lifespan = 6000; ++ + public EntityItem(World worldIn, double x, double y, double z) + { + super(worldIn); +@@ -48,6 +53,7 @@ + { + this(worldIn, x, y, z); + this.setEntityItemStack(stack); ++ this.lifespan = (stack.getItem() == null ? 6000 : stack.getItem().getEntityLifespan(stack, worldIn)); + } + + protected boolean canTriggerWalking() +@@ -71,6 +77,8 @@ + + public void onUpdate() + { ++ ItemStack stack = this.getDataWatcher().getWatchableObjectItemStack(10); ++ if (stack != null && stack.getItem() != null && stack.getItem().onEntityItemUpdate(this)) return; + if (this.getEntityItem() == null) + { + this.setDead(); +@@ -131,8 +139,16 @@ + + this.handleWaterMovement(); + +- if (!this.worldObj.isRemote && this.age >= 6000) ++ ItemStack item = getDataWatcher().getWatchableObjectItemStack(10); ++ ++ if (!this.worldObj.isRemote && this.age >= lifespan) + { ++ int hook = net.minecraftforge.event.ForgeEventFactory.onItemExpire(this, item); ++ if (hook < 0) this.setDead(); ++ else this.lifespan += hook; ++ } ++ if (item != null && item.stackSize <= 0) ++ { + this.setDead(); + } + } +@@ -276,6 +292,7 @@ + tagCompound.setShort("Health", (short)((byte)this.health)); + tagCompound.setShort("Age", (short)this.age); + tagCompound.setShort("PickupDelay", (short)this.delayBeforeCanPickup); ++ tagCompound.setInteger("Lifespan", lifespan); + + if (this.getThrower() != null) + { +@@ -316,20 +333,23 @@ + NBTTagCompound nbttagcompound1 = tagCompund.getCompoundTag("Item"); + this.setEntityItemStack(ItemStack.loadItemStackFromNBT(nbttagcompound1)); + +- if (this.getEntityItem() == null) +- { +- this.setDead(); +- } ++ ItemStack item = getDataWatcher().getWatchableObjectItemStack(10); ++ if (item == null || item.stackSize <= 0) this.setDead(); ++ if (tagCompund.hasKey("Lifespan")) lifespan = tagCompund.getInteger("Lifespan"); + } + + public void onCollideWithPlayer(EntityPlayer entityIn) + { + if (!this.worldObj.isRemote) + { ++ if (this.delayBeforeCanPickup > 0) return; + ItemStack itemstack = this.getEntityItem(); + int i = itemstack.stackSize; + +- if (this.delayBeforeCanPickup == 0 && (this.owner == null || 6000 - this.age <= 200 || this.owner.equals(entityIn.getName())) && entityIn.inventory.addItemStackToInventory(itemstack)) ++ int hook = net.minecraftforge.event.ForgeEventFactory.onItemPickup(this, entityIn, itemstack); ++ if (hook < 0) return; ++ ++ if (this.delayBeforeCanPickup <= 0 && (this.owner == null || lifespan - this.age <= 200 || this.owner.equals(entityIn.getName())) && (hook == 1 || i <= 0 || entityIn.inventory.addItemStackToInventory(itemstack))) + { + if (itemstack.getItem() == Item.getItemFromBlock(Blocks.log)) + { +@@ -366,6 +386,7 @@ + } + } + ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerItemPickupEvent(entityIn, this); + if (!this.isSilent()) + { + this.worldObj.playSoundAtEntity(entityIn, "random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); diff --git a/patches.mcp/minecraft/net/minecraft/entity/item/EntityItemFrame.java.patch b/patches.mcp/minecraft/net/minecraft/entity/item/EntityItemFrame.java.patch new file mode 100644 index 000000000..3b105563f --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/entity/item/EntityItemFrame.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/entity/item/EntityItemFrame.java ++++ ../src-work/minecraft/net/minecraft/entity/item/EntityItemFrame.java +@@ -123,7 +123,7 @@ + { + if (p_110131_1_ != null) + { +- if (p_110131_1_.getItem() == Items.filled_map) ++ if (p_110131_1_.getItem() instanceof net.minecraft.item.ItemMap) + { + MapData mapdata = ((ItemMap)p_110131_1_.getItem()).getMapData(p_110131_1_, this.worldObj); + mapdata.playersVisibleOnMap.remove("frame-" + this.getEntityId()); diff --git a/patches/minecraft/net/minecraft/entity/item/EntityMinecart.java.patch b/patches.mcp/minecraft/net/minecraft/entity/item/EntityMinecart.java.patch similarity index 53% rename from patches/minecraft/net/minecraft/entity/item/EntityMinecart.java.patch rename to patches.mcp/minecraft/net/minecraft/entity/item/EntityMinecart.java.patch index b0dcddbec..e75910a28 100644 --- a/patches/minecraft/net/minecraft/entity/item/EntityMinecart.java.patch +++ b/patches.mcp/minecraft/net/minecraft/entity/item/EntityMinecart.java.patch @@ -1,7 +1,7 @@ --- ../src-base/minecraft/net/minecraft/entity/item/EntityMinecart.java +++ ../src-work/minecraft/net/minecraft/entity/item/EntityMinecart.java @@ -52,6 +52,20 @@ - private double field_70506_as; + private double velocityZ; private static final String __OBFID = "CL_00001670"; + /* Forge: Minecart Compatibility Layer Integration. */ @@ -18,97 +18,97 @@ + protected float maxSpeedAirVertical = defaultMaxSpeedAirVertical; + protected double dragAir = defaultDragAir; + - public EntityMinecart(World p_i1712_1_) + public EntityMinecart(World worldIn) { - super(p_i1712_1_); + super(worldIn); @@ -97,17 +111,19 @@ - public AxisAlignedBB func_70114_g(Entity p_70114_1_) + public AxisAlignedBB getCollisionBox(Entity entityIn) { -+ if (getCollisionHandler() != null) return getCollisionHandler().getCollisionBox(this, p_70114_1_); - return p_70114_1_.func_70104_M() ? p_70114_1_.func_174813_aQ() : null; ++ if (getCollisionHandler() != null) return getCollisionHandler().getCollisionBox(this, entityIn); + return entityIn.canBePushed() ? entityIn.getEntityBoundingBox() : null; } - public AxisAlignedBB func_70046_E() + public AxisAlignedBB getBoundingBox() { + if (getCollisionHandler() != null) return getCollisionHandler().getBoundingBox(this); return null; } - public boolean func_70104_M() + public boolean canBePushed() { - return true; + return canBePushed; } - public EntityMinecart(World p_i1713_1_, double p_i1713_2_, double p_i1713_4_, double p_i1713_6_) + public EntityMinecart(World worldIn, double p_i1713_2_, double p_i1713_4_, double p_i1713_6_) @@ -309,7 +325,7 @@ BlockPos blockpos = new BlockPos(j, i, k); - IBlockState iblockstate = this.field_70170_p.func_180495_p(blockpos); + IBlockState iblockstate = this.worldObj.getBlockState(blockpos); -- if (BlockRailBase.func_176563_d(iblockstate)) -+ if (canUseRail() && BlockRailBase.func_176563_d(iblockstate)) +- if (BlockRailBase.isRailBlock(iblockstate)) ++ if (canUseRail() && BlockRailBase.isRailBlock(iblockstate)) { this.func_180460_a(blockpos, iblockstate); @@ -347,7 +363,10 @@ } - this.func_70101_b(this.field_70177_z, this.field_70125_A); -- Iterator iterator = this.field_70170_p.func_72839_b(this, this.func_174813_aQ().func_72314_b(0.20000000298023224D, 0.0D, 0.20000000298023224D)).iterator(); + this.setRotation(this.rotationYaw, this.rotationPitch); +- Iterator iterator = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox().expand(0.20000000298023224D, 0.0D, 0.20000000298023224D)).iterator(); + AxisAlignedBB box; + if (getCollisionHandler() != null) box = this.getCollisionHandler().getMinecartCollisionBox(this); -+ else box = this.func_174813_aQ().func_72314_b(0.20000000298023224D, 0.0D, 0.20000000298023224D); -+ Iterator iterator = this.field_70170_p.func_72839_b(this, box).iterator(); ++ else box = this.getEntityBoundingBox().expand(0.20000000298023224D, 0.0D, 0.20000000298023224D); ++ Iterator iterator = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, box).iterator(); while (iterator.hasNext()) { @@ -370,6 +389,7 @@ } - this.func_70072_I(); + this.handleWaterMovement(); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.minecart.MinecartUpdateEvent(this, this.getCurrentRailPosition())); } } @@ -382,10 +402,21 @@ - protected void func_180459_n() + protected void moveDerailedMinecart() { - double d0 = this.func_174898_m(); -+ double d0 = field_70122_E ? this.func_174898_m() : getMaxSpeedAirLateral(); - this.field_70159_w = MathHelper.func_151237_a(this.field_70159_w, -d0, d0); - this.field_70179_y = MathHelper.func_151237_a(this.field_70179_y, -d0, d0); ++ double d0 = onGround ? this.func_174898_m() : getMaxSpeedAirLateral(); + this.motionX = MathHelper.clamp_double(this.motionX, -d0, d0); + this.motionZ = MathHelper.clamp_double(this.motionZ, -d0, d0); -+ double moveY = field_70181_x; -+ if(getMaxSpeedAirVertical() > 0 && field_70181_x > getMaxSpeedAirVertical()) ++ double moveY = motionY; ++ if(getMaxSpeedAirVertical() > 0 && motionY > getMaxSpeedAirVertical()) + { + moveY = getMaxSpeedAirVertical(); -+ if(Math.abs(field_70159_w) < 0.3f && Math.abs(field_70179_y) < 0.3f) ++ if(Math.abs(motionX) < 0.3f && Math.abs(motionZ) < 0.3f) + { + moveY = 0.15f; -+ field_70181_x = moveY; ++ motionY = moveY; + } + } + - if (this.field_70122_E) + if (this.onGround) { - this.field_70159_w *= 0.5D; + this.motionX *= 0.5D; @@ -393,13 +424,13 @@ - this.field_70179_y *= 0.5D; + this.motionZ *= 0.5D; } -- this.func_70091_d(this.field_70159_w, this.field_70181_x, this.field_70179_y); -+ this.func_70091_d(this.field_70159_w, moveY, this.field_70179_y); +- this.moveEntity(this.motionX, this.motionY, this.motionZ); ++ this.moveEntity(this.motionX, moveY, this.motionZ); - if (!this.field_70122_E) + if (!this.onGround) { -- this.field_70159_w *= 0.949999988079071D; -- this.field_70181_x *= 0.949999988079071D; -- this.field_70179_y *= 0.949999988079071D; -+ this.field_70159_w *= getDragAir(); -+ this.field_70181_x *= getDragAir(); -+ this.field_70179_y *= getDragAir(); +- this.motionX *= 0.949999988079071D; +- this.motionY *= 0.949999988079071D; +- this.motionZ *= 0.949999988079071D; ++ this.motionX *= getDragAir(); ++ this.motionY *= getDragAir(); ++ this.motionZ *= getDragAir(); } } @@ -118,29 +118,29 @@ - double d0 = 0.0078125D; + double slopeAdjustment = getSlopeAdjustment(); - BlockRailBase.EnumRailDirection enumraildirection = (BlockRailBase.EnumRailDirection)p_180460_2_.func_177229_b(blockrailbase.func_176560_l()); + BlockRailBase.EnumRailDirection enumraildirection = (BlockRailBase.EnumRailDirection)p_180460_2_.getValue(blockrailbase.getShapeProperty()); - switch (EntityMinecart.SwitchEnumMinecartType.field_180036_b[enumraildirection.ordinal()]) + switch (EntityMinecart.SwitchEnumMinecartType.RAIL_SHAPE_LOOKUP[enumraildirection.ordinal()]) { case 1: -- this.field_70159_w -= 0.0078125D; -+ this.field_70159_w -= slopeAdjustment; - ++this.field_70163_u; +- this.motionX -= 0.0078125D; ++ this.motionX -= slopeAdjustment; + ++this.posY; break; case 2: -- this.field_70159_w += 0.0078125D; -+ this.field_70159_w += slopeAdjustment; - ++this.field_70163_u; +- this.motionX += 0.0078125D; ++ this.motionX += slopeAdjustment; + ++this.posY; break; case 3: -- this.field_70179_y += 0.0078125D; -+ this.field_70179_y += slopeAdjustment; - ++this.field_70163_u; +- this.motionZ += 0.0078125D; ++ this.motionZ += slopeAdjustment; + ++this.posY; break; case 4: -- this.field_70179_y -= 0.0078125D; -+ this.field_70179_y -= slopeAdjustment; - ++this.field_70163_u; +- this.motionZ -= 0.0078125D; ++ this.motionZ -= slopeAdjustment; + ++this.posY; } @@ -485,7 +516,7 @@ @@ -150,86 +150,86 @@ - if (flag1) + if (flag1 && shouldDoRailFunctions()) { - d6 = Math.sqrt(this.field_70159_w * this.field_70159_w + this.field_70179_y * this.field_70179_y); + d6 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); @@ -533,20 +564,8 @@ - this.field_70165_t = d7 + d1 * d6; - this.field_70161_v = d8 + d2 * d6; - this.func_70107_b(this.field_70165_t, this.field_70163_u, this.field_70161_v); -- d11 = this.field_70159_w; -- d12 = this.field_70179_y; + this.posX = d7 + d1 * d6; + this.posZ = d8 + d2 * d6; + this.setPosition(this.posX, this.posY, this.posZ); +- d11 = this.motionX; +- d12 = this.motionZ; + this.moveMinecartOnRail(p_180460_1_); -- if (this.field_70153_n != null) +- if (this.riddenByEntity != null) - { - d11 *= 0.75D; - d12 *= 0.75D; - } - - double d13 = this.func_174898_m(); -- d11 = MathHelper.func_151237_a(d11, -d13, d13); -- d12 = MathHelper.func_151237_a(d12, -d13, d13); -- this.func_70091_d(d11, 0.0D, d12); +- d11 = MathHelper.clamp_double(d11, -d13, d13); +- d12 = MathHelper.clamp_double(d12, -d13, d13); +- this.moveEntity(d11, 0.0D, d12); - - if (aint[0][1] != 0 && MathHelper.func_76128_c(this.field_70165_t) - p_180460_1_.func_177958_n() == aint[0][0] && MathHelper.func_76128_c(this.field_70161_v) - p_180460_1_.func_177952_p() == aint[0][2]) + if (aint[0][1] != 0 && MathHelper.floor_double(this.posX) - p_180460_1_.getX() == aint[0][0] && MathHelper.floor_double(this.posZ) - p_180460_1_.getZ() == aint[0][2]) { - this.func_70107_b(this.field_70165_t, this.field_70163_u + (double)aint[0][1], this.field_70161_v); + this.setPosition(this.posX, this.posY + (double)aint[0][1], this.posZ); @@ -583,8 +602,14 @@ - this.field_70179_y = d5 * (double)(i - p_180460_1_.func_177952_p()); + this.motionZ = d5 * (double)(i - p_180460_1_.getZ()); } - if (flag) + + if(shouldDoRailFunctions()) { -+ ((BlockRailBase)p_180460_2_.func_177230_c()).onMinecartPass(field_70170_p, this, p_180460_1_); ++ ((BlockRailBase)p_180460_2_.getBlock()).onMinecartPass(worldObj, this, p_180460_1_); + } + + if (flag && shouldDoRailFunctions()) + { - double d15 = Math.sqrt(this.field_70159_w * this.field_70159_w + this.field_70179_y * this.field_70179_y); + double d15 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); if (d15 > 0.01D) @@ -824,13 +849,20 @@ - public void func_70108_f(Entity p_70108_1_) + public void applyEntityCollision(Entity entityIn) { + -+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.minecart.MinecartCollisionEvent(this, p_70108_1_)); ++ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.minecart.MinecartCollisionEvent(this, entityIn)); + if (getCollisionHandler() != null) + { -+ getCollisionHandler().onEntityCollision(this, p_70108_1_); ++ getCollisionHandler().onEntityCollision(this, entityIn); + return; + } - if (!this.field_70170_p.field_72995_K) + if (!this.worldObj.isRemote) { - if (!p_70108_1_.field_70145_X && !this.field_70145_X) + if (!entityIn.noClip && !this.noClip) { - if (p_70108_1_ != this.field_70153_n) + if (entityIn != this.riddenByEntity) { -- if (p_70108_1_ instanceof EntityLivingBase && !(p_70108_1_ instanceof EntityPlayer) && !(p_70108_1_ instanceof EntityIronGolem) && this.func_180456_s() == EntityMinecart.EnumMinecartType.RIDEABLE && this.field_70159_w * this.field_70159_w + this.field_70179_y * this.field_70179_y > 0.01D && this.field_70153_n == null && p_70108_1_.field_70154_o == null) -+ if (p_70108_1_ instanceof EntityLivingBase && !(p_70108_1_ instanceof EntityPlayer) && !(p_70108_1_ instanceof EntityIronGolem) && canBeRidden() && this.field_70159_w * this.field_70159_w + this.field_70179_y * this.field_70179_y > 0.01D && this.field_70153_n == null && p_70108_1_.field_70154_o == null) +- if (entityIn instanceof EntityLivingBase && !(entityIn instanceof EntityPlayer) && !(entityIn instanceof EntityIronGolem) && this.getMinecartType() == EntityMinecart.EnumMinecartType.RIDEABLE && this.motionX * this.motionX + this.motionZ * this.motionZ > 0.01D && this.riddenByEntity == null && entityIn.ridingEntity == null) ++ if (entityIn instanceof EntityLivingBase && !(entityIn instanceof EntityPlayer) && !(entityIn instanceof EntityIronGolem) && canBeRidden() && this.motionX * this.motionX + this.motionZ * this.motionZ > 0.01D && this.riddenByEntity == null && entityIn.ridingEntity == null) { - p_70108_1_.func_70078_a(this); + entityIn.mountEntity(this); } @@ -876,7 +908,7 @@ - double d7 = p_70108_1_.field_70159_w + this.field_70159_w; - double d8 = p_70108_1_.field_70179_y + this.field_70179_y; + double d7 = entityIn.motionX + this.motionX; + double d8 = entityIn.motionZ + this.motionZ; -- if (((EntityMinecart)p_70108_1_).func_180456_s() == EntityMinecart.EnumMinecartType.FURNACE && this.func_180456_s() != EntityMinecart.EnumMinecartType.FURNACE) -+ if (((EntityMinecart)p_70108_1_).isPoweredCart() && !isPoweredCart()) +- if (((EntityMinecart)entityIn).getMinecartType() == EntityMinecart.EnumMinecartType.FURNACE && this.getMinecartType() != EntityMinecart.EnumMinecartType.FURNACE) ++ if (((EntityMinecart)entityIn).isPoweredCart() && !isPoweredCart()) { - this.field_70159_w *= 0.20000000298023224D; - this.field_70179_y *= 0.20000000298023224D; + this.motionX *= 0.20000000298023224D; + this.motionZ *= 0.20000000298023224D; @@ -884,7 +916,7 @@ - p_70108_1_.field_70159_w *= 0.949999988079071D; - p_70108_1_.field_70179_y *= 0.949999988079071D; + entityIn.motionX *= 0.949999988079071D; + entityIn.motionZ *= 0.949999988079071D; } -- else if (((EntityMinecart)p_70108_1_).func_180456_s() != EntityMinecart.EnumMinecartType.FURNACE && this.func_180456_s() == EntityMinecart.EnumMinecartType.FURNACE) -+ else if (((EntityMinecart)p_70108_1_).isPoweredCart() && isPoweredCart()) +- else if (((EntityMinecart)entityIn).getMinecartType() != EntityMinecart.EnumMinecartType.FURNACE && this.getMinecartType() == EntityMinecart.EnumMinecartType.FURNACE) ++ else if (((EntityMinecart)entityIn).isPoweredCart() && isPoweredCart()) { - p_70108_1_.field_70159_w *= 0.20000000298023224D; - p_70108_1_.field_70179_y *= 0.20000000298023224D; + entityIn.motionX *= 0.20000000298023224D; + entityIn.motionZ *= 0.20000000298023224D; @@ -1049,6 +1081,221 @@ } } @@ -237,11 +237,11 @@ + /* =================================== FORGE START ===========================================*/ + private BlockPos getCurrentRailPosition() + { -+ int x = MathHelper.func_76128_c(this.field_70165_t); -+ int y = MathHelper.func_76128_c(this.field_70163_u); -+ int z = MathHelper.func_76128_c(this.field_70161_v); ++ int x = MathHelper.floor_double(this.posX); ++ int y = MathHelper.floor_double(this.posY); ++ int z = MathHelper.floor_double(this.posZ); + -+ if (BlockRailBase.func_176562_d(this.field_70170_p, new BlockPos(x, y - 1, z))) y--; ++ if (BlockRailBase.isRailBlock(this.worldObj, new BlockPos(x, y - 1, z))) y--; + return new BlockPos(x, y, z); + } + @@ -249,10 +249,10 @@ + { + if (!canUseRail()) return func_174898_m(); + BlockPos pos = this.getCurrentRailPosition(); -+ IBlockState state = this.field_70170_p.func_180495_p(pos); -+ if (!BlockRailBase.func_176563_d(state)) return func_174898_m(); ++ IBlockState state = this.worldObj.getBlockState(pos); ++ if (!BlockRailBase.isRailBlock(state)) return func_174898_m(); + -+ float railMaxSpeed = ((BlockRailBase)state.func_177230_c()).getRailMaxSpeed(field_70170_p, this, pos); ++ float railMaxSpeed = ((BlockRailBase)state.getBlock()).getRailMaxSpeed(worldObj, this, pos); + return Math.min(railMaxSpeed, getCurrentCartSpeedCapOnRail()); + } + @@ -262,19 +262,19 @@ + */ + public void moveMinecartOnRail(BlockPos pos) + { -+ double mX = this.field_70159_w; -+ double mZ = this.field_70179_y; ++ double mX = this.motionX; ++ double mZ = this.motionZ; + -+ if (this.field_70153_n != null) ++ if (this.riddenByEntity != null) + { + mX *= 0.75D; + mZ *= 0.75D; + } + + double max = this.getMaxSpeed(); -+ mX = MathHelper.func_151237_a(mX, -max, max); -+ mZ = MathHelper.func_151237_a(mZ, -max, max); -+ this.func_70091_d(mX, 0.0D, mZ); ++ mX = MathHelper.clamp_double(mX, -max, max); ++ mZ = MathHelper.clamp_double(mZ, -max, max); ++ this.moveEntity(mX, 0.0D, mZ); + } + + /** @@ -307,25 +307,25 @@ + { + if (this instanceof EntityMinecartFurnace) + { -+ return new ItemStack(Items.field_151109_aJ); ++ return new ItemStack(Items.furnace_minecart); + } + else if (this instanceof EntityMinecartChest) + { -+ return new ItemStack(Items.field_151108_aI); ++ return new ItemStack(Items.chest_minecart); + } + else if (this instanceof EntityMinecartTNT) + { -+ return new ItemStack(Items.field_151142_bV); ++ return new ItemStack(Items.tnt_minecart); + } + else if (this instanceof EntityMinecartHopper) + { -+ return new ItemStack(Items.field_151140_bW); ++ return new ItemStack(Items.hopper_minecart); + } + else if (this instanceof EntityMinecartCommandBlock) + { -+ return new ItemStack(Items.field_151095_cc); ++ return new ItemStack(Items.command_block_minecart); + } -+ return new ItemStack(Items.field_151143_au); ++ return new ItemStack(Items.minecart); + } + + /** @@ -363,7 +363,7 @@ + */ + public boolean isPoweredCart() + { -+ return func_180456_s() == EntityMinecart.EnumMinecartType.FURNACE; ++ return getMinecartType() == EntityMinecart.EnumMinecartType.FURNACE; + } + + /** @@ -372,7 +372,7 @@ + */ + public boolean canBeRidden() + { -+ return this.func_180456_s() == EntityMinecart.EnumMinecartType.RIDEABLE; ++ return this.getMinecartType() == EntityMinecart.EnumMinecartType.RIDEABLE; + } + + /** diff --git a/patches/minecraft/net/minecraft/entity/item/EntityMinecartContainer.java.patch b/patches.mcp/minecraft/net/minecraft/entity/item/EntityMinecartContainer.java.patch similarity index 62% rename from patches/minecraft/net/minecraft/entity/item/EntityMinecartContainer.java.patch rename to patches.mcp/minecraft/net/minecraft/entity/item/EntityMinecartContainer.java.patch index 86de5e86a..cdca16d4d 100644 --- a/patches/minecraft/net/minecraft/entity/item/EntityMinecartContainer.java.patch +++ b/patches.mcp/minecraft/net/minecraft/entity/item/EntityMinecartContainer.java.patch @@ -2,9 +2,9 @@ +++ ../src-work/minecraft/net/minecraft/entity/item/EntityMinecartContainer.java @@ -173,6 +173,7 @@ - public boolean func_130002_c(EntityPlayer p_130002_1_) + public boolean interactFirst(EntityPlayer playerIn) { -+ if(net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.minecart.MinecartInteractEvent(this, p_130002_1_))) return true; - if (!this.field_70170_p.field_72995_K) ++ if(net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.minecart.MinecartInteractEvent(this, playerIn))) return true; + if (!this.worldObj.isRemote) { - p_130002_1_.func_71007_a(this); + playerIn.displayGUIChest(this); diff --git a/patches/minecraft/net/minecraft/entity/item/EntityMinecartEmpty.java.patch b/patches.mcp/minecraft/net/minecraft/entity/item/EntityMinecartEmpty.java.patch similarity index 60% rename from patches/minecraft/net/minecraft/entity/item/EntityMinecartEmpty.java.patch rename to patches.mcp/minecraft/net/minecraft/entity/item/EntityMinecartEmpty.java.patch index 3db54ba04..729dcfd0a 100644 --- a/patches/minecraft/net/minecraft/entity/item/EntityMinecartEmpty.java.patch +++ b/patches.mcp/minecraft/net/minecraft/entity/item/EntityMinecartEmpty.java.patch @@ -2,9 +2,9 @@ +++ ../src-work/minecraft/net/minecraft/entity/item/EntityMinecartEmpty.java @@ -20,6 +20,7 @@ - public boolean func_130002_c(EntityPlayer p_130002_1_) + public boolean interactFirst(EntityPlayer playerIn) { -+ if(net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.minecart.MinecartInteractEvent(this, p_130002_1_))) return true; - if (this.field_70153_n != null && this.field_70153_n instanceof EntityPlayer && this.field_70153_n != p_130002_1_) ++ if(net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.minecart.MinecartInteractEvent(this, playerIn))) return true; + if (this.riddenByEntity != null && this.riddenByEntity instanceof EntityPlayer && this.riddenByEntity != playerIn) { return true; diff --git a/patches/minecraft/net/minecraft/entity/item/EntityMinecartFurnace.java.patch b/patches.mcp/minecraft/net/minecraft/entity/item/EntityMinecartFurnace.java.patch similarity index 55% rename from patches/minecraft/net/minecraft/entity/item/EntityMinecartFurnace.java.patch rename to patches.mcp/minecraft/net/minecraft/entity/item/EntityMinecartFurnace.java.patch index 0b8841524..46cb9f930 100644 --- a/patches/minecraft/net/minecraft/entity/item/EntityMinecartFurnace.java.patch +++ b/patches.mcp/minecraft/net/minecraft/entity/item/EntityMinecartFurnace.java.patch @@ -2,9 +2,9 @@ +++ ../src-work/minecraft/net/minecraft/entity/item/EntityMinecartFurnace.java @@ -132,6 +132,7 @@ - public boolean func_130002_c(EntityPlayer p_130002_1_) + public boolean interactFirst(EntityPlayer playerIn) { -+ if(net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.minecart.MinecartInteractEvent(this, p_130002_1_))) return true; - ItemStack itemstack = p_130002_1_.field_71071_by.func_70448_g(); ++ if(net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.minecart.MinecartInteractEvent(this, playerIn))) return true; + ItemStack itemstack = playerIn.inventory.getCurrentItem(); - if (itemstack != null && itemstack.func_77973_b() == Items.field_151044_h) + if (itemstack != null && itemstack.getItem() == Items.coal) diff --git a/patches/minecraft/net/minecraft/entity/item/EntityMinecartHopper.java.patch b/patches.mcp/minecraft/net/minecraft/entity/item/EntityMinecartHopper.java.patch similarity index 62% rename from patches/minecraft/net/minecraft/entity/item/EntityMinecartHopper.java.patch rename to patches.mcp/minecraft/net/minecraft/entity/item/EntityMinecartHopper.java.patch index cf2c9b8c1..54d8cad44 100644 --- a/patches/minecraft/net/minecraft/entity/item/EntityMinecartHopper.java.patch +++ b/patches.mcp/minecraft/net/minecraft/entity/item/EntityMinecartHopper.java.patch @@ -2,9 +2,9 @@ +++ ../src-work/minecraft/net/minecraft/entity/item/EntityMinecartHopper.java @@ -57,6 +57,7 @@ - public boolean func_130002_c(EntityPlayer p_130002_1_) + public boolean interactFirst(EntityPlayer playerIn) { -+ if(net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.minecart.MinecartInteractEvent(this, p_130002_1_))) return true; - if (!this.field_70170_p.field_72995_K) ++ if(net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.minecart.MinecartInteractEvent(this, playerIn))) return true; + if (!this.worldObj.isRemote) { - p_130002_1_.func_71007_a(this); + playerIn.displayGUIChest(this); diff --git a/patches.mcp/minecraft/net/minecraft/entity/item/EntityXPOrb.java.patch b/patches.mcp/minecraft/net/minecraft/entity/item/EntityXPOrb.java.patch new file mode 100644 index 000000000..296ca8a03 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/entity/item/EntityXPOrb.java.patch @@ -0,0 +1,10 @@ +--- ../src-base/minecraft/net/minecraft/entity/item/EntityXPOrb.java ++++ ../src-work/minecraft/net/minecraft/entity/item/EntityXPOrb.java +@@ -198,6 +198,7 @@ + { + if (this.field_70532_c == 0 && entityIn.xpCooldown == 0) + { ++ if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.player.PlayerPickupXpEvent(entityIn, this))) return; + entityIn.xpCooldown = 2; + this.worldObj.playSoundAtEntity(entityIn, "random.orb", 0.1F, 0.5F * ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.8F)); + entityIn.onItemPickup(this, 1); diff --git a/patches/minecraft/net/minecraft/entity/monster/EntityEnderman.java.patch b/patches.mcp/minecraft/net/minecraft/entity/monster/EntityEnderman.java.patch similarity index 54% rename from patches/minecraft/net/minecraft/entity/monster/EntityEnderman.java.patch rename to patches.mcp/minecraft/net/minecraft/entity/monster/EntityEnderman.java.patch index f3ec30644..f986ab50c 100644 --- a/patches/minecraft/net/minecraft/entity/monster/EntityEnderman.java.patch +++ b/patches.mcp/minecraft/net/minecraft/entity/monster/EntityEnderman.java.patch @@ -2,21 +2,21 @@ +++ ../src-work/minecraft/net/minecraft/entity/monster/EntityEnderman.java @@ -204,12 +204,14 @@ - protected boolean func_70825_j(double p_70825_1_, double p_70825_3_, double p_70825_5_) + protected boolean teleportTo(double p_70825_1_, double p_70825_3_, double p_70825_5_) { + net.minecraftforge.event.entity.living.EnderTeleportEvent event = new net.minecraftforge.event.entity.living.EnderTeleportEvent(this, p_70825_1_, p_70825_3_, p_70825_5_, 0); + if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) return false; - double d3 = this.field_70165_t; - double d4 = this.field_70163_u; - double d5 = this.field_70161_v; -- this.field_70165_t = p_70825_1_; -- this.field_70163_u = p_70825_3_; -- this.field_70161_v = p_70825_5_; -+ this.field_70165_t = event.targetX; -+ this.field_70163_u = event.targetY; -+ this.field_70161_v = event.targetZ; + double d3 = this.posX; + double d4 = this.posY; + double d5 = this.posZ; +- this.posX = p_70825_1_; +- this.posY = p_70825_3_; +- this.posZ = p_70825_5_; ++ this.posX = event.targetX; ++ this.posY = event.targetY; ++ this.posZ = event.targetZ; boolean flag = false; - BlockPos blockpos = new BlockPos(this.field_70165_t, this.field_70163_u, this.field_70161_v); + BlockPos blockpos = new BlockPos(this.posX, this.posY, this.posZ); @@ -565,4 +567,16 @@ } @@ -26,12 +26,12 @@ + /*===================================== Forge Start ==============================*/ + public static void setCarriable(Block block, boolean canCarry) + { -+ if (canCarry) field_70827_d.add(block); -+ else field_70827_d.remove(block); ++ if (canCarry) carriableBlocks.add(block); ++ else carriableBlocks.remove(block); + } + public static boolean getCarriable(Block block) + { -+ return field_70827_d.contains(block); ++ return carriableBlocks.contains(block); + } + /*===================================== Forge End ==============================*/ } diff --git a/patches/minecraft/net/minecraft/entity/monster/EntityMagmaCube.java.patch b/patches.mcp/minecraft/net/minecraft/entity/monster/EntityMagmaCube.java.patch similarity index 70% rename from patches/minecraft/net/minecraft/entity/monster/EntityMagmaCube.java.patch rename to patches.mcp/minecraft/net/minecraft/entity/monster/EntityMagmaCube.java.patch index ec3e09971..b68b510e8 100644 --- a/patches/minecraft/net/minecraft/entity/monster/EntityMagmaCube.java.patch +++ b/patches.mcp/minecraft/net/minecraft/entity/monster/EntityMagmaCube.java.patch @@ -2,8 +2,8 @@ +++ ../src-work/minecraft/net/minecraft/entity/monster/EntityMagmaCube.java @@ -105,6 +105,7 @@ { - this.field_70181_x = (double)(0.42F + (float)this.func_70809_q() * 0.1F); - this.field_70160_al = true; + this.motionY = (double)(0.42F + (float)this.getSlimeSize() * 0.1F); + this.isAirBorne = true; + net.minecraftforge.common.ForgeHooks.onLivingJump(this); } diff --git a/patches.mcp/minecraft/net/minecraft/entity/monster/EntitySlime.java.patch b/patches.mcp/minecraft/net/minecraft/entity/monster/EntitySlime.java.patch new file mode 100644 index 000000000..96ce050c1 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/entity/monster/EntitySlime.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/entity/monster/EntitySlime.java ++++ ../src-work/minecraft/net/minecraft/entity/monster/EntitySlime.java +@@ -271,7 +271,7 @@ + { + Chunk chunk = this.worldObj.getChunkFromBlockCoords(new BlockPos(MathHelper.floor_double(this.posX), 0, MathHelper.floor_double(this.posZ))); + +- if (this.worldObj.getWorldInfo().getTerrainType() == WorldType.FLAT && this.rand.nextInt(4) != 1) ++ if (this.worldObj.getWorldInfo().getTerrainType().handleSlimeSpawnReduction(rand, worldObj)) + { + return false; + } diff --git a/patches.mcp/minecraft/net/minecraft/entity/monster/EntityZombie.java.patch b/patches.mcp/minecraft/net/minecraft/entity/monster/EntityZombie.java.patch new file mode 100644 index 000000000..5468901ba --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/entity/monster/EntityZombie.java.patch @@ -0,0 +1,60 @@ +--- ../src-base/minecraft/net/minecraft/entity/monster/EntityZombie.java ++++ ../src-work/minecraft/net/minecraft/entity/monster/EntityZombie.java +@@ -89,7 +89,7 @@ + this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(35.0D); + this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.23000000417232513D); + this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(3.0D); +- this.getAttributeMap().registerAttribute(reinforcementChance).setBaseValue(this.rand.nextDouble() * 0.10000000149011612D); ++ this.getAttributeMap().registerAttribute(reinforcementChance).setBaseValue(this.rand.nextDouble() * net.minecraftforge.common.ForgeModContainer.zombieSummonBaseChance); + } + + protected void entityInit() +@@ -231,12 +231,25 @@ + entitylivingbase = (EntityLivingBase)source.getEntity(); + } + +- if (entitylivingbase != null && this.worldObj.getDifficulty() == EnumDifficulty.HARD && (double)this.rand.nextFloat() < this.getEntityAttribute(reinforcementChance).getAttributeValue()) ++ int i = MathHelper.floor_double(this.posX); ++ int j = MathHelper.floor_double(this.posY); ++ int k = MathHelper.floor_double(this.posZ); ++ ++ net.minecraftforge.event.entity.living.ZombieEvent.SummonAidEvent summonAid = net.minecraftforge.event.ForgeEventFactory.fireZombieSummonAid(this, worldObj, i, j, k, entitylivingbase, this.getEntityAttribute(reinforcementChance).getAttributeValue()); ++ if (summonAid.getResult() == net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) return true; ++ ++ if (summonAid.getResult() == net.minecraftforge.fml.common.eventhandler.Event.Result.ALLOW || ++ entitylivingbase != null && this.worldObj.getDifficulty() == EnumDifficulty.HARD && (double)this.rand.nextFloat() < this.getEntityAttribute(reinforcementChance).getAttributeValue()) + { +- int i = MathHelper.floor_double(this.posX); +- int j = MathHelper.floor_double(this.posY); +- int k = MathHelper.floor_double(this.posZ); +- EntityZombie entityzombie = new EntityZombie(this.worldObj); ++ EntityZombie entityzombie; ++ if (summonAid.customSummonedAid != null && summonAid.getResult() == net.minecraftforge.fml.common.eventhandler.Event.Result.ALLOW) ++ { ++ entityzombie = summonAid.customSummonedAid; ++ } ++ else ++ { ++ entityzombie = new EntityZombie(this.worldObj); ++ } + + for (int l = 0; l < 50; ++l) + { +@@ -251,7 +264,7 @@ + if (!this.worldObj.func_175636_b((double)i1, (double)j1, (double)k1, 7.0D) && this.worldObj.checkNoEntityCollision(entityzombie.getEntityBoundingBox(), entityzombie) && this.worldObj.getCollidingBoundingBoxes(entityzombie, entityzombie.getEntityBoundingBox()).isEmpty() && !this.worldObj.isAnyLiquid(entityzombie.getEntityBoundingBox())) + { + this.worldObj.spawnEntityInWorld(entityzombie); +- entityzombie.setAttackTarget(entitylivingbase); ++ if (entitylivingbase != null) entityzombie.setAttackTarget(entitylivingbase); + entityzombie.func_180482_a(this.worldObj.getDifficultyForLocation(new BlockPos(entityzombie)), (IEntityLivingData)null); + this.getEntityAttribute(reinforcementChance).applyModifier(new AttributeModifier("Zombie reinforcement caller charge", -0.05000000074505806D, 0)); + entityzombie.getEntityAttribute(reinforcementChance).applyModifier(new AttributeModifier("Zombie reinforcement callee charge", -0.05000000074505806D, 0)); +@@ -458,7 +471,7 @@ + + if (p_180482_2_1 == null) + { +- p_180482_2_1 = new EntityZombie.GroupData(this.worldObj.rand.nextFloat() < 0.05F, this.worldObj.rand.nextFloat() < 0.05F, null); ++ p_180482_2_1 = new EntityZombie.GroupData(this.worldObj.rand.nextFloat() < net.minecraftforge.common.ForgeModContainer.zombieBabyChance, this.worldObj.rand.nextFloat() < 0.05F, null); + } + + if (p_180482_2_1 instanceof EntityZombie.GroupData) diff --git a/patches/minecraft/net/minecraft/entity/passive/EntityHorse.java.patch b/patches.mcp/minecraft/net/minecraft/entity/passive/EntityHorse.java.patch similarity index 76% rename from patches/minecraft/net/minecraft/entity/passive/EntityHorse.java.patch rename to patches.mcp/minecraft/net/minecraft/entity/passive/EntityHorse.java.patch index 54fe1eaff..97788b993 100644 --- a/patches/minecraft/net/minecraft/entity/passive/EntityHorse.java.patch +++ b/patches.mcp/minecraft/net/minecraft/entity/passive/EntityHorse.java.patch @@ -3,8 +3,8 @@ @@ -1260,6 +1260,7 @@ } - this.field_110277_bt = 0.0F; + this.jumpPower = 0.0F; + net.minecraftforge.common.ForgeHooks.onLivingJump(this); } - this.field_70138_W = 1.0F; + this.stepHeight = 1.0F; diff --git a/patches.mcp/minecraft/net/minecraft/entity/passive/EntityMooshroom.java.patch b/patches.mcp/minecraft/net/minecraft/entity/passive/EntityMooshroom.java.patch new file mode 100644 index 000000000..f6bdbce10 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/entity/passive/EntityMooshroom.java.patch @@ -0,0 +1,62 @@ +--- ../src-base/minecraft/net/minecraft/entity/passive/EntityMooshroom.java ++++ ../src-work/minecraft/net/minecraft/entity/passive/EntityMooshroom.java +@@ -9,7 +9,7 @@ + import net.minecraft.util.EnumParticleTypes; + import net.minecraft.world.World; + +-public class EntityMooshroom extends EntityCow ++public class EntityMooshroom extends EntityCow implements net.minecraftforge.common.IShearable + { + private static final String __OBFID = "CL_00001645"; + +@@ -20,6 +20,7 @@ + this.field_175506_bl = Blocks.mycelium; + } + ++ @SuppressWarnings("unused") + public boolean interact(EntityPlayer player) + { + ItemStack itemstack = player.inventory.getCurrentItem(); +@@ -39,7 +40,7 @@ + } + } + +- if (itemstack != null && itemstack.getItem() == Items.shears && this.getGrowingAge() >= 0) ++ if (false && itemstack != null && itemstack.getItem() == Items.shears && this.getGrowingAge() >= 0) //Forge Disable, Moved to onSheared + { + this.setDead(); + this.worldObj.spawnParticle(EnumParticleTypes.EXPLOSION_LARGE, this.posX, this.posY + (double)(this.height / 2.0F), this.posZ, 0.0D, 0.0D, 0.0D, new int[0]); +@@ -79,4 +80,33 @@ + { + return new EntityMooshroom(this.worldObj); + } ++ ++ @Override public boolean isShearable(ItemStack item, net.minecraft.world.IBlockAccess world, net.minecraft.util.BlockPos pos){ return getGrowingAge() >= 0; } ++ @Override ++ public java.util.List onSheared(ItemStack item, net.minecraft.world.IBlockAccess world, net.minecraft.util.BlockPos pos, int fortune) ++ { ++ this.setDead(); ++ this.worldObj.spawnParticle(EnumParticleTypes.EXPLOSION_LARGE, this.posX, this.posY + (double)(this.height / 2.0F), this.posZ, 0.0D, 0.0D, 0.0D, new int[0]); ++ ++ EntityCow entitycow = new EntityCow(this.worldObj); ++ entitycow.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); ++ entitycow.setHealth(this.getHealth()); ++ entitycow.renderYawOffset = this.renderYawOffset; ++ ++ if (this.hasCustomName()) ++ { ++ entitycow.setCustomNameTag(this.getCustomNameTag()); ++ } ++ ++ this.worldObj.spawnEntityInWorld(entitycow); ++ ++ java.util.List ret = new java.util.ArrayList(); ++ for (int i = 0; i < 5; ++i) ++ { ++ ret.add(new ItemStack(Blocks.red_mushroom)); ++ } ++ ++ this.playSound("mob.sheep.shear", 1.0F, 1.0F); ++ return ret; ++ } + } diff --git a/patches.mcp/minecraft/net/minecraft/entity/passive/EntityOcelot.java.patch b/patches.mcp/minecraft/net/minecraft/entity/passive/EntityOcelot.java.patch new file mode 100644 index 000000000..c2c76667c --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/entity/passive/EntityOcelot.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/entity/passive/EntityOcelot.java ++++ ../src-work/minecraft/net/minecraft/entity/passive/EntityOcelot.java +@@ -276,7 +276,7 @@ + + Block block = this.worldObj.getBlockState(blockpos.down()).getBlock(); + +- if (block == Blocks.grass || block.getMaterial() == Material.leaves) ++ if (block == Blocks.grass || block.isLeaves(worldObj, blockpos.down())) + { + return true; + } diff --git a/patches/minecraft/net/minecraft/entity/passive/EntitySheep.java.patch b/patches.mcp/minecraft/net/minecraft/entity/passive/EntitySheep.java.patch similarity index 53% rename from patches/minecraft/net/minecraft/entity/passive/EntitySheep.java.patch rename to patches.mcp/minecraft/net/minecraft/entity/passive/EntitySheep.java.patch index 6faf82c50..88e34a852 100644 --- a/patches/minecraft/net/minecraft/entity/passive/EntitySheep.java.patch +++ b/patches.mcp/minecraft/net/minecraft/entity/passive/EntitySheep.java.patch @@ -7,39 +7,39 @@ -public class EntitySheep extends EntityAnimal +public class EntitySheep extends EntityAnimal implements net.minecraftforge.common.IShearable { - private final InventoryCrafting field_90016_e = new InventoryCrafting(new Container() + private final InventoryCrafting inventoryCrafting = new InventoryCrafting(new Container() { @@ -142,11 +142,12 @@ } } + @SuppressWarnings("unused") - public boolean func_70085_c(EntityPlayer p_70085_1_) + public boolean interact(EntityPlayer player) { - ItemStack itemstack = p_70085_1_.field_71071_by.func_70448_g(); + ItemStack itemstack = player.inventory.getCurrentItem(); -- if (itemstack != null && itemstack.func_77973_b() == Items.field_151097_aZ && !this.func_70892_o() && !this.func_70631_g_()) -+ if (false && itemstack != null && itemstack.func_77973_b() == Items.field_151097_aZ && !this.func_70892_o() && !this.func_70631_g_()) //Forge: Moved to onSheared +- if (itemstack != null && itemstack.getItem() == Items.shears && !this.getSheared() && !this.isChild()) ++ if (false && itemstack != null && itemstack.getItem() == Items.shears && !this.getSheared() && !this.isChild()) //Forge: Moved to onSheared { - if (!this.field_70170_p.field_72995_K) + if (!this.worldObj.isRemote) { @@ -334,4 +335,19 @@ field_175514_bm.put(EnumDyeColor.RED, new float[] {0.6F, 0.2F, 0.2F}); field_175514_bm.put(EnumDyeColor.BLACK, new float[] {0.1F, 0.1F, 0.1F}); } + -+ @Override public boolean isShearable(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos){ return !this.func_70892_o() && !this.func_70631_g_(); } ++ @Override public boolean isShearable(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos){ return !this.getSheared() && !this.isChild(); } + @Override + public java.util.List onSheared(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) + { -+ this.func_70893_e(true); -+ int i = 1 + this.field_70146_Z.nextInt(3); ++ this.setSheared(true); ++ int i = 1 + this.rand.nextInt(3); + + java.util.List ret = new java.util.ArrayList(); + for (int j = 0; j < i; ++j) -+ ret.add(new ItemStack(Item.func_150898_a(Blocks.field_150325_L), 1, this.func_175509_cj().func_176765_a())); ++ ret.add(new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, this.getFleeceColor().getMetadata())); + -+ this.func_85030_a("mob.sheep.shear", 1.0F, 1.0F); ++ this.playSound("mob.sheep.shear", 1.0F, 1.0F); + return ret; + } } diff --git a/patches.mcp/minecraft/net/minecraft/entity/passive/EntityVillager.java.patch b/patches.mcp/minecraft/net/minecraft/entity/passive/EntityVillager.java.patch new file mode 100644 index 000000000..2b7169882 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/entity/passive/EntityVillager.java.patch @@ -0,0 +1,44 @@ +--- ../src-base/minecraft/net/minecraft/entity/passive/EntityVillager.java ++++ ../src-work/minecraft/net/minecraft/entity/passive/EntityVillager.java +@@ -83,6 +83,7 @@ + private boolean isLookingForHome; + private boolean field_175564_by; + private InventoryBasic villagerInventory; ++ @Deprecated //Use VillagerRegistry + private static final EntityVillager.ITradeList[][][][] DEFAULT_TRADE_LIST_MAP = new EntityVillager.ITradeList[][][][] {{{{new EntityVillager.EmeraldForItems(Items.wheat, new EntityVillager.PriceInfo(18, 22)), new EntityVillager.EmeraldForItems(Items.potato, new EntityVillager.PriceInfo(15, 19)), new EntityVillager.EmeraldForItems(Items.carrot, new EntityVillager.PriceInfo(15, 19)), new EntityVillager.ListItemForEmeralds(Items.bread, new EntityVillager.PriceInfo(-4, -2))}, {new EntityVillager.EmeraldForItems(Item.getItemFromBlock(Blocks.pumpkin), new EntityVillager.PriceInfo(8, 13)), new EntityVillager.ListItemForEmeralds(Items.pumpkin_pie, new EntityVillager.PriceInfo(-3, -2))}, {new EntityVillager.EmeraldForItems(Item.getItemFromBlock(Blocks.melon_block), new EntityVillager.PriceInfo(7, 12)), new EntityVillager.ListItemForEmeralds(Items.apple, new EntityVillager.PriceInfo(-5, -7))}, {new EntityVillager.ListItemForEmeralds(Items.cookie, new EntityVillager.PriceInfo(-6, -10)), new EntityVillager.ListItemForEmeralds(Items.cake, new EntityVillager.PriceInfo(1, 1))}}, {{new EntityVillager.EmeraldForItems(Items.string, new EntityVillager.PriceInfo(15, 20)), new EntityVillager.EmeraldForItems(Items.coal, new EntityVillager.PriceInfo(16, 24)), new EntityVillager.ItemAndEmeraldToItem(Items.fish, new EntityVillager.PriceInfo(6, 6), Items.cooked_fish, new EntityVillager.PriceInfo(6, 6))}, {new EntityVillager.ListEnchantedItemForEmeralds(Items.fishing_rod, new EntityVillager.PriceInfo(7, 8))}}, {{new EntityVillager.EmeraldForItems(Item.getItemFromBlock(Blocks.wool), new EntityVillager.PriceInfo(16, 22)), new EntityVillager.ListItemForEmeralds(Items.shears, new EntityVillager.PriceInfo(3, 4))}, {new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, 0), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, 1), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, 2), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, 3), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, 4), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, 5), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, 6), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, 7), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, 8), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, 9), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, 10), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, 11), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, 12), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, 13), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, 14), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, 15), new EntityVillager.PriceInfo(1, 2))}}, {{new EntityVillager.EmeraldForItems(Items.string, new EntityVillager.PriceInfo(15, 20)), new EntityVillager.ListItemForEmeralds(Items.arrow, new EntityVillager.PriceInfo(-12, -8))}, {new EntityVillager.ListItemForEmeralds(Items.bow, new EntityVillager.PriceInfo(2, 3)), new EntityVillager.ItemAndEmeraldToItem(Item.getItemFromBlock(Blocks.gravel), new EntityVillager.PriceInfo(10, 10), Items.flint, new EntityVillager.PriceInfo(6, 10))}}}, {{{new EntityVillager.EmeraldForItems(Items.paper, new EntityVillager.PriceInfo(24, 36)), new EntityVillager.ListEnchantedBookForEmeralds()}, {new EntityVillager.EmeraldForItems(Items.book, new EntityVillager.PriceInfo(8, 10)), new EntityVillager.ListItemForEmeralds(Items.compass, new EntityVillager.PriceInfo(10, 12)), new EntityVillager.ListItemForEmeralds(Item.getItemFromBlock(Blocks.bookshelf), new EntityVillager.PriceInfo(3, 4))}, {new EntityVillager.EmeraldForItems(Items.written_book, new EntityVillager.PriceInfo(2, 2)), new EntityVillager.ListItemForEmeralds(Items.clock, new EntityVillager.PriceInfo(10, 12)), new EntityVillager.ListItemForEmeralds(Item.getItemFromBlock(Blocks.glass), new EntityVillager.PriceInfo(-5, -3))}, {new EntityVillager.ListEnchantedBookForEmeralds()}, {new EntityVillager.ListEnchantedBookForEmeralds()}, {new EntityVillager.ListItemForEmeralds(Items.name_tag, new EntityVillager.PriceInfo(20, 22))}}}, {{{new EntityVillager.EmeraldForItems(Items.rotten_flesh, new EntityVillager.PriceInfo(36, 40)), new EntityVillager.EmeraldForItems(Items.gold_ingot, new EntityVillager.PriceInfo(8, 10))}, {new EntityVillager.ListItemForEmeralds(Items.redstone, new EntityVillager.PriceInfo(-4, -1)), new EntityVillager.ListItemForEmeralds(new ItemStack(Items.dye, 1, EnumDyeColor.BLUE.getDyeDamage()), new EntityVillager.PriceInfo(-2, -1))}, {new EntityVillager.ListItemForEmeralds(Items.ender_eye, new EntityVillager.PriceInfo(7, 11)), new EntityVillager.ListItemForEmeralds(Item.getItemFromBlock(Blocks.glowstone), new EntityVillager.PriceInfo(-3, -1))}, {new EntityVillager.ListItemForEmeralds(Items.experience_bottle, new EntityVillager.PriceInfo(3, 11))}}}, {{{new EntityVillager.EmeraldForItems(Items.coal, new EntityVillager.PriceInfo(16, 24)), new EntityVillager.ListItemForEmeralds(Items.iron_helmet, new EntityVillager.PriceInfo(4, 6))}, {new EntityVillager.EmeraldForItems(Items.iron_ingot, new EntityVillager.PriceInfo(7, 9)), new EntityVillager.ListItemForEmeralds(Items.iron_chestplate, new EntityVillager.PriceInfo(10, 14))}, {new EntityVillager.EmeraldForItems(Items.diamond, new EntityVillager.PriceInfo(3, 4)), new EntityVillager.ListEnchantedItemForEmeralds(Items.diamond_chestplate, new EntityVillager.PriceInfo(16, 19))}, {new EntityVillager.ListItemForEmeralds(Items.chainmail_boots, new EntityVillager.PriceInfo(5, 7)), new EntityVillager.ListItemForEmeralds(Items.chainmail_leggings, new EntityVillager.PriceInfo(9, 11)), new EntityVillager.ListItemForEmeralds(Items.chainmail_helmet, new EntityVillager.PriceInfo(5, 7)), new EntityVillager.ListItemForEmeralds(Items.chainmail_chestplate, new EntityVillager.PriceInfo(11, 15))}}, {{new EntityVillager.EmeraldForItems(Items.coal, new EntityVillager.PriceInfo(16, 24)), new EntityVillager.ListItemForEmeralds(Items.iron_axe, new EntityVillager.PriceInfo(6, 8))}, {new EntityVillager.EmeraldForItems(Items.iron_ingot, new EntityVillager.PriceInfo(7, 9)), new EntityVillager.ListEnchantedItemForEmeralds(Items.iron_sword, new EntityVillager.PriceInfo(9, 10))}, {new EntityVillager.EmeraldForItems(Items.diamond, new EntityVillager.PriceInfo(3, 4)), new EntityVillager.ListEnchantedItemForEmeralds(Items.diamond_sword, new EntityVillager.PriceInfo(12, 15)), new EntityVillager.ListEnchantedItemForEmeralds(Items.diamond_axe, new EntityVillager.PriceInfo(9, 12))}}, {{new EntityVillager.EmeraldForItems(Items.coal, new EntityVillager.PriceInfo(16, 24)), new EntityVillager.ListEnchantedItemForEmeralds(Items.iron_shovel, new EntityVillager.PriceInfo(5, 7))}, {new EntityVillager.EmeraldForItems(Items.iron_ingot, new EntityVillager.PriceInfo(7, 9)), new EntityVillager.ListEnchantedItemForEmeralds(Items.iron_pickaxe, new EntityVillager.PriceInfo(9, 11))}, {new EntityVillager.EmeraldForItems(Items.diamond, new EntityVillager.PriceInfo(3, 4)), new EntityVillager.ListEnchantedItemForEmeralds(Items.diamond_pickaxe, new EntityVillager.PriceInfo(12, 15))}}}, {{{new EntityVillager.EmeraldForItems(Items.porkchop, new EntityVillager.PriceInfo(14, 18)), new EntityVillager.EmeraldForItems(Items.chicken, new EntityVillager.PriceInfo(14, 18))}, {new EntityVillager.EmeraldForItems(Items.coal, new EntityVillager.PriceInfo(16, 24)), new EntityVillager.ListItemForEmeralds(Items.cooked_porkchop, new EntityVillager.PriceInfo(-7, -5)), new EntityVillager.ListItemForEmeralds(Items.cooked_chicken, new EntityVillager.PriceInfo(-8, -6))}}, {{new EntityVillager.EmeraldForItems(Items.leather, new EntityVillager.PriceInfo(9, 12)), new EntityVillager.ListItemForEmeralds(Items.leather_leggings, new EntityVillager.PriceInfo(2, 4))}, {new EntityVillager.ListEnchantedItemForEmeralds(Items.leather_chestplate, new EntityVillager.PriceInfo(7, 12))}, {new EntityVillager.ListItemForEmeralds(Items.saddle, new EntityVillager.PriceInfo(8, 10))}}}}; + private static final String __OBFID = "CL_00001707"; + +@@ -228,7 +229,7 @@ + ItemStack itemstack = player.inventory.getCurrentItem(); + boolean flag = itemstack != null && itemstack.getItem() == Items.spawn_egg; + +- if (!flag && this.isEntityAlive() && !this.isTrading() && !this.isChild()) ++ if (!flag && this.isEntityAlive() && !this.isTrading() && !this.isChild() && !player.isSneaking()) + { + if (!this.worldObj.isRemote && (this.buyingList == null || this.buyingList.size() > 0)) + { +@@ -540,6 +541,7 @@ + + private void populateBuyingList() + { ++ //TODO: Hook into VillagerRegistry + EntityVillager.ITradeList[][][] aitradelist = DEFAULT_TRADE_LIST_MAP[this.getProfession()]; + + if (this.careerId != 0 && this.careerLevel != 0) +@@ -648,6 +650,7 @@ + } + } + ++ //TODO: Hook into VillagerRegistry to get name + if (s1 != null) + { + ChatComponentTranslation chatcomponenttranslation = new ChatComponentTranslation("entity.Villager." + s1, new Object[0]); +@@ -710,7 +713,7 @@ + public IEntityLivingData func_180482_a(DifficultyInstance p_180482_1_, IEntityLivingData p_180482_2_) + { + p_180482_2_ = super.func_180482_a(p_180482_1_, p_180482_2_); +- this.setProfession(this.worldObj.rand.nextInt(5)); ++ net.minecraftforge.fml.common.registry.VillagerRegistry.setRandomProfession(this, this.worldObj.rand); + this.func_175552_ct(); + return p_180482_2_; + } diff --git a/patches.mcp/minecraft/net/minecraft/entity/player/EntityPlayer.java.patch b/patches.mcp/minecraft/net/minecraft/entity/player/EntityPlayer.java.patch new file mode 100644 index 000000000..b65fb2c57 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/entity/player/EntityPlayer.java.patch @@ -0,0 +1,637 @@ +--- ../src-base/minecraft/net/minecraft/entity/player/EntityPlayer.java ++++ ../src-work/minecraft/net/minecraft/entity/player/EntityPlayer.java +@@ -77,9 +77,23 @@ + import net.minecraft.world.WorldSettings; + import net.minecraftforge.fml.relauncher.Side; + import net.minecraftforge.fml.relauncher.SideOnly; ++import net.minecraftforge.common.ISpecialArmor.ArmorProperties; ++import net.minecraftforge.common.MinecraftForge; ++import net.minecraftforge.event.ForgeEventFactory; ++import net.minecraftforge.event.entity.living.LivingHurtEvent; ++import net.minecraftforge.event.entity.player.AttackEntityEvent; ++import net.minecraftforge.event.entity.player.EntityInteractEvent; ++import net.minecraftforge.event.entity.player.PlayerDestroyItemEvent; ++import net.minecraftforge.event.entity.player.PlayerDropsEvent; ++import net.minecraftforge.event.entity.player.PlayerFlyableFallEvent; ++import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent; + + public abstract class EntityPlayer extends EntityLivingBase + { ++ public static final String PERSISTED_NBT_TAG = "PlayerPersisted"; ++ private java.util.HashMap spawnChunkMap = new java.util.HashMap(); ++ private java.util.HashMap spawnForcedMap = new java.util.HashMap(); ++ + public InventoryPlayer inventory = new InventoryPlayer(this); + private InventoryEnderChest theInventoryEnderChest = new InventoryEnderChest(); + public Container inventoryContainer; +@@ -118,6 +132,7 @@ + private final GameProfile gameProfile; + private boolean hasReducedDebug = false; + public EntityFishHook fishEntity; ++ public float eyeHeight = this.getDefaultEyeHeight(); + private static final String __OBFID = "CL_00001711"; + + public EntityPlayer(World worldIn, GameProfile p_i45324_2_) +@@ -176,7 +191,8 @@ + { + if (this.itemInUse != null) + { +- this.itemInUse.onPlayerStoppedUsing(this.worldObj, this, this.itemInUseCount); ++ if (!net.minecraftforge.event.ForgeEventFactory.onUseItemStop(this, itemInUse, this.itemInUseCount)) ++ this.itemInUse.onPlayerStoppedUsing(this.worldObj, this, this.itemInUseCount); + } + + this.clearItemInUse(); +@@ -200,6 +216,7 @@ + + public void onUpdate() + { ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().onPlayerPreTick(this); + this.noClip = this.isSpectator(); + + if (this.isSpectator()) +@@ -213,6 +230,14 @@ + + if (itemstack == this.itemInUse) + { ++ itemInUseCount = net.minecraftforge.event.ForgeEventFactory.onItemUseTick(this, itemInUse, itemInUseCount); ++ if (itemInUseCount <= 0) ++ { ++ this.onItemUseFinish(); ++ } ++ else ++ { // Forge Keep unindented to lower patch ++ itemInUse.getItem().onUsingTick(itemInUse, this, itemInUseCount); //Forge Added + if (this.itemInUseCount <= 25 && this.itemInUseCount % 4 == 0) + { + this.updateItemUse(itemstack, 5); +@@ -222,6 +247,7 @@ + { + this.onItemUseFinish(); + } ++ } + } + else + { +@@ -267,7 +293,7 @@ + + super.onUpdate(); + +- if (!this.worldObj.isRemote && this.openContainer != null && !this.openContainer.canInteractWith(this)) ++ if (!this.worldObj.isRemote && this.openContainer != null && !net.minecraftforge.common.ForgeHooks.canInteractWith(this, this.openContainer)) + { + this.closeScreen(); + this.openContainer = this.inventoryContainer; +@@ -344,6 +370,7 @@ + { + this.setPosition(d3, this.posY, d4); + } ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().onPlayerPostTick(this); + } + + public int getMaxInPortalTime() +@@ -413,11 +440,13 @@ + int i = this.itemInUse.stackSize; + ItemStack itemstack = this.itemInUse.onItemUseFinish(this.worldObj, this); + ++ itemstack = net.minecraftforge.event.ForgeEventFactory.onItemUseFinish(this, itemInUse, itemInUseCount, itemstack); ++ + if (itemstack != this.itemInUse || itemstack != null && itemstack.stackSize != i) + { + this.inventory.mainInventory[this.inventory.currentItem] = itemstack; + +- if (itemstack.stackSize == 0) ++ if (itemstack != null && itemstack.stackSize == 0) + { + this.inventory.mainInventory[this.inventory.currentItem] = null; + } +@@ -477,11 +506,11 @@ + this.cameraYaw = 0.0F; + this.addMountedMovementStat(this.posX - d0, this.posY - d1, this.posZ - d2); + +- if (this.ridingEntity instanceof EntityPig) ++ if (this.ridingEntity instanceof EntityLivingBase && ((EntityLivingBase)ridingEntity).shouldRiderFaceForward(this)) + { + this.rotationPitch = f1; + this.rotationYaw = f; +- this.renderYawOffset = ((EntityPig)this.ridingEntity).renderYawOffset; ++ this.renderYawOffset = ((EntityLivingBase)this.ridingEntity).renderYawOffset; + } + } + } +@@ -611,11 +640,15 @@ + + public void onDeath(DamageSource cause) + { ++ if (net.minecraftforge.common.ForgeHooks.onLivingDeath(this, cause)) return; + super.onDeath(cause); + this.setSize(0.2F, 0.2F); + this.setPosition(this.posX, this.posY, this.posZ); + this.motionY = 0.10000000149011612D; + ++ captureDrops = true; ++ capturedDrops.clear(); ++ + if (this.getName().equals("Notch")) + { + this.dropItem(new ItemStack(Items.apple, 1), true, false); +@@ -626,6 +659,9 @@ + this.inventory.dropAllItems(); + } + ++ captureDrops = false; ++ if (!worldObj.isRemote) net.minecraftforge.event.ForgeEventFactory.onPlayerDrops(this, cause, capturedDrops, recentlyHit > 0); ++ + if (cause != null) + { + this.motionX = (double)(-MathHelper.cos((this.attackedAtYaw + this.rotationYaw) * (float)Math.PI / 180.0F) * 0.1F); +@@ -714,12 +750,25 @@ + + public EntityItem dropOneItem(boolean p_71040_1_) + { +- return this.dropItem(this.inventory.decrStackSize(this.inventory.currentItem, p_71040_1_ && this.inventory.getCurrentItem() != null ? this.inventory.getCurrentItem().stackSize : 1), false, true); ++ ItemStack stack = inventory.getCurrentItem(); ++ ++ if (stack == null) ++ { ++ return null; ++ } ++ ++ if (stack.getItem().onDroppedByPlayer(stack, this)) ++ { ++ int count = p_71040_1_ && this.inventory.getCurrentItem() != null ? this.inventory.getCurrentItem().stackSize : 1; ++ return net.minecraftforge.common.ForgeHooks.onPlayerTossEvent(this, inventory.decrStackSize(inventory.currentItem, count), true); ++ } ++ ++ return null; + } + + public EntityItem dropPlayerItemWithRandomChoice(ItemStack itemStackIn, boolean unused) + { +- return this.dropItem(itemStackIn, false, false); ++ return net.minecraftforge.common.ForgeHooks.onPlayerTossEvent(this, itemStackIn, false); + } + + public EntityItem dropItem(ItemStack droppedItem, boolean dropAround, boolean traceItem) +@@ -780,13 +829,25 @@ + + public void joinEntityItemWithWorld(EntityItem p_71012_1_) + { ++ if (captureDrops) ++ { ++ capturedDrops.add(p_71012_1_); ++ return; ++ } + this.worldObj.spawnEntityInWorld(p_71012_1_); + } + ++ @Deprecated //Use location sensitive version below + public float getToolDigEfficiency(Block p_180471_1_) + { +- float f = this.inventory.getStrVsBlock(p_180471_1_); ++ return getBreakSpeed(p_180471_1_.getDefaultState(), new BlockPos(0, -1, 0)); ++ } + ++ public float getBreakSpeed(IBlockState state, BlockPos pos) ++ { ++ ItemStack stack = inventory.getCurrentItem(); ++ float f = (stack == null ? 1.0F : stack.getItem().getDigSpeed(stack, state)); ++ + if (f > 1.0F) + { + int i = EnchantmentHelper.getEfficiencyModifier(this); +@@ -836,12 +897,13 @@ + f /= 5.0F; + } + +- return f; ++ f = net.minecraftforge.event.ForgeEventFactory.getBreakSpeed(this, state, f, pos); ++ return (f < 0 ? 0 : f); + } + + public boolean canHarvestBlock(Block p_146099_1_) + { +- return this.inventory.func_146025_b(p_146099_1_); ++ return net.minecraftforge.event.ForgeEventFactory.doPlayerHarvestCheck(this, p_146099_1_, this.inventory.func_146025_b(p_146099_1_)); + } + + public void readEntityFromNBT(NBTTagCompound tagCompund) +@@ -877,6 +939,16 @@ + this.spawnForced = tagCompund.getBoolean("SpawnForced"); + } + ++ NBTTagList spawnlist = null; ++ spawnlist = tagCompund.getTagList("Spawns", 10); ++ for (int i = 0; i < spawnlist.tagCount(); i++) ++ { ++ NBTTagCompound spawndata = (NBTTagCompound)spawnlist.getCompoundTagAt(i); ++ int spawndim = spawndata.getInteger("Dim"); ++ this.spawnChunkMap.put(spawndim, new BlockPos(spawndata.getInteger("SpawnX"), spawndata.getInteger("SpawnY"), spawndata.getInteger("SpawnZ"))); ++ this.spawnForcedMap.put(spawndim, spawndata.getBoolean("SpawnForced")); ++ } ++ + this.foodStats.readNBT(tagCompund); + this.capabilities.readCapabilitiesFromNBT(tagCompund); + +@@ -908,6 +980,23 @@ + tagCompound.setBoolean("SpawnForced", this.spawnForced); + } + ++ NBTTagList spawnlist = new NBTTagList(); ++ for (java.util.Map.Entry entry : this.spawnChunkMap.entrySet()) ++ { ++ BlockPos spawn = entry.getValue(); ++ if (spawn == null) continue; ++ Boolean forced = spawnForcedMap.get(entry.getKey()); ++ if (forced == null) forced = false; ++ NBTTagCompound spawndata = new NBTTagCompound(); ++ spawndata.setInteger("Dim", entry.getKey()); ++ spawndata.setInteger("SpawnX", spawn.getX()); ++ spawndata.setInteger("SpawnY", spawn.getY()); ++ spawndata.setInteger("SpawnZ", spawn.getZ()); ++ spawndata.setBoolean("SpawnForced", forced); ++ spawnlist.appendTag(spawndata); ++ } ++ tagCompound.setTag("Spawns", spawnlist); ++ + this.foodStats.writeNBT(tagCompound); + this.capabilities.writeCapabilitiesToNBT(tagCompound); + tagCompound.setTag("EnderItems", this.theInventoryEnderChest.saveInventoryToNBT()); +@@ -921,6 +1010,7 @@ + + public boolean attackEntityFrom(DamageSource source, float amount) + { ++ if (!net.minecraftforge.common.ForgeHooks.onLivingAttack(this, source, amount)) return false; + if (this.isEntityInvulnerable(source)) + { + return false; +@@ -1021,12 +1111,15 @@ + { + if (!this.isEntityInvulnerable(damageSrc)) + { ++ damageAmount = net.minecraftforge.common.ForgeHooks.onLivingHurt(this, damageSrc, damageAmount); ++ if (damageAmount <= 0) return; + if (!damageSrc.isUnblockable() && this.isBlocking() && damageAmount > 0.0F) + { + damageAmount = (1.0F + damageAmount) * 0.5F; + } + +- damageAmount = this.applyArmorCalculations(damageSrc, damageAmount); ++ damageAmount = net.minecraftforge.common.ISpecialArmor.ArmorProperties.applyArmor(this, inventory.armorInventory, damageSrc, damageAmount); ++ if (damageAmount <= 0) return; + damageAmount = this.applyPotionDamageCalculations(damageSrc, damageAmount); + float f1 = damageAmount; + damageAmount = Math.max(damageAmount - this.getAbsorptionAmount(), 0.0F); +@@ -1074,6 +1167,7 @@ + } + else + { ++ if (!net.minecraftforge.event.ForgeEventFactory.canInteractWith(this, p_70998_1_)) return false; + ItemStack itemstack = this.getCurrentEquippedItem(); + ItemStack itemstack1 = itemstack != null ? itemstack.copy() : null; + +@@ -1125,7 +1219,9 @@ + + public void destroyCurrentEquippedItem() + { ++ ItemStack orig = getCurrentEquippedItem(); + this.inventory.setInventorySlotContents(this.inventory.currentItem, (ItemStack)null); ++ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(this, orig); + } + + public double getYOffset() +@@ -1135,6 +1231,7 @@ + + public void attackTargetEntityWithCurrentItem(Entity targetEntity) + { ++ if (!net.minecraftforge.common.ForgeHooks.onPlayerAttackTarget(this, targetEntity)) return; + if (targetEntity.canAttackWithItem()) + { + if (!targetEntity.hitByEntity(this)) +@@ -1305,6 +1402,8 @@ + + public EntityPlayer.EnumStatus trySleep(BlockPos bedLocation) + { ++ EntityPlayer.EnumStatus ret = net.minecraftforge.event.ForgeEventFactory.onPlayerSleepInBed(this, bedLocation); ++ if (ret != null) return ret; + if (!this.worldObj.isRemote) + { + if (this.isPlayerSleeping() || !this.isEntityAlive()) +@@ -1346,7 +1445,7 @@ + + if (this.worldObj.isBlockLoaded(bedLocation)) + { +- EnumFacing enumfacing = (EnumFacing)this.worldObj.getBlockState(bedLocation).getValue(BlockDirectional.FACING); ++ EnumFacing enumfacing = this.worldObj.getBlockState(bedLocation).getBlock().getBedDirection(worldObj, bedLocation); + float f = 0.5F; + float f1 = 0.5F; + +@@ -1409,13 +1508,14 @@ + + public void wakeUpPlayer(boolean p_70999_1_, boolean updateWorldFlag, boolean setSpawn) + { ++ net.minecraftforge.event.ForgeEventFactory.onPlayerWakeup(this, p_70999_1_, updateWorldFlag, setSpawn); + this.setSize(0.6F, 1.8F); + IBlockState iblockstate = this.worldObj.getBlockState(this.playerLocation); + +- if (this.playerLocation != null && iblockstate.getBlock() == Blocks.bed) ++ if (this.playerLocation != null && iblockstate.getBlock().isBed(worldObj, playerLocation, this)) + { +- this.worldObj.setBlockState(this.playerLocation, iblockstate.withProperty(BlockBed.OCCUPIED, Boolean.valueOf(false)), 4); +- BlockPos blockpos = BlockBed.getSafeExitLocation(this.worldObj, this.playerLocation, 0); ++ iblockstate.getBlock().setBedOccupied(worldObj, playerLocation, this, false); ++ BlockPos blockpos = iblockstate.getBlock().getBedSpawnPosition(worldObj, playerLocation, this); + + if (blockpos == null) + { +@@ -1442,12 +1542,12 @@ + + private boolean isInBed() + { +- return this.worldObj.getBlockState(this.playerLocation).getBlock() == Blocks.bed; ++ return this.worldObj.getBlockState(this.playerLocation).getBlock().isBed(worldObj, playerLocation, this); + } + + public static BlockPos getBedSpawnLocation(World worldIn, BlockPos bedLocation, boolean forceSpawn) + { +- if (worldIn.getBlockState(bedLocation).getBlock() != Blocks.bed) ++ if (!worldIn.getBlockState(bedLocation).getBlock().isBed(worldIn, bedLocation, null)) + { + if (!forceSpawn) + { +@@ -1464,7 +1564,7 @@ + } + else + { +- return BlockBed.getSafeExitLocation(worldIn, bedLocation, 0); ++ return worldIn.getBlockState(bedLocation).getBlock().getBedSpawnPosition(worldIn, bedLocation, null); + } + } + +@@ -1473,7 +1573,7 @@ + { + if (this.playerLocation != null) + { +- EnumFacing enumfacing = (EnumFacing)this.worldObj.getBlockState(this.playerLocation).getValue(BlockDirectional.FACING); ++ EnumFacing enumfacing = this.worldObj.getBlockState(this.playerLocation).getBlock().getBedDirection(worldObj, playerLocation); + + switch (EntityPlayer.SwitchEnumFacing.FACING_LOOKUP[enumfacing.ordinal()]) + { +@@ -1511,16 +1611,23 @@ + + public BlockPos getBedLocation() + { +- return this.spawnChunk; ++ return getBedLocation(this.dimension); + } + ++ @Deprecated + public boolean isSpawnForced() + { +- return this.spawnForced; ++ return isSpawnForced(this.dimension); + } + + public void setSpawnPoint(BlockPos pos, boolean forced) + { ++ if(net.minecraftforge.event.ForgeEventFactory.onPlayerSpawnSet(this, pos, forced)) return; ++ if (this.dimension != 0) ++ { ++ setSpawnChunk(pos, forced, this.dimension); ++ return; ++ } + if (pos != null) + { + this.spawnChunk = pos; +@@ -1702,6 +1809,10 @@ + + super.fall(distance, damageMultiplier); + } ++ else ++ { ++ net.minecraftforge.event.ForgeEventFactory.onPlayerFall(this, distance, damageMultiplier); ++ } + } + + protected void resetHeight() +@@ -1725,6 +1836,7 @@ + } + + EntityList.EntityEggInfo entityegginfo = (EntityList.EntityEggInfo)EntityList.entityEggs.get(Integer.valueOf(EntityList.getEntityID(entityLivingIn))); ++ if (entityegginfo == null) entityegginfo = net.minecraftforge.fml.common.registry.EntityRegistry.getEggs().get(EntityList.getEntityString(entityLivingIn)); + + if (entityegginfo != null) + { +@@ -1837,6 +1949,8 @@ + { + if (stack != this.itemInUse) + { ++ duration = net.minecraftforge.event.ForgeEventFactory.onItemUseStart(this, stack, duration); ++ if (duration <= 0) return; + this.itemInUse = stack; + this.itemInUseCount = duration; + +@@ -1906,6 +2020,10 @@ + this.experience = oldPlayer.experience; + this.setScore(oldPlayer.getScore()); + this.teleportDirection = oldPlayer.teleportDirection; ++ //Copy and re-init ExtendedProperties when switching dimensions. ++ this.extendedProperties = oldPlayer.extendedProperties; ++ for (net.minecraftforge.common.IExtendedEntityProperties p : this.extendedProperties.values()) ++ p.init(this, this.worldObj); + } + else if (this.worldObj.getGameRules().getGameRuleBooleanValue("keepInventory")) + { +@@ -1918,6 +2036,18 @@ + + this.theInventoryEnderChest = oldPlayer.theInventoryEnderChest; + this.getDataWatcher().updateObject(10, Byte.valueOf(oldPlayer.getDataWatcher().getWatchableObjectByte(10))); ++ ++ this.spawnChunkMap = oldPlayer.spawnChunkMap; ++ this.spawnForcedMap = oldPlayer.spawnForcedMap; ++ ++ //Copy over a section of the Entity Data from the old player. ++ //Allows mods to specify data that persists after players respawn. ++ NBTTagCompound old = oldPlayer.getEntityData(); ++ if (old.hasKey(PERSISTED_NBT_TAG)) ++ { ++ getEntityData().setTag(PERSISTED_NBT_TAG, old.getCompoundTag(PERSISTED_NBT_TAG)); ++ } ++ net.minecraftforge.event.ForgeEventFactory.onPlayerClone(this, oldPlayer, !respawnFromEnd); + } + + protected boolean canTriggerWalking() +@@ -1951,7 +2081,14 @@ + + public void setCurrentItemOrArmor(int slotIn, ItemStack stack) + { +- this.inventory.armorInventory[slotIn] = stack; ++ if (slotIn == 0) //Forge: Fix issue in Player where it doen't take into account selected item ++ { ++ this.inventory.mainInventory[this.inventory.currentItem] = stack; ++ } ++ else ++ { ++ this.inventory.armorInventory[slotIn - 1] = stack; ++ } + } + + @SideOnly(Side.CLIENT) +@@ -1996,7 +2133,10 @@ + + public IChatComponent getDisplayName() + { +- ChatComponentText chatcomponenttext = new ChatComponentText(ScorePlayerTeam.formatPlayerName(this.getTeam(), this.getName())); ++ ChatComponentText chatcomponenttext = new ChatComponentText(""); ++ if (!prefixes.isEmpty()) for (net.minecraft.util.IChatComponent prefix : prefixes) chatcomponenttext.appendSibling(prefix); ++ chatcomponenttext.appendSibling(new ChatComponentText(ScorePlayerTeam.formatPlayerName(this.getTeam(), this.getDisplayNameString()))); ++ if (!suffixes.isEmpty()) for (net.minecraft.util.IChatComponent suffix : suffixes) chatcomponenttext.appendSibling(suffix); + chatcomponenttext.getChatStyle().setChatClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/msg " + this.getName() + " ")); + chatcomponenttext.getChatStyle().setChatHoverEvent(this.func_174823_aP()); + chatcomponenttext.getChatStyle().setInsertion(this.getName()); +@@ -2005,7 +2145,7 @@ + + public float getEyeHeight() + { +- float f = 1.62F; ++ float f = eyeHeight; + + if (this.isPlayerSleeping()) + { +@@ -2139,6 +2279,136 @@ + this.hasReducedDebug = reducedDebug; + } + ++ /** ++ * Opens a GUI with this player, uses FML's IGuiHandler system. ++ * Allows for extension by modders. ++ * ++ * @param mod The mod trying to open a GUI ++ * @param modGuiId GUI ID ++ * @param world Current World ++ * @param x Passed directly to IGuiHandler, data meaningless Typically world X position ++ * @param y Passed directly to IGuiHandler, data meaningless Typically world Y position ++ * @param z Passed directly to IGuiHandler, data meaningless Typically world Z position ++ */ ++ public void openGui(Object mod, int modGuiId, World world, int x, int y, int z) ++ { ++ net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.openGui(this, mod, modGuiId, world, x, y, z); ++ } ++ ++ ++ /* ======================================== FORGE START =====================================*/ ++ /** ++ * A dimension aware version of getBedLocation. ++ * @param dimension The dimension to get the bed spawn for ++ * @return The player specific spawn location for the dimension. May be null. ++ */ ++ public BlockPos getBedLocation(int dimension) ++ { ++ return dimension == 0 ? spawnChunk : spawnChunkMap.get(dimension); ++ } ++ ++ /** ++ * A dimension aware version of isSpawnForced. ++ * Noramally isSpawnForced is used to determine if the respawn system should check for a bed or not. ++ * This just extends that to be dimension aware. ++ * @param dimension The dimension to get whether to check for a bed before spawning for ++ * @return The player specific spawn location for the dimension. May be null. ++ */ ++ public boolean isSpawnForced(int dimension) ++ { ++ if (dimension == 0) return this.spawnForced; ++ Boolean forced = this.spawnForcedMap.get(dimension); ++ return forced == null ? false : forced; ++ } ++ ++ /** ++ * A dimension aware version of setSpawnChunk. ++ * This functions identically, but allows you to specify which dimension to affect, rather than affecting the player's current dimension. ++ * @param pos The spawn point to set as the player-specific spawn point for the dimension ++ * @param forced Whether or not the respawn code should check for a bed at this location (true means it won't check for a bed) ++ * @param dimension Which dimension to apply the player-specific respawn point to ++ */ ++ public void setSpawnChunk(BlockPos pos, boolean forced, int dimension) ++ { ++ if (dimension == 0) ++ { ++ if (pos != null) ++ { ++ spawnChunk = pos; ++ spawnForced = forced; ++ } ++ else ++ { ++ spawnChunk = null; ++ spawnForced = false; ++ } ++ return; ++ } ++ ++ if (pos != null) ++ { ++ spawnChunkMap.put(dimension, pos); ++ spawnForcedMap.put(dimension, forced); ++ } ++ else ++ { ++ spawnChunkMap.remove(dimension); ++ spawnForcedMap.remove(dimension); ++ } ++ } ++ ++ private String displayname; ++ ++ /** ++ * Returns the default eye height of the player ++ * @return player default eye height ++ */ ++ public float getDefaultEyeHeight() ++ { ++ return 1.62F; ++ } ++ ++ /** ++ * Get the currently computed display name, cached for efficiency. ++ * @return the current display name ++ */ ++ public String getDisplayNameString() ++ { ++ if(this.displayname == null) ++ { ++ this.displayname = ForgeEventFactory.getPlayerDisplayName(this, this.getName()); ++ } ++ return this.displayname; ++ } ++ ++ /** ++ * Force the displayed name to refresh ++ */ ++ public void refreshDisplayName() ++ { ++ this.displayname = ForgeEventFactory.getPlayerDisplayName(this, this.getName()); ++ } ++ ++ private final java.util.Collection prefixes = new java.util.LinkedList(); ++ private final java.util.Collection suffixes = new java.util.LinkedList(); ++ ++ /** ++ * Add a prefix to the player's username in chat ++ * @param prefix The prefix ++ */ ++ public void addPrefix(net.minecraft.util.IChatComponent prefix) { prefixes.add(prefix); } ++ ++ /** ++ * Add a suffix to the player's username in chat ++ * @param suffix The suffix ++ */ ++ public void addSuffix(net.minecraft.util.IChatComponent suffix) { suffixes.add(suffix); } ++ ++ public java.util.Collection getPrefixes() { return this.prefixes; } ++ public java.util.Collection getSuffixes() { return this.suffixes; } ++ ++ /* ======================================== FORGE END =====================================*/ ++ + public static enum EnumChatVisibility + { + FULL(0, "options.chat.visibility.full"), diff --git a/patches.mcp/minecraft/net/minecraft/entity/player/EntityPlayerMP.java.patch b/patches.mcp/minecraft/net/minecraft/entity/player/EntityPlayerMP.java.patch new file mode 100644 index 000000000..7db228e41 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/entity/player/EntityPlayerMP.java.patch @@ -0,0 +1,92 @@ +--- ../src-base/minecraft/net/minecraft/entity/player/EntityPlayerMP.java ++++ ../src-work/minecraft/net/minecraft/entity/player/EntityPlayerMP.java +@@ -127,14 +127,15 @@ + public boolean playerConqueredTheEnd; + private static final String __OBFID = "CL_00001440"; + ++ @SuppressWarnings("unused") + public EntityPlayerMP(MinecraftServer server, WorldServer worldIn, GameProfile profile, ItemInWorldManager interactionManager) + { + super(worldIn, profile); + interactionManager.thisPlayerMP = this; + this.theItemInWorldManager = interactionManager; +- BlockPos blockpos = worldIn.getSpawnPoint(); ++ BlockPos blockpos = worldIn.provider.getRandomizedSpawnPoint(); + +- if (!worldIn.provider.getHasNoSky() && worldIn.getWorldInfo().getGameType() != WorldSettings.GameType.ADVENTURE) ++ if (false && !worldIn.provider.getHasNoSky() && worldIn.getWorldInfo().getGameType() != WorldSettings.GameType.ADVENTURE) + { + int i = Math.max(5, server.getSpawnProtectionSize() - 6); + int j = MathHelper.floor_double(worldIn.getWorldBorder().getClosestDistance((double)blockpos.getX(), (double)blockpos.getZ())); +@@ -227,7 +228,7 @@ + + this.openContainer.detectAndSendChanges(); + +- if (!this.worldObj.isRemote && !this.openContainer.canInteractWith(this)) ++ if (!this.worldObj.isRemote && !net.minecraftforge.common.ForgeHooks.canInteractWith(this, this.openContainer)) + { + this.closeScreen(); + this.openContainer = this.inventoryContainer; +@@ -269,7 +270,8 @@ + if (chunk.isPopulated()) + { + arraylist.add(chunk); +- arraylist1.addAll(((WorldServer)this.worldObj).func_147486_a(chunkcoordintpair.chunkXPos * 16, 0, chunkcoordintpair.chunkZPos * 16, chunkcoordintpair.chunkXPos * 16 + 16, 256, chunkcoordintpair.chunkZPos * 16 + 16)); ++ arraylist1.addAll(((WorldServer)this.worldObj).func_147486_a(chunkcoordintpair.chunkXPos * 16, 0, chunkcoordintpair.chunkZPos * 16, chunkcoordintpair.chunkXPos * 16 + 15, 256, chunkcoordintpair.chunkZPos * 16 + 15)); ++ //BugFix: 16 makes it load an extra chunk, which isn't associated with a player, which makes it not unload unless a player walks near it. + iterator1.remove(); + } + } +@@ -305,6 +307,7 @@ + { + chunk = (Chunk)iterator2.next(); + this.getServerForPlayer().getEntityTracker().func_85172_a(this, chunk); ++ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.ChunkWatchEvent.Watch(chunk.getChunkCoordIntPair(), this)); + } + } + } +@@ -440,6 +443,7 @@ + + public void onDeath(DamageSource cause) + { ++ if (net.minecraftforge.common.ForgeHooks.onLivingDeath(this, cause)) return; + if (this.worldObj.getGameRules().getGameRuleBooleanValue("showDeathMessages")) + { + Team team = this.getTeam(); +@@ -463,7 +467,20 @@ + + if (!this.worldObj.getGameRules().getGameRuleBooleanValue("keepInventory")) + { ++ captureDrops = true; ++ capturedDrops.clear(); ++ + this.inventory.dropAllItems(); ++ ++ captureDrops = false; ++ net.minecraftforge.event.entity.player.PlayerDropsEvent event = new net.minecraftforge.event.entity.player.PlayerDropsEvent(this, cause, capturedDrops, recentlyHit > 0); ++ if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) ++ { ++ for (net.minecraft.entity.item.EntityItem item : capturedDrops) ++ { ++ joinEntityItemWithWorld(item); ++ } ++ } + } + + Collection collection = this.worldObj.getScoreboard().getObjectivesFromCriteria(IScoreObjectiveCriteria.deathCount); +@@ -481,6 +498,7 @@ + if (entitylivingbase != null) + { + EntityList.EntityEggInfo entityegginfo = (EntityList.EntityEggInfo)EntityList.entityEggs.get(Integer.valueOf(EntityList.getEntityID(entitylivingbase))); ++ if (entityegginfo == null) entityegginfo = net.minecraftforge.fml.common.registry.EntityRegistry.getEggs().get(EntityList.getEntityString(entitylivingbase)); + + if (entityegginfo != null) + { +@@ -849,6 +867,7 @@ + { + if (stat != null) + { ++ if (stat.isAchievement() && net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.player.AchievementEvent(this, (net.minecraft.stats.Achievement) stat))) return; + this.statsFile.func_150871_b(this, stat, amount); + Iterator iterator = this.getWorldScoreboard().getObjectivesFromCriteria(stat.func_150952_k()).iterator(); + diff --git a/patches.mcp/minecraft/net/minecraft/entity/player/InventoryPlayer.java.patch b/patches.mcp/minecraft/net/minecraft/entity/player/InventoryPlayer.java.patch new file mode 100644 index 000000000..7a1769164 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/entity/player/InventoryPlayer.java.patch @@ -0,0 +1,17 @@ +--- ../src-base/minecraft/net/minecraft/entity/player/InventoryPlayer.java ++++ ../src-work/minecraft/net/minecraft/entity/player/InventoryPlayer.java +@@ -319,6 +319,14 @@ + this.mainInventory[i].updateAnimation(this.player.worldObj, this.player, i, this.currentItem == i); + } + } ++ ++ for (int i = 0; i < armorInventory.length; i++) ++ { ++ if (armorInventory[i] != null) ++ { ++ armorInventory[i].getItem().onArmorTick(player.worldObj, player, armorInventory[i]); ++ } ++ } + } + + public boolean consumeInventoryItem(Item p_146026_1_) diff --git a/patches/minecraft/net/minecraft/entity/projectile/EntityFishHook.java.patch b/patches.mcp/minecraft/net/minecraft/entity/projectile/EntityFishHook.java.patch similarity index 50% rename from patches/minecraft/net/minecraft/entity/projectile/EntityFishHook.java.patch rename to patches.mcp/minecraft/net/minecraft/entity/projectile/EntityFishHook.java.patch index 14c20d778..4b1e039f3 100644 --- a/patches/minecraft/net/minecraft/entity/projectile/EntityFishHook.java.patch +++ b/patches.mcp/minecraft/net/minecraft/entity/projectile/EntityFishHook.java.patch @@ -5,18 +5,18 @@ } + @SuppressWarnings("unused") - private ItemStack func_146033_f() + private ItemStack getFishingResult() { - float f = this.field_70170_p.field_73012_v.nextFloat(); - int i = EnchantmentHelper.func_151386_g(this.field_146042_b); - int j = EnchantmentHelper.func_151387_h(this.field_146042_b); + float f = this.worldObj.rand.nextFloat(); + int i = EnchantmentHelper.getLuckOfSeaModifier(this.angler); + int j = EnchantmentHelper.getLureModifier(this.angler); + + if (true) + { -+ this.field_146042_b.func_71064_a(net.minecraftforge.common.FishingHooks.getFishableCategory(f, i, j).stat, 1); -+ return net.minecraftforge.common.FishingHooks.getRandomFishable(this.field_70146_Z, f, i, j); ++ this.angler.addStat(net.minecraftforge.common.FishingHooks.getFishableCategory(f, i, j).stat, 1); ++ return net.minecraftforge.common.FishingHooks.getRandomFishable(this.rand, f, i, j); + } + float f1 = 0.1F - (float)i * 0.025F - (float)j * 0.01F; float f2 = 0.05F + (float)i * 0.01F - (float)j * 0.01F; - f1 = MathHelper.func_76131_a(f1, 0.0F, 1.0F); + f1 = MathHelper.clamp_float(f1, 0.0F, 1.0F); diff --git a/patches.mcp/minecraft/net/minecraft/init/Bootstrap.java.patch b/patches.mcp/minecraft/net/minecraft/init/Bootstrap.java.patch new file mode 100644 index 000000000..3566d51cb --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/init/Bootstrap.java.patch @@ -0,0 +1,35 @@ +--- ../src-base/minecraft/net/minecraft/init/Bootstrap.java ++++ ../src-work/minecraft/net/minecraft/init/Bootstrap.java +@@ -67,6 +67,7 @@ + return alreadyRegistered; + } + ++ @SuppressWarnings("unused") + static void registerDispenserBehaviors() + { + BlockDispenser.dispenseBehaviorRegistry.putObject(Items.arrow, new BehaviorProjectileDispense() +@@ -144,7 +145,7 @@ + double d0 = source.getX() + (double)enumfacing.getFrontOffsetX(); + double d1 = (double)((float)source.getBlockPos().getY() + 0.2F); + double d2 = source.getZ() + (double)enumfacing.getFrontOffsetZ(); +- Entity entity = ItemMonsterPlacer.spawnCreature(source.getWorld(), stack.getMetadata(), d0, d1, d2); ++ Entity entity = ItemMonsterPlacer.spawnCreature(source.getWorld(), ItemMonsterPlacer.getEntityName(stack), d0, d1, d2); + + if (entity instanceof EntityLivingBase && stack.hasDisplayName()) + { +@@ -509,6 +510,7 @@ + } + } + }); ++ if (false){ //Forge: Removed, Fixes MC-75630 - Exploit with signs and command blocks + BlockDispenser.dispenseBehaviorRegistry.putObject(Item.getItemFromBlock(Blocks.command_block), new BehaviorDefaultDispenseItem() + { + private static final String __OBFID = "CL_00002276"; +@@ -535,6 +537,7 @@ + protected void playDispenseSound(IBlockSource source) {} + protected void spawnDispenseParticles(IBlockSource source, EnumFacing facingIn) {} + }); ++ } + } + + public static void register() diff --git a/patches.mcp/minecraft/net/minecraft/inventory/Container.java.patch b/patches.mcp/minecraft/net/minecraft/inventory/Container.java.patch new file mode 100644 index 000000000..35180e976 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/inventory/Container.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/inventory/Container.java ++++ ../src-work/minecraft/net/minecraft/inventory/Container.java +@@ -624,7 +624,7 @@ + slot = (Slot)this.inventorySlots.get(k); + itemstack1 = slot.getStack(); + +- if (itemstack1 == null) ++ if (itemstack1 == null && slot.isItemValid(stack)) // Forge: Make sure to respect isItemValid in the slot. + { + slot.putStack(stack.copy()); + slot.onSlotChanged(); diff --git a/patches.mcp/minecraft/net/minecraft/inventory/ContainerBeacon.java.patch b/patches.mcp/minecraft/net/minecraft/inventory/ContainerBeacon.java.patch new file mode 100644 index 000000000..7ef5ed191 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/inventory/ContainerBeacon.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/inventory/ContainerBeacon.java ++++ ../src-work/minecraft/net/minecraft/inventory/ContainerBeacon.java +@@ -132,7 +132,7 @@ + + public boolean isItemValid(ItemStack stack) + { +- return stack == null ? false : stack.getItem() == Items.emerald || stack.getItem() == Items.diamond || stack.getItem() == Items.gold_ingot || stack.getItem() == Items.iron_ingot; ++ return stack == null ? false : stack.getItem().isBeaconPayment(stack); + } + + public int getSlotStackLimit() diff --git a/patches.mcp/minecraft/net/minecraft/inventory/ContainerBrewingStand.java.patch b/patches.mcp/minecraft/net/minecraft/inventory/ContainerBrewingStand.java.patch new file mode 100644 index 000000000..305f94fad --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/inventory/ContainerBrewingStand.java.patch @@ -0,0 +1,29 @@ +--- ../src-base/minecraft/net/minecraft/inventory/ContainerBrewingStand.java ++++ ../src-work/minecraft/net/minecraft/inventory/ContainerBrewingStand.java +@@ -158,7 +158,7 @@ + + public boolean isItemValid(ItemStack stack) + { +- return stack != null ? stack.getItem().isPotionIngredient(stack) : false; ++ return net.minecraftforge.common.brewing.BrewingRecipeRegistry.isValidIngredient(stack); + } + + public int getSlotStackLimit() +@@ -190,7 +190,7 @@ + + public void onPickupFromSlot(EntityPlayer playerIn, ItemStack stack) + { +- if (stack.getItem() == Items.potionitem && stack.getMetadata() > 0) ++ if (stack.getItem() instanceof net.minecraft.item.ItemPotion && stack.getMetadata() > 0) + { + this.player.triggerAchievement(AchievementList.potion); + } +@@ -200,7 +200,7 @@ + + public static boolean canHoldPotion(ItemStack p_75243_0_) + { +- return p_75243_0_ != null && (p_75243_0_.getItem() == Items.potionitem || p_75243_0_.getItem() == Items.glass_bottle); ++ return net.minecraftforge.common.brewing.BrewingRecipeRegistry.isValidInput(p_75243_0_); + } + } + } diff --git a/patches/minecraft/net/minecraft/inventory/ContainerEnchantment.java.patch b/patches.mcp/minecraft/net/minecraft/inventory/ContainerEnchantment.java.patch similarity index 51% rename from patches/minecraft/net/minecraft/inventory/ContainerEnchantment.java.patch rename to patches.mcp/minecraft/net/minecraft/inventory/ContainerEnchantment.java.patch index 01c2537e4..12196925d 100644 --- a/patches/minecraft/net/minecraft/inventory/ContainerEnchantment.java.patch +++ b/patches.mcp/minecraft/net/minecraft/inventory/ContainerEnchantment.java.patch @@ -9,15 +9,15 @@ public class ContainerEnchantment extends Container { @@ -68,9 +69,12 @@ - this.func_75146_a(new Slot(this.field_75168_e, 1, 35, 47) + this.addSlotToContainer(new Slot(this.tableInventory, 1, 35, 47) { private static final String __OBFID = "CL_00002185"; + java.util.List ores = net.minecraftforge.oredict.OreDictionary.getOres("gemLapis"); - public boolean func_75214_a(ItemStack p_75214_1_) + public boolean isItemValid(ItemStack stack) { -- return p_75214_1_.func_77973_b() == Items.field_151100_aR && EnumDyeColor.func_176766_a(p_75214_1_.func_77960_j()) == EnumDyeColor.BLUE; +- return stack.getItem() == Items.dye && EnumDyeColor.byDyeDamage(stack.getMetadata()) == EnumDyeColor.BLUE; + for (ItemStack ore : ores) -+ if (net.minecraftforge.oredict.OreDictionary.itemMatches(ore, p_75214_1_, false)) return true; ++ if (net.minecraftforge.oredict.OreDictionary.itemMatches(ore, stack, false)) return true; + return false; } }); @@ -32,45 +32,45 @@ { @@ -159,37 +164,15 @@ { - if ((j != 0 || k != 0) && this.field_75172_h.func_175623_d(this.field_178150_j.func_177982_a(k, 0, j)) && this.field_75172_h.func_175623_d(this.field_178150_j.func_177982_a(k, 1, j))) + if ((j != 0 || k != 0) && this.worldPointer.isAirBlock(this.position.add(k, 0, j)) && this.worldPointer.isAirBlock(this.position.add(k, 1, j))) { -- if (this.field_75172_h.func_180495_p(this.field_178150_j.func_177982_a(k * 2, 0, j * 2)).func_177230_c() == Blocks.field_150342_X) +- if (this.worldPointer.getBlockState(this.position.add(k * 2, 0, j * 2)).getBlock() == Blocks.bookshelf) - { - ++i; - } -+ power += net.minecraftforge.common.ForgeHooks.getEnchantPower(field_75172_h, field_178150_j.func_177982_a(k * 2, 0, j * 2)); -+ power += net.minecraftforge.common.ForgeHooks.getEnchantPower(field_75172_h, field_178150_j.func_177982_a(k * 2, 1, j * 2)); ++ power += net.minecraftforge.common.ForgeHooks.getEnchantPower(worldPointer, position.add(k * 2, 0, j * 2)); ++ power += net.minecraftforge.common.ForgeHooks.getEnchantPower(worldPointer, position.add(k * 2, 1, j * 2)); -- if (this.field_75172_h.func_180495_p(this.field_178150_j.func_177982_a(k * 2, 1, j * 2)).func_177230_c() == Blocks.field_150342_X) +- if (this.worldPointer.getBlockState(this.position.add(k * 2, 1, j * 2)).getBlock() == Blocks.bookshelf) - { - ++i; - } - if (k != 0 && j != 0) { -- if (this.field_75172_h.func_180495_p(this.field_178150_j.func_177982_a(k * 2, 0, j)).func_177230_c() == Blocks.field_150342_X) +- if (this.worldPointer.getBlockState(this.position.add(k * 2, 0, j)).getBlock() == Blocks.bookshelf) - { - ++i; - } - -- if (this.field_75172_h.func_180495_p(this.field_178150_j.func_177982_a(k * 2, 1, j)).func_177230_c() == Blocks.field_150342_X) +- if (this.worldPointer.getBlockState(this.position.add(k * 2, 1, j)).getBlock() == Blocks.bookshelf) - { - ++i; - } - -- if (this.field_75172_h.func_180495_p(this.field_178150_j.func_177982_a(k, 0, j * 2)).func_177230_c() == Blocks.field_150342_X) +- if (this.worldPointer.getBlockState(this.position.add(k, 0, j * 2)).getBlock() == Blocks.bookshelf) - { - ++i; - } - -- if (this.field_75172_h.func_180495_p(this.field_178150_j.func_177982_a(k, 1, j * 2)).func_177230_c() == Blocks.field_150342_X) +- if (this.worldPointer.getBlockState(this.position.add(k, 1, j * 2)).getBlock() == Blocks.bookshelf) - { - ++i; - } -+ power += net.minecraftforge.common.ForgeHooks.getEnchantPower(field_75172_h, field_178150_j.func_177982_a(k * 2, 0, j)); -+ power += net.minecraftforge.common.ForgeHooks.getEnchantPower(field_75172_h, field_178150_j.func_177982_a(k * 2, 1, j)); -+ power += net.minecraftforge.common.ForgeHooks.getEnchantPower(field_75172_h, field_178150_j.func_177982_a(k, 0, j * 2)); -+ power += net.minecraftforge.common.ForgeHooks.getEnchantPower(field_75172_h, field_178150_j.func_177982_a(k, 1, j * 2)); ++ power += net.minecraftforge.common.ForgeHooks.getEnchantPower(worldPointer, position.add(k * 2, 0, j)); ++ power += net.minecraftforge.common.ForgeHooks.getEnchantPower(worldPointer, position.add(k * 2, 1, j)); ++ power += net.minecraftforge.common.ForgeHooks.getEnchantPower(worldPointer, position.add(k, 0, j * 2)); ++ power += net.minecraftforge.common.ForgeHooks.getEnchantPower(worldPointer, position.add(k, 1, j * 2)); } } } @@ -78,8 +78,8 @@ for (j = 0; j < 3; ++j) { -- this.field_75167_g[j] = EnchantmentHelper.func_77514_a(this.field_75169_l, j, i, itemstack); -+ this.field_75167_g[j] = EnchantmentHelper.func_77514_a(this.field_75169_l, j, (int)power, itemstack); +- this.enchantLevels[j] = EnchantmentHelper.calcItemStackEnchantability(this.rand, j, i, itemstack); ++ this.enchantLevels[j] = EnchantmentHelper.calcItemStackEnchantability(this.rand, j, (int)power, itemstack); this.field_178151_h[j] = -1; - if (this.field_75167_g[j] < j + 1) + if (this.enchantLevels[j] < j + 1) diff --git a/patches.mcp/minecraft/net/minecraft/inventory/ContainerPlayer.java.patch b/patches.mcp/minecraft/net/minecraft/inventory/ContainerPlayer.java.patch new file mode 100644 index 000000000..b2ff5dd66 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/inventory/ContainerPlayer.java.patch @@ -0,0 +1,12 @@ +--- ../src-base/minecraft/net/minecraft/inventory/ContainerPlayer.java ++++ ../src-work/minecraft/net/minecraft/inventory/ContainerPlayer.java +@@ -47,7 +47,8 @@ + } + public boolean isItemValid(ItemStack stack) + { +- return stack == null ? false : (stack.getItem() instanceof ItemArmor ? ((ItemArmor)stack.getItem()).armorType == k : (stack.getItem() != Item.getItemFromBlock(Blocks.pumpkin) && stack.getItem() != Items.skull ? false : k == 0)); ++ if (stack == null) return false; ++ return stack.getItem().isValidArmor(stack, k, thePlayer); + } + @SideOnly(Side.CLIENT) + public String getSlotTexture() diff --git a/patches.mcp/minecraft/net/minecraft/inventory/ContainerRepair.java.patch b/patches.mcp/minecraft/net/minecraft/inventory/ContainerRepair.java.patch new file mode 100644 index 000000000..6dd53ae6c --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/inventory/ContainerRepair.java.patch @@ -0,0 +1,47 @@ +--- ../src-base/minecraft/net/minecraft/inventory/ContainerRepair.java ++++ ../src-work/minecraft/net/minecraft/inventory/ContainerRepair.java +@@ -73,6 +73,8 @@ + playerIn.addExperienceLevel(-ContainerRepair.this.maximumCost); + } + ++ float breakChance = net.minecraftforge.common.ForgeHooks.onAnvilRepair(playerIn, stack, ContainerRepair.this.inputSlots.getStackInSlot(0), ContainerRepair.this.inputSlots.getStackInSlot(1)); ++ + ContainerRepair.this.inputSlots.setInventorySlotContents(0, (ItemStack)null); + + if (ContainerRepair.this.materialCost > 0) +@@ -97,7 +99,7 @@ + ContainerRepair.this.maximumCost = 0; + IBlockState iblockstate = worldIn.getBlockState(blockPosIn); + +- if (!playerIn.capabilities.isCreativeMode && !worldIn.isRemote && iblockstate.getBlock() == Blocks.anvil && playerIn.getRNG().nextFloat() < 0.12F) ++ if (!playerIn.capabilities.isCreativeMode && !worldIn.isRemote && iblockstate.getBlock() == Blocks.anvil && playerIn.getRNG().nextFloat() < breakChance) + { + int k = ((Integer)iblockstate.getValue(BlockAnvil.DAMAGE)).intValue(); + ++k; +@@ -177,6 +179,7 @@ + + if (itemstack2 != null) + { ++ if (!net.minecraftforge.common.ForgeHooks.onAnvilChange(this, itemstack, itemstack2, outputSlot, repairedItemName, i2)) return; + flag7 = itemstack2.getItem() == Items.enchanted_book && Items.enchanted_book.getEnchantments(itemstack2).tagCount() > 0; + int k; + int l; +@@ -271,7 +274,8 @@ + { + int l1 = ((Integer)iterator.next()).intValue(); + +- if (l1 != l && !enchantment.canApplyTogether(Enchantment.getEnchantmentById(l1))) ++ Enchantment e2 = Enchantment.getEnchantmentById(l1); ++ if (l1 != l && !(enchantment.canApplyTogether(e2) && e2.canApplyTogether(enchantment))) //Forge BugFix: Let Both enchantments veto being together + { + flag8 = false; + ++i; +@@ -322,6 +326,8 @@ + } + } + ++ if (flag7 && !itemstack1.getItem().isBookEnchantable(itemstack1, itemstack2)) itemstack1 = null; ++ + if (StringUtils.isBlank(this.repairedItemName)) + { + if (itemstack.hasDisplayName()) diff --git a/patches/minecraft/net/minecraft/inventory/Slot.java.patch b/patches.mcp/minecraft/net/minecraft/inventory/Slot.java.patch similarity index 86% rename from patches/minecraft/net/minecraft/inventory/Slot.java.patch rename to patches.mcp/minecraft/net/minecraft/inventory/Slot.java.patch index 0eb96c519..5617898aa 100644 --- a/patches/minecraft/net/minecraft/inventory/Slot.java.patch +++ b/patches.mcp/minecraft/net/minecraft/inventory/Slot.java.patch @@ -9,13 +9,13 @@ import net.minecraftforge.fml.relauncher.Side; @@ -86,7 +87,7 @@ @SideOnly(Side.CLIENT) - public String func_178171_c() + public String getSlotTexture() { - return null; + return backgroundName; } - public ItemStack func_75209_a(int p_75209_1_) + public ItemStack decrStackSize(int amount) @@ -109,4 +110,64 @@ { return true; @@ -32,7 +32,7 @@ + @SideOnly(Side.CLIENT) + public net.minecraft.util.ResourceLocation getBackgroundLocation() + { -+ return (backgroundLocation == null ? net.minecraft.client.renderer.texture.TextureMap.field_110575_b : backgroundLocation); ++ return (backgroundLocation == null ? net.minecraft.client.renderer.texture.TextureMap.locationBlocksTexture : backgroundLocation); + } + + /** @@ -58,14 +58,14 @@ + @SideOnly(Side.CLIENT) + public net.minecraft.client.renderer.texture.TextureAtlasSprite getBackgroundSprite() + { -+ String name = func_178171_c(); -+ return name == null ? null : getBackgroundMap().func_110572_b(name); ++ String name = getSlotTexture(); ++ return name == null ? null : getBackgroundMap().getAtlasSprite(name); + } + + @SideOnly(Side.CLIENT) + protected net.minecraft.client.renderer.texture.TextureMap getBackgroundMap() + { -+ if (backgroundMap == null) backgroundMap = Minecraft.func_71410_x().func_147117_R(); ++ if (backgroundMap == null) backgroundMap = Minecraft.getMinecraft().getTextureMapBlocks(); + return (net.minecraft.client.renderer.texture.TextureMap)backgroundMap; + } + @@ -77,7 +77,7 @@ + */ + public int getSlotIndex() + { -+ return field_75225_a; ++ return slotIndex; + } + /*========================================= FORGE END =====================================*/ } diff --git a/patches/minecraft/net/minecraft/inventory/SlotCrafting.java.patch b/patches.mcp/minecraft/net/minecraft/inventory/SlotCrafting.java.patch similarity index 57% rename from patches/minecraft/net/minecraft/inventory/SlotCrafting.java.patch rename to patches.mcp/minecraft/net/minecraft/inventory/SlotCrafting.java.patch index 0dd6c1066..61021f825 100644 --- a/patches/minecraft/net/minecraft/inventory/SlotCrafting.java.patch +++ b/patches.mcp/minecraft/net/minecraft/inventory/SlotCrafting.java.patch @@ -2,12 +2,12 @@ +++ ../src-work/minecraft/net/minecraft/inventory/SlotCrafting.java @@ -113,8 +113,11 @@ - public void func_82870_a(EntityPlayer p_82870_1_, ItemStack p_82870_2_) + public void onPickupFromSlot(EntityPlayer playerIn, ItemStack stack) { -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerCraftingEvent(p_82870_1_, p_82870_2_, field_75239_a); - this.func_75208_c(p_82870_2_); -+ net.minecraftforge.common.ForgeHooks.setCraftingPlayer(p_82870_1_); - ItemStack[] aitemstack = CraftingManager.func_77594_a().func_180303_b(this.field_75239_a, p_82870_1_.field_70170_p); ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerCraftingEvent(playerIn, stack, craftMatrix); + this.onCrafting(stack); ++ net.minecraftforge.common.ForgeHooks.setCraftingPlayer(playerIn); + ItemStack[] aitemstack = CraftingManager.getInstance().func_180303_b(this.craftMatrix, playerIn.worldObj); + net.minecraftforge.common.ForgeHooks.setCraftingPlayer(null); for (int i = 0; i < aitemstack.length; ++i) diff --git a/patches/minecraft/net/minecraft/inventory/SlotFurnaceOutput.java.patch b/patches.mcp/minecraft/net/minecraft/inventory/SlotFurnaceOutput.java.patch similarity index 58% rename from patches/minecraft/net/minecraft/inventory/SlotFurnaceOutput.java.patch rename to patches.mcp/minecraft/net/minecraft/inventory/SlotFurnaceOutput.java.patch index e0dda7760..f33e8758c 100644 --- a/patches/minecraft/net/minecraft/inventory/SlotFurnaceOutput.java.patch +++ b/patches.mcp/minecraft/net/minecraft/inventory/SlotFurnaceOutput.java.patch @@ -4,8 +4,8 @@ this.field_75228_b = 0; -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerSmeltedEvent(field_75229_a, p_75208_1_); ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerSmeltedEvent(thePlayer, stack); + - if (p_75208_1_.func_77973_b() == Items.field_151042_j) + if (stack.getItem() == Items.iron_ingot) { - this.field_75229_a.func_71029_a(AchievementList.field_76016_k); + this.thePlayer.triggerAchievement(AchievementList.acquireIron); diff --git a/patches/minecraft/net/minecraft/item/Item.java.patch b/patches.mcp/minecraft/net/minecraft/item/Item.java.patch similarity index 83% rename from patches/minecraft/net/minecraft/item/Item.java.patch rename to patches.mcp/minecraft/net/minecraft/item/Item.java.patch index af3b601e9..57972967b 100644 --- a/patches/minecraft/net/minecraft/item/Item.java.patch +++ b/patches.mcp/minecraft/net/minecraft/item/Item.java.patch @@ -4,65 +4,65 @@ public class Item { -- public static final RegistryNamespaced field_150901_e = new RegistryNamespaced(); -- private static final Map field_179220_a = Maps.newHashMap(); -+ public static final RegistryNamespaced field_150901_e = net.minecraftforge.fml.common.registry.GameData.getItemRegistry(); -+ private static final Map field_179220_a = net.minecraftforge.fml.common.registry.GameData.getBlockItemMap(); - protected static final UUID field_111210_e = UUID.fromString("CB3F55D3-645C-4F38-A497-9C13A33DB5CF"); - private CreativeTabs field_77701_a; - protected static Random field_77697_d = new Random(); +- public static final RegistryNamespaced itemRegistry = new RegistryNamespaced(); +- private static final Map BLOCK_TO_ITEM = Maps.newHashMap(); ++ public static final RegistryNamespaced itemRegistry = net.minecraftforge.fml.common.registry.GameData.getItemRegistry(); ++ private static final Map BLOCK_TO_ITEM = net.minecraftforge.fml.common.registry.GameData.getBlockItemMap(); + protected static final UUID itemModifierUUID = UUID.fromString("CB3F55D3-645C-4F38-A497-9C13A33DB5CF"); + private CreativeTabs tabToDisplayOn; + protected static Random itemRand = new Random(); @@ -61,6 +61,9 @@ - private String field_77774_bZ; + private String unlocalizedName; private static final String __OBFID = "CL_00000041"; + public final net.minecraftforge.fml.common.registry.RegistryDelegate delegate = -+ ((net.minecraftforge.fml.common.registry.FMLControlledNamespacedRegistry)field_150901_e).getDelegate(this, Item.class); ++ ((net.minecraftforge.fml.common.registry.FMLControlledNamespacedRegistry)itemRegistry).getDelegate(this, Item.class); + - public static int func_150891_b(Item p_150891_0_) + public static int getIdFromItem(Item itemIn) { - return p_150891_0_ == null ? 0 : field_150901_e.func_148757_b(p_150891_0_); + return itemIn == null ? 0 : itemRegistry.getIDForObject(itemIn); @@ -126,6 +129,7 @@ - return p_77654_1_; + return stack; } + @Deprecated // Use ItemStack sensitive version below. - public int func_77639_j() + public int getItemStackLimit() { - return this.field_77777_bU; + return this.maxStackSize; @@ -239,6 +243,7 @@ - return this.field_77700_c; + return this.containerItem; } + @Deprecated // Use ItemStack sensitive version below. - public boolean func_77634_r() + public boolean hasContainerItem() { - return this.field_77700_c != null; + return this.containerItem != null; @@ -308,7 +313,7 @@ - public boolean func_77616_k(ItemStack p_77616_1_) + public boolean isItemTool(ItemStack stack) { -- return this.func_77639_j() == 1 && this.func_77645_m(); -+ return this.getItemStackLimit(p_77616_1_) == 1 && this.func_77645_m(); +- return this.getItemStackLimit() == 1 && this.isDamageable(); ++ return this.getItemStackLimit(stack) == 1 && this.isDamageable(); } - protected MovingObjectPosition func_77621_a(World p_77621_1_, EntityPlayer p_77621_2_, boolean p_77621_3_) + protected MovingObjectPosition getMovingObjectPositionFromPlayer(World worldIn, EntityPlayer playerIn, boolean useLiquids) @@ -326,6 +331,10 @@ float f6 = f3 * f4; float f7 = f2 * f4; double d3 = 5.0D; -+ if (p_77621_2_ instanceof net.minecraft.entity.player.EntityPlayerMP) ++ if (playerIn instanceof net.minecraft.entity.player.EntityPlayerMP) + { -+ d3 = ((net.minecraft.entity.player.EntityPlayerMP)p_77621_2_).field_71134_c.getBlockReachDistance(); ++ d3 = ((net.minecraft.entity.player.EntityPlayerMP)playerIn).theItemInWorldManager.getBlockReachDistance(); + } - Vec3 vec31 = vec3.func_72441_c((double)f6 * d3, (double)f5 * d3, (double)f7 * d3); - return p_77621_1_.func_147447_a(vec3, vec31, p_77621_3_, !p_77621_3_, false); + Vec3 vec31 = vec3.addVector((double)f6 * d3, (double)f5 * d3, (double)f7 * d3); + return worldIn.rayTraceBlocks(vec3, vec31, useLiquids, !useLiquids, false); } @@ -363,11 +372,579 @@ return false; } + @Deprecated // Use ItemStack sensitive version below. - public Multimap func_111205_h() + public Multimap getItemAttributeModifiers() { return HashMultimap.create(); } @@ -73,7 +73,7 @@ + */ + public Multimap getAttributeModifiers(ItemStack stack) + { -+ return this.func_111205_h(); ++ return this.getItemAttributeModifiers(); + } + + /** @@ -112,7 +112,7 @@ + */ + public float getDigSpeed(ItemStack itemstack, net.minecraft.block.state.IBlockState state) + { -+ return func_150893_a(itemstack, state.func_177230_c()); ++ return getStrVsBlock(itemstack, state.getBlock()); + } + + @@ -123,7 +123,7 @@ + */ + public boolean isRepairable() + { -+ return canRepair && func_77645_m(); ++ return canRepair && isDamageable(); + } + + /** @@ -203,7 +203,7 @@ + { + return null; + } -+ return new ItemStack(func_77668_q()); ++ return new ItemStack(getContainerItem()); + } + + /** @@ -213,7 +213,7 @@ + */ + public boolean hasContainerItem(ItemStack stack) + { -+ return func_77634_r(); ++ return hasContainerItem(); + } + + /** @@ -278,7 +278,7 @@ + */ + public CreativeTabs[] getCreativeTabs() + { -+ return new CreativeTabs[]{ func_77640_w() }; ++ return new CreativeTabs[]{ getCreativeTab() }; + } + + /** @@ -321,9 +321,9 @@ + { + if (this instanceof ItemEnchantedBook) + { -+ return ((ItemEnchantedBook)this).func_92112_a(rnd, -+ original.field_76295_d, -+ original.field_76296_e, original.field_76292_a); ++ return ((ItemEnchantedBook)this).getRandom(rnd, ++ original.theMinimumChanceToGenerateItem, ++ original.theMaximumChanceToGenerateItem, original.itemWeight); + } + return original; + } @@ -359,12 +359,12 @@ + { + if (this instanceof ItemArmor) + { -+ return ((ItemArmor)this).field_77881_a == armorType; ++ return ((ItemArmor)this).armorType == armorType; + } + + if (armorType == 0) + { -+ return this == Item.func_150898_a(Blocks.field_150423_aK) || this == Items.field_151144_bL; ++ return this == Item.getItemFromBlock(Blocks.pumpkin) || this == Items.skull; + } + + return false; @@ -460,7 +460,7 @@ + */ + public int getDamage(ItemStack stack) + { -+ return stack.field_77991_e; ++ return stack.itemDamage; + } + + /** @@ -470,7 +470,7 @@ + */ + public int getMetadata(ItemStack stack) + { -+ return stack.field_77991_e; ++ return stack.itemDamage; + } + + /** @@ -483,7 +483,7 @@ + */ + public boolean showDurabilityBar(ItemStack stack) + { -+ return stack.func_77951_h(); ++ return stack.isItemDamaged(); + } + + /** @@ -494,7 +494,7 @@ + */ + public double getDurabilityForDisplay(ItemStack stack) + { -+ return (double)stack.func_77952_i() / (double)stack.func_77958_k(); ++ return (double)stack.getItemDamage() / (double)stack.getMaxDamage(); + } + + /** @@ -506,7 +506,7 @@ + */ + public int getMaxDamage(ItemStack stack) + { -+ return func_77612_l(); ++ return getMaxDamage(); + } + + /** @@ -516,7 +516,7 @@ + */ + public boolean isDamaged(ItemStack stack) + { -+ return stack.field_77991_e > 0; ++ return stack.itemDamage > 0; + } + + /** @@ -526,11 +526,11 @@ + */ + public void setDamage(ItemStack stack, int damage) + { -+ stack.field_77991_e = damage; ++ stack.itemDamage = damage; + -+ if (stack.field_77991_e < 0) ++ if (stack.itemDamage < 0) + { -+ stack.field_77991_e = 0; ++ stack.itemDamage = 0; + } + } + @@ -542,7 +542,7 @@ + */ + public boolean canHarvestBlock(Block par1Block, ItemStack itemStack) + { -+ return func_150897_b(par1Block); ++ return canHarvestBlock(par1Block); + } + + /** @@ -554,7 +554,7 @@ + */ + public int getItemStackLimit(ItemStack stack) + { -+ return this.func_77639_j(); ++ return this.getItemStackLimit(); + } + + private java.util.Map toolClasses = new java.util.HashMap(); @@ -604,7 +604,7 @@ + */ + public int getItemEnchantability(ItemStack stack) + { -+ return func_77619_b(); ++ return getItemEnchantability(); + } + + /** @@ -614,7 +614,7 @@ + */ + public boolean isBeaconPayment(ItemStack stack) + { -+ return this == Items.field_151166_bC || this == Items.field_151045_i || this == Items.field_151043_k || this == Items.field_151042_j; ++ return this == Items.emerald || this == Items.diamond || this == Items.gold_ingot || this == Items.iron_ingot; + } + + @@ -629,14 +629,14 @@ + */ + public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) + { -+ return !ItemStack.func_77989_b(oldStack, newStack); ++ return !ItemStack.areItemStacksEqual(oldStack, newStack); + } + /* ======================================== FORGE END =====================================*/ + + - public static void func_150900_l() + public static void registerItems() { - func_179214_a(Blocks.field_150348_b, (new ItemMultiTexture(Blocks.field_150348_b, Blocks.field_150348_b, new Function() + registerItemBlock(Blocks.stone, (new ItemMultiTexture(Blocks.stone, Blocks.stone, new Function() @@ -933,6 +1510,10 @@ private static final String __OBFID = "CL_00000042"; @@ -645,24 +645,24 @@ + @Deprecated public Item customCraftingMaterial = null; // Remote in 1.8.1 + private ItemStack repairMaterial = null; + - private ToolMaterial(int p_i1874_3_, int p_i1874_4_, float p_i1874_5_, float p_i1874_6_, int p_i1874_7_) + private ToolMaterial(int harvestLevel, int maxUses, float efficiency, float damageVsEntity, int enchantability) { - this.field_78001_f = p_i1874_3_; + this.harvestLevel = harvestLevel; @@ -967,9 +1548,36 @@ - return this.field_78008_j; + return this.enchantability; } + @Deprecated // Use getRepairItemStack below - public Item func_150995_f() + public Item getRepairItem() { -- return this == WOOD ? Item.func_150898_a(Blocks.field_150344_f) : (this == STONE ? Item.func_150898_a(Blocks.field_150347_e) : (this == GOLD ? Items.field_151043_k : (this == IRON ? Items.field_151042_j : (this == EMERALD ? Items.field_151045_i : null)))); +- return this == WOOD ? Item.getItemFromBlock(Blocks.planks) : (this == STONE ? Item.getItemFromBlock(Blocks.cobblestone) : (this == GOLD ? Items.gold_ingot : (this == IRON ? Items.iron_ingot : (this == EMERALD ? Items.diamond : null)))); + switch (this) + { -+ case WOOD: return Item.func_150898_a(Blocks.field_150344_f); -+ case STONE: return Item.func_150898_a(Blocks.field_150347_e); -+ case GOLD: return Items.field_151043_k; -+ case IRON: return Items.field_151042_j; -+ case EMERALD: return Items.field_151045_i; ++ case WOOD: return Item.getItemFromBlock(Blocks.planks); ++ case STONE: return Item.getItemFromBlock(Blocks.cobblestone); ++ case GOLD: return Items.gold_ingot; ++ case IRON: return Items.iron_ingot; ++ case EMERALD: return Items.diamond; + default: return customCraftingMaterial; + } } @@ -672,14 +672,14 @@ + if (this.repairMaterial != null || customCraftingMaterial != null) throw new RuntimeException("Can not change already set repair material"); + if (this == WOOD || this == STONE || this == GOLD || this == IRON || this == EMERALD) throw new RuntimeException("Can not change vanilla tool repair materials"); + this.repairMaterial = stack; -+ this.customCraftingMaterial = stack.func_77973_b(); ++ this.customCraftingMaterial = stack.getItem(); + return this; + } + + public ItemStack getRepairItemStack() + { + if (repairMaterial != null) return repairMaterial; -+ Item ret = this.func_150995_f(); ++ Item ret = this.getRepairItem(); + if (ret == null) return null; + repairMaterial = new ItemStack(ret, 1, net.minecraftforge.oredict.OreDictionary.WILDCARD_VALUE); + return repairMaterial; diff --git a/patches.mcp/minecraft/net/minecraft/item/ItemArmor.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemArmor.java.patch new file mode 100644 index 000000000..7113ee312 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/item/ItemArmor.java.patch @@ -0,0 +1,47 @@ +--- ../src-base/minecraft/net/minecraft/item/ItemArmor.java ++++ ../src-work/minecraft/net/minecraft/item/ItemArmor.java +@@ -38,7 +38,7 @@ + if (list.size() > 0) + { + EntityLivingBase entitylivingbase = (EntityLivingBase)list.get(0); +- int l = entitylivingbase instanceof EntityPlayer ? 1 : 0; ++ int l = 0;// Forge: We fix the indexes. Mojang Stop hard coding this! + int i1 = EntityLiving.getArmorPosition(stack); + ItemStack itemstack1 = stack.copy(); + itemstack1.stackSize = 1; +@@ -192,7 +192,7 @@ + + if (itemstack1 == null) + { +- playerIn.setCurrentItemOrArmor(i, itemStackIn.copy()); ++ playerIn.setCurrentItemOrArmor(i + 1, itemStackIn.copy()); //Forge: Vanilla bug fix associated with fixed setCurrentItemOrArmor indexs for players. + itemStackIn.stackSize = 0; + } + +@@ -213,6 +213,9 @@ + + private static final String __OBFID = "CL_00001768"; + ++ //Added by forge for custom Armor materials. ++ public Item customCraftingMaterial = null; ++ + private ArmorMaterial(String name, int p_i45789_4_, int[] reductionAmounts, int enchantability) + { + this.name = name; +@@ -238,7 +241,15 @@ + + public Item getRepairItem() + { +- return this == LEATHER ? Items.leather : (this == CHAIN ? Items.iron_ingot : (this == GOLD ? Items.gold_ingot : (this == IRON ? Items.iron_ingot : (this == DIAMOND ? Items.diamond : null)))); ++ switch (this) ++ { ++ case LEATHER: return Items.leather; ++ case CHAIN: return Items.iron_ingot; ++ case GOLD: return Items.gold_ingot; ++ case IRON: return Items.iron_ingot; ++ case DIAMOND: return Items.diamond; ++ default: return customCraftingMaterial; ++ } + } + + @SideOnly(Side.CLIENT) diff --git a/patches.mcp/minecraft/net/minecraft/item/ItemBlock.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemBlock.java.patch new file mode 100644 index 000000000..38a636725 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/item/ItemBlock.java.patch @@ -0,0 +1,72 @@ +--- ../src-base/minecraft/net/minecraft/item/ItemBlock.java ++++ ../src-work/minecraft/net/minecraft/item/ItemBlock.java +@@ -63,16 +63,8 @@ + int i = this.getMetadata(stack.getMetadata()); + IBlockState iblockstate1 = this.block.onBlockPlaced(worldIn, pos, side, hitX, hitY, hitZ, i, playerIn); + +- if (worldIn.setBlockState(pos, iblockstate1, 3)) ++ if (placeBlockAt(stack, playerIn, worldIn, pos, side, hitX, hitY, hitZ, iblockstate1)) + { +- iblockstate1 = worldIn.getBlockState(pos); +- +- if (iblockstate1.getBlock() == this.block) +- { +- setTileEntityNBT(worldIn, pos, stack); +- this.block.onBlockPlacedBy(worldIn, pos, iblockstate1, playerIn, stack); +- } +- + worldIn.playSoundEffect((double)((float)pos.getX() + 0.5F), (double)((float)pos.getY() + 0.5F), (double)((float)pos.getZ() + 0.5F), this.block.stepSound.getPlaceSound(), (this.block.stepSound.getVolume() + 1.0F) / 2.0F, this.block.stepSound.getFrequency() * 0.8F); + --stack.stackSize; + } +@@ -85,14 +77,24 @@ + } + } + ++ @Deprecated //Use player sensitive version + public static boolean setTileEntityNBT(World worldIn, BlockPos pos, ItemStack stack) + { ++ return setTileEntityNBT(worldIn, pos, stack, null); ++ } ++ public static boolean setTileEntityNBT(World worldIn, BlockPos pos, ItemStack stack, EntityPlayer player) ++ { + if (stack.hasTagCompound() && stack.getTagCompound().hasKey("BlockEntityTag", 10)) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity != null) + { ++ //Forge: Fixes MC-75630 - Exploit with signs and command blocks ++ final net.minecraft.server.MinecraftServer server = net.minecraft.server.MinecraftServer.getServer(); ++ if (!worldIn.isRemote && tileentity.restrictNBTCopy() && ++ (server == null || !server.getConfigurationManager().canSendCommands(player.getGameProfile()))) ++ return false; + NBTTagCompound nbttagcompound = new NBTTagCompound(); + NBTTagCompound nbttagcompound1 = (NBTTagCompound)nbttagcompound.copy(); + tileentity.writeToNBT(nbttagcompound); +@@ -157,4 +159,26 @@ + { + return this.block; + } ++ ++ /** ++ * Called to actually place the block, after the location is determined ++ * and all permission checks have been made. ++ * ++ * @param stack The item stack that was used to place the block. This can be changed inside the method. ++ * @param player The player who is placing the block. Can be null if the block is not being placed by a player. ++ * @param side The side the player (or machine) right-clicked on. ++ */ ++ public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, IBlockState newState) ++ { ++ if (!world.setBlockState(pos, newState, 3)) return false; ++ ++ IBlockState state = world.getBlockState(pos); ++ if (state.getBlock() == this.block) ++ { ++ setTileEntityNBT(world, pos, stack, player); ++ this.block.onBlockPlacedBy(world, pos, state, player, stack); ++ } ++ ++ return true; ++ } + } diff --git a/patches.mcp/minecraft/net/minecraft/item/ItemBow.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemBow.java.patch new file mode 100644 index 000000000..9a6b0c0ba --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/item/ItemBow.java.patch @@ -0,0 +1,29 @@ +--- ../src-base/minecraft/net/minecraft/item/ItemBow.java ++++ ../src-work/minecraft/net/minecraft/item/ItemBow.java +@@ -23,11 +23,15 @@ + + public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityPlayer playerIn, int timeLeft) + { ++ int j = this.getMaxItemUseDuration(stack) - timeLeft; ++ net.minecraftforge.event.entity.player.ArrowLooseEvent event = new net.minecraftforge.event.entity.player.ArrowLooseEvent(playerIn, stack, j); ++ if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) return; ++ j = event.charge; ++ + boolean flag = playerIn.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, stack) > 0; + + if (flag || playerIn.inventory.hasItem(Items.arrow)) + { +- int j = this.getMaxItemUseDuration(stack) - timeLeft; + float f = (float)j / 20.0F; + f = (f * f + f * 2.0F) / 3.0F; + +@@ -105,6 +109,9 @@ + + public ItemStack onItemRightClick(ItemStack itemStackIn, World worldIn, EntityPlayer playerIn) + { ++ net.minecraftforge.event.entity.player.ArrowNockEvent event = new net.minecraftforge.event.entity.player.ArrowNockEvent(playerIn, itemStackIn); ++ if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) return event.result; ++ + if (playerIn.capabilities.isCreativeMode || playerIn.inventory.hasItem(Items.arrow)) + { + playerIn.setItemInUse(itemStackIn, this.getMaxItemUseDuration(itemStackIn)); diff --git a/patches/minecraft/net/minecraft/item/ItemBucket.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemBucket.java.patch similarity index 54% rename from patches/minecraft/net/minecraft/item/ItemBucket.java.patch rename to patches.mcp/minecraft/net/minecraft/item/ItemBucket.java.patch index e8ae79af8..23bf6daf0 100644 --- a/patches/minecraft/net/minecraft/item/ItemBucket.java.patch +++ b/patches.mcp/minecraft/net/minecraft/item/ItemBucket.java.patch @@ -4,9 +4,9 @@ } else { -+ ItemStack ret = net.minecraftforge.event.ForgeEventFactory.onBucketUse(p_77659_3_, p_77659_2_, p_77659_1_, movingobjectposition); ++ ItemStack ret = net.minecraftforge.event.ForgeEventFactory.onBucketUse(playerIn, worldIn, itemStackIn, movingobjectposition); + if (ret != null) return ret; + - if (movingobjectposition.field_72313_a == MovingObjectPosition.MovingObjectType.BLOCK) + if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { - BlockPos blockpos = movingobjectposition.func_178782_a(); + BlockPos blockpos = movingobjectposition.getBlockPos(); diff --git a/patches.mcp/minecraft/net/minecraft/item/ItemBucketMilk.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemBucketMilk.java.patch new file mode 100644 index 000000000..0e6f3935e --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/item/ItemBucketMilk.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/item/ItemBucketMilk.java ++++ ../src-work/minecraft/net/minecraft/item/ItemBucketMilk.java +@@ -25,7 +25,7 @@ + + if (!worldIn.isRemote) + { +- playerIn.clearActivePotions(); ++ playerIn.curePotionEffects(stack); + } + + playerIn.triggerAchievement(StatList.objectUseStats[Item.getIdFromItem(this)]); diff --git a/patches.mcp/minecraft/net/minecraft/item/ItemDye.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemDye.java.patch new file mode 100644 index 000000000..4ae5b8110 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/item/ItemDye.java.patch @@ -0,0 +1,56 @@ +--- ../src-base/minecraft/net/minecraft/item/ItemDye.java ++++ ../src-work/minecraft/net/minecraft/item/ItemDye.java +@@ -48,7 +48,7 @@ + + if (enumdyecolor == EnumDyeColor.WHITE) + { +- if (applyBonemeal(stack, worldIn, pos)) ++ if (applyBonemeal(stack, worldIn, pos, playerIn)) + { + if (!worldIn.isRemote) + { +@@ -98,8 +98,18 @@ + + public static boolean applyBonemeal(ItemStack stack, World worldIn, BlockPos target) + { ++ if (worldIn instanceof net.minecraft.world.WorldServer) ++ return applyBonemeal(stack, worldIn, target, net.minecraftforge.common.util.FakePlayerFactory.getMinecraft((net.minecraft.world.WorldServer)worldIn)); ++ return false; ++ } ++ ++ public static boolean applyBonemeal(ItemStack stack, World worldIn, BlockPos target, EntityPlayer player) ++ { + IBlockState iblockstate = worldIn.getBlockState(target); + ++ int hook = net.minecraftforge.event.ForgeEventFactory.onApplyBonemeal(player, worldIn, target, iblockstate, stack); ++ if (hook != 0) return hook > 0; ++ + if (iblockstate.getBlock() instanceof IGrowable) + { + IGrowable igrowable = (IGrowable)iblockstate.getBlock(); +@@ -133,7 +143,7 @@ + + Block block = worldIn.getBlockState(pos).getBlock(); + +- if (block.getMaterial() != Material.air) ++ if (block.isAir(worldIn, pos)) + { + block.setBlockBoundsBasedOnState(worldIn, pos); + +@@ -145,6 +155,16 @@ + worldIn.spawnParticle(EnumParticleTypes.VILLAGER_HAPPY, (double)((float)pos.getX() + itemRand.nextFloat()), (double)pos.getY() + (double)itemRand.nextFloat() * block.getBlockBoundsMaxY(), (double)((float)pos.getZ() + itemRand.nextFloat()), d0, d1, d2, new int[0]); + } + } ++ else ++ { ++ for (int i1 = 0; i1 < amount; ++i1) ++ { ++ double d0 = itemRand.nextGaussian() * 0.02D; ++ double d1 = itemRand.nextGaussian() * 0.02D; ++ double d2 = itemRand.nextGaussian() * 0.02D; ++ worldIn.spawnParticle(EnumParticleTypes.VILLAGER_HAPPY, (double)((float)pos.getX() + itemRand.nextFloat()), (double)pos.getY() + (double)itemRand.nextFloat() * 1.0f, (double)((float)pos.getZ() + itemRand.nextFloat()), d0, d1, d2, new int[0]); ++ } ++ } + } + + public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer playerIn, EntityLivingBase target) diff --git a/patches.mcp/minecraft/net/minecraft/item/ItemEmptyMap.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemEmptyMap.java.patch new file mode 100644 index 000000000..2e0696c64 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/item/ItemEmptyMap.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/item/ItemEmptyMap.java ++++ ../src-work/minecraft/net/minecraft/item/ItemEmptyMap.java +@@ -24,7 +24,7 @@ + worldIn.setItemData(s, mapdata); + mapdata.scale = 0; + mapdata.func_176054_a(playerIn.posX, playerIn.posZ, mapdata.scale); +- mapdata.dimension = (byte)worldIn.provider.getDimensionId(); ++ mapdata.dimension = worldIn.provider.getDimensionId(); + mapdata.markDirty(); + --itemStackIn.stackSize; + diff --git a/patches.mcp/minecraft/net/minecraft/item/ItemFlintAndSteel.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemFlintAndSteel.java.patch new file mode 100644 index 000000000..92d47f90b --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/item/ItemFlintAndSteel.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/item/ItemFlintAndSteel.java ++++ ../src-work/minecraft/net/minecraft/item/ItemFlintAndSteel.java +@@ -29,7 +29,7 @@ + } + else + { +- if (worldIn.getBlockState(pos).getBlock().getMaterial() == Material.air) ++ if (worldIn.isAirBlock(pos)) + { + worldIn.playSoundEffect((double)pos.getX() + 0.5D, (double)pos.getY() + 0.5D, (double)pos.getZ() + 0.5D, "fire.ignite", 1.0F, itemRand.nextFloat() * 0.4F + 0.8F); + worldIn.setBlockState(pos, Blocks.fire.getDefaultState()); diff --git a/patches.mcp/minecraft/net/minecraft/item/ItemHoe.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemHoe.java.patch new file mode 100644 index 000000000..28920005f --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/item/ItemHoe.java.patch @@ -0,0 +1,17 @@ +--- ../src-base/minecraft/net/minecraft/item/ItemHoe.java ++++ ../src-work/minecraft/net/minecraft/item/ItemHoe.java +@@ -34,10 +34,13 @@ + } + else + { ++ int hook = net.minecraftforge.event.ForgeEventFactory.onHoeUse(stack, playerIn, worldIn, pos); ++ if (hook != 0) return hook > 0; ++ + IBlockState iblockstate = worldIn.getBlockState(pos); + Block block = iblockstate.getBlock(); + +- if (side != EnumFacing.DOWN && worldIn.getBlockState(pos.up()).getBlock().getMaterial() == Material.air) ++ if (side != EnumFacing.DOWN && worldIn.isAirBlock(pos.up())) + { + if (block == Blocks.grass) + { diff --git a/patches/minecraft/net/minecraft/item/ItemLilyPad.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemLilyPad.java.patch similarity index 50% rename from patches/minecraft/net/minecraft/item/ItemLilyPad.java.patch rename to patches.mcp/minecraft/net/minecraft/item/ItemLilyPad.java.patch index efc47a1a0..6251c9d0f 100644 --- a/patches/minecraft/net/minecraft/item/ItemLilyPad.java.patch +++ b/patches.mcp/minecraft/net/minecraft/item/ItemLilyPad.java.patch @@ -2,16 +2,16 @@ +++ ../src-work/minecraft/net/minecraft/item/ItemLilyPad.java @@ -51,7 +51,14 @@ - if (iblockstate.func_177230_c().func_149688_o() == Material.field_151586_h && ((Integer)iblockstate.func_177229_b(BlockLiquid.field_176367_b)).intValue() == 0 && p_77659_2_.func_175623_d(blockpos1)) + if (iblockstate.getBlock().getMaterial() == Material.water && ((Integer)iblockstate.getValue(BlockLiquid.LEVEL)).intValue() == 0 && worldIn.isAirBlock(blockpos1)) { + // special case for handling block placement with water lilies -+ net.minecraftforge.common.util.BlockSnapshot blocksnapshot = net.minecraftforge.common.util.BlockSnapshot.getBlockSnapshot(p_77659_2_, blockpos1); - p_77659_2_.func_175656_a(blockpos1, Blocks.field_150392_bi.func_176223_P()); -+ if (net.minecraftforge.event.ForgeEventFactory.onPlayerBlockPlace(p_77659_3_, blocksnapshot, net.minecraft.util.EnumFacing.UP).isCanceled()) ++ net.minecraftforge.common.util.BlockSnapshot blocksnapshot = net.minecraftforge.common.util.BlockSnapshot.getBlockSnapshot(worldIn, blockpos1); + worldIn.setBlockState(blockpos1, Blocks.waterlily.getDefaultState()); ++ if (net.minecraftforge.event.ForgeEventFactory.onPlayerBlockPlace(playerIn, blocksnapshot, net.minecraft.util.EnumFacing.UP).isCanceled()) + { + blocksnapshot.restore(true, false); -+ return p_77659_1_; ++ return itemStackIn; + } - if (!p_77659_3_.field_71075_bZ.field_75098_d) + if (!playerIn.capabilities.isCreativeMode) { diff --git a/patches.mcp/minecraft/net/minecraft/item/ItemMap.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemMap.java.patch new file mode 100644 index 000000000..0281e3d97 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/item/ItemMap.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/item/ItemMap.java ++++ ../src-work/minecraft/net/minecraft/item/ItemMap.java +@@ -58,7 +58,7 @@ + mapdata = new MapData(s); + mapdata.scale = 3; + mapdata.func_176054_a((double)worldIn.getWorldInfo().getSpawnX(), (double)worldIn.getWorldInfo().getSpawnZ(), mapdata.scale); +- mapdata.dimension = (byte)worldIn.provider.getDimensionId(); ++ mapdata.dimension = worldIn.provider.getDimensionId(); + mapdata.markDirty(); + worldIn.setItemData(s, mapdata); + } diff --git a/patches.mcp/minecraft/net/minecraft/item/ItemMonsterPlacer.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemMonsterPlacer.java.patch new file mode 100644 index 000000000..40b28e9c6 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/item/ItemMonsterPlacer.java.patch @@ -0,0 +1,107 @@ +--- ../src-base/minecraft/net/minecraft/item/ItemMonsterPlacer.java ++++ ../src-work/minecraft/net/minecraft/item/ItemMonsterPlacer.java +@@ -39,7 +39,7 @@ + public String getItemStackDisplayName(ItemStack stack) + { + String s = ("" + StatCollector.translateToLocal(this.getUnlocalizedName() + ".name")).trim(); +- String s1 = EntityList.getStringFromID(stack.getMetadata()); ++ String s1 = ItemMonsterPlacer.getEntityName(stack); + + if (s1 != null) + { +@@ -52,7 +52,7 @@ + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(ItemStack stack, int renderPass) + { +- EntityList.EntityEggInfo entityegginfo = (EntityList.EntityEggInfo)EntityList.entityEggs.get(Integer.valueOf(stack.getMetadata())); ++ EntityList.EntityEggInfo entityegginfo = ItemMonsterPlacer.getEggInfo(stack); + return entityegginfo != null ? (renderPass == 0 ? entityegginfo.primaryColor : entityegginfo.secondaryColor) : 16777215; + } + +@@ -77,7 +77,7 @@ + if (tileentity instanceof TileEntityMobSpawner) + { + MobSpawnerBaseLogic mobspawnerbaselogic = ((TileEntityMobSpawner)tileentity).getSpawnerBaseLogic(); +- mobspawnerbaselogic.setEntityName(EntityList.getStringFromID(stack.getMetadata())); ++ mobspawnerbaselogic.setEntityName(ItemMonsterPlacer.getEntityName(stack)); + tileentity.markDirty(); + worldIn.markBlockForUpdate(pos); + +@@ -98,7 +98,7 @@ + d0 = 0.5D; + } + +- Entity entity = spawnCreature(worldIn, stack.getMetadata(), (double)pos.getX() + 0.5D, (double)pos.getY() + d0, (double)pos.getZ() + 0.5D); ++ Entity entity = spawnCreature(worldIn, ItemMonsterPlacer.getEntityName(stack), (double)pos.getX() + 0.5D, (double)pos.getY() + d0, (double)pos.getZ() + 0.5D); + + if (entity != null) + { +@@ -149,7 +149,7 @@ + + if (worldIn.getBlockState(blockpos).getBlock() instanceof BlockLiquid) + { +- Entity entity = spawnCreature(worldIn, itemStackIn.getMetadata(), (double)blockpos.getX() + 0.5D, (double)blockpos.getY() + 0.5D, (double)blockpos.getZ() + 0.5D); ++ Entity entity = spawnCreature(worldIn, ItemMonsterPlacer.getEntityName(itemStackIn), (double)blockpos.getX() + 0.5D, (double)blockpos.getY() + 0.5D, (double)blockpos.getZ() + 0.5D); + + if (entity != null) + { +@@ -173,19 +173,29 @@ + } + } + ++ @Deprecated // Use string version below. + public static Entity spawnCreature(World worldIn, int entityID, double x, double y, double z) + { + if (!EntityList.entityEggs.containsKey(Integer.valueOf(entityID))) + { + return null; + } ++ return spawnCreature(worldIn, EntityList.getStringFromID(entityID), x, y, z); ++ } ++ ++ public static Entity spawnCreature(World worldIn, String name, double x, double y, double z) ++ { ++ if (!EntityList.stringToClassMapping.containsKey(name)) ++ { ++ return null; ++ } + else + { + Entity entity = null; + + for (int j = 0; j < 1; ++j) + { +- entity = EntityList.createEntityByID(entityID, worldIn); ++ entity = EntityList.createEntityByName(name, worldIn); + + if (entity instanceof EntityLivingBase) + { +@@ -213,5 +223,28 @@ + EntityList.EntityEggInfo entityegginfo = (EntityList.EntityEggInfo)iterator.next(); + subItems.add(new ItemStack(itemIn, 1, entityegginfo.spawnedID)); + } ++ ++ for (String name : net.minecraftforge.fml.common.registry.EntityRegistry.getEggs().keySet()) ++ { ++ ItemStack stack = new ItemStack(itemIn); ++ net.minecraft.nbt.NBTTagCompound nbt = new net.minecraft.nbt.NBTTagCompound(); ++ nbt.setString("entity_name", name); ++ stack.setTagCompound(nbt); ++ subItems.add(stack); ++ } + } ++ ++ public static String getEntityName(ItemStack stack) ++ { ++ if (stack.hasTagCompound() && stack.getTagCompound().hasKey("entity_name", 8)) ++ return stack.getTagCompound().getString("entity_name"); ++ return EntityList.getStringFromID(stack.getMetadata()); ++ } ++ ++ private static EntityList.EntityEggInfo getEggInfo(ItemStack stack) ++ { ++ if (stack.hasTagCompound() && stack.getTagCompound().hasKey("entity_name", 8)) ++ return net.minecraftforge.fml.common.registry.EntityRegistry.getEggs().get(stack.getTagCompound().getString("entity_name")); ++ return (EntityList.EntityEggInfo)EntityList.entityEggs.get(stack.getMetadata()); ++ } + } diff --git a/patches/minecraft/net/minecraft/item/ItemRecord.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemRecord.java.patch similarity index 89% rename from patches/minecraft/net/minecraft/item/ItemRecord.java.patch rename to patches.mcp/minecraft/net/minecraft/item/ItemRecord.java.patch index e36f4fca6..0fce10880 100644 --- a/patches/minecraft/net/minecraft/item/ItemRecord.java.patch +++ b/patches.mcp/minecraft/net/minecraft/item/ItemRecord.java.patch @@ -2,7 +2,7 @@ +++ ../src-work/minecraft/net/minecraft/item/ItemRecord.java @@ -75,4 +75,15 @@ { - return (ItemRecord)field_150928_b.get(p_150926_0_); + return (ItemRecord)RECORDS.get(name); } + + /** diff --git a/patches.mcp/minecraft/net/minecraft/item/ItemReed.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemReed.java.patch new file mode 100644 index 000000000..1dfe0385e --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/item/ItemReed.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/item/ItemReed.java ++++ ../src-work/minecraft/net/minecraft/item/ItemReed.java +@@ -54,7 +54,7 @@ + + if (iblockstate1.getBlock() == this.block) + { +- ItemBlock.setTileEntityNBT(worldIn, pos, stack); ++ ItemBlock.setTileEntityNBT(worldIn, pos, stack, playerIn); + iblockstate1.getBlock().onBlockPlacedBy(worldIn, pos, iblockstate1, playerIn, stack); + } + diff --git a/patches/minecraft/net/minecraft/item/ItemSeedFood.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemSeedFood.java.patch similarity index 58% rename from patches/minecraft/net/minecraft/item/ItemSeedFood.java.patch rename to patches.mcp/minecraft/net/minecraft/item/ItemSeedFood.java.patch index ff7b8fae9..a80f9b920 100644 --- a/patches/minecraft/net/minecraft/item/ItemSeedFood.java.patch +++ b/patches.mcp/minecraft/net/minecraft/item/ItemSeedFood.java.patch @@ -7,17 +7,17 @@ -public class ItemSeedFood extends ItemFood +public class ItemSeedFood extends ItemFood implements net.minecraftforge.common.IPlantable { - private Block field_150908_b; - private Block field_82809_c; + private Block crops; + private Block soilId; @@ -29,7 +29,7 @@ { return false; } -- else if (p_180614_3_.func_180495_p(p_180614_4_).func_177230_c() == this.field_82809_c && p_180614_3_.func_175623_d(p_180614_4_.func_177984_a())) -+ else if (p_180614_3_.func_180495_p(p_180614_4_).func_177230_c().canSustainPlant(p_180614_3_, p_180614_4_, EnumFacing.UP, this) && p_180614_3_.func_175623_d(p_180614_4_.func_177984_a())) +- else if (worldIn.getBlockState(pos).getBlock() == this.soilId && worldIn.isAirBlock(pos.up())) ++ else if (worldIn.getBlockState(pos).getBlock().canSustainPlant(worldIn, pos, EnumFacing.UP, this) && worldIn.isAirBlock(pos.up())) { - p_180614_3_.func_175656_a(p_180614_4_.func_177984_a(), this.field_150908_b.func_176223_P()); - --p_180614_1_.field_77994_a; + worldIn.setBlockState(pos.up(), this.crops.getDefaultState()); + --stack.stackSize; @@ -40,4 +40,16 @@ return false; } @@ -32,6 +32,6 @@ + @Override + public net.minecraft.block.state.IBlockState getPlant(net.minecraft.world.IBlockAccess world, BlockPos pos) + { -+ return this.field_150908_b.func_176223_P(); ++ return this.crops.getDefaultState(); + } } diff --git a/patches.mcp/minecraft/net/minecraft/item/ItemSeeds.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemSeeds.java.patch new file mode 100644 index 000000000..ebdd88861 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/item/ItemSeeds.java.patch @@ -0,0 +1,37 @@ +--- ../src-base/minecraft/net/minecraft/item/ItemSeeds.java ++++ ../src-work/minecraft/net/minecraft/item/ItemSeeds.java +@@ -7,7 +7,7 @@ + import net.minecraft.util.EnumFacing; + import net.minecraft.world.World; + +-public class ItemSeeds extends Item ++public class ItemSeeds extends Item implements net.minecraftforge.common.IPlantable + { + private Block crops; + private Block soilBlockID; +@@ -30,7 +30,7 @@ + { + return false; + } +- else if (worldIn.getBlockState(pos).getBlock() == this.soilBlockID && worldIn.isAirBlock(pos.up())) ++ else if (worldIn.getBlockState(pos).getBlock().canSustainPlant(worldIn, pos, EnumFacing.UP, this) && worldIn.isAirBlock(pos.up())) + { + worldIn.setBlockState(pos.up(), this.crops.getDefaultState()); + --stack.stackSize; +@@ -41,4 +41,16 @@ + return false; + } + } ++ ++ @Override ++ public net.minecraftforge.common.EnumPlantType getPlantType(net.minecraft.world.IBlockAccess world, BlockPos pos) ++ { ++ return this.crops == net.minecraft.init.Blocks.nether_wart ? net.minecraftforge.common.EnumPlantType.Nether : net.minecraftforge.common.EnumPlantType.Crop; ++ } ++ ++ @Override ++ public net.minecraft.block.state.IBlockState getPlant(net.minecraft.world.IBlockAccess world, BlockPos pos) ++ { ++ return this.crops.getDefaultState(); ++ } + } diff --git a/patches.mcp/minecraft/net/minecraft/item/ItemShears.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemShears.java.patch new file mode 100644 index 000000000..921a20435 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/item/ItemShears.java.patch @@ -0,0 +1,89 @@ +--- ../src-base/minecraft/net/minecraft/item/ItemShears.java ++++ ../src-work/minecraft/net/minecraft/item/ItemShears.java +@@ -21,13 +21,12 @@ + + public boolean onBlockDestroyed(ItemStack stack, World worldIn, Block blockIn, BlockPos pos, EntityLivingBase playerIn) + { +- if (blockIn.getMaterial() != Material.leaves && blockIn != Blocks.web && blockIn != Blocks.tallgrass && blockIn != Blocks.vine && blockIn != Blocks.tripwire && blockIn != Blocks.wool) ++ if (blockIn.getMaterial() != Material.leaves && blockIn != Blocks.web && blockIn != Blocks.tallgrass && blockIn != Blocks.vine && blockIn != Blocks.tripwire && blockIn != Blocks.wool && !(blockIn instanceof net.minecraftforge.common.IShearable)) + { + return super.onBlockDestroyed(stack, worldIn, blockIn, pos, playerIn); + } + else + { +- stack.damageItem(1, playerIn); + return true; + } + } +@@ -41,4 +40,71 @@ + { + return block != Blocks.web && block.getMaterial() != Material.leaves ? (block == Blocks.wool ? 5.0F : super.getStrVsBlock(stack, block)) : 15.0F; + } ++ ++ ++ @Override ++ public boolean itemInteractionForEntity(ItemStack itemstack, net.minecraft.entity.player.EntityPlayer player, EntityLivingBase entity) ++ { ++ if (entity.worldObj.isRemote) ++ { ++ return false; ++ } ++ if (entity instanceof net.minecraftforge.common.IShearable) ++ { ++ net.minecraftforge.common.IShearable target = (net.minecraftforge.common.IShearable)entity; ++ BlockPos pos = new BlockPos(entity.posX, entity.posY, entity.posZ); ++ if (target.isShearable(itemstack, entity.worldObj, pos)) ++ { ++ java.util.List drops = target.onSheared(itemstack, entity.worldObj, pos, ++ net.minecraft.enchantment.EnchantmentHelper.getEnchantmentLevel(net.minecraft.enchantment.Enchantment.fortune.effectId, itemstack)); ++ ++ java.util.Random rand = new java.util.Random(); ++ for(ItemStack stack : drops) ++ { ++ net.minecraft.entity.item.EntityItem ent = entity.entityDropItem(stack, 1.0F); ++ ent.motionY += rand.nextFloat() * 0.05F; ++ ent.motionX += (rand.nextFloat() - rand.nextFloat()) * 0.1F; ++ ent.motionZ += (rand.nextFloat() - rand.nextFloat()) * 0.1F; ++ } ++ itemstack.damageItem(1, entity); ++ } ++ return true; ++ } ++ return false; ++ } ++ ++ @Override ++ public boolean onBlockStartBreak(ItemStack itemstack, BlockPos pos, net.minecraft.entity.player.EntityPlayer player) ++ { ++ if (player.worldObj.isRemote || player.capabilities.isCreativeMode) ++ { ++ return false; ++ } ++ Block block = player.worldObj.getBlockState(pos).getBlock(); ++ if (block instanceof net.minecraftforge.common.IShearable) ++ { ++ net.minecraftforge.common.IShearable target = (net.minecraftforge.common.IShearable)block; ++ if (target.isShearable(itemstack, player.worldObj, pos)) ++ { ++ java.util.List drops = target.onSheared(itemstack, player.worldObj, pos, ++ net.minecraft.enchantment.EnchantmentHelper.getEnchantmentLevel(net.minecraft.enchantment.Enchantment.fortune.effectId, itemstack)); ++ java.util.Random rand = new java.util.Random(); ++ ++ for(ItemStack stack : drops) ++ { ++ float f = 0.7F; ++ double d = (double)(rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D; ++ double d1 = (double)(rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D; ++ double d2 = (double)(rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D; ++ net.minecraft.entity.item.EntityItem entityitem = new net.minecraft.entity.item.EntityItem(player.worldObj, (double)pos.getX() + d, (double)pos.getY() + d1, (double)pos.getZ() + d2, stack); ++ entityitem.setDefaultPickupDelay(); ++ player.worldObj.spawnEntityInWorld(entityitem); ++ } ++ ++ itemstack.damageItem(1, player); ++ player.addStat(net.minecraft.stats.StatList.mineBlockStatArray[Block.getIdFromBlock(block)], 1); ++ } ++ } ++ return false; ++ } + } diff --git a/patches.mcp/minecraft/net/minecraft/item/ItemSign.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemSign.java.patch new file mode 100644 index 000000000..592003138 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/item/ItemSign.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/item/ItemSign.java ++++ ../src-work/minecraft/net/minecraft/item/ItemSign.java +@@ -63,7 +63,7 @@ + --stack.stackSize; + TileEntity tileentity = worldIn.getTileEntity(pos); + +- if (tileentity instanceof TileEntitySign && !ItemBlock.setTileEntityNBT(worldIn, pos, stack)) ++ if (tileentity instanceof TileEntitySign && !ItemBlock.setTileEntityNBT(worldIn, pos, stack, playerIn)) + { + playerIn.openEditSign((TileEntitySign)tileentity); + } diff --git a/patches.mcp/minecraft/net/minecraft/item/ItemSkull.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemSkull.java.patch new file mode 100644 index 000000000..9c1921c95 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/item/ItemSkull.java.patch @@ -0,0 +1,31 @@ +--- ../src-base/minecraft/net/minecraft/item/ItemSkull.java ++++ ../src-work/minecraft/net/minecraft/item/ItemSkull.java +@@ -35,6 +35,11 @@ + + public boolean onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ) + { ++ if (worldIn.getBlockState(pos).getBlock().isReplaceable(worldIn, pos) && side != EnumFacing.DOWN) ++ { ++ side = EnumFacing.UP; ++ pos = pos.down(); ++ } + if (side == EnumFacing.DOWN) + { + return false; +@@ -47,7 +52,7 @@ + + if (!flag) + { +- if (!worldIn.getBlockState(pos).getBlock().getMaterial().isSolid()) ++ if (!worldIn.getBlockState(pos).getBlock().getMaterial().isSolid() && !worldIn.isSideSolid(pos, side, true)) + { + return false; + } +@@ -67,6 +72,7 @@ + { + if (!worldIn.isRemote) + { ++ if (!Blocks.skull.canPlaceBlockOnSide(worldIn, pos, side)) return false; + worldIn.setBlockState(pos, Blocks.skull.getDefaultState().withProperty(BlockSkull.FACING, side), 3); + int i = 0; + diff --git a/patches.mcp/minecraft/net/minecraft/item/ItemSnow.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemSnow.java.patch new file mode 100644 index 000000000..b7bb49b2e --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/item/ItemSnow.java.patch @@ -0,0 +1,13 @@ +--- ../src-base/minecraft/net/minecraft/item/ItemSnow.java ++++ ../src-work/minecraft/net/minecraft/item/ItemSnow.java +@@ -66,4 +66,10 @@ + { + return damage; + } ++ ++ public boolean canPlaceBlockOnSide(World world, BlockPos pos, EnumFacing side, EntityPlayer player, ItemStack stack) ++ { ++ IBlockState state = world.getBlockState(pos); ++ return (state.getBlock() != net.minecraft.init.Blocks.snow_layer || ((Integer)state.getValue(BlockSnow.LAYERS)) > 7) ? super.canPlaceBlockOnSide(world, pos, side, player, stack) : true; ++ } + } diff --git a/patches.mcp/minecraft/net/minecraft/item/ItemStack.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemStack.java.patch new file mode 100644 index 000000000..0909d6238 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/item/ItemStack.java.patch @@ -0,0 +1,149 @@ +--- ../src-base/minecraft/net/minecraft/item/ItemStack.java ++++ ../src-work/minecraft/net/minecraft/item/ItemStack.java +@@ -52,6 +52,7 @@ + private boolean canPlaceOnCacheResult; + private static final String __OBFID = "CL_00000043"; + ++ private net.minecraftforge.fml.common.registry.RegistryDelegate delegate; + public ItemStack(Block blockIn) + { + this(blockIn, 1); +@@ -83,7 +84,7 @@ + this.canDestroyCacheResult = false; + this.canPlaceOnCacheBlock = null; + this.canPlaceOnCacheResult = false; +- this.item = itemIn; ++ this.setItem(itemIn); + this.stackSize = amount; + this.itemDamage = meta; + +@@ -123,11 +124,12 @@ + + public Item getItem() + { +- return this.item; ++ return this.delegate != null ? this.delegate.get() : null; + } + + public boolean onItemUse(EntityPlayer playerIn, World worldIn, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ) + { ++ if (!worldIn.isRemote) return net.minecraftforge.common.ForgeHooks.onPlaceItemIntoWorld(this, playerIn, worldIn, pos, side, hitX, hitY, hitZ); + boolean flag = this.getItem().onItemUse(this, playerIn, worldIn, pos, side, hitX, hitY, hitZ); + + if (flag) +@@ -172,11 +174,11 @@ + { + if (nbt.hasKey("id", 8)) + { +- this.item = Item.getByNameOrId(nbt.getString("id")); ++ this.setItem(Item.getByNameOrId(nbt.getString("id"))); + } + else + { +- this.item = Item.getItemById(nbt.getShort("id")); ++ this.setItem(Item.getItemById(nbt.getShort("id"))); + } + + this.stackSize = nbt.getByte("Count"); +@@ -200,7 +202,7 @@ + + public int getMaxStackSize() + { +- return this.getItem().getItemStackLimit(); ++ return this.getItem().getItemStackLimit(this); + } + + public boolean isStackable() +@@ -210,7 +212,7 @@ + + public boolean isItemStackDamageable() + { +- return this.item == null ? false : (this.item.getMaxDamage() <= 0 ? false : !this.hasTagCompound() || !this.getTagCompound().getBoolean("Unbreakable")); ++ return this.item == null ? false : (this.item.getMaxDamage(this) <= 0 ? false : !this.hasTagCompound() || !this.getTagCompound().getBoolean("Unbreakable")); + } + + public boolean getHasSubtypes() +@@ -220,32 +222,27 @@ + + public boolean isItemDamaged() + { +- return this.isItemStackDamageable() && this.itemDamage > 0; ++ return this.isItemStackDamageable() && getItem().isDamaged(this); + } + + public int getItemDamage() + { +- return this.itemDamage; ++ return getItem().getDamage(this); + } + + public int getMetadata() + { +- return this.itemDamage; ++ return getItem().getMetadata(this); + } + + public void setItemDamage(int meta) + { +- this.itemDamage = meta; +- +- if (this.itemDamage < 0) +- { +- this.itemDamage = 0; +- } ++ getItem().setDamage(this, meta); + } + + public int getMaxDamage() + { +- return this.item.getMaxDamage(); ++ return this.item.getMaxDamage(this); + } + + public boolean attemptDamageItem(int amount, Random rand) +@@ -277,8 +274,8 @@ + } + } + +- this.itemDamage += amount; +- return this.itemDamage > this.getMaxDamage(); ++ setItemDamage(getItemDamage() + amount); //Redirect through Item's callback if applicable. ++ return getItemDamage() > getMaxDamage(); + } + } + +@@ -337,7 +334,7 @@ + + public boolean canHarvestBlock(Block blockIn) + { +- return this.item.canHarvestBlock(blockIn); ++ return getItem().canHarvestBlock(blockIn, this); + } + + public boolean interactWithEntity(EntityPlayer playerIn, EntityLivingBase entityIn) +@@ -752,6 +749,8 @@ + } + } + ++ net.minecraftforge.event.ForgeEventFactory.onItemTooltip(this, playerIn, arraylist, advanced); ++ + return arraylist; + } + +@@ -862,7 +861,7 @@ + } + else + { +- object = this.getItem().getItemAttributeModifiers(); ++ object = this.getItem().getAttributeModifiers(this); + } + + return (Multimap)object; +@@ -870,6 +869,7 @@ + + public void setItem(Item newItem) + { ++ this.delegate = newItem != null ? newItem.delegate : null; + this.item = newItem; + } + diff --git a/patches.mcp/minecraft/net/minecraft/item/ItemSword.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemSword.java.patch new file mode 100644 index 000000000..2305fb8d6 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/item/ItemSword.java.patch @@ -0,0 +1,13 @@ +--- ../src-base/minecraft/net/minecraft/item/ItemSword.java ++++ ../src-work/minecraft/net/minecraft/item/ItemSword.java +@@ -102,7 +102,9 @@ + + public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) + { +- return this.material.getRepairItem() == repair.getItem() ? true : super.getIsRepairable(toRepair, repair); ++ ItemStack mat = this.material.getRepairItemStack(); ++ if (mat != null && net.minecraftforge.oredict.OreDictionary.itemMatches(mat, repair, false)) return true; ++ return super.getIsRepairable(toRepair, repair); + } + + public Multimap getItemAttributeModifiers() diff --git a/patches/minecraft/net/minecraft/item/ItemTool.java.patch b/patches.mcp/minecraft/net/minecraft/item/ItemTool.java.patch similarity index 60% rename from patches/minecraft/net/minecraft/item/ItemTool.java.patch rename to patches.mcp/minecraft/net/minecraft/item/ItemTool.java.patch index 802da522a..366612546 100644 --- a/patches/minecraft/net/minecraft/item/ItemTool.java.patch +++ b/patches.mcp/minecraft/net/minecraft/item/ItemTool.java.patch @@ -1,9 +1,9 @@ --- ../src-base/minecraft/net/minecraft/item/ItemTool.java +++ ../src-work/minecraft/net/minecraft/item/ItemTool.java @@ -29,6 +29,18 @@ - this.field_77864_a = p_i45333_2_.func_77998_b(); - this.field_77865_bY = p_i45333_1_ + p_i45333_2_.func_78000_c(); - this.func_77637_a(CreativeTabs.field_78040_i); + this.efficiencyOnProperMaterial = material.getEfficiencyOnProperMaterial(); + this.damageVsEntity = attackDamage + material.getDamageVsEntity(); + this.setCreativeTab(CreativeTabs.tabTools); + if (this instanceof ItemPickaxe) + { + toolClass = "pickaxe"; @@ -18,20 +18,20 @@ + } } - public float func_150893_a(ItemStack p_150893_1_, Block p_150893_2_) + public float getStrVsBlock(ItemStack stack, Block block) @@ -75,7 +87,9 @@ - public boolean func_82789_a(ItemStack p_82789_1_, ItemStack p_82789_2_) + public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) { -- return this.field_77862_b.func_150995_f() == p_82789_2_.func_77973_b() ? true : super.func_82789_a(p_82789_1_, p_82789_2_); -+ ItemStack mat = this.field_77862_b.getRepairItemStack(); -+ if (mat != null && net.minecraftforge.oredict.OreDictionary.itemMatches(mat, p_82789_2_, false)) return true; -+ return super.func_82789_a(p_82789_1_, p_82789_2_); +- return this.toolMaterial.getRepairItem() == repair.getItem() ? true : super.getIsRepairable(toRepair, repair); ++ ItemStack mat = this.toolMaterial.getRepairItemStack(); ++ if (mat != null && net.minecraftforge.oredict.OreDictionary.itemMatches(mat, repair, false)) return true; ++ return super.getIsRepairable(toRepair, repair); } - public Multimap func_111205_h() + public Multimap getItemAttributeModifiers() @@ -84,4 +98,38 @@ - multimap.put(SharedMonsterAttributes.field_111264_e.func_111108_a(), new AttributeModifier(field_111210_e, "Tool modifier", (double)this.field_77865_bY, 0)); + multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(itemModifierUUID, "Tool modifier", (double)this.damageVsEntity, 0)); return multimap; } + @@ -43,7 +43,7 @@ + int level = super.getHarvestLevel(stack, toolClass); + if (level == -1 && toolClass != null && toolClass.equals(this.toolClass)) + { -+ return this.field_77862_b.func_77996_d(); ++ return this.toolMaterial.getHarvestLevel(); + } + else + { @@ -62,8 +62,8 @@ + { + for (String type : getToolClasses(stack)) + { -+ if (state.func_177230_c().isToolEffective(type, state)) -+ return field_77864_a; ++ if (state.getBlock().isToolEffective(type, state)) ++ return efficiencyOnProperMaterial; + } + return super.getDigSpeed(stack, state); + } diff --git a/patches.mcp/minecraft/net/minecraft/item/crafting/FurnaceRecipes.java.patch b/patches.mcp/minecraft/net/minecraft/item/crafting/FurnaceRecipes.java.patch new file mode 100644 index 000000000..935002f5f --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/item/crafting/FurnaceRecipes.java.patch @@ -0,0 +1,20 @@ +--- ../src-base/minecraft/net/minecraft/item/crafting/FurnaceRecipes.java ++++ ../src-work/minecraft/net/minecraft/item/crafting/FurnaceRecipes.java +@@ -78,6 +78,7 @@ + + public void addSmeltingRecipe(ItemStack input, ItemStack stack, float experience) + { ++ if (getSmeltingResult(input) != null) { net.minecraftforge.fml.common.FMLLog.info("Ignored smelting recipe with conflicting input: " + input + " = " + stack); return; } + this.smeltingList.put(input, stack); + this.experienceList.put(stack, Float.valueOf(experience)); + } +@@ -113,6 +114,9 @@ + + public float getSmeltingExperience(ItemStack stack) + { ++ float ret = stack.getItem().getSmeltingExperience(stack); ++ if (ret != -1) return ret; ++ + Iterator iterator = this.experienceList.entrySet().iterator(); + Entry entry; + diff --git a/patches/minecraft/net/minecraft/item/crafting/RecipeFireworks.java.patch b/patches.mcp/minecraft/net/minecraft/item/crafting/RecipeFireworks.java.patch similarity index 53% rename from patches/minecraft/net/minecraft/item/crafting/RecipeFireworks.java.patch rename to patches.mcp/minecraft/net/minecraft/item/crafting/RecipeFireworks.java.patch index aa829dcaf..f87e64fd1 100644 --- a/patches/minecraft/net/minecraft/item/crafting/RecipeFireworks.java.patch +++ b/patches.mcp/minecraft/net/minecraft/item/crafting/RecipeFireworks.java.patch @@ -2,7 +2,7 @@ +++ ../src-work/minecraft/net/minecraft/item/crafting/RecipeFireworks.java @@ -90,9 +90,9 @@ { - this.field_92102_a = new ItemStack(Items.field_151152_bP); + this.field_92102_a = new ItemStack(Items.fireworks); + nbttagcompound = new NBTTagCompound(); if (l > 0) @@ -12,23 +12,23 @@ NBTTagList nbttaglist = new NBTTagList(); @@ -109,8 +109,8 @@ - nbttagcompound1.func_74782_a("Explosions", nbttaglist); - nbttagcompound1.func_74774_a("Flight", (byte)j); - nbttagcompound.func_74782_a("Fireworks", nbttagcompound1); -- this.field_92102_a.func_77982_d(nbttagcompound); + nbttagcompound1.setTag("Explosions", nbttaglist); + nbttagcompound1.setByte("Flight", (byte)j); + nbttagcompound.setTag("Fireworks", nbttagcompound1); +- this.field_92102_a.setTagCompound(nbttagcompound); } -+ this.field_92102_a.func_77982_d(nbttagcompound); //Forge BugFix: NPE Protection ++ this.field_92102_a.setTagCompound(nbttagcompound); //Forge BugFix: NPE Protection return true; } @@ -253,11 +253,7 @@ for (int i = 0; i < aitemstack.length; ++i) { - ItemStack itemstack = p_179532_1_.func_70301_a(i); + ItemStack itemstack = p_179532_1_.getStackInSlot(i); - -- if (itemstack != null && itemstack.func_77973_b().func_77634_r()) +- if (itemstack != null && itemstack.getItem().hasContainerItem()) - { -- aitemstack[i] = new ItemStack(itemstack.func_77973_b().func_77668_q()); +- aitemstack[i] = new ItemStack(itemstack.getItem().getContainerItem()); - } + aitemstack[i] = net.minecraftforge.common.ForgeHooks.getContainerItem(itemstack); } diff --git a/patches.mcp/minecraft/net/minecraft/item/crafting/RecipeRepairItem.java.patch b/patches.mcp/minecraft/net/minecraft/item/crafting/RecipeRepairItem.java.patch new file mode 100644 index 000000000..0eb9dbffe --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/item/crafting/RecipeRepairItem.java.patch @@ -0,0 +1,42 @@ +--- ../src-base/minecraft/net/minecraft/item/crafting/RecipeRepairItem.java ++++ ../src-work/minecraft/net/minecraft/item/crafting/RecipeRepairItem.java +@@ -27,7 +27,7 @@ + { + ItemStack itemstack1 = (ItemStack)arraylist.get(0); + +- if (itemstack.getItem() != itemstack1.getItem() || itemstack1.stackSize != 1 || itemstack.stackSize != 1 || !itemstack1.getItem().isDamageable()) ++ if (itemstack.getItem() != itemstack1.getItem() || itemstack1.stackSize != 1 || itemstack.stackSize != 1 || !itemstack1.getItem().isRepairable()) + { + return false; + } +@@ -55,7 +55,7 @@ + { + ItemStack itemstack1 = (ItemStack)arraylist.get(0); + +- if (itemstack.getItem() != itemstack1.getItem() || itemstack1.stackSize != 1 || itemstack.stackSize != 1 || !itemstack1.getItem().isDamageable()) ++ if (itemstack.getItem() != itemstack1.getItem() || itemstack1.stackSize != 1 || itemstack.stackSize != 1 || !itemstack1.getItem().isRepairable()) + { + return null; + } +@@ -68,7 +68,7 @@ + ItemStack itemstack2 = (ItemStack)arraylist.get(0); + itemstack = (ItemStack)arraylist.get(1); + +- if (itemstack2.getItem() == itemstack.getItem() && itemstack2.stackSize == 1 && itemstack.stackSize == 1 && itemstack2.getItem().isDamageable()) ++ if (itemstack2.getItem() == itemstack.getItem() && itemstack2.stackSize == 1 && itemstack.stackSize == 1 && itemstack2.getItem().isRepairable()) + { + Item item = itemstack2.getItem(); + int j = item.getMaxDamage() - itemstack2.getItemDamage(); +@@ -105,11 +105,7 @@ + for (int i = 0; i < aitemstack.length; ++i) + { + ItemStack itemstack = p_179532_1_.getStackInSlot(i); +- +- if (itemstack != null && itemstack.getItem().hasContainerItem()) +- { +- aitemstack[i] = new ItemStack(itemstack.getItem().getContainerItem()); +- } ++ aitemstack[i] = net.minecraftforge.common.ForgeHooks.getContainerItem(itemstack); + } + + return aitemstack; diff --git a/patches/minecraft/net/minecraft/item/crafting/RecipesArmorDyes.java.patch b/patches.mcp/minecraft/net/minecraft/item/crafting/RecipesArmorDyes.java.patch similarity index 63% rename from patches/minecraft/net/minecraft/item/crafting/RecipesArmorDyes.java.patch rename to patches.mcp/minecraft/net/minecraft/item/crafting/RecipesArmorDyes.java.patch index 4a45ed51b..261c45a79 100644 --- a/patches/minecraft/net/minecraft/item/crafting/RecipesArmorDyes.java.patch +++ b/patches.mcp/minecraft/net/minecraft/item/crafting/RecipesArmorDyes.java.patch @@ -3,11 +3,11 @@ @@ -153,11 +153,7 @@ for (int i = 0; i < aitemstack.length; ++i) { - ItemStack itemstack = p_179532_1_.func_70301_a(i); + ItemStack itemstack = p_179532_1_.getStackInSlot(i); - -- if (itemstack != null && itemstack.func_77973_b().func_77634_r()) +- if (itemstack != null && itemstack.getItem().hasContainerItem()) - { -- aitemstack[i] = new ItemStack(itemstack.func_77973_b().func_77668_q()); +- aitemstack[i] = new ItemStack(itemstack.getItem().getContainerItem()); - } + aitemstack[i] = net.minecraftforge.common.ForgeHooks.getContainerItem(itemstack); } diff --git a/patches/minecraft/net/minecraft/item/crafting/RecipesBanners.java.patch b/patches.mcp/minecraft/net/minecraft/item/crafting/RecipesBanners.java.patch similarity index 63% rename from patches/minecraft/net/minecraft/item/crafting/RecipesBanners.java.patch rename to patches.mcp/minecraft/net/minecraft/item/crafting/RecipesBanners.java.patch index 55cf592f5..04640835d 100644 --- a/patches/minecraft/net/minecraft/item/crafting/RecipesBanners.java.patch +++ b/patches.mcp/minecraft/net/minecraft/item/crafting/RecipesBanners.java.patch @@ -3,11 +3,11 @@ @@ -143,11 +143,7 @@ for (int i = 0; i < aitemstack.length; ++i) { - ItemStack itemstack = p_179532_1_.func_70301_a(i); + ItemStack itemstack = p_179532_1_.getStackInSlot(i); - -- if (itemstack != null && itemstack.func_77973_b().func_77634_r()) +- if (itemstack != null && itemstack.getItem().hasContainerItem()) - { -- aitemstack[i] = new ItemStack(itemstack.func_77973_b().func_77668_q()); +- aitemstack[i] = new ItemStack(itemstack.getItem().getContainerItem()); - } + aitemstack[i] = net.minecraftforge.common.ForgeHooks.getContainerItem(itemstack); } @@ -17,11 +17,11 @@ if (itemstack != null) { -- if (itemstack.func_77973_b().func_77634_r()) -+ if (itemstack.func_77973_b().hasContainerItem(itemstack)) +- if (itemstack.getItem().hasContainerItem()) ++ if (itemstack.getItem().hasContainerItem(itemstack)) { -- aitemstack[i] = new ItemStack(itemstack.func_77973_b().func_77668_q()); +- aitemstack[i] = new ItemStack(itemstack.getItem().getContainerItem()); + aitemstack[i] = net.minecraftforge.common.ForgeHooks.getContainerItem(itemstack); } - else if (itemstack.func_77942_o() && TileEntityBanner.func_175113_c(itemstack) > 0) + else if (itemstack.hasTagCompound() && TileEntityBanner.getPatterns(itemstack) > 0) { diff --git a/patches/minecraft/net/minecraft/item/crafting/RecipesMapCloning.java.patch b/patches.mcp/minecraft/net/minecraft/item/crafting/RecipesMapCloning.java.patch similarity index 63% rename from patches/minecraft/net/minecraft/item/crafting/RecipesMapCloning.java.patch rename to patches.mcp/minecraft/net/minecraft/item/crafting/RecipesMapCloning.java.patch index 7a60d54d0..5ad702f77 100644 --- a/patches/minecraft/net/minecraft/item/crafting/RecipesMapCloning.java.patch +++ b/patches.mcp/minecraft/net/minecraft/item/crafting/RecipesMapCloning.java.patch @@ -3,11 +3,11 @@ @@ -110,11 +110,7 @@ for (int i = 0; i < aitemstack.length; ++i) { - ItemStack itemstack = p_179532_1_.func_70301_a(i); + ItemStack itemstack = p_179532_1_.getStackInSlot(i); - -- if (itemstack != null && itemstack.func_77973_b().func_77634_r()) +- if (itemstack != null && itemstack.getItem().hasContainerItem()) - { -- aitemstack[i] = new ItemStack(itemstack.func_77973_b().func_77668_q()); +- aitemstack[i] = new ItemStack(itemstack.getItem().getContainerItem()); - } + aitemstack[i] = net.minecraftforge.common.ForgeHooks.getContainerItem(itemstack); } diff --git a/patches/minecraft/net/minecraft/item/crafting/ShapedRecipes.java.patch b/patches.mcp/minecraft/net/minecraft/item/crafting/ShapedRecipes.java.patch similarity index 63% rename from patches/minecraft/net/minecraft/item/crafting/ShapedRecipes.java.patch rename to patches.mcp/minecraft/net/minecraft/item/crafting/ShapedRecipes.java.patch index 719da837b..02c3e7f16 100644 --- a/patches/minecraft/net/minecraft/item/crafting/ShapedRecipes.java.patch +++ b/patches.mcp/minecraft/net/minecraft/item/crafting/ShapedRecipes.java.patch @@ -3,11 +3,11 @@ @@ -34,11 +34,7 @@ for (int i = 0; i < aitemstack.length; ++i) { - ItemStack itemstack = p_179532_1_.func_70301_a(i); + ItemStack itemstack = p_179532_1_.getStackInSlot(i); - -- if (itemstack != null && itemstack.func_77973_b().func_77634_r()) +- if (itemstack != null && itemstack.getItem().hasContainerItem()) - { -- aitemstack[i] = new ItemStack(itemstack.func_77973_b().func_77668_q()); +- aitemstack[i] = new ItemStack(itemstack.getItem().getContainerItem()); - } + aitemstack[i] = net.minecraftforge.common.ForgeHooks.getContainerItem(itemstack); } diff --git a/patches/minecraft/net/minecraft/item/crafting/ShapelessRecipes.java.patch b/patches.mcp/minecraft/net/minecraft/item/crafting/ShapelessRecipes.java.patch similarity index 63% rename from patches/minecraft/net/minecraft/item/crafting/ShapelessRecipes.java.patch rename to patches.mcp/minecraft/net/minecraft/item/crafting/ShapelessRecipes.java.patch index 50228d863..f0670bb96 100644 --- a/patches/minecraft/net/minecraft/item/crafting/ShapelessRecipes.java.patch +++ b/patches.mcp/minecraft/net/minecraft/item/crafting/ShapelessRecipes.java.patch @@ -3,11 +3,11 @@ @@ -32,11 +32,7 @@ for (int i = 0; i < aitemstack.length; ++i) { - ItemStack itemstack = p_179532_1_.func_70301_a(i); + ItemStack itemstack = p_179532_1_.getStackInSlot(i); - -- if (itemstack != null && itemstack.func_77973_b().func_77634_r()) +- if (itemstack != null && itemstack.getItem().hasContainerItem()) - { -- aitemstack[i] = new ItemStack(itemstack.func_77973_b().func_77668_q()); +- aitemstack[i] = new ItemStack(itemstack.getItem().getContainerItem()); - } + aitemstack[i] = net.minecraftforge.common.ForgeHooks.getContainerItem(itemstack); } diff --git a/patches/minecraft/net/minecraft/nbt/CompressedStreamTools.java.patch b/patches.mcp/minecraft/net/minecraft/nbt/CompressedStreamTools.java.patch similarity index 72% rename from patches/minecraft/net/minecraft/nbt/CompressedStreamTools.java.patch rename to patches.mcp/minecraft/net/minecraft/nbt/CompressedStreamTools.java.patch index 3c635043e..6abd19298 100644 --- a/patches/minecraft/net/minecraft/nbt/CompressedStreamTools.java.patch +++ b/patches.mcp/minecraft/net/minecraft/nbt/CompressedStreamTools.java.patch @@ -14,14 +14,14 @@ } - @SideOnly(Side.CLIENT) - public static void func_74793_a(NBTTagCompound p_74793_0_, File p_74793_1_) throws IOException + public static void safeWrite(NBTTagCompound p_74793_0_, File p_74793_1_) throws IOException { File file2 = new File(p_74793_1_.getAbsolutePath() + "_tmp"); @@ -120,6 +117,7 @@ private static NBTBase func_152455_a(DataInput p_152455_0_, int p_152455_1_, NBTSizeTracker p_152455_2_) throws IOException { byte b0 = p_152455_0_.readByte(); -+ p_152455_2_.func_152450_a(8); // Forge: Count everything! ++ p_152455_2_.read(8); // Forge: Count everything! if (b0 == 0) { @@ -31,8 +31,8 @@ { - p_152455_0_.readUTF(); + NBTSizeTracker.readUTF(p_152455_2_, p_152455_0_.readUTF()); //Forge: Count this string. -+ p_152455_2_.func_152450_a(32); //Forge: 4 extra bytes for the object allocation. - NBTBase nbtbase = NBTBase.func_150284_a(b0); ++ p_152455_2_.read(32); //Forge: 4 extra bytes for the object allocation. + NBTBase nbtbase = NBTBase.createNewByType(b0); try @@ -146,7 +145,6 @@ @@ -40,7 +40,7 @@ } - @SideOnly(Side.CLIENT) - public static void func_74795_b(NBTTagCompound p_74795_0_, File p_74795_1_) throws IOException + public static void write(NBTTagCompound p_74795_0_, File p_74795_1_) throws IOException { DataOutputStream dataoutputstream = new DataOutputStream(new FileOutputStream(p_74795_1_)); @@ -161,7 +159,6 @@ @@ -48,6 +48,6 @@ } - @SideOnly(Side.CLIENT) - public static NBTTagCompound func_74797_a(File p_74797_0_) throws IOException + public static NBTTagCompound read(File p_74797_0_) throws IOException { if (!p_74797_0_.exists()) diff --git a/patches/minecraft/net/minecraft/nbt/NBTSizeTracker.java.patch b/patches.mcp/minecraft/net/minecraft/nbt/NBTSizeTracker.java.patch similarity index 85% rename from patches/minecraft/net/minecraft/nbt/NBTSizeTracker.java.patch rename to patches.mcp/minecraft/net/minecraft/nbt/NBTSizeTracker.java.patch index c7720b745..078cb5b16 100644 --- a/patches/minecraft/net/minecraft/nbt/NBTSizeTracker.java.patch +++ b/patches.mcp/minecraft/net/minecraft/nbt/NBTSizeTracker.java.patch @@ -1,7 +1,7 @@ --- ../src-base/minecraft/net/minecraft/nbt/NBTSizeTracker.java +++ ../src-work/minecraft/net/minecraft/nbt/NBTSizeTracker.java @@ -25,4 +25,34 @@ - throw new RuntimeException("Tried to read NBT tag that was too big; tried to allocate: " + this.field_152453_c + "bytes where max allowed: " + this.field_152452_b); + throw new RuntimeException("Tried to read NBT tag that was too big; tried to allocate: " + this.read + "bytes where max allowed: " + this.max); } } + @@ -18,7 +18,7 @@ + */ + public static void readUTF(NBTSizeTracker tracker, String data) + { -+ tracker.func_152450_a(16); //Header length ++ tracker.read(16); //Header length + if (data == null) + return; + @@ -32,6 +32,6 @@ + else if (c > 0x07FF) utflen += 3; + else utflen += 2; + } -+ tracker.func_152450_a(8 * utflen); ++ tracker.read(8 * utflen); + } } diff --git a/patches.mcp/minecraft/net/minecraft/nbt/NBTTagByteArray.java.patch b/patches.mcp/minecraft/net/minecraft/nbt/NBTTagByteArray.java.patch new file mode 100644 index 000000000..924246163 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/nbt/NBTTagByteArray.java.patch @@ -0,0 +1,10 @@ +--- ../src-base/minecraft/net/minecraft/nbt/NBTTagByteArray.java ++++ ../src-work/minecraft/net/minecraft/nbt/NBTTagByteArray.java +@@ -25,6 +25,7 @@ + + void read(DataInput input, int depth, NBTSizeTracker sizeTracker) throws IOException + { ++ sizeTracker.read(32); //Forge: Count the length as well + int j = input.readInt(); + sizeTracker.read((long)(8 * j)); + this.data = new byte[j]; diff --git a/patches.mcp/minecraft/net/minecraft/nbt/NBTTagCompound.java.patch b/patches.mcp/minecraft/net/minecraft/nbt/NBTTagCompound.java.patch new file mode 100644 index 000000000..e4bc0da41 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/nbt/NBTTagCompound.java.patch @@ -0,0 +1,27 @@ +--- ../src-base/minecraft/net/minecraft/nbt/NBTTagCompound.java ++++ ../src-work/minecraft/net/minecraft/nbt/NBTTagCompound.java +@@ -48,7 +48,7 @@ + while ((b0 = readType(input, sizeTracker)) != 0) + { + String s = readKey(input, sizeTracker); +- sizeTracker.read((long)(16 * s.length())); ++ NBTSizeTracker.readUTF(sizeTracker, s); // Forge: Correctly read String length including header. + NBTBase nbtbase = readNBT(b0, s, input, depth + 1, sizeTracker); + this.tagMap.put(s, nbtbase); + } +@@ -396,6 +396,7 @@ + + private static byte readType(DataInput input, NBTSizeTracker sizeTracker) throws IOException + { ++ sizeTracker.read(8); + return input.readByte(); + } + +@@ -406,6 +407,7 @@ + + static NBTBase readNBT(byte id, String key, DataInput input, int depth, NBTSizeTracker sizeTracker) + { ++ sizeTracker.read(32); //Forge: 4 extra bytes for the object allocation. + NBTBase nbtbase = NBTBase.createNewByType(id); + + try diff --git a/patches.mcp/minecraft/net/minecraft/nbt/NBTTagIntArray.java.patch b/patches.mcp/minecraft/net/minecraft/nbt/NBTTagIntArray.java.patch new file mode 100644 index 000000000..4248de8b0 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/nbt/NBTTagIntArray.java.patch @@ -0,0 +1,10 @@ +--- ../src-base/minecraft/net/minecraft/nbt/NBTTagIntArray.java ++++ ../src-work/minecraft/net/minecraft/nbt/NBTTagIntArray.java +@@ -29,6 +29,7 @@ + + void read(DataInput input, int depth, NBTSizeTracker sizeTracker) throws IOException + { ++ sizeTracker.read(32); //Forge: Count the length as well + int j = input.readInt(); + sizeTracker.read((long)(32 * j)); + this.intArray = new int[j]; diff --git a/patches.mcp/minecraft/net/minecraft/nbt/NBTTagList.java.patch b/patches.mcp/minecraft/net/minecraft/nbt/NBTTagList.java.patch new file mode 100644 index 000000000..b3272419a --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/nbt/NBTTagList.java.patch @@ -0,0 +1,16 @@ +--- ../src-base/minecraft/net/minecraft/nbt/NBTTagList.java ++++ ../src-work/minecraft/net/minecraft/nbt/NBTTagList.java +@@ -46,11 +46,13 @@ + { + sizeTracker.read(8L); + this.tagType = input.readByte(); ++ sizeTracker.read(32); //Forge: Count the length as well + int j = input.readInt(); + this.tagList = Lists.newArrayList(); + + for (int k = 0; k < j; ++k) + { ++ sizeTracker.read(32); //Forge: 4 extra bytes for the object allocation. + NBTBase nbtbase = NBTBase.createNewByType(this.tagType); + nbtbase.read(input, depth + 1, sizeTracker); + this.tagList.add(nbtbase); diff --git a/patches.mcp/minecraft/net/minecraft/nbt/NBTTagString.java.patch b/patches.mcp/minecraft/net/minecraft/nbt/NBTTagString.java.patch new file mode 100644 index 000000000..491b667f2 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/nbt/NBTTagString.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/nbt/NBTTagString.java ++++ ../src-work/minecraft/net/minecraft/nbt/NBTTagString.java +@@ -32,7 +32,7 @@ + void read(DataInput input, int depth, NBTSizeTracker sizeTracker) throws IOException + { + this.data = input.readUTF(); +- sizeTracker.read((long)(16 * this.data.length())); ++ NBTSizeTracker.readUTF(sizeTracker, data); // Forge: Correctly read String length including header. + } + + public byte getId() diff --git a/patches.mcp/minecraft/net/minecraft/network/NetHandlerPlayServer.java.patch b/patches.mcp/minecraft/net/minecraft/network/NetHandlerPlayServer.java.patch new file mode 100644 index 000000000..744329a52 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/network/NetHandlerPlayServer.java.patch @@ -0,0 +1,166 @@ +--- ../src-base/minecraft/net/minecraft/network/NetHandlerPlayServer.java ++++ ../src-work/minecraft/net/minecraft/network/NetHandlerPlayServer.java +@@ -93,6 +93,14 @@ + import org.apache.logging.log4j.LogManager; + import org.apache.logging.log4j.Logger; + ++import net.minecraftforge.common.ForgeHooks; ++import net.minecraftforge.common.MinecraftForge; ++import net.minecraftforge.fml.common.eventhandler.Event; ++import net.minecraftforge.event.ForgeEventFactory; ++import net.minecraftforge.event.ServerChatEvent; ++import net.minecraftforge.event.entity.player.PlayerInteractEvent; ++import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action; ++ + public class NetHandlerPlayServer implements INetHandlerPlayServer, IUpdatePlayerListBox + { + private static final Logger logger = LogManager.getLogger(); +@@ -246,6 +254,8 @@ + this.playerEntity.ridingEntity.updateRiderPosition(); + } + ++ if (!this.hasMoved) return; //Fixes teleportation kick while riding entities ++ + this.serverController.getConfigurationManager().serverUpdateMountedMovingPlayer(this.playerEntity); + + if (this.playerEntity.ridingEntity != null) +@@ -324,9 +334,10 @@ + double d11 = d8 - this.playerEntity.posX; + double d12 = d9 - this.playerEntity.posY; + double d13 = d10 - this.playerEntity.posZ; +- double d14 = Math.min(Math.abs(d11), Math.abs(this.playerEntity.motionX)); +- double d15 = Math.min(Math.abs(d12), Math.abs(this.playerEntity.motionY)); +- double d16 = Math.min(Math.abs(d13), Math.abs(this.playerEntity.motionZ)); ++ //BUGFIX: min -> max, grabs the highest distance ++ double d14 = Math.max(Math.abs(d11), Math.abs(this.playerEntity.motionX)); ++ double d15 = Math.max(Math.abs(d12), Math.abs(this.playerEntity.motionY)); ++ double d16 = Math.max(Math.abs(d13), Math.abs(this.playerEntity.motionZ)); + double d17 = d14 * d14 + d15 * d15 + d16 * d16; + + if (d17 > 100.0D && (!this.serverController.isSinglePlayer() || !this.serverController.getServerOwner().equals(this.playerEntity.getName()))) +@@ -344,6 +355,8 @@ + this.playerEntity.jump(); + } + ++ if (!this.hasMoved) return; //Fixes "Moved Too Fast" kick when being teleported while moving ++ + this.playerEntity.moveEntity(d11, d12, d13); + this.playerEntity.onGround = packetIn.isOnGround(); + double d18 = d12; +@@ -365,6 +378,8 @@ + logger.warn(this.playerEntity.getName() + " moved wrongly!"); + } + ++ if (!this.hasMoved) return; //Fixes "Moved Too Fast" kick when being teleported while moving ++ + this.playerEntity.setPositionAndRotation(d8, d9, d10, f1, f2); + this.playerEntity.addMovementStat(this.playerEntity.posX - d0, this.playerEntity.posY - d1, this.playerEntity.posZ - d2); + +@@ -372,7 +387,7 @@ + { + boolean flag2 = worldserver.getCollidingBoundingBoxes(this.playerEntity, this.playerEntity.getEntityBoundingBox().contract((double)f3, (double)f3, (double)f3)).isEmpty(); + +- if (flag && (flag1 || !flag2) && !this.playerEntity.isPlayerSleeping()) ++ if (flag && (flag1 || !flag2) && !this.playerEntity.isPlayerSleeping() && !this.playerEntity.noClip) + { + this.setPlayerLocation(this.lastPosX, this.lastPosY, this.lastPosZ, f1, f2); + return; +@@ -400,6 +415,8 @@ + this.floatingTickCount = 0; + } + ++ if (!this.hasMoved) return; //Fixes "Moved Too Fast" kick when being teleported while moving ++ + this.playerEntity.onGround = packetIn.isOnGround(); + this.serverController.getConfigurationManager().serverUpdateMountedMovingPlayer(this.playerEntity); + this.playerEntity.handleFalling(this.playerEntity.posY - d7, packetIn.isOnGround()); +@@ -489,7 +506,10 @@ + double d2 = this.playerEntity.posZ - ((double)blockpos.getZ() + 0.5D); + double d3 = d0 * d0 + d1 * d1 + d2 * d2; + +- if (d3 > 36.0D) ++ double dist = playerEntity.theItemInWorldManager.getBlockReachDistance() + 1; ++ dist *= dist; ++ ++ if (d3 > dist) + { + return; + } +@@ -540,6 +560,7 @@ + WorldServer worldserver = this.serverController.worldServerForDimension(this.playerEntity.dimension); + ItemStack itemstack = this.playerEntity.inventory.getCurrentItem(); + boolean flag = false; ++ boolean placeResult = true; + BlockPos blockpos = packetIn.getPosition(); + EnumFacing enumfacing = EnumFacing.getFront(packetIn.getPlacedBlockDirection()); + this.playerEntity.markPlayerActive(); +@@ -551,7 +572,11 @@ + return; + } + ++ PlayerInteractEvent event = ForgeEventFactory.onPlayerInteract(playerEntity, PlayerInteractEvent.Action.RIGHT_CLICK_AIR, worldserver, new BlockPos(0, 0, 0), null); ++ if (event.useItem != Event.Result.DENY) ++ { + this.playerEntity.theItemInWorldManager.tryUseItem(this.playerEntity, worldserver, itemstack); ++ } + } + else if (blockpos.getY() >= this.serverController.getBuildLimit() - 1 && (enumfacing == EnumFacing.UP || blockpos.getY() >= this.serverController.getBuildLimit())) + { +@@ -562,9 +587,12 @@ + } + else + { +- if (this.hasMoved && this.playerEntity.getDistanceSq((double)blockpos.getX() + 0.5D, (double)blockpos.getY() + 0.5D, (double)blockpos.getZ() + 0.5D) < 64.0D && !this.serverController.isBlockProtected(worldserver, blockpos, this.playerEntity) && worldserver.getWorldBorder().contains(blockpos)) ++ double dist = playerEntity.theItemInWorldManager.getBlockReachDistance() + 1; ++ dist *= dist; ++ if (this.hasMoved && this.playerEntity.getDistanceSq((double)blockpos.getX() + 0.5D, (double)blockpos.getY() + 0.5D, (double)blockpos.getZ() + 0.5D) < dist && !this.serverController.isBlockProtected(worldserver, blockpos, this.playerEntity) && worldserver.getWorldBorder().contains(blockpos)) + { +- this.playerEntity.theItemInWorldManager.activateBlockOrUseItem(this.playerEntity, worldserver, itemstack, blockpos, enumfacing, packetIn.getPlacedBlockOffsetX(), packetIn.getPlacedBlockOffsetY(), packetIn.getPlacedBlockOffsetZ()); ++ // record block place result so we can update client itemstack size if place event was cancelled. ++ placeResult = this.playerEntity.theItemInWorldManager.activateBlockOrUseItem(this.playerEntity, worldserver, itemstack, blockpos, enumfacing, packetIn.getPlacedBlockOffsetX(), packetIn.getPlacedBlockOffsetY(), packetIn.getPlacedBlockOffsetZ()); + } + + flag = true; +@@ -592,7 +620,7 @@ + this.playerEntity.openContainer.detectAndSendChanges(); + this.playerEntity.isChangingQuantityOnly = false; + +- if (!ItemStack.areItemStacksEqual(this.playerEntity.inventory.getCurrentItem(), packetIn.getStack())) ++ if (!ItemStack.areItemStacksEqual(this.playerEntity.inventory.getCurrentItem(), packetIn.getStack()) || !placeResult) // force client itemstack update if place event was cancelled + { + this.sendPacket(new S2FPacketSetSlot(this.playerEntity.openContainer.windowId, slot.slotNumber, this.playerEntity.inventory.getCurrentItem())); + } +@@ -764,8 +792,10 @@ + } + else + { +- ChatComponentTranslation chatcomponenttranslation1 = new ChatComponentTranslation("chat.type.text", new Object[] {this.playerEntity.getDisplayName(), s}); +- this.serverController.getConfigurationManager().sendChatMsgImpl(chatcomponenttranslation1, false); ++ ChatComponentTranslation chatcomponenttranslation1 = new ChatComponentTranslation("chat.type.text", this.playerEntity.getDisplayName(), ForgeHooks.newChatWithLinks(s)); ++ IChatComponent chat = ForgeHooks.onServerChatEvent(this, s, chatcomponenttranslation1); ++ if (chat == null) return; ++ this.serverController.getConfigurationManager().sendChatMsgImpl(chat, false); + } + + this.chatSpamThresholdCount += 20; +@@ -907,7 +937,7 @@ + return; + } + +- this.playerEntity = this.serverController.getConfigurationManager().recreatePlayerEntity(this.playerEntity, 0, false); ++ this.playerEntity = this.serverController.getConfigurationManager().recreatePlayerEntity(this.playerEntity, playerEntity.dimension, false); + } + + break; +@@ -1080,7 +1110,10 @@ + return; + } + +- System.arraycopy(packetIn.getLines(), 0, tileentitysign.signText, 0, 4); ++ IChatComponent[] lines = packetIn.getLines(); //Forge: Prevent client from directly sending commands ++ for (int x = 0; x < tileentitysign.signText.length && x < lines.length; x++) ++ tileentitysign.signText[x] = new ChatComponentText(net.minecraft.util.EnumChatFormatting.getTextWithoutFormattingCodes(lines[x].getUnformattedText())); ++ + tileentitysign.markDirty(); + worldserver.markBlockForUpdate(blockpos); + } diff --git a/patches/minecraft/net/minecraft/network/NetworkManager.java.patch b/patches.mcp/minecraft/net/minecraft/network/NetworkManager.java.patch similarity index 58% rename from patches/minecraft/net/minecraft/network/NetworkManager.java.patch rename to patches.mcp/minecraft/net/minecraft/network/NetworkManager.java.patch index b37433cda..d59871ee0 100644 --- a/patches/minecraft/net/minecraft/network/NetworkManager.java.patch +++ b/patches.mcp/minecraft/net/minecraft/network/NetworkManager.java.patch @@ -1,43 +1,43 @@ --- ../src-base/minecraft/net/minecraft/network/NetworkManager.java +++ ../src-work/minecraft/net/minecraft/network/NetworkManager.java @@ -88,6 +88,11 @@ - this.field_179294_g = p_i46004_1_; + this.direction = packetDirection; } + public EnumPacketDirection getDirection() + { -+ return this.field_179294_g; ++ return this.direction; + } + public void channelActive(ChannelHandlerContext p_channelActive_1_) throws Exception { super.channelActive(p_channelActive_1_); @@ -175,7 +180,7 @@ - final EnumConnectionState enumconnectionstate = EnumConnectionState.func_150752_a(p_150732_1_); - final EnumConnectionState enumconnectionstate1 = (EnumConnectionState)this.field_150746_k.attr(field_150739_c).get(); + final EnumConnectionState enumconnectionstate = EnumConnectionState.getFromPacket(inPacket); + final EnumConnectionState enumconnectionstate1 = (EnumConnectionState)this.channel.attr(attrKeyConnectionState).get(); - if (enumconnectionstate1 != enumconnectionstate) -+ if (enumconnectionstate1 != enumconnectionstate && !( p_150732_1_ instanceof net.minecraftforge.fml.common.network.internal.FMLProxyPacket)) ++ if (enumconnectionstate1 != enumconnectionstate && !( inPacket instanceof net.minecraftforge.fml.common.network.internal.FMLProxyPacket)) { - field_150735_g.debug("Disabled auto read"); - this.field_150746_k.config().setAutoRead(false); + logger.debug("Disabled auto read"); + this.channel.config().setAutoRead(false); @@ -183,7 +188,7 @@ - if (this.field_150746_k.eventLoop().inEventLoop()) + if (this.channel.eventLoop().inEventLoop()) { - if (enumconnectionstate != enumconnectionstate1) -+ if (enumconnectionstate != enumconnectionstate1 && !( p_150732_1_ instanceof net.minecraftforge.fml.common.network.internal.FMLProxyPacket)) ++ if (enumconnectionstate != enumconnectionstate1 && !( inPacket instanceof net.minecraftforge.fml.common.network.internal.FMLProxyPacket)) { - this.func_150723_a(enumconnectionstate); + this.setConnectionState(enumconnectionstate); } @@ -204,7 +209,7 @@ private static final String __OBFID = "CL_00001243"; public void run() { - if (enumconnectionstate != enumconnectionstate1) -+ if (enumconnectionstate != enumconnectionstate1 && !( p_150732_1_ instanceof net.minecraftforge.fml.common.network.internal.FMLProxyPacket)) ++ if (enumconnectionstate != enumconnectionstate1 && !( inPacket instanceof net.minecraftforge.fml.common.network.internal.FMLProxyPacket)) { - NetworkManager.this.func_150723_a(enumconnectionstate); + NetworkManager.this.setConnectionState(enumconnectionstate); } @@ -409,6 +414,11 @@ this.channelRead0(p_channelRead0_1_, (Packet)p_channelRead0_2_); @@ -45,9 +45,9 @@ + public Channel channel() + { -+ return field_150746_k; ++ return channel; + } + static class InboundHandlerTuplePacketListener { - private final Packet field_150774_a; + private final Packet packet; diff --git a/patches/minecraft/net/minecraft/network/NetworkSystem.java.patch b/patches.mcp/minecraft/net/minecraft/network/NetworkSystem.java.patch similarity index 94% rename from patches/minecraft/net/minecraft/network/NetworkSystem.java.patch rename to patches.mcp/minecraft/net/minecraft/network/NetworkSystem.java.patch index 9452bc6bc..71fdc4309 100644 --- a/patches/minecraft/net/minecraft/network/NetworkSystem.java.patch +++ b/patches.mcp/minecraft/net/minecraft/network/NetworkSystem.java.patch @@ -7,5 +7,5 @@ - p_initChannel_1_.pipeline().addLast("timeout", new ReadTimeoutHandler(30)).addLast("legacy_query", new PingResponseHandler(NetworkSystem.this)).addLast("splitter", new MessageDeserializer2()).addLast("decoder", new MessageDeserializer(EnumPacketDirection.SERVERBOUND)).addLast("prepender", new MessageSerializer2()).addLast("encoder", new MessageSerializer(EnumPacketDirection.CLIENTBOUND)); + p_initChannel_1_.pipeline().addLast("timeout", new ReadTimeoutHandler(net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.READ_TIMEOUT)).addLast("legacy_query", new PingResponseHandler(NetworkSystem.this)).addLast("splitter", new MessageDeserializer2()).addLast("decoder", new MessageDeserializer(EnumPacketDirection.SERVERBOUND)).addLast("prepender", new MessageSerializer2()).addLast("encoder", new MessageSerializer(EnumPacketDirection.CLIENTBOUND)); NetworkManager networkmanager = new NetworkManager(EnumPacketDirection.SERVERBOUND); - NetworkSystem.this.field_151272_f.add(networkmanager); + NetworkSystem.this.networkManagers.add(networkmanager); p_initChannel_1_.pipeline().addLast("packet_handler", networkmanager); diff --git a/patches/minecraft/net/minecraft/network/ServerStatusResponse.java.patch b/patches.mcp/minecraft/net/minecraft/network/ServerStatusResponse.java.patch similarity index 74% rename from patches/minecraft/net/minecraft/network/ServerStatusResponse.java.patch rename to patches.mcp/minecraft/net/minecraft/network/ServerStatusResponse.java.patch index 2407b09f5..b7c9b8cab 100644 --- a/patches/minecraft/net/minecraft/network/ServerStatusResponse.java.patch +++ b/patches.mcp/minecraft/net/minecraft/network/ServerStatusResponse.java.patch @@ -1,37 +1,37 @@ --- ../src-base/minecraft/net/minecraft/network/ServerStatusResponse.java +++ ../src-work/minecraft/net/minecraft/network/ServerStatusResponse.java @@ -29,6 +29,7 @@ - public void func_151315_a(IChatComponent p_151315_1_) + public void setServerDescription(IChatComponent motd) { - this.field_151326_a = p_151315_1_; + this.serverMotd = motd; + invalidateJson(); } - public ServerStatusResponse.PlayerCountData func_151318_b() + public ServerStatusResponse.PlayerCountData getPlayerCountData() @@ -39,6 +40,7 @@ - public void func_151319_a(ServerStatusResponse.PlayerCountData p_151319_1_) + public void setPlayerCountData(ServerStatusResponse.PlayerCountData countData) { - this.field_151324_b = p_151319_1_; + this.playerCount = countData; + invalidateJson(); } - public ServerStatusResponse.MinecraftProtocolVersionIdentifier func_151322_c() + public ServerStatusResponse.MinecraftProtocolVersionIdentifier getProtocolVersionInfo() @@ -49,11 +51,13 @@ - public void func_151321_a(ServerStatusResponse.MinecraftProtocolVersionIdentifier p_151321_1_) + public void setProtocolVersionInfo(ServerStatusResponse.MinecraftProtocolVersionIdentifier protocolVersionData) { - this.field_151325_c = p_151321_1_; + this.protocolVersion = protocolVersionData; + invalidateJson(); } - public void func_151320_a(String p_151320_1_) + public void setFavicon(String faviconBlob) { - this.field_151323_d = p_151320_1_; + this.favicon = faviconBlob; + invalidateJson(); } - public String func_151316_d() + public String getFavicon() @@ -233,6 +237,7 @@ - serverstatusresponse.func_151320_a(JsonUtils.func_151200_h(jsonobject, "favicon")); + serverstatusresponse.setFavicon(JsonUtils.getJsonObjectStringFieldValue(jsonobject, "favicon")); } + net.minecraftforge.fml.client.FMLClientHandler.instance().captureAdditionalData(serverstatusresponse, jsonobject); @@ -39,7 +39,7 @@ } @@ -260,6 +265,7 @@ - jsonobject.addProperty("favicon", p_serialize_1_.func_151316_d()); + jsonobject.addProperty("favicon", p_serialize_1_.getFavicon()); } + net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.enhanceStatusQuery(jsonobject); @@ -73,7 +73,7 @@ + ret = this.json; + if (ret == null) + { -+ ret = net.minecraft.network.status.server.S00PacketServerInfo.field_149297_a.toJson(this); ++ ret = net.minecraft.network.status.server.S00PacketServerInfo.GSON.toJson(this); + this.json = ret; + } + mutex.release(); diff --git a/patches.mcp/minecraft/net/minecraft/network/handshake/client/C00Handshake.java.patch b/patches.mcp/minecraft/net/minecraft/network/handshake/client/C00Handshake.java.patch new file mode 100644 index 000000000..d52c5fb63 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/network/handshake/client/C00Handshake.java.patch @@ -0,0 +1,48 @@ +--- ../src-base/minecraft/net/minecraft/network/handshake/client/C00Handshake.java ++++ ../src-work/minecraft/net/minecraft/network/handshake/client/C00Handshake.java +@@ -16,6 +16,7 @@ + private int port; + private EnumConnectionState requestedState; + private static final String __OBFID = "CL_00001372"; ++ private boolean hasFMLMarker = false; + + public C00Handshake() {} + +@@ -28,18 +29,26 @@ + this.requestedState = requestedState; + } + ++ public C00Handshake(int protocol, String address, int port, EnumConnectionState state, boolean addFMLMarker) ++ { ++ this(protocol, address, port, state); ++ this.hasFMLMarker = addFMLMarker; ++ } ++ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.protocolVersion = buf.readVarIntFromBuffer(); + this.ip = buf.readStringFromBuffer(255); + this.port = buf.readUnsignedShort(); + this.requestedState = EnumConnectionState.getById(buf.readVarIntFromBuffer()); ++ this.hasFMLMarker = this.ip.contains("\0FML\0"); ++ this.ip = this.ip.split("\0")[0]; + } + + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarIntToBuffer(this.protocolVersion); +- buf.writeString(this.ip); ++ buf.writeString(this.ip + "\0FML\0"); + buf.writeShort(this.port); + buf.writeVarIntToBuffer(this.requestedState.getId()); + } +@@ -63,4 +72,9 @@ + { + this.handle((INetHandlerHandshakeServer)handler); + } ++ ++ public boolean hasFMLMarker() ++ { ++ return this.hasFMLMarker; ++ } + } diff --git a/patches/minecraft/net/minecraft/network/play/client/C12PacketUpdateSign.java.patch b/patches.mcp/minecraft/net/minecraft/network/play/client/C12PacketUpdateSign.java.patch similarity index 59% rename from patches/minecraft/net/minecraft/network/play/client/C12PacketUpdateSign.java.patch rename to patches.mcp/minecraft/net/minecraft/network/play/client/C12PacketUpdateSign.java.patch index a10efa861..a0a015760 100644 --- a/patches/minecraft/net/minecraft/network/play/client/C12PacketUpdateSign.java.patch +++ b/patches.mcp/minecraft/net/minecraft/network/play/client/C12PacketUpdateSign.java.patch @@ -4,8 +4,8 @@ for (int i = 0; i < 4; ++i) { -- this.field_149590_d[i] = p_148837_1_.func_179258_d(); -+ this.field_149590_d[i] = IChatComponent.Serializer.func_150699_a(p_148837_1_.func_150789_c(384)); +- this.lines[i] = buf.readChatComponent(); ++ this.lines[i] = IChatComponent.Serializer.jsonToComponent(buf.readStringFromBuffer(384)); } } diff --git a/patches.mcp/minecraft/net/minecraft/network/play/client/C17PacketCustomPayload.java.patch b/patches.mcp/minecraft/net/minecraft/network/play/client/C17PacketCustomPayload.java.patch new file mode 100644 index 000000000..331306c78 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/network/play/client/C17PacketCustomPayload.java.patch @@ -0,0 +1,14 @@ +--- ../src-base/minecraft/net/minecraft/network/play/client/C17PacketCustomPayload.java ++++ ../src-work/minecraft/net/minecraft/network/play/client/C17PacketCustomPayload.java +@@ -47,7 +47,11 @@ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeString(this.channel); ++ synchronized(this.data) { //This may be access multiple times, from multiple threads, lets be safe. ++ this.data.markReaderIndex(); + buf.writeBytes((ByteBuf)this.data); ++ this.data.resetReaderIndex(); ++ } + } + + public void processPacket(INetHandlerPlayServer handler) diff --git a/patches.mcp/minecraft/net/minecraft/network/play/server/S3FPacketCustomPayload.java.patch b/patches.mcp/minecraft/net/minecraft/network/play/server/S3FPacketCustomPayload.java.patch new file mode 100644 index 000000000..af5d3f67d --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/network/play/server/S3FPacketCustomPayload.java.patch @@ -0,0 +1,14 @@ +--- ../src-base/minecraft/net/minecraft/network/play/server/S3FPacketCustomPayload.java ++++ ../src-work/minecraft/net/minecraft/network/play/server/S3FPacketCustomPayload.java +@@ -46,7 +46,11 @@ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeString(this.channel); ++ synchronized(this.data) { //This may be access multiple times, from multiple threads, lets be safe. ++ this.data.markReaderIndex(); + buf.writeBytes((ByteBuf)this.data); ++ this.data.resetReaderIndex(); ++ } + } + + public void process(INetHandlerPlayClient p_180734_1_) diff --git a/patches.mcp/minecraft/net/minecraft/network/status/server/S00PacketServerInfo.java.patch b/patches.mcp/minecraft/net/minecraft/network/status/server/S00PacketServerInfo.java.patch new file mode 100644 index 000000000..dcb18e144 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/network/status/server/S00PacketServerInfo.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/network/status/server/S00PacketServerInfo.java ++++ ../src-work/minecraft/net/minecraft/network/status/server/S00PacketServerInfo.java +@@ -34,7 +34,7 @@ + + public void writePacketData(PacketBuffer buf) throws IOException + { +- buf.writeString(GSON.toJson(this.response)); ++ buf.writeString(this.response.getJson()); + } + + public void processPacket(INetHandlerStatusClient handler) diff --git a/patches/minecraft/net/minecraft/potion/Potion.java.patch b/patches.mcp/minecraft/net/minecraft/potion/Potion.java.patch similarity index 93% rename from patches/minecraft/net/minecraft/potion/Potion.java.patch rename to patches.mcp/minecraft/net/minecraft/potion/Potion.java.patch index 5892ca8c8..915b67091 100644 --- a/patches/minecraft/net/minecraft/potion/Potion.java.patch +++ b/patches.mcp/minecraft/net/minecraft/potion/Potion.java.patch @@ -2,7 +2,7 @@ +++ ../src-work/minecraft/net/minecraft/potion/Potion.java @@ -330,4 +330,27 @@ { - return p_111183_2_.func_111164_d() * (double)(p_111183_1_ + 1); + return p_111183_2_.getAmount() * (double)(p_111183_1_ + 1); } + + /* ======================================== FORGE START =====================================*/ diff --git a/patches/minecraft/net/minecraft/potion/PotionEffect.java.patch b/patches.mcp/minecraft/net/minecraft/potion/PotionEffect.java.patch similarity index 70% rename from patches/minecraft/net/minecraft/potion/PotionEffect.java.patch rename to patches.mcp/minecraft/net/minecraft/potion/PotionEffect.java.patch index e23ad06dc..ea0070e75 100644 --- a/patches/minecraft/net/minecraft/potion/PotionEffect.java.patch +++ b/patches.mcp/minecraft/net/minecraft/potion/PotionEffect.java.patch @@ -1,43 +1,43 @@ --- ../src-base/minecraft/net/minecraft/potion/PotionEffect.java +++ ../src-work/minecraft/net/minecraft/potion/PotionEffect.java @@ -19,6 +19,8 @@ - private boolean field_100013_f; - private boolean field_180156_h; + private boolean isPotionDurationMax; + private boolean showParticles; private static final String __OBFID = "CL_00001529"; + /** List of ItemStack that can cure the potion effect **/ + private java.util.List curativeItems; - public PotionEffect(int p_i1574_1_, int p_i1574_2_) + public PotionEffect(int id, int effectDuration) { @@ -37,6 +39,8 @@ - this.field_76461_c = p_i45896_3_; - this.field_82724_e = p_i45896_4_; - this.field_180156_h = p_i45896_5_; + this.amplifier = effectAmplifier; + this.isAmbient = ambient; + this.showParticles = showParticles; + this.curativeItems = new java.util.ArrayList(); -+ this.curativeItems.add(new net.minecraft.item.ItemStack(net.minecraft.init.Items.field_151117_aB)); ++ this.curativeItems.add(new net.minecraft.item.ItemStack(net.minecraft.init.Items.milk_bucket)); } - public PotionEffect(PotionEffect p_i1577_1_) + public PotionEffect(PotionEffect other) @@ -46,6 +50,7 @@ - this.field_76461_c = p_i1577_1_.field_76461_c; - this.field_82724_e = p_i1577_1_.field_82724_e; - this.field_180156_h = p_i1577_1_.field_180156_h; -+ this.curativeItems = p_i1577_1_.curativeItems; + this.amplifier = other.amplifier; + this.isAmbient = other.isAmbient; + this.showParticles = other.showParticles; ++ this.curativeItems = other.curativeItems; } - public void func_76452_a(PotionEffect p_76452_1_) + public void combine(PotionEffect other) @@ -191,7 +196,7 @@ - public static PotionEffect func_82722_b(NBTTagCompound p_82722_0_) + public static PotionEffect readCustomPotionEffectFromNBT(NBTTagCompound nbt) { -- byte b0 = p_82722_0_.func_74771_c("Id"); -+ int b0 = p_82722_0_.func_74771_c("Id") & 0xff; +- byte b0 = nbt.getByte("Id"); ++ int b0 = nbt.getByte("Id") & 0xff; - if (b0 >= 0 && b0 < Potion.field_76425_a.length && Potion.field_76425_a[b0] != null) + if (b0 >= 0 && b0 < Potion.potionTypes.length && Potion.potionTypes[b0] != null) { @@ -224,4 +229,62 @@ { - return this.field_100013_f; + return this.isPotionDurationMax; } + + /* ======================================== FORGE START =====================================*/ @@ -60,7 +60,7 @@ + boolean found = false; + for (net.minecraft.item.ItemStack curativeItem : this.curativeItems) + { -+ if (curativeItem.func_77969_a(stack)) ++ if (curativeItem.isItemEqual(stack)) + { + found = true; + } @@ -87,7 +87,7 @@ + boolean found = false; + for (net.minecraft.item.ItemStack curativeItem : this.curativeItems) + { -+ if (curativeItem.func_77969_a(stack)) ++ if (curativeItem.isItemEqual(stack)) + { + found = true; + } diff --git a/patches/minecraft/net/minecraft/realms/RealmsConnect.java.patch b/patches.mcp/minecraft/net/minecraft/realms/RealmsConnect.java.patch similarity index 67% rename from patches/minecraft/net/minecraft/realms/RealmsConnect.java.patch rename to patches.mcp/minecraft/net/minecraft/realms/RealmsConnect.java.patch index 0e3324da7..e6eb9ca74 100644 --- a/patches/minecraft/net/minecraft/realms/RealmsConnect.java.patch +++ b/patches.mcp/minecraft/net/minecraft/realms/RealmsConnect.java.patch @@ -12,8 +12,8 @@ return; } -- RealmsConnect.this.connection.func_179290_a(new C00Handshake(47, p_connect_1_, p_connect_2_, EnumConnectionState.LOGIN)); -+ RealmsConnect.this.connection.func_179290_a(new C00Handshake(47, p_connect_1_, p_connect_2_, EnumConnectionState.LOGIN, true)); +- RealmsConnect.this.connection.sendPacket(new C00Handshake(47, p_connect_1_, p_connect_2_, EnumConnectionState.LOGIN)); ++ RealmsConnect.this.connection.sendPacket(new C00Handshake(47, p_connect_1_, p_connect_2_, EnumConnectionState.LOGIN, true)); if (RealmsConnect.this.aborted) { diff --git a/patches.mcp/minecraft/net/minecraft/server/MinecraftServer.java.patch b/patches.mcp/minecraft/net/minecraft/server/MinecraftServer.java.patch new file mode 100644 index 000000000..c9905ed3a --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/server/MinecraftServer.java.patch @@ -0,0 +1,306 @@ +--- ../src-base/minecraft/net/minecraft/server/MinecraftServer.java ++++ ../src-work/minecraft/net/minecraft/server/MinecraftServer.java +@@ -99,7 +99,7 @@ + @SideOnly(Side.SERVER) + private String hostname; + private int serverPort = -1; +- public WorldServer[] worldServers; ++ public WorldServer[] worldServers = new WorldServer[0]; + private ServerConfigurationManager serverConfigManager; + private boolean serverRunning = true; + private boolean serverStopped; +@@ -116,7 +116,8 @@ + private int buildLimit; + private int maxPlayerIdleMinutes = 0; + public final long[] tickTimeArray = new long[100]; +- public long[][] timeOfLastDimensionTick; ++ //public long[][] timeOfLastDimensionTick; ++ public java.util.Hashtable worldTickTimes = new java.util.Hashtable(); + private KeyPair serverKeyPair; + private String serverOwner; + private String folderName; +@@ -222,8 +223,6 @@ + { + this.convertMapIfNeeded(p_71247_1_); + this.setUserMessage("menu.loadingLevel"); +- this.worldServers = new WorldServer[3]; +- this.timeOfLastDimensionTick = new long[this.worldServers.length][100]; + ISaveHandler isavehandler = this.anvilConverterForAnvilFile.getSaveLoader(p_71247_1_, true); + this.setResourcePackFromWorld(this.getFolderName(), isavehandler); + WorldInfo worldinfo = isavehandler.loadWorldInfo(); +@@ -254,47 +253,21 @@ + worldsettings = new WorldSettings(worldinfo); + } + +- for (int j = 0; j < this.worldServers.length; ++j) ++ WorldServer overWorld = (WorldServer)(isDemo() ? new DemoWorldServer(this, isavehandler, worldinfo, 0, theProfiler).init() : new WorldServer(this, isavehandler, worldinfo, 0, theProfiler).init()); ++ overWorld.initialize(worldsettings); ++ for (int dim : net.minecraftforge.common.DimensionManager.getStaticDimensionIDs()) + { +- byte b0 = 0; ++ WorldServer world = (dim == 0 ? overWorld : (WorldServer)new WorldServerMulti(this, isavehandler, dim, overWorld, theProfiler).init()); ++ world.addWorldAccess(new WorldManager(this, world)); + +- if (j == 1) +- { +- b0 = -1; +- } +- +- if (j == 2) +- { +- b0 = 1; +- } +- +- if (j == 0) +- { +- if (this.isDemo()) +- { +- this.worldServers[j] = (WorldServer)(new DemoWorldServer(this, isavehandler, worldinfo, b0, this.theProfiler)).init(); +- } +- else +- { +- this.worldServers[j] = (WorldServer)(new WorldServer(this, isavehandler, worldinfo, b0, this.theProfiler)).init(); +- } +- +- this.worldServers[j].initialize(worldsettings); +- } +- else +- { +- this.worldServers[j] = (WorldServer)(new WorldServerMulti(this, isavehandler, b0, this.worldServers[0], this.theProfiler)).init(); +- } +- +- this.worldServers[j].addWorldAccess(new WorldManager(this, this.worldServers[j])); +- + if (!this.isSinglePlayer()) + { +- this.worldServers[j].getWorldInfo().setGameType(this.getGameType()); ++ world.getWorldInfo().setGameType(this.getGameType()); + } ++ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.WorldEvent.Load(world)); + } + +- this.serverConfigManager.setPlayerManager(this.worldServers); ++ this.serverConfigManager.setPlayerManager(new WorldServer[]{ overWorld }); + this.setDifficultyForAllWorlds(this.getDifficulty()); + this.initialWorldChunkLoad(); + } +@@ -309,7 +282,7 @@ + this.setUserMessage("menu.generatingTerrain"); + byte b0 = 0; + logger.info("Preparing start region for level " + b0); +- WorldServer worldserver = this.worldServers[b0]; ++ WorldServer worldserver = net.minecraftforge.common.DimensionManager.getWorld(b0); + BlockPos blockpos = worldserver.getSpawnPoint(); + long j = getCurrentTimeMillis(); + +@@ -371,6 +344,7 @@ + if (!this.worldIsBeingDeleted) + { + WorldServer[] aworldserver = this.worldServers; ++ if (aworldserver == null) return; //Forge: Just in case, NPE protection as it has been encountered. + int i = aworldserver.length; + + for (int j = 0; j < i; ++j) +@@ -399,7 +373,7 @@ + + public void stopServer() + { +- if (!this.worldIsBeingDeleted) ++ if (!this.worldIsBeingDeleted && net.minecraftforge.fml.common.Loader.instance().hasReachedState(net.minecraftforge.fml.common.LoaderState.SERVER_STARTED) && !serverStopped) // make sure the save is valid and we don't save twice + { + logger.info("Stopping server"); + +@@ -423,8 +397,15 @@ + for (int i = 0; i < this.worldServers.length; ++i) + { + WorldServer worldserver = this.worldServers[i]; ++ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.WorldEvent.Unload(worldserver)); + worldserver.flush(); + } ++ ++ WorldServer[] tmp = worldServers; ++ for (WorldServer world : tmp) ++ { ++ net.minecraftforge.common.DimensionManager.setWorld(world.provider.getDimensionId(), null); ++ } + } + + if (this.usageSnooper.isSnooperRunning()) +@@ -456,6 +437,7 @@ + { + if (this.startServer()) + { ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerStarted(); + this.currentTime = getCurrentTimeMillis(); + long i = 0L; + this.statusResponse.setServerDescription(new ChatComponentText(this.motd)); +@@ -500,12 +482,20 @@ + Thread.sleep(Math.max(1L, 50L - i)); + this.serverIsRunning = true; + } ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerStopping(); ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().expectServerStopped(); // has to come before finalTick to avoid race conditions + } + else + { ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().expectServerStopped(); // has to come before finalTick to avoid race conditions + this.finalTick((CrashReport)null); + } + } ++ catch (net.minecraftforge.fml.common.StartupQuery.AbortedException e) ++ { ++ // ignore silently ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().expectServerStopped(); // has to come before finalTick to avoid race conditions ++ } + catch (Throwable throwable1) + { + logger.error("Encountered an unexpected exception", throwable1); +@@ -531,6 +521,7 @@ + logger.error("We were unable to save this crash report to disk."); + } + ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().expectServerStopped(); // has to come before finalTick to avoid race conditions + this.finalTick(crashreport); + } + finally +@@ -546,6 +537,8 @@ + } + finally + { ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerStopped(); ++ this.serverStopped = true; + this.systemExitNow(); + } + } +@@ -591,6 +584,7 @@ + public void tick() + { + long i = System.nanoTime(); ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().onPreServerTick(); + ++this.tickCounter; + + if (this.startProfiling) +@@ -617,6 +611,7 @@ + + Collections.shuffle(Arrays.asList(agameprofile)); + this.statusResponse.getPlayerCountData().setPlayers(agameprofile); ++ this.statusResponse.invalidateJson(); + } + + if (this.tickCounter % 900 == 0) +@@ -644,6 +639,7 @@ + + this.theProfiler.endSection(); + this.theProfiler.endSection(); ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().onPostServerTick(); + } + + public void updateTimeLightAndEntities() +@@ -657,7 +653,7 @@ + { + try + { +- ((FutureTask)this.futureTaskQueue.poll()).run(); ++ net.minecraftforge.fml.common.FMLCommonHandler.callFuture(((FutureTask)this.futureTaskQueue.poll())); + } + catch (Throwable throwable2) + { +@@ -667,15 +663,18 @@ + } + + this.theProfiler.endStartSection("levels"); ++ net.minecraftforge.common.chunkio.ChunkIOExecutor.tick(); + int j; + +- for (j = 0; j < this.worldServers.length; ++j) ++ Integer[] ids = net.minecraftforge.common.DimensionManager.getIDs(this.tickCounter % 200 == 0); ++ for (int x = 0; x < ids.length; x++) + { ++ int id = ids[x]; + long i = System.nanoTime(); + +- if (j == 0 || this.getAllowNether()) ++ if (id == 0 || this.getAllowNether()) + { +- WorldServer worldserver = this.worldServers[j]; ++ WorldServer worldserver = net.minecraftforge.common.DimensionManager.getWorld(id); + this.theProfiler.startSection(worldserver.getWorldInfo().getWorldName()); + + if (this.tickCounter % 20 == 0) +@@ -686,6 +685,7 @@ + } + + this.theProfiler.startSection("tick"); ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().onPreWorldTick(worldserver); + CrashReport crashreport; + + try +@@ -710,6 +710,7 @@ + throw new ReportedException(crashreport); + } + ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().onPostWorldTick(worldserver); + this.theProfiler.endSection(); + this.theProfiler.startSection("tracker"); + worldserver.getEntityTracker().updateTrackedEntities(); +@@ -717,9 +718,11 @@ + this.theProfiler.endSection(); + } + +- this.timeOfLastDimensionTick[j][this.tickCounter % 100] = System.nanoTime() - i; ++ worldTickTimes.get(id)[this.tickCounter % 100] = System.nanoTime() - i; + } + ++ this.theProfiler.endStartSection("dim_unloading"); ++ net.minecraftforge.common.DimensionManager.unloadWorlds(worldTickTimes); + this.theProfiler.endStartSection("connection"); + this.getNetworkSystem().networkTick(); + this.theProfiler.endStartSection("players"); +@@ -741,6 +744,7 @@ + + public void startServerThread() + { ++ net.minecraftforge.fml.common.StartupQuery.reset(); + this.serverThread = new Thread(this, "Server thread"); + this.serverThread.start(); + } +@@ -757,7 +761,13 @@ + + public WorldServer worldServerForDimension(int dimension) + { +- return dimension == -1 ? this.worldServers[1] : (dimension == 1 ? this.worldServers[2] : this.worldServers[0]); ++ WorldServer ret = net.minecraftforge.common.DimensionManager.getWorld(dimension); ++ if (ret == null) ++ { ++ net.minecraftforge.common.DimensionManager.initDimension(dimension); ++ ret = net.minecraftforge.common.DimensionManager.getWorld(dimension); ++ } ++ return ret; + } + + public String getMinecraftVersion() +@@ -787,7 +797,7 @@ + + public String getServerModName() + { +- return "vanilla"; ++ return net.minecraftforge.fml.common.FMLCommonHandler.instance().getModName(); + } + + public CrashReport addServerInfoToCrashReport(CrashReport report) +@@ -1008,6 +1018,7 @@ + + if (worldserver != null) + { ++ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.WorldEvent.Unload(worldserver)); + worldserver.flush(); + } + } +@@ -1590,7 +1601,6 @@ + this.serverPort = port; + } + +- @SideOnly(Side.SERVER) + public boolean isServerStopped() + { + return this.serverStopped; diff --git a/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch b/patches.mcp/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch similarity index 50% rename from patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch rename to patches.mcp/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch index 1af800c17..ea7edb2a8 100644 --- a/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch +++ b/patches.mcp/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch @@ -1,37 +1,37 @@ --- ../src-base/minecraft/net/minecraft/server/dedicated/DedicatedServer.java +++ ../src-work/minecraft/net/minecraft/server/dedicated/DedicatedServer.java @@ -49,6 +49,7 @@ - private boolean field_71338_p; - private WorldSettings.GameType field_71337_q; - private boolean field_71335_s; + private boolean canSpawnStructures; + private WorldSettings.GameType gameType; + private boolean guiIsEnabled; + public static boolean allowPlayerLogins = false; private static final String __OBFID = "CL_00001784"; - public DedicatedServer(File p_i1508_1_) + public DedicatedServer(File workDir) @@ -113,6 +114,8 @@ - field_155771_h.warn("To start the server with more ram, launch it as \"java -Xmx1024M -Xms1024M -jar minecraft_server.jar\""); + logger.warn("To start the server with more ram, launch it as \"java -Xmx1024M -Xms1024M -jar minecraft_server.jar\""); } + net.minecraftforge.fml.common.FMLCommonHandler.instance().onServerStart(this); + - field_155771_h.info("Loading properties"); - this.field_71340_o = new PropertyManager(new File("server.properties")); - this.field_154332_n = new ServerEula(new File("eula.txt")); + logger.info("Loading properties"); + this.settings = new PropertyManager(new File("server.properties")); + this.eula = new ServerEula(new File("eula.txt")); @@ -204,6 +207,7 @@ } else { + net.minecraftforge.fml.common.FMLCommonHandler.instance().onServerStarted(); - this.func_152361_a(new DedicatedPlayerList(this)); + this.setConfigManager(new DedicatedPlayerList(this)); long j = System.nanoTime(); @@ -250,6 +254,7 @@ - this.func_71191_d((this.func_71207_Z() + 8) / 16 * 16); - this.func_71191_d(MathHelper.func_76125_a(this.func_71207_Z(), 64, 256)); - this.field_71340_o.func_73667_a("max-build-height", Integer.valueOf(this.func_71207_Z())); + this.setBuildLimit((this.getBuildLimit() + 8) / 16 * 16); + this.setBuildLimit(MathHelper.clamp_int(this.getBuildLimit(), 64, 256)); + this.settings.setProperty("max-build-height", Integer.valueOf(this.getBuildLimit())); + if (!net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerAboutToStart(this)) return false; - field_155771_h.info("Preparing level \"" + this.func_71270_I() + "\""); - this.func_71247_a(this.func_71270_I(), this.func_71270_I(), k, worldtype, s2); + logger.info("Preparing level \"" + this.getFolderName() + "\""); + this.loadAllWorlds(this.getFolderName(), this.getFolderName(), k, worldtype, s2); long i1 = System.nanoTime() - j; @@ -278,7 +283,7 @@ thread1.start(); diff --git a/patches/minecraft/net/minecraft/server/gui/MinecraftServerGui.java.patch b/patches.mcp/minecraft/net/minecraft/server/gui/MinecraftServerGui.java.patch similarity index 93% rename from patches/minecraft/net/minecraft/server/gui/MinecraftServerGui.java.patch rename to patches.mcp/minecraft/net/minecraft/server/gui/MinecraftServerGui.java.patch index 1caa6d7a0..c01217c8d 100644 --- a/patches/minecraft/net/minecraft/server/gui/MinecraftServerGui.java.patch +++ b/patches.mcp/minecraft/net/minecraft/server/gui/MinecraftServerGui.java.patch @@ -7,7 +7,7 @@ + minecraftservergui.latch.countDown(); } - public MinecraftServerGui(DedicatedServer p_i2362_1_) + public MinecraftServerGui(DedicatedServer serverIn) @@ -164,8 +165,13 @@ return jpanel; } diff --git a/patches.mcp/minecraft/net/minecraft/server/integrated/IntegratedServer.java.patch b/patches.mcp/minecraft/net/minecraft/server/integrated/IntegratedServer.java.patch new file mode 100644 index 000000000..113c5ef2c --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/server/integrated/IntegratedServer.java.patch @@ -0,0 +1,97 @@ +--- ../src-base/minecraft/net/minecraft/server/integrated/IntegratedServer.java ++++ ../src-work/minecraft/net/minecraft/server/integrated/IntegratedServer.java +@@ -74,8 +74,6 @@ + protected void loadAllWorlds(String p_71247_1_, String p_71247_2_, long seed, WorldType type, String p_71247_6_) + { + this.convertMapIfNeeded(p_71247_1_); +- this.worldServers = new WorldServer[3]; +- this.timeOfLastDimensionTick = new long[this.worldServers.length][100]; + ISaveHandler isavehandler = this.getActiveAnvilConverter().getSaveLoader(p_71247_1_, true); + this.setResourcePackFromWorld(this.getFolderName(), isavehandler); + WorldInfo worldinfo = isavehandler.loadWorldInfo(); +@@ -88,45 +86,25 @@ + { + worldinfo.setWorldName(p_71247_2_); + } ++ WorldServer overWorld = (isDemo() ? (WorldServer)(new DemoWorldServer(this, isavehandler, worldinfo, 0, this.theProfiler)).init() : ++ (WorldServer)(new WorldServer(this, isavehandler, worldinfo, 0, this.theProfiler)).init()); ++ overWorld.initialize(this.theWorldSettings); + +- for (int j = 0; j < this.worldServers.length; ++j) ++ for (int dim : net.minecraftforge.common.DimensionManager.getStaticDimensionIDs()) + { +- byte b0 = 0; + +- if (j == 1) ++ WorldServer world = (dim == 0 ? overWorld : (WorldServer)(new WorldServerMulti(this, isavehandler, dim, overWorld, this.theProfiler)).init()); ++ world.addWorldAccess(new WorldManager(this, world)); ++ if (!this.isSinglePlayer()) + { +- b0 = -1; ++ world.getWorldInfo().setGameType(getGameType()); + } +- +- if (j == 2) +- { +- b0 = 1; +- } +- +- if (j == 0) +- { +- if (this.isDemo()) +- { +- this.worldServers[j] = (WorldServer)(new DemoWorldServer(this, isavehandler, worldinfo, b0, this.theProfiler)).init(); +- } +- else +- { +- this.worldServers[j] = (WorldServer)(new WorldServer(this, isavehandler, worldinfo, b0, this.theProfiler)).init(); +- } +- +- this.worldServers[j].initialize(this.theWorldSettings); +- } +- else +- { +- this.worldServers[j] = (WorldServer)(new WorldServerMulti(this, isavehandler, b0, this.worldServers[0], this.theProfiler)).init(); +- } +- +- this.worldServers[j].addWorldAccess(new WorldManager(this, this.worldServers[j])); ++ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.WorldEvent.Load(world)); + } + +- this.getConfigurationManager().setPlayerManager(this.worldServers); ++ this.getConfigurationManager().setPlayerManager(new WorldServer[]{ overWorld }); + +- if (this.worldServers[0].getWorldInfo().getDifficulty() == null) ++ if (overWorld.getWorldInfo().getDifficulty() == null) + { + this.setDifficultyForAllWorlds(this.mc.gameSettings.difficulty); + } +@@ -144,9 +122,10 @@ + this.setAllowFlight(true); + logger.info("Generating keypair"); + this.setKeyPair(CryptManager.generateKeyPair()); ++ if (!net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerAboutToStart(this)) return false; + this.loadAllWorlds(this.getFolderName(), this.getWorldName(), this.theWorldSettings.getSeed(), this.theWorldSettings.getTerrainType(), this.theWorldSettings.getWorldName()); + this.setMOTD(this.getServerOwner() + " - " + this.worldServers[0].getWorldInfo().getWorldName()); +- return true; ++ return net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerStarting(this); + } + + public void tick() +@@ -171,7 +150,7 @@ + { + try + { +- ((FutureTask)this.futureTaskQueue.poll()).run(); ++ net.minecraftforge.fml.common.FMLCommonHandler.callFuture(((FutureTask)this.futureTaskQueue.poll())); + } + catch (Throwable throwable) + { +@@ -232,6 +211,7 @@ + + public EnumDifficulty getDifficulty() + { ++ if (this.mc.theWorld == null) return this.mc.gameSettings.difficulty; // Fix NPE just in case. + return this.mc.theWorld.getWorldInfo().getDifficulty(); + } + diff --git a/patches.mcp/minecraft/net/minecraft/server/management/ItemInWorldManager.java.patch b/patches.mcp/minecraft/net/minecraft/server/management/ItemInWorldManager.java.patch new file mode 100644 index 000000000..603ffad4c --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/server/management/ItemInWorldManager.java.patch @@ -0,0 +1,257 @@ +--- ../src-base/minecraft/net/minecraft/server/management/ItemInWorldManager.java ++++ ../src-work/minecraft/net/minecraft/server/management/ItemInWorldManager.java +@@ -22,6 +22,8 @@ + + public class ItemInWorldManager + { ++ /** Forge reach distance */ ++ private double blockReachDistance = 5.0d; + public World theWorld; + public EntityPlayerMP thisPlayerMP; + private WorldSettings.GameType gameType; +@@ -137,6 +139,14 @@ + + public void onBlockClicked(BlockPos pos, EnumFacing side) + { ++ net.minecraftforge.event.entity.player.PlayerInteractEvent event = net.minecraftforge.event.ForgeEventFactory.onPlayerInteract(thisPlayerMP, ++ net.minecraftforge.event.entity.player.PlayerInteractEvent.Action.LEFT_CLICK_BLOCK, theWorld, pos, side); ++ if (event.isCanceled()) ++ { ++ thisPlayerMP.playerNetServerHandler.sendPacket(new S23PacketBlockChange(theWorld, pos)); ++ return; ++ } ++ + if (this.isCreative()) + { + if (!this.theWorld.extinguishFire((EntityPlayer)null, pos, side)) +@@ -171,18 +181,35 @@ + } + } + +- this.theWorld.extinguishFire((EntityPlayer)null, pos, side); ++ // + this.initialDamage = this.curblockDamage; + float f = 1.0F; + +- if (block.getMaterial() != Material.air) ++ if (!block.isAir(theWorld, pos)) + { +- block.onBlockClicked(this.theWorld, pos, this.thisPlayerMP); ++ if (event.useBlock != net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) ++ { ++ block.onBlockClicked(this.theWorld, pos, this.thisPlayerMP); ++ this.theWorld.extinguishFire((EntityPlayer)null, pos, side); ++ } ++ else ++ { ++ thisPlayerMP.playerNetServerHandler.sendPacket(new S23PacketBlockChange(theWorld, pos)); ++ } + f = block.getPlayerRelativeBlockHardness(this.thisPlayerMP, this.thisPlayerMP.worldObj, pos); + } + +- if (block.getMaterial() != Material.air && f >= 1.0F) ++ if (event.useItem == net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) + { ++ if (f >= 1.0F) ++ { ++ thisPlayerMP.playerNetServerHandler.sendPacket(new S23PacketBlockChange(theWorld, pos)); ++ } ++ return; ++ } ++ ++ if (!block.isAir(theWorld, pos) && f >= 1.0F) ++ { + this.tryHarvestBlock(pos); + } + else +@@ -203,7 +230,7 @@ + int i = this.curblockDamage - this.initialDamage; + Block block = this.theWorld.getBlockState(pos).getBlock(); + +- if (block.getMaterial() != Material.air) ++ if (!block.isAir(theWorld, pos)) + { + float f = block.getPlayerRelativeBlockHardness(this.thisPlayerMP, this.thisPlayerMP.worldObj, pos) * (float)(i + 1); + +@@ -232,9 +259,13 @@ + + private boolean removeBlock(BlockPos pos) + { ++ return removeBlock(pos, false); ++ } ++ private boolean removeBlock(BlockPos pos, boolean canHarvest) ++ { + IBlockState iblockstate = this.theWorld.getBlockState(pos); + iblockstate.getBlock().onBlockHarvested(this.theWorld, pos, iblockstate, this.thisPlayerMP); +- boolean flag = this.theWorld.setBlockToAir(pos); ++ boolean flag = iblockstate.getBlock().removedByPlayer(theWorld, pos, thisPlayerMP, canHarvest); + + if (flag) + { +@@ -246,7 +277,8 @@ + + public boolean tryHarvestBlock(BlockPos pos) + { +- if (this.gameType.isCreative() && this.thisPlayerMP.getHeldItem() != null && this.thisPlayerMP.getHeldItem().getItem() instanceof ItemSword) ++ int exp = net.minecraftforge.common.ForgeHooks.onBlockBreakEvent(theWorld, gameType, thisPlayerMP, pos); ++ if (exp == -1) + { + return false; + } +@@ -255,40 +287,21 @@ + IBlockState iblockstate = this.theWorld.getBlockState(pos); + TileEntity tileentity = this.theWorld.getTileEntity(pos); + +- if (this.gameType.isAdventure()) +- { +- if (this.gameType == WorldSettings.GameType.SPECTATOR) +- { +- return false; +- } ++ ItemStack stack = thisPlayerMP.getCurrentEquippedItem(); ++ if (stack != null && stack.getItem().onBlockStartBreak(stack, pos, thisPlayerMP)) return false; + +- if (!this.thisPlayerMP.isAllowEdit()) +- { +- ItemStack itemstack = this.thisPlayerMP.getCurrentEquippedItem(); +- +- if (itemstack == null) +- { +- return false; +- } +- +- if (!itemstack.canDestroy(iblockstate.getBlock())) +- { +- return false; +- } +- } +- } +- + this.theWorld.playAuxSFXAtEntity(this.thisPlayerMP, 2001, pos, Block.getStateId(iblockstate)); +- boolean flag1 = this.removeBlock(pos); ++ boolean flag1 = false; + + if (this.isCreative()) + { ++ flag1 = this.removeBlock(pos); + this.thisPlayerMP.playerNetServerHandler.sendPacket(new S23PacketBlockChange(this.theWorld, pos)); + } + else + { + ItemStack itemstack1 = this.thisPlayerMP.getCurrentEquippedItem(); +- boolean flag = this.thisPlayerMP.canHarvestBlock(iblockstate.getBlock()); ++ boolean flag = iblockstate.getBlock().canHarvestBlock(theWorld, pos, thisPlayerMP); + + if (itemstack1 != null) + { +@@ -300,12 +313,18 @@ + } + } + ++ flag1 = this.removeBlock(pos, flag); + if (flag1 && flag) + { + iblockstate.getBlock().harvestBlock(this.theWorld, this.thisPlayerMP, pos, iblockstate, tileentity); + } + } + ++ // Drop experiance ++ if (!this.isCreative() && flag1 && exp > 0) ++ { ++ iblockstate.getBlock().dropXpOnBlockBreak(theWorld, pos, exp); ++ } + return flag1; + } + } +@@ -343,6 +362,7 @@ + if (itemstack1.stackSize == 0) + { + player.inventory.mainInventory[player.inventory.currentItem] = null; ++ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(player, itemstack1); + } + + if (!player.isUsingItem()) +@@ -387,33 +407,51 @@ + } + else + { +- if (!player.isSneaking() || player.getHeldItem() == null) ++ net.minecraftforge.event.entity.player.PlayerInteractEvent event = net.minecraftforge.event.ForgeEventFactory.onPlayerInteract(player, ++ net.minecraftforge.event.entity.player.PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK, worldIn, pos, side); ++ if (event.isCanceled()) + { +- IBlockState iblockstate = worldIn.getBlockState(pos); +- +- if (iblockstate.getBlock().onBlockActivated(worldIn, pos, iblockstate, player, side, p_180236_6_, p_180236_7_, p_180236_8_)) +- { +- return true; +- } ++ thisPlayerMP.playerNetServerHandler.sendPacket(new S23PacketBlockChange(theWorld, pos)); ++ return false; + } + +- if (stack == null) ++ if (stack != null && stack.getItem().onItemUseFirst(stack, player, worldIn, pos, side, p_180236_6_, p_180236_7_, p_180236_8_)) + { +- return false; ++ if (stack.stackSize <= 0) net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(thisPlayerMP, stack); ++ return true; + } +- else if (this.isCreative()) ++ ++ IBlockState iblockstate = worldIn.getBlockState(pos); ++ boolean isAir = worldIn.isAirBlock(pos); ++ boolean useBlock = !player.isSneaking() || player.getHeldItem() == null; ++ if (!useBlock) useBlock = player.getHeldItem().getItem().doesSneakBypassUse(worldIn, pos, player); ++ boolean result = false; ++ ++ if (useBlock) + { +- int j = stack.getMetadata(); +- int i = stack.stackSize; +- boolean flag = stack.onItemUse(player, worldIn, pos, side, p_180236_6_, p_180236_7_, p_180236_8_); +- stack.setItemDamage(j); +- stack.stackSize = i; +- return flag; ++ if (event.useBlock != net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) ++ { ++ result = iblockstate.getBlock().onBlockActivated(worldIn, pos, iblockstate, player, side, p_180236_6_, p_180236_7_, p_180236_8_); ++ } ++ else ++ { ++ thisPlayerMP.playerNetServerHandler.sendPacket(new S23PacketBlockChange(theWorld, pos)); ++ result = event.useItem != net.minecraftforge.fml.common.eventhandler.Event.Result.ALLOW; ++ } + } +- else ++ if (stack != null && !result && event.useItem != net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) + { +- return stack.onItemUse(player, worldIn, pos, side, p_180236_6_, p_180236_7_, p_180236_8_); ++ int meta = stack.getMetadata(); ++ int size = stack.stackSize; ++ result = stack.onItemUse(player, worldIn, pos, side, p_180236_6_, p_180236_7_, p_180236_8_); ++ if (isCreative()) ++ { ++ stack.setItemDamage(meta); ++ stack.stackSize = size; ++ } ++ if (stack.stackSize <= 0) net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(thisPlayerMP, stack); + } ++ return result; + } + } + +@@ -421,4 +459,13 @@ + { + this.theWorld = serverWorld; + } ++ ++ public double getBlockReachDistance() ++ { ++ return blockReachDistance; ++ } ++ public void setBlockReachDistance(double distance) ++ { ++ blockReachDistance = distance; ++ } + } diff --git a/patches.mcp/minecraft/net/minecraft/server/management/PlayerManager.java.patch b/patches.mcp/minecraft/net/minecraft/server/management/PlayerManager.java.patch new file mode 100644 index 000000000..3c08033a0 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/server/management/PlayerManager.java.patch @@ -0,0 +1,224 @@ +--- ../src-base/minecraft/net/minecraft/server/management/PlayerManager.java ++++ ../src-work/minecraft/net/minecraft/server/management/PlayerManager.java +@@ -122,15 +122,24 @@ + int j = (int)p_72683_1_.posZ >> 4; + p_72683_1_.managedPosX = p_72683_1_.posX; + p_72683_1_.managedPosZ = p_72683_1_.posZ; ++ // Load nearby chunks first ++ List chunkList = new ArrayList(); + + for (int k = i - this.playerViewRadius; k <= i + this.playerViewRadius; ++k) + { + for (int l = j - this.playerViewRadius; l <= j + this.playerViewRadius; ++l) + { +- this.getPlayerInstance(k, l, true).addPlayer(p_72683_1_); ++ chunkList.add(new ChunkCoordIntPair(k, l)); + } + } + ++ java.util.Collections.sort(chunkList, new net.minecraftforge.common.util.ChunkCoordComparator(p_72683_1_)); ++ ++ for (ChunkCoordIntPair pair : chunkList) ++ { ++ this.getPlayerInstance(pair.chunkXPos, pair.chunkZPos, true).addPlayer(p_72683_1_); ++ } ++ + this.players.add(p_72683_1_); + this.filterChunkLoadQueue(p_72683_1_); + } +@@ -232,6 +241,7 @@ + int i1 = this.playerViewRadius; + int j1 = i - k; + int k1 = j - l; ++ List chunksToLoad = new ArrayList(); + + if (j1 != 0 || k1 != 0) + { +@@ -241,7 +251,7 @@ + { + if (!this.overlaps(l1, i2, k, l, i1)) + { +- this.getPlayerInstance(l1, i2, true).addPlayer(p_72685_1_); ++ chunksToLoad.add(new ChunkCoordIntPair(l1, i2)); + } + + if (!this.overlaps(l1 - j1, i2 - k1, i, j, i1)) +@@ -259,6 +269,18 @@ + this.filterChunkLoadQueue(p_72685_1_); + p_72685_1_.managedPosX = p_72685_1_.posX; + p_72685_1_.managedPosZ = p_72685_1_.posZ; ++ // send nearest chunks first ++ java.util.Collections.sort(chunksToLoad, new net.minecraftforge.common.util.ChunkCoordComparator(p_72685_1_)); ++ ++ for (ChunkCoordIntPair pair : chunksToLoad) ++ { ++ this.getPlayerInstance(pair.chunkXPos, pair.chunkZPos, true).addPlayer(p_72685_1_); ++ } ++ ++ if (i1 > 1 || i1 < -1 || j1 > 1 || j1 < -1) ++ { ++ java.util.Collections.sort(p_72685_1_.loadedChunks, new net.minecraftforge.common.util.ChunkCoordComparator(p_72685_1_)); ++ } + } + } + } +@@ -334,12 +356,21 @@ + private int numBlocksToUpdate; + private int flagsYAreasToUpdate; + private long previousWorldTime; ++ private final java.util.HashMap players = new java.util.HashMap(); ++ private boolean loaded = false; ++ private Runnable loadedRunnable = new Runnable() ++ { ++ public void run() ++ { ++ PlayerInstance.this.loaded = true; ++ } ++ }; + private static final String __OBFID = "CL_00001435"; + + public PlayerInstance(int p_i1518_2_, int p_i1518_3_) + { + this.chunkCoords = new ChunkCoordIntPair(p_i1518_2_, p_i1518_3_); +- PlayerManager.this.getMinecraftServer().theChunkProviderServer.loadChunk(p_i1518_2_, p_i1518_3_); ++ PlayerManager.this.getMinecraftServer().theChunkProviderServer.loadChunk(p_i1518_2_, p_i1518_3_, this.loadedRunnable); + } + + public void addPlayer(EntityPlayerMP p_73255_1_) +@@ -356,7 +387,24 @@ + } + + this.playersWatchingChunk.add(p_73255_1_); ++ Runnable playerRunnable = null; ++ if (this.loaded) ++ { + p_73255_1_.loadedChunks.add(this.chunkCoords); ++ } ++ else ++ { ++ final EntityPlayerMP tmp = p_73255_1_; ++ playerRunnable = new Runnable() ++ { ++ public void run() ++ { ++ tmp.loadedChunks.add(PlayerInstance.this.chunkCoords); ++ } ++ }; ++ PlayerManager.this.getMinecraftServer().theChunkProviderServer.loadChunk(this.chunkCoords.chunkXPos, this.chunkCoords.chunkZPos, playerRunnable); ++ } ++ this.players.put(p_73255_1_, playerRunnable); + } + } + +@@ -364,6 +412,24 @@ + { + if (this.playersWatchingChunk.contains(p_73252_1_)) + { ++ // If we haven't loaded yet don't load the chunk just so we can clean it up ++ if (!this.loaded) ++ { ++ net.minecraftforge.common.chunkio.ChunkIOExecutor.dropQueuedChunkLoad(PlayerManager.this.getMinecraftServer(), this.chunkCoords.chunkXPos, this.chunkCoords.chunkZPos, this.players.get(p_73252_1_)); ++ this.playersWatchingChunk.remove(p_73252_1_); ++ this.players.remove(p_73252_1_); ++ ++ if (this.playersWatchingChunk.isEmpty()) ++ { ++ net.minecraftforge.common.chunkio.ChunkIOExecutor.dropQueuedChunkLoad(PlayerManager.this.getMinecraftServer(), this.chunkCoords.chunkXPos, this.chunkCoords.chunkZPos, this.loadedRunnable); ++ long i = (long) this.chunkCoords.chunkXPos + 2147483647L | (long) this.chunkCoords.chunkZPos + 2147483647L << 32; ++ PlayerManager.this.playerInstances.remove(i); ++ PlayerManager.this.playerInstanceList.remove(this); ++ } ++ ++ return; ++ } ++ + Chunk chunk = PlayerManager.this.theWorldServer.getChunkFromChunkCoords(this.chunkCoords.chunkXPos, this.chunkCoords.chunkZPos); + + if (chunk.isPopulated()) +@@ -371,9 +437,12 @@ + p_73252_1_.playerNetServerHandler.sendPacket(new S21PacketChunkData(chunk, true, 0)); + } + ++ this.players.remove(p_73252_1_); + this.playersWatchingChunk.remove(p_73252_1_); + p_73252_1_.loadedChunks.remove(this.chunkCoords); + ++ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.ChunkWatchEvent.UnWatch(chunkCoords, p_73252_1_)); ++ + if (this.playersWatchingChunk.isEmpty()) + { + long i = (long)this.chunkCoords.chunkXPos + 2147483647L | (long)this.chunkCoords.chunkZPos + 2147483647L << 32; +@@ -411,7 +480,7 @@ + + this.flagsYAreasToUpdate |= 1 << (p_151253_2_ >> 4); + +- if (this.numBlocksToUpdate < 64) ++ //Forge; Cache everything, so always run + { + short short1 = (short)(p_151253_1_ << 12 | p_151253_3_ << 8 | p_151253_2_); + +@@ -423,6 +492,10 @@ + } + } + ++ if (numBlocksToUpdate == locationOfBlockChange.length) ++ { ++ locationOfBlockChange = java.util.Arrays.copyOf(locationOfBlockChange, locationOfBlockChange.length << 1); ++ } + this.locationOfBlockChange[this.numBlocksToUpdate++] = short1; + } + } +@@ -440,6 +513,7 @@ + } + } + ++ @SuppressWarnings("unused") + public void onUpdate() + { + if (this.numBlocksToUpdate != 0) +@@ -456,7 +530,7 @@ + BlockPos blockpos = new BlockPos(i, j, k); + this.sendToAllPlayersWatchingChunk(new S23PacketBlockChange(PlayerManager.this.theWorldServer, blockpos)); + +- if (PlayerManager.this.theWorldServer.getBlockState(blockpos).getBlock().hasTileEntity()) ++ if (PlayerManager.this.theWorldServer.getBlockState(blockpos).getBlock().hasTileEntity(PlayerManager.this.theWorldServer.getBlockState(blockpos))) + { + this.sendTileToAllPlayersWatchingChunk(PlayerManager.this.theWorldServer.getTileEntity(blockpos)); + } +@@ -465,13 +539,14 @@ + { + int i1; + +- if (this.numBlocksToUpdate == 64) ++ if (this.numBlocksToUpdate >= net.minecraftforge.common.ForgeModContainer.clumpingThreshold) + { + i = this.chunkCoords.chunkXPos * 16; + j = this.chunkCoords.chunkZPos * 16; + this.sendToAllPlayersWatchingChunk(new S21PacketChunkData(PlayerManager.this.theWorldServer.getChunkFromChunkCoords(this.chunkCoords.chunkXPos, this.chunkCoords.chunkZPos), false, this.flagsYAreasToUpdate)); + +- for (k = 0; k < 16; ++k) ++ // Forge: Grabs ALL tile entities is costly on a modded server, only send needed ones ++ for (k = 0; false && k < 16; ++k) + { + if ((this.flagsYAreasToUpdate & 1 << k) != 0) + { +@@ -488,7 +563,10 @@ + else + { + this.sendToAllPlayersWatchingChunk(new S22PacketMultiBlockChange(this.numBlocksToUpdate, this.locationOfBlockChange, PlayerManager.this.theWorldServer.getChunkFromChunkCoords(this.chunkCoords.chunkXPos, this.chunkCoords.chunkZPos))); ++ } + ++ { //Forge: Send only the tile entities that are updated, Adding this brace lets us keep the indent and the patch small ++ WorldServer world = PlayerManager.this.theWorldServer; + for (i = 0; i < this.numBlocksToUpdate; ++i) + { + j = (this.locationOfBlockChange[i] >> 12 & 15) + this.chunkCoords.chunkXPos * 16; +@@ -496,7 +574,7 @@ + i1 = (this.locationOfBlockChange[i] >> 8 & 15) + this.chunkCoords.chunkZPos * 16; + BlockPos blockpos1 = new BlockPos(j, k, i1); + +- if (PlayerManager.this.theWorldServer.getBlockState(blockpos1).getBlock().hasTileEntity()) ++ if (world.getBlockState(blockpos1).getBlock().hasTileEntity(world.getBlockState(blockpos1))) + { + this.sendTileToAllPlayersWatchingChunk(PlayerManager.this.theWorldServer.getTileEntity(blockpos1)); + } diff --git a/patches/minecraft/net/minecraft/server/management/PlayerProfileCache.java.patch b/patches.mcp/minecraft/net/minecraft/server/management/PlayerProfileCache.java.patch similarity index 87% rename from patches/minecraft/net/minecraft/server/management/PlayerProfileCache.java.patch rename to patches.mcp/minecraft/net/minecraft/server/management/PlayerProfileCache.java.patch index 93c276883..678f9b276 100644 --- a/patches/minecraft/net/minecraft/server/management/PlayerProfileCache.java.patch +++ b/patches.mcp/minecraft/net/minecraft/server/management/PlayerProfileCache.java.patch @@ -8,8 +8,8 @@ { try { - bufferedreader = Files.newReader(this.field_152665_g, Charsets.UTF_8); - list = (List)this.field_152660_b.fromJson(bufferedreader, field_152666_h); + bufferedreader = Files.newReader(this.usercacheFile, Charsets.UTF_8); + list = (List)this.gson.fromJson(bufferedreader, field_152666_h); - break label64; - } - catch (FileNotFoundException filenotfoundexception) diff --git a/patches.mcp/minecraft/net/minecraft/server/management/ServerConfigurationManager.java.patch b/patches.mcp/minecraft/net/minecraft/server/management/ServerConfigurationManager.java.patch new file mode 100644 index 000000000..5eacc8196 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/server/management/ServerConfigurationManager.java.patch @@ -0,0 +1,223 @@ +--- ../src-base/minecraft/net/minecraft/server/management/ServerConfigurationManager.java ++++ ../src-work/minecraft/net/minecraft/server/management/ServerConfigurationManager.java +@@ -103,7 +103,7 @@ + this.maxPlayers = 8; + } + +- public void initializeConnectionToPlayer(NetworkManager netManager, EntityPlayerMP playerIn) ++ public void initializeConnectionToPlayer(NetworkManager netManager, EntityPlayerMP playerIn, NetHandlerPlayServer nethandlerplayserver) + { + GameProfile gameprofile = playerIn.getGameProfile(); + PlayerProfileCache playerprofilecache = this.mcServer.getPlayerProfileCache(); +@@ -112,6 +112,17 @@ + playerprofilecache.func_152649_a(gameprofile); + NBTTagCompound nbttagcompound = this.readPlayerDataFromFile(playerIn); + playerIn.setWorld(this.mcServer.worldServerForDimension(playerIn.dimension)); ++ ++ World playerWorld = this.mcServer.worldServerForDimension(playerIn.dimension); ++ if (playerWorld == null) ++ { ++ playerIn.dimension=0; ++ playerWorld=this.mcServer.worldServerForDimension(0); ++ BlockPos spawnPoint = playerWorld.provider.getRandomizedSpawnPoint(); ++ playerIn.setPosition(spawnPoint.getX(), spawnPoint.getY(), spawnPoint.getZ()); ++ } ++ ++ playerIn.setWorld(playerWorld); + playerIn.theItemInWorldManager.setWorld((WorldServer)playerIn.worldObj); + String s1 = "local"; + +@@ -125,7 +136,7 @@ + WorldInfo worldinfo = worldserver.getWorldInfo(); + BlockPos blockpos = worldserver.getSpawnPoint(); + this.func_72381_a(playerIn, (EntityPlayerMP)null, worldserver); +- NetHandlerPlayServer nethandlerplayserver = new NetHandlerPlayServer(this.mcServer, netManager, playerIn); ++ playerIn.playerNetServerHandler = nethandlerplayserver; + nethandlerplayserver.sendPacket(new S01PacketJoinGame(playerIn.getEntityId(), playerIn.theItemInWorldManager.getGameType(), worldinfo.isHardcoreModeEnabled(), worldserver.provider.getDimensionId(), worldserver.getDifficulty(), this.getMaxPlayers(), worldinfo.getTerrainType(), worldserver.getGameRules().getGameRuleBooleanValue("reducedDebugInfo"))); + nethandlerplayserver.sendPacket(new S3FPacketCustomPayload("MC|Brand", (new PacketBuffer(Unpooled.buffer())).writeString(this.getServerInstance().getServerModName()))); + nethandlerplayserver.sendPacket(new S41PacketServerDifficulty(worldinfo.getDifficulty(), worldinfo.isDifficultyLocked())); +@@ -168,6 +179,7 @@ + + playerIn.addSelfToInternalCraftingInventory(); + ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerLoggedIn(playerIn); + if (nbttagcompound != null && nbttagcompound.hasKey("Riding", 10)) + { + Entity entity = EntityList.createEntityFromNBT(nbttagcompound.getCompoundTag("Riding"), worldserver); +@@ -272,6 +284,7 @@ + playerIn.readFromNBT(nbttagcompound); + nbttagcompound1 = nbttagcompound; + logger.debug("loading single player"); ++ net.minecraftforge.event.ForgeEventFactory.firePlayerLoadingEvent(playerIn, this.playerNBTManagerObj, playerIn.getUniqueID().toString()); + } + else + { +@@ -281,8 +294,23 @@ + return nbttagcompound1; + } + ++ public NBTTagCompound getPlayerNBT(EntityPlayerMP player) ++ { ++ // Hacky method to allow loading the NBT for a player prior to login ++ NBTTagCompound nbttagcompound = this.mcServer.worldServers[0].getWorldInfo().getPlayerNBTTagCompound(); ++ if (player.getName().equals(this.mcServer.getServerOwner()) && nbttagcompound != null) ++ { ++ return nbttagcompound; ++ } ++ else ++ { ++ return ((net.minecraft.world.storage.SaveHandler)this.playerNBTManagerObj).getPlayerNBT(player); ++ } ++ } + protected void writePlayerData(EntityPlayerMP playerIn) + { ++ if (playerIn.playerNetServerHandler == null) return; ++ + this.playerNBTManagerObj.writePlayerData(playerIn); + StatisticsFile statisticsfile = (StatisticsFile)this.playerStatFiles.get(playerIn.getUniqueID()); + +@@ -298,6 +326,7 @@ + this.uuidToPlayerMap.put(playerIn.getUniqueID(), playerIn); + this.sendPacketToAllPlayers(new S38PacketPlayerListItem(S38PacketPlayerListItem.Action.ADD_PLAYER, new EntityPlayerMP[] {playerIn})); + WorldServer worldserver = this.mcServer.worldServerForDimension(playerIn.dimension); ++ net.minecraftforge.common.chunkio.ChunkIOExecutor.adjustPoolSize(this.getCurrentPlayerCount()); + worldserver.spawnEntityInWorld(playerIn); + this.func_72375_a(playerIn, (WorldServer)null); + +@@ -315,6 +344,7 @@ + + public void playerLoggedOut(EntityPlayerMP playerIn) + { ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerLoggedOut(playerIn); + playerIn.triggerAchievement(StatList.leaveGameStat); + this.writePlayerData(playerIn); + WorldServer worldserver = playerIn.getServerForPlayer(); +@@ -330,6 +360,7 @@ + this.playerEntityList.remove(playerIn); + this.uuidToPlayerMap.remove(playerIn.getUniqueID()); + this.playerStatFiles.remove(playerIn.getUniqueID()); ++ net.minecraftforge.common.chunkio.ChunkIOExecutor.adjustPoolSize(this.getCurrentPlayerCount()); + this.sendPacketToAllPlayers(new S38PacketPlayerListItem(S38PacketPlayerListItem.Action.REMOVE_PLAYER, new EntityPlayerMP[] {playerIn})); + } + +@@ -411,13 +442,23 @@ + + public EntityPlayerMP recreatePlayerEntity(EntityPlayerMP playerIn, int dimension, boolean conqueredEnd) + { ++ World world = mcServer.worldServerForDimension(dimension); ++ if (world == null) ++ { ++ dimension = 0; ++ } ++ else if (!world.provider.canRespawnHere()) ++ { ++ dimension = world.provider.getRespawnDimension(playerIn); ++ } ++ + playerIn.getServerForPlayer().getEntityTracker().removePlayerFromTrackers(playerIn); + playerIn.getServerForPlayer().getEntityTracker().untrackEntity(playerIn); + playerIn.getServerForPlayer().getPlayerManager().removePlayer(playerIn); + this.playerEntityList.remove(playerIn); + this.mcServer.worldServerForDimension(playerIn.dimension).removePlayerEntityDangerously(playerIn); +- BlockPos blockpos = playerIn.getBedLocation(); +- boolean flag1 = playerIn.isSpawnForced(); ++ BlockPos blockpos = playerIn.getBedLocation(dimension); ++ boolean flag1 = playerIn.isSpawnForced(dimension); + playerIn.dimension = dimension; + Object object; + +@@ -433,6 +474,7 @@ + EntityPlayerMP entityplayermp1 = new EntityPlayerMP(this.mcServer, this.mcServer.worldServerForDimension(playerIn.dimension), playerIn.getGameProfile(), (ItemInWorldManager)object); + entityplayermp1.playerNetServerHandler = playerIn.playerNetServerHandler; + entityplayermp1.clonePlayer(playerIn, conqueredEnd); ++ entityplayermp1.dimension = dimension; + entityplayermp1.setEntityId(playerIn.getEntityId()); + entityplayermp1.func_174817_o(playerIn); + WorldServer worldserver = this.mcServer.worldServerForDimension(playerIn.dimension); +@@ -473,19 +515,25 @@ + this.uuidToPlayerMap.put(entityplayermp1.getUniqueID(), entityplayermp1); + entityplayermp1.addSelfToInternalCraftingInventory(); + entityplayermp1.setHealth(entityplayermp1.getHealth()); ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerRespawnEvent(entityplayermp1); + return entityplayermp1; + } + + public void transferPlayerToDimension(EntityPlayerMP playerIn, int dimension) + { ++ transferPlayerToDimension(playerIn, dimension, mcServer.worldServerForDimension(dimension).getDefaultTeleporter()); ++ } ++ ++ public void transferPlayerToDimension(EntityPlayerMP playerIn, int dimension, net.minecraft.world.Teleporter teleporter) ++ { + int j = playerIn.dimension; + WorldServer worldserver = this.mcServer.worldServerForDimension(playerIn.dimension); + playerIn.dimension = dimension; + WorldServer worldserver1 = this.mcServer.worldServerForDimension(playerIn.dimension); +- playerIn.playerNetServerHandler.sendPacket(new S07PacketRespawn(playerIn.dimension, playerIn.worldObj.getDifficulty(), playerIn.worldObj.getWorldInfo().getTerrainType(), playerIn.theItemInWorldManager.getGameType())); ++ playerIn.playerNetServerHandler.sendPacket(new S07PacketRespawn(playerIn.dimension, worldserver1.getDifficulty(), worldserver1.getWorldInfo().getTerrainType(), playerIn.theItemInWorldManager.getGameType())); // Forge: Use new dimensions information + worldserver.removePlayerEntityDangerously(playerIn); + playerIn.isDead = false; +- this.transferEntityToWorld(playerIn, j, worldserver, worldserver1); ++ this.transferEntityToWorld(playerIn, j, worldserver, worldserver1, teleporter); + this.func_72375_a(playerIn, worldserver); + playerIn.playerNetServerHandler.setPlayerLocation(playerIn.posX, playerIn.posY, playerIn.posZ, playerIn.rotationYaw, playerIn.rotationPitch); + playerIn.theItemInWorldManager.setWorld(worldserver1); +@@ -498,17 +546,27 @@ + PotionEffect potioneffect = (PotionEffect)iterator.next(); + playerIn.playerNetServerHandler.sendPacket(new S1DPacketEntityEffect(playerIn.getEntityId(), potioneffect)); + } ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerChangedDimensionEvent(playerIn, j, dimension); + } + + public void transferEntityToWorld(Entity entityIn, int p_82448_2_, WorldServer p_82448_3_, WorldServer p_82448_4_) + { +- double d0 = entityIn.posX; +- double d1 = entityIn.posZ; ++ transferEntityToWorld(entityIn, p_82448_2_, p_82448_3_, p_82448_4_, p_82448_4_.getDefaultTeleporter()); ++ } ++ ++ @SuppressWarnings("unused") ++ public void transferEntityToWorld(Entity entityIn, int p_82448_2_, WorldServer p_82448_3_, WorldServer p_82448_4_, net.minecraft.world.Teleporter teleporter) ++ { ++ net.minecraft.world.WorldProvider pOld = p_82448_3_.provider; ++ net.minecraft.world.WorldProvider pNew = p_82448_4_.provider; ++ double moveFactor = pOld.getMovementFactor() / pNew.getMovementFactor(); ++ double d0 = entityIn.posX * moveFactor; ++ double d1 = entityIn.posZ * moveFactor; + double d2 = 8.0D; + float f = entityIn.rotationYaw; + p_82448_3_.theProfiler.startSection("moving"); + +- if (entityIn.dimension == -1) ++ if (false && entityIn.dimension == -1) //Forge Kill it but dont comment out so we can rename it. + { + d0 = MathHelper.clamp_double(d0 / d2, p_82448_4_.getWorldBorder().minX() + 16.0D, p_82448_4_.getWorldBorder().maxX() - 16.0D); + d1 = MathHelper.clamp_double(d1 / d2, p_82448_4_.getWorldBorder().minZ() + 16.0D, p_82448_4_.getWorldBorder().maxZ() - 16.0D); +@@ -519,7 +577,7 @@ + p_82448_3_.updateEntityWithOptionalForce(entityIn, false); + } + } +- else if (entityIn.dimension == 0) ++ else if (false && entityIn.dimension == 0) //Forge Kill it but dont comment out so we can rename it. + { + d0 = MathHelper.clamp_double(d0 * d2, p_82448_4_.getWorldBorder().minX() + 16.0D, p_82448_4_.getWorldBorder().maxX() - 16.0D); + d1 = MathHelper.clamp_double(d1 * d2, p_82448_4_.getWorldBorder().minZ() + 16.0D, p_82448_4_.getWorldBorder().maxZ() - 16.0D); +@@ -530,7 +588,8 @@ + p_82448_3_.updateEntityWithOptionalForce(entityIn, false); + } + } +- else ++ ++ if (entityIn.dimension == 1) + { + BlockPos blockpos; + +@@ -565,7 +624,7 @@ + if (entityIn.isEntityAlive()) + { + entityIn.setLocationAndAngles(d0, entityIn.posY, d1, entityIn.rotationYaw, entityIn.rotationPitch); +- p_82448_4_.getDefaultTeleporter().placeInPortal(entityIn, f); ++ teleporter.placeInPortal(entityIn, f); + p_82448_4_.spawnEntityInWorld(entityIn); + p_82448_4_.updateEntityWithOptionalForce(entityIn, false); + } diff --git a/patches/minecraft/net/minecraft/server/network/NetHandlerHandshakeTCP.java.patch b/patches.mcp/minecraft/net/minecraft/server/network/NetHandlerHandshakeTCP.java.patch similarity index 65% rename from patches/minecraft/net/minecraft/server/network/NetHandlerHandshakeTCP.java.patch rename to patches.mcp/minecraft/net/minecraft/server/network/NetHandlerHandshakeTCP.java.patch index 855a224f4..9a0c6b233 100644 --- a/patches/minecraft/net/minecraft/server/network/NetHandlerHandshakeTCP.java.patch +++ b/patches.mcp/minecraft/net/minecraft/server/network/NetHandlerHandshakeTCP.java.patch @@ -2,10 +2,10 @@ +++ ../src-work/minecraft/net/minecraft/server/network/NetHandlerHandshakeTCP.java @@ -23,6 +23,8 @@ - public void func_147383_a(C00Handshake p_147383_1_) + public void processHandshake(C00Handshake packetIn) { -+ if (!net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerHandshake(p_147383_1_, this.field_147386_b)) return; ++ if (!net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerHandshake(packetIn, this.networkManager)) return; + - switch (NetHandlerHandshakeTCP.SwitchEnumConnectionState.field_151291_a[p_147383_1_.func_149594_c().ordinal()]) + switch (NetHandlerHandshakeTCP.SwitchEnumConnectionState.VALUES[packetIn.getRequestedState().ordinal()]) { case 1: diff --git a/patches.mcp/minecraft/net/minecraft/server/network/NetHandlerLoginServer.java.patch b/patches.mcp/minecraft/net/minecraft/server/network/NetHandlerLoginServer.java.patch new file mode 100644 index 000000000..c6a8ad1f0 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/server/network/NetHandlerLoginServer.java.patch @@ -0,0 +1,20 @@ +--- ../src-base/minecraft/net/minecraft/server/network/NetHandlerLoginServer.java ++++ ../src-work/minecraft/net/minecraft/server/network/NetHandlerLoginServer.java +@@ -62,7 +62,7 @@ + this.tryAcceptPlayer(); + } + +- if (this.connectionTimer++ == 600) ++ if (this.connectionTimer++ == net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.LOGIN_TIMEOUT) + { + this.closeConnection("Took too long to log in"); + } +@@ -113,7 +113,7 @@ + } + + this.networkManager.sendPacket(new S02PacketLoginSuccess(this.loginGameProfile)); +- this.server.getConfigurationManager().initializeConnectionToPlayer(this.networkManager, this.server.getConfigurationManager().createPlayerForUser(this.loginGameProfile)); ++ net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.fmlServerHandshake(this.server.getConfigurationManager(), this.networkManager, this.server.getConfigurationManager().createPlayerForUser(this.loginGameProfile)); + } + } + diff --git a/patches/minecraft/net/minecraft/stats/StatList.java.patch b/patches.mcp/minecraft/net/minecraft/stats/StatList.java.patch similarity index 53% rename from patches/minecraft/net/minecraft/stats/StatList.java.patch rename to patches.mcp/minecraft/net/minecraft/stats/StatList.java.patch index cadaf3998..07cee7f68 100644 --- a/patches/minecraft/net/minecraft/stats/StatList.java.patch +++ b/patches.mcp/minecraft/net/minecraft/stats/StatList.java.patch @@ -4,8 +4,8 @@ if (item != null) { -- int i = Item.func_150891_b(item); -+ int i = Item.func_150891_b(item); //TODO: Hook FML's stat change event and re-assign these +- int i = Item.getIdFromItem(item); ++ int i = Item.getIdFromItem(item); //TODO: Hook FML's stat change event and re-assign these String s = func_180204_a(item); if (s != null) @@ -13,22 +13,22 @@ while (iterator.hasNext()) { Block block = (Block)iterator.next(); -- Item item = Item.func_150898_a(block); -+ Item item = Item.func_150898_a(block); //TODO: Hook FML's stat change event and re-assign these +- Item item = Item.getItemFromBlock(block); ++ Item item = Item.getItemFromBlock(block); //TODO: Hook FML's stat change event and re-assign these if (item != null) { -- int i = Block.func_149682_b(block); -+ int i = Block.func_149682_b(block); //TODO: Hook FML's stat change event and re-assign these +- int i = Block.getIdFromBlock(block); ++ int i = Block.getIdFromBlock(block); //TODO: Hook FML's stat change event and re-assign these String s = func_180204_a(item); - if (s != null && block.func_149652_G()) + if (s != null && block.getEnableStats()) @@ -149,7 +149,7 @@ if (item != null) { -- int i = Item.func_150891_b(item); -+ int i = Item.func_150891_b(item); //TODO: Hook FML's stat change event and re-assign these +- int i = Item.getIdFromItem(item); ++ int i = Item.getIdFromItem(item); //TODO: Hook FML's stat change event and re-assign these String s = func_180204_a(item); if (s != null) @@ -36,8 +36,8 @@ if (item != null) { -- int i = Item.func_150891_b(item); -+ int i = Item.func_150891_b(item); //TODO: Hook FML's stat change event and re-assign these +- int i = Item.getIdFromItem(item); ++ int i = Item.getIdFromItem(item); //TODO: Hook FML's stat change event and re-assign these String s = func_180204_a(item); - if (s != null && item.func_77645_m()) + if (s != null && item.isDamageable()) diff --git a/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch b/patches.mcp/minecraft/net/minecraft/tileentity/TileEntity.java.patch similarity index 73% rename from patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch rename to patches.mcp/minecraft/net/minecraft/tileentity/TileEntity.java.patch index ec01c7662..f125971bf 100644 --- a/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch +++ b/patches.mcp/minecraft/net/minecraft/tileentity/TileEntity.java.patch @@ -1,18 +1,18 @@ --- ../src-base/minecraft/net/minecraft/tileentity/TileEntity.java +++ ../src-work/minecraft/net/minecraft/tileentity/TileEntity.java @@ -66,6 +66,7 @@ - public void func_145839_a(NBTTagCompound p_145839_1_) + public void readFromNBT(NBTTagCompound compound) { - this.field_174879_c = new BlockPos(p_145839_1_.func_74762_e("x"), p_145839_1_.func_74762_e("y"), p_145839_1_.func_74762_e("z")); -+ if (p_145839_1_.func_74764_b("ForgeData")) this.customTileData = p_145839_1_.func_74775_l("ForgeData"); + this.pos = new BlockPos(compound.getInteger("x"), compound.getInteger("y"), compound.getInteger("z")); ++ if (compound.hasKey("ForgeData")) this.customTileData = compound.getCompoundTag("ForgeData"); } - public void func_145841_b(NBTTagCompound p_145841_1_) + public void writeToNBT(NBTTagCompound compound) @@ -82,6 +83,7 @@ - p_145841_1_.func_74768_a("x", this.field_174879_c.func_177958_n()); - p_145841_1_.func_74768_a("y", this.field_174879_c.func_177956_o()); - p_145841_1_.func_74768_a("z", this.field_174879_c.func_177952_p()); -+ if (this.customTileData != null) p_145841_1_.func_74782_a("ForgeData", this.customTileData); + compound.setInteger("x", this.pos.getX()); + compound.setInteger("y", this.pos.getY()); + compound.setInteger("z", this.pos.getZ()); ++ if (this.customTileData != null) compound.setTag("ForgeData", this.customTileData); } } @@ -23,8 +23,8 @@ + Class oclass = null; try { -- Class oclass = (Class)field_145855_i.get(p_145827_0_.func_74779_i("id")); -+ oclass = (Class)field_145855_i.get(p_145827_0_.func_74779_i("id")); +- Class oclass = (Class)nameToClassMap.get(nbt.getString("id")); ++ oclass = (Class)nameToClassMap.get(nbt.getString("id")); if (oclass != null) { @@ -34,13 +34,13 @@ { + try + { - field_145852_a.warn("Skipping BlockEntity with id " + p_145827_0_.func_74779_i("id")); + logger.warn("Skipping BlockEntity with id " + nbt.getString("id")); + } + catch (Exception ex) + { + net.minecraftforge.fml.common.FMLLog.log(org.apache.logging.log4j.Level.ERROR, ex, + "A TileEntity %s(%s) has thrown an exception during loading, its state cannot be restored. Report this to the mod author", -+ p_145827_0_.func_74779_i("id"), oclass.getName()); ++ nbt.getString("id"), oclass.getName()); + tileentity = null; + } } @@ -51,12 +51,12 @@ } - @SideOnly(Side.CLIENT) - public double func_145835_a(double p_145835_1_, double p_145835_3_, double p_145835_5_) + public double getDistanceSq(double x, double y, double z) { - double d3 = (double)this.field_174879_c.func_177958_n() + 0.5D - p_145835_1_; + double d3 = (double)this.pos.getX() + 0.5D - x; @@ -284,4 +296,135 @@ - func_145826_a(TileEntityFlowerPot.class, "FlowerPot"); - func_145826_a(TileEntityBanner.class, "Banner"); + addMapping(TileEntityFlowerPot.class, "FlowerPot"); + addMapping(TileEntityBanner.class, "Banner"); } + + // -- BEGIN FORGE PATCHES -- @@ -93,7 +93,7 @@ + */ + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { -+ return !isVanilla || (oldState.func_177230_c() != newSate.func_177230_c()); ++ return !isVanilla || (oldState.getBlock() != newSate.getBlock()); + } + + public boolean shouldRenderInPass(int pass) @@ -116,21 +116,21 @@ + public net.minecraft.util.AxisAlignedBB getRenderBoundingBox() + { + net.minecraft.util.AxisAlignedBB bb = INFINITE_EXTENT_AABB; -+ Block type = func_145838_q(); -+ if (type == Blocks.field_150381_bn) ++ Block type = getBlockType(); ++ if (type == Blocks.enchanting_table) + { -+ bb = new net.minecraft.util.AxisAlignedBB(func_174877_v(), func_174877_v().func_177982_a(1, 1, 1)); ++ bb = new net.minecraft.util.AxisAlignedBB(getPos(), getPos().add(1, 1, 1)); + } -+ else if (type == Blocks.field_150486_ae || type == Blocks.field_150447_bR) ++ else if (type == Blocks.chest || type == Blocks.trapped_chest) + { -+ bb = new net.minecraft.util.AxisAlignedBB(func_174877_v().func_177982_a(-1, 0, -1), func_174877_v().func_177982_a(2, 2, 2)); ++ bb = new net.minecraft.util.AxisAlignedBB(getPos().add(-1, 0, -1), getPos().add(2, 2, 2)); + } -+ else if (type != null && type != Blocks.field_150461_bJ) ++ else if (type != null && type != Blocks.beacon) + { + net.minecraft.util.AxisAlignedBB cbb = null; + try + { -+ cbb = type.func_180640_a(field_145850_b, func_174877_v(), field_145850_b.func_180495_p(func_174877_v())); ++ cbb = type.getCollisionBoundingBox(worldObj, getPos(), worldObj.getBlockState(getPos())); + } + catch (Exception e) + { @@ -140,7 +140,7 @@ + // So, once again in the long line of US having to accommodate BUKKIT breaking things, + // here it is, assume that the TE is only 1 cubic block. Problem with this is that it may + // cause the TileEntity renderer to error further down the line! But alas, nothing we can do. -+ cbb = new net.minecraft.util.AxisAlignedBB(func_174877_v().func_177982_a(-1, 0, -1), func_174877_v().func_177982_a(1, 1, 1)); ++ cbb = new net.minecraft.util.AxisAlignedBB(getPos().add(-1, 0, -1), getPos().add(1, 1, 1)); + } + if (cbb != null) bb = cbb; + } @@ -154,7 +154,7 @@ + */ + public boolean canRenderBreaking() + { -+ Block block = this.func_145838_q(); ++ Block block = this.getBlockType(); + return (block instanceof net.minecraft.block.BlockChest || + block instanceof net.minecraft.block.BlockEnderChest || + block instanceof net.minecraft.block.BlockSign || diff --git a/patches.mcp/minecraft/net/minecraft/tileentity/TileEntityBeacon.java.patch b/patches.mcp/minecraft/net/minecraft/tileentity/TileEntityBeacon.java.patch new file mode 100644 index 000000000..882045eb6 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/tileentity/TileEntityBeacon.java.patch @@ -0,0 +1,20 @@ +--- ../src-base/minecraft/net/minecraft/tileentity/TileEntityBeacon.java ++++ ../src-work/minecraft/net/minecraft/tileentity/TileEntityBeacon.java +@@ -178,7 +178,7 @@ + { + Block block = this.worldObj.getBlockState(new BlockPos(l1, k1, j1)).getBlock(); + +- if (block != Blocks.emerald_block && block != Blocks.gold_block && block != Blocks.diamond_block && block != Blocks.iron_block) ++ if (!block.isBeaconBase(this.worldObj, new BlockPos(l1, k1, j1), getPos())) + { + flag1 = false; + break; +@@ -363,7 +363,7 @@ + + public boolean isItemValidForSlot(int index, ItemStack stack) + { +- return stack.getItem() == Items.emerald || stack.getItem() == Items.diamond || stack.getItem() == Items.gold_ingot || stack.getItem() == Items.iron_ingot; ++ return stack.getItem() != null && stack.getItem().isBeaconPayment(stack); + } + + public String getGuiID() diff --git a/patches.mcp/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java.patch b/patches.mcp/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java.patch new file mode 100644 index 000000000..8724a5526 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java.patch @@ -0,0 +1,78 @@ +--- ../src-base/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java ++++ ../src-work/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java +@@ -104,7 +104,7 @@ + + private boolean canBrew() + { +- if (this.brewingItemStacks[3] != null && this.brewingItemStacks[3].stackSize > 0) ++ if (this.brewingItemStacks[3] != null && this.brewingItemStacks[3].stackSize > 0 && false) // Code moved to net.minecraftforge.common.brewing.VanillaBrewingRecipe + { + ItemStack itemstack = this.brewingItemStacks[3]; + +@@ -118,7 +118,7 @@ + + for (int i = 0; i < 3; ++i) + { +- if (this.brewingItemStacks[i] != null && this.brewingItemStacks[i].getItem() == Items.potionitem) ++ if (this.brewingItemStacks[i] != null && this.brewingItemStacks[i].getItem() instanceof ItemPotion) + { + int j = this.brewingItemStacks[i].getMetadata(); + int k = this.func_145936_c(j, itemstack); +@@ -145,19 +145,22 @@ + } + else + { +- return false; ++ return net.minecraftforge.common.brewing.BrewingRecipeRegistry.canBrew(brewingItemStacks, brewingItemStacks[3], outputSlots); + } + } + + private void brewPotions() + { ++ if (net.minecraftforge.event.ForgeEventFactory.onPotionAttemptBreaw(brewingItemStacks)) return; + if (this.canBrew()) + { ++ net.minecraftforge.common.brewing.BrewingRecipeRegistry.brewPotions(brewingItemStacks, brewingItemStacks[3], outputSlots); + ItemStack itemstack = this.brewingItemStacks[3]; + ++ if (false) { // Code moved to net.minecraftforge.common.brewing.VanillaBrewingRecipe + for (int i = 0; i < 3; ++i) + { +- if (this.brewingItemStacks[i] != null && this.brewingItemStacks[i].getItem() == Items.potionitem) ++ if (this.brewingItemStacks[i] != null && this.brewingItemStacks[i].getItem() instanceof ItemPotion) + { + int j = this.brewingItemStacks[i].getMetadata(); + int k = this.func_145936_c(j, itemstack); +@@ -177,10 +180,11 @@ + } + } + } ++ } + +- if (itemstack.getItem().hasContainerItem()) ++ if (itemstack.getItem().hasContainerItem(itemstack)) + { +- this.brewingItemStacks[3] = new ItemStack(itemstack.getItem().getContainerItem()); ++ this.brewingItemStacks[3] = itemstack.getItem().getContainerItem(itemstack); + } + else + { +@@ -191,6 +195,7 @@ + this.brewingItemStacks[3] = null; + } + } ++ net.minecraftforge.event.ForgeEventFactory.onPotionBrewed(brewingItemStacks); + } + } + +@@ -306,7 +311,9 @@ + + public boolean isItemValidForSlot(int index, ItemStack stack) + { +- return index == 3 ? stack.getItem().isPotionIngredient(stack) : stack.getItem() == Items.potionitem || stack.getItem() == Items.glass_bottle; ++ if (index == 3 && net.minecraftforge.common.brewing.BrewingRecipeRegistry.isValidIngredient(stack)) return true; ++ else if (index != 3 && net.minecraftforge.common.brewing.BrewingRecipeRegistry.isValidInput(stack)) return true; ++ return false; + } + + public boolean[] func_174902_m() diff --git a/patches.mcp/minecraft/net/minecraft/tileentity/TileEntityFurnace.java.patch b/patches.mcp/minecraft/net/minecraft/tileentity/TileEntityFurnace.java.patch new file mode 100644 index 000000000..3c9b75c96 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/tileentity/TileEntityFurnace.java.patch @@ -0,0 +1,51 @@ +--- ../src-base/minecraft/net/minecraft/tileentity/TileEntityFurnace.java ++++ ../src-work/minecraft/net/minecraft/tileentity/TileEntityFurnace.java +@@ -233,8 +233,7 @@ + + if (this.furnaceItemStacks[1].stackSize == 0) + { +- Item item = this.furnaceItemStacks[1].getItem().getContainerItem(); +- this.furnaceItemStacks[1] = item != null ? new ItemStack(item) : null; ++ this.furnaceItemStacks[1] = furnaceItemStacks[1].getItem().getContainerItem(furnaceItemStacks[1]); + } + } + } +@@ -285,7 +284,11 @@ + else + { + ItemStack itemstack = FurnaceRecipes.instance().getSmeltingResult(this.furnaceItemStacks[0]); +- return itemstack == null ? false : (this.furnaceItemStacks[2] == null ? true : (!this.furnaceItemStacks[2].isItemEqual(itemstack) ? false : (this.furnaceItemStacks[2].stackSize < this.getInventoryStackLimit() && this.furnaceItemStacks[2].stackSize < this.furnaceItemStacks[2].getMaxStackSize() ? true : this.furnaceItemStacks[2].stackSize < itemstack.getMaxStackSize()))); ++ if (itemstack == null) return false; ++ if (this.furnaceItemStacks[2] == null) return true; ++ if (!this.furnaceItemStacks[2].isItemEqual(itemstack)) return false; ++ int result = furnaceItemStacks[2].stackSize + itemstack.stackSize; ++ return result <= getInventoryStackLimit() && result <= this.furnaceItemStacks[2].getMaxStackSize(); //Forge BugFix: Make it respect stack sizes properly. + } + } + +@@ -301,7 +304,7 @@ + } + else if (this.furnaceItemStacks[2].getItem() == itemstack.getItem()) + { +- ++this.furnaceItemStacks[2].stackSize; ++ this.furnaceItemStacks[2].stackSize += itemstack.stackSize; // Forge BugFix: Results may have multiple items + } + + if (this.furnaceItemStacks[0].getItem() == Item.getItemFromBlock(Blocks.sponge) && this.furnaceItemStacks[0].getMetadata() == 1 && this.furnaceItemStacks[1] != null && this.furnaceItemStacks[1].getItem() == Items.bucket) +@@ -348,7 +351,15 @@ + } + } + +- return item instanceof ItemTool && ((ItemTool)item).getToolMaterialName().equals("WOOD") ? 200 : (item instanceof ItemSword && ((ItemSword)item).getToolMaterialName().equals("WOOD") ? 200 : (item instanceof ItemHoe && ((ItemHoe)item).getMaterialName().equals("WOOD") ? 200 : (item == Items.stick ? 100 : (item == Items.coal ? 1600 : (item == Items.lava_bucket ? 20000 : (item == Item.getItemFromBlock(Blocks.sapling) ? 100 : (item == Items.blaze_rod ? 2400 : 0))))))); ++ if (item instanceof ItemTool && ((ItemTool)item).getToolMaterialName().equals("WOOD")) return 200; ++ if (item instanceof ItemSword && ((ItemSword)item).getToolMaterialName().equals("WOOD")) return 200; ++ if (item instanceof ItemHoe && ((ItemHoe)item).getMaterialName().equals("WOOD")) return 200; ++ if (item == Items.stick) return 100; ++ if (item == Items.coal) return 1600; ++ if (item == Items.lava_bucket) return 20000; ++ if (item == Item.getItemFromBlock(Blocks.sapling)) return 100; ++ if (item == Items.blaze_rod) return 2400; ++ return net.minecraftforge.fml.common.registry.GameRegistry.getFuelValue(p_145952_0_); + } + } + diff --git a/patches.mcp/minecraft/net/minecraft/tileentity/TileEntityHopper.java.patch b/patches.mcp/minecraft/net/minecraft/tileentity/TileEntityHopper.java.patch new file mode 100644 index 000000000..018e6784d --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/tileentity/TileEntityHopper.java.patch @@ -0,0 +1,40 @@ +--- ../src-base/minecraft/net/minecraft/tileentity/TileEntityHopper.java ++++ ../src-work/minecraft/net/minecraft/tileentity/TileEntityHopper.java +@@ -523,17 +523,30 @@ + + if (itemstack1 == null) + { +- p_174916_0_.setInventorySlotContents(p_174916_2_, p_174916_1_); +- p_174916_1_ = null; ++ //Forge: BUGFIX: Again, make things respect max stack sizes. ++ int max = Math.min(p_174916_1_.getMaxStackSize(), p_174916_0_.getInventoryStackLimit()); ++ if (max >= p_174916_1_.stackSize) ++ { ++ p_174916_0_.setInventorySlotContents(p_174916_2_, p_174916_1_); ++ p_174916_1_ = null; ++ } ++ else ++ { ++ p_174916_0_.setInventorySlotContents(p_174916_2_, p_174916_1_.splitStack(max)); ++ } + flag = true; + } + else if (canCombine(itemstack1, p_174916_1_)) + { +- int j = p_174916_1_.getMaxStackSize() - itemstack1.stackSize; +- int k = Math.min(p_174916_1_.stackSize, j); +- p_174916_1_.stackSize -= k; +- itemstack1.stackSize += k; +- flag = k > 0; ++ //Forge: BUGFIX: Again, make things respect max stack sizes. ++ int max = Math.min(p_174916_1_.getMaxStackSize(), p_174916_0_.getInventoryStackLimit()); ++ if (max > itemstack1.stackSize) ++ { ++ int size = Math.min(p_174916_1_.stackSize, max - itemstack1.stackSize); ++ p_174916_1_.stackSize -= size; ++ itemstack1.stackSize += size; ++ flag = size > 0; ++ } + } + + if (flag) diff --git a/patches/minecraft/net/minecraft/tileentity/TileEntityNote.java.patch b/patches.mcp/minecraft/net/minecraft/tileentity/TileEntityNote.java.patch similarity index 60% rename from patches/minecraft/net/minecraft/tileentity/TileEntityNote.java.patch rename to patches.mcp/minecraft/net/minecraft/tileentity/TileEntityNote.java.patch index 0bf432e05..51de36d50 100644 --- a/patches/minecraft/net/minecraft/tileentity/TileEntityNote.java.patch +++ b/patches.mcp/minecraft/net/minecraft/tileentity/TileEntityNote.java.patch @@ -2,11 +2,11 @@ +++ ../src-work/minecraft/net/minecraft/tileentity/TileEntityNote.java @@ -28,7 +28,9 @@ - public void func_145877_a() + public void changePitch() { -+ byte old = field_145879_a; - this.field_145879_a = (byte)((this.field_145879_a + 1) % 25); ++ byte old = note; + this.note = (byte)((this.note + 1) % 25); + if (!net.minecraftforge.common.ForgeHooks.onNoteChange(this, old)) return; - this.func_70296_d(); + this.markDirty(); } diff --git a/patches.mcp/minecraft/net/minecraft/tileentity/TileEntityPiston.java.patch b/patches.mcp/minecraft/net/minecraft/tileentity/TileEntityPiston.java.patch new file mode 100644 index 000000000..009c0ba03 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/tileentity/TileEntityPiston.java.patch @@ -0,0 +1,22 @@ +--- ../src-base/minecraft/net/minecraft/tileentity/TileEntityPiston.java ++++ ../src-work/minecraft/net/minecraft/tileentity/TileEntityPiston.java +@@ -151,7 +151,8 @@ + if (this.worldObj.getBlockState(this.pos).getBlock() == Blocks.piston_extension) + { + this.worldObj.setBlockState(this.pos, this.pistonState, 3); +- this.worldObj.notifyBlockOfStateChange(this.pos, this.pistonState.getBlock()); ++ if(!net.minecraftforge.event.ForgeEventFactory.onNeighborNotify(worldObj, pos, worldObj.getBlockState(pos), java.util.EnumSet.noneOf(EnumFacing.class)).isCanceled()) ++ this.worldObj.notifyBlockOfStateChange(this.pos, this.pistonState.getBlock()); + } + } + } +@@ -169,7 +170,8 @@ + if (this.worldObj.getBlockState(this.pos).getBlock() == Blocks.piston_extension) + { + this.worldObj.setBlockState(this.pos, this.pistonState, 3); +- this.worldObj.notifyBlockOfStateChange(this.pos, this.pistonState.getBlock()); ++ if(!net.minecraftforge.event.ForgeEventFactory.onNeighborNotify(worldObj, pos, worldObj.getBlockState(pos), java.util.EnumSet.noneOf(EnumFacing.class)).isCanceled()) ++ this.worldObj.notifyBlockOfStateChange(this.pos, this.pistonState.getBlock()); + } + } + else diff --git a/patches.mcp/minecraft/net/minecraft/tileentity/TileEntitySign.java.patch b/patches.mcp/minecraft/net/minecraft/tileentity/TileEntitySign.java.patch new file mode 100644 index 000000000..5b1152090 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/tileentity/TileEntitySign.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/tileentity/TileEntitySign.java ++++ ../src-work/minecraft/net/minecraft/tileentity/TileEntitySign.java +@@ -161,7 +161,7 @@ + public void addChatMessage(IChatComponent message) {} + public boolean canUseCommand(int permLevel, String commandName) + { +- return true; ++ return permLevel <= 2; //Forge: Fixes MC-75630 - Exploit with signs and command blocks + } + public BlockPos getPosition() + { diff --git a/patches/minecraft/net/minecraft/util/EnumChatFormatting.java.patch b/patches.mcp/minecraft/net/minecraft/util/EnumChatFormatting.java.patch similarity index 50% rename from patches/minecraft/net/minecraft/util/EnumChatFormatting.java.patch rename to patches.mcp/minecraft/net/minecraft/util/EnumChatFormatting.java.patch index 45fc3d1da..5531b6eb0 100644 --- a/patches/minecraft/net/minecraft/util/EnumChatFormatting.java.patch +++ b/patches.mcp/minecraft/net/minecraft/util/EnumChatFormatting.java.patch @@ -1,10 +1,10 @@ --- ../src-base/minecraft/net/minecraft/util/EnumChatFormatting.java +++ ../src-work/minecraft/net/minecraft/util/EnumChatFormatting.java @@ -92,7 +92,6 @@ - return this.field_96304_B; + return this.controlString; } - @SideOnly(Side.CLIENT) - public static String func_110646_a(String p_110646_0_) + public static String getTextWithoutFormattingCodes(String text) { - return p_110646_0_ == null ? null : field_96330_y.matcher(p_110646_0_).replaceAll(""); + return text == null ? null : formattingCodePattern.matcher(text).replaceAll(""); diff --git a/patches/minecraft/net/minecraft/util/EnumFacing.java.patch b/patches.mcp/minecraft/net/minecraft/util/EnumFacing.java.patch similarity index 50% rename from patches/minecraft/net/minecraft/util/EnumFacing.java.patch rename to patches.mcp/minecraft/net/minecraft/util/EnumFacing.java.patch index f2a758f48..3375b0ccf 100644 --- a/patches/minecraft/net/minecraft/util/EnumFacing.java.patch +++ b/patches.mcp/minecraft/net/minecraft/util/EnumFacing.java.patch @@ -10,61 +10,61 @@ public enum EnumFacing implements IStringSerializable { @@ -61,7 +59,6 @@ - return func_82600_a(this.field_176759_h); + return getFront(this.opposite); } - @SideOnly(Side.CLIENT) - public EnumFacing func_176732_a(EnumFacing.Axis p_176732_1_) + public EnumFacing rotateAround(EnumFacing.Axis axis) { - switch (EnumFacing.SwitchPlane.field_179515_a[p_176732_1_.ordinal()]) + switch (EnumFacing.SwitchPlane.AXIS_LOOKUP[axis.ordinal()]) @@ -109,7 +106,6 @@ } } - @SideOnly(Side.CLIENT) - private EnumFacing func_176744_n() + private EnumFacing rotateX() { - switch (EnumFacing.SwitchPlane.field_179513_b[this.ordinal()]) + switch (EnumFacing.SwitchPlane.FACING_LOOKUP[this.ordinal()]) @@ -129,7 +125,6 @@ } } - @SideOnly(Side.CLIENT) - private EnumFacing func_176738_p() + private EnumFacing rotateZ() { - switch (EnumFacing.SwitchPlane.field_179513_b[this.ordinal()]) + switch (EnumFacing.SwitchPlane.FACING_LOOKUP[this.ordinal()]) @@ -190,7 +185,6 @@ - return this.field_176758_k; + return this.axis; } - @SideOnly(Side.CLIENT) - public static EnumFacing func_176739_a(String p_176739_0_) + public static EnumFacing byName(String name) { - return p_176739_0_ == null ? null : (EnumFacing)field_176761_p.get(p_176739_0_.toLowerCase()); + return name == null ? null : (EnumFacing)NAME_LOOKUP.get(name.toLowerCase()); @@ -216,7 +210,6 @@ - return values()[p_176741_0_.nextInt(values().length)]; + return values()[rand.nextInt(values().length)]; } - @SideOnly(Side.CLIENT) - public static EnumFacing func_176737_a(float p_176737_0_, float p_176737_1_, float p_176737_2_) + public static EnumFacing getFacingFromVector(float p_176737_0_, float p_176737_1_, float p_176737_2_) { EnumFacing enumfacing = NORTH; @@ -249,7 +242,6 @@ - return this.field_176757_j; + return this.name; } - @SideOnly(Side.CLIENT) - public Vec3i func_176730_m() + public Vec3i getDirectionVec() { - return this.field_176756_m; + return this.directionVec; @@ -291,7 +283,6 @@ - this.field_176723_f = p_i46015_4_; + this.plane = plane; } - @SideOnly(Side.CLIENT) - public static EnumFacing.Axis func_176717_a(String p_176717_0_) + public static EnumFacing.Axis byName(String name) { - return p_176717_0_ == null ? null : (EnumFacing.Axis)field_176725_d.get(p_176717_0_.toLowerCase()); + return name == null ? null : (EnumFacing.Axis)NAME_LOOKUP.get(name.toLowerCase()); @@ -376,7 +367,7 @@ } } diff --git a/patches/minecraft/net/minecraft/util/EnumWorldBlockLayer.java.patch b/patches.mcp/minecraft/net/minecraft/util/EnumWorldBlockLayer.java.patch similarity index 100% rename from patches/minecraft/net/minecraft/util/EnumWorldBlockLayer.java.patch rename to patches.mcp/minecraft/net/minecraft/util/EnumWorldBlockLayer.java.patch diff --git a/patches/minecraft/net/minecraft/util/MessageSerializer.java.patch b/patches.mcp/minecraft/net/minecraft/util/MessageSerializer.java.patch similarity index 86% rename from patches/minecraft/net/minecraft/util/MessageSerializer.java.patch rename to patches.mcp/minecraft/net/minecraft/util/MessageSerializer.java.patch index 7724ff4c7..ea204cead 100644 --- a/patches/minecraft/net/minecraft/util/MessageSerializer.java.patch +++ b/patches.mcp/minecraft/net/minecraft/util/MessageSerializer.java.patch @@ -8,4 +8,4 @@ + //p_encode_2_ = p_encode_2_; FML: Kill warning } - p_encode_2_.func_148840_b(packetbuffer); + p_encode_2_.writePacketData(packetbuffer); diff --git a/patches/minecraft/net/minecraft/util/MouseHelper.java.patch b/patches.mcp/minecraft/net/minecraft/util/MouseHelper.java.patch similarity index 73% rename from patches/minecraft/net/minecraft/util/MouseHelper.java.patch rename to patches.mcp/minecraft/net/minecraft/util/MouseHelper.java.patch index 55d49a58d..a027a060e 100644 --- a/patches/minecraft/net/minecraft/util/MouseHelper.java.patch +++ b/patches.mcp/minecraft/net/minecraft/util/MouseHelper.java.patch @@ -2,9 +2,9 @@ +++ ../src-work/minecraft/net/minecraft/util/MouseHelper.java @@ -14,6 +14,7 @@ - public void func_74372_a() + public void grabMouseCursor() { + if (Boolean.parseBoolean(System.getProperty("fml.noGrab","false"))) return; Mouse.setGrabbed(true); - this.field_74377_a = 0; - this.field_74375_b = 0; + this.deltaX = 0; + this.deltaY = 0; diff --git a/patches/minecraft/net/minecraft/util/MovingObjectPosition.java.patch b/patches.mcp/minecraft/net/minecraft/util/MovingObjectPosition.java.patch similarity index 94% rename from patches/minecraft/net/minecraft/util/MovingObjectPosition.java.patch rename to patches.mcp/minecraft/net/minecraft/util/MovingObjectPosition.java.patch index 80499add4..4dce21e9b 100644 --- a/patches/minecraft/net/minecraft/util/MovingObjectPosition.java.patch +++ b/patches.mcp/minecraft/net/minecraft/util/MovingObjectPosition.java.patch @@ -1,7 +1,7 @@ --- ../src-base/minecraft/net/minecraft/util/MovingObjectPosition.java +++ ../src-work/minecraft/net/minecraft/util/MovingObjectPosition.java @@ -11,6 +11,12 @@ - public Entity field_72308_g; + public Entity entityHit; private static final String __OBFID = "CL_00000610"; + /** Used to determine what sub-segment is hit */ diff --git a/patches/minecraft/net/minecraft/util/ResourceLocation.java.patch b/patches.mcp/minecraft/net/minecraft/util/ResourceLocation.java.patch similarity index 85% rename from patches/minecraft/net/minecraft/util/ResourceLocation.java.patch rename to patches.mcp/minecraft/net/minecraft/util/ResourceLocation.java.patch index ba2981731..6cb2dd79b 100644 --- a/patches/minecraft/net/minecraft/util/ResourceLocation.java.patch +++ b/patches.mcp/minecraft/net/minecraft/util/ResourceLocation.java.patch @@ -17,10 +17,10 @@ { this(0, new String[] {p_i1292_1_, p_i1292_2_}); @@ -51,7 +48,6 @@ - return this.field_110625_b; + return this.resourcePath; } - @SideOnly(Side.CLIENT) - public String func_110624_b() + public String getResourceDomain() { - return this.field_110626_a; + return this.resourceDomain; diff --git a/patches/minecraft/net/minecraft/util/Session.java.patch b/patches.mcp/minecraft/net/minecraft/util/Session.java.patch similarity index 68% rename from patches/minecraft/net/minecraft/util/Session.java.patch rename to patches.mcp/minecraft/net/minecraft/util/Session.java.patch index 75fdc5212..8156742c0 100644 --- a/patches/minecraft/net/minecraft/util/Session.java.patch +++ b/patches.mcp/minecraft/net/minecraft/util/Session.java.patch @@ -1,18 +1,18 @@ --- ../src-base/minecraft/net/minecraft/util/Session.java +++ ../src-work/minecraft/net/minecraft/util/Session.java @@ -16,9 +16,24 @@ - private final String field_148258_c; - private final Session.Type field_152429_d; + private final String token; + private final Session.Type sessionType; private static final String __OBFID = "CL_00000659"; + /** Forge: Cache of the local session's GameProfile properties. */ + private com.mojang.authlib.properties.PropertyMap properties; - public Session(String p_i1098_1_, String p_i1098_2_, String p_i1098_3_, String p_i1098_4_) + public Session(String usernameIn, String playerIDIn, String tokenIn, String sessionTypeIn) { -+ if (p_i1098_1_ == null || p_i1098_1_.isEmpty()) ++ if (usernameIn == null || usernameIn.isEmpty()) + { -+ p_i1098_1_ = "MissingName"; -+ p_i1098_2_ = p_i1098_3_ = "NotValid"; ++ usernameIn = "MissingName"; ++ playerIDIn = tokenIn = "NotValid"; + System.out.println("========================================================="); + System.out.println("Warning the username was not set for this session, typically"); + System.out.println("this means you installed Forge incorrectly. We have set your"); @@ -22,27 +22,27 @@ + System.out.println("========================================================="); + } + - this.field_74286_b = p_i1098_1_; - this.field_148257_b = p_i1098_2_; - this.field_148258_c = p_i1098_3_; + this.username = usernameIn; + this.playerID = playerIDIn; + this.token = tokenIn; @@ -50,11 +65,13 @@ try { - UUID uuid = UUIDTypeAdapter.fromString(this.func_148255_b()); -- return new GameProfile(uuid, this.func_111285_a()); -+ GameProfile ret = new GameProfile(uuid, this.func_111285_a()); //Forge: Adds cached GameProfile properties to returned GameProfile. + UUID uuid = UUIDTypeAdapter.fromString(this.getPlayerID()); +- return new GameProfile(uuid, this.getUsername()); ++ GameProfile ret = new GameProfile(uuid, this.getUsername()); //Forge: Adds cached GameProfile properties to returned GameProfile. + if (properties != null) ret.getProperties().putAll(properties); // Helps to cut down on calls to the session service, + return ret; // which helps to fix MC-52974. } catch (IllegalArgumentException illegalargumentexception) { -- return new GameProfile((UUID)null, this.func_111285_a()); -+ return new GameProfile(net.minecraft.entity.player.EntityPlayer.func_146094_a(new GameProfile((UUID)null, this.func_111285_a())), this.func_111285_a()); +- return new GameProfile((UUID)null, this.getUsername()); ++ return new GameProfile(net.minecraft.entity.player.EntityPlayer.getUUID(new GameProfile((UUID)null, this.getUsername())), this.getUsername()); } } @@ -63,6 +80,19 @@ - return this.field_152429_d; + return this.sessionType; } + /* ======================================== FORGE START ===================================== */ diff --git a/patches/minecraft/net/minecraft/util/StringTranslate.java.patch b/patches.mcp/minecraft/net/minecraft/util/StringTranslate.java.patch similarity index 65% rename from patches/minecraft/net/minecraft/util/StringTranslate.java.patch rename to patches.mcp/minecraft/net/minecraft/util/StringTranslate.java.patch index cbdfc628a..369f31b38 100644 --- a/patches/minecraft/net/minecraft/util/StringTranslate.java.patch +++ b/patches.mcp/minecraft/net/minecraft/util/StringTranslate.java.patch @@ -2,31 +2,31 @@ +++ ../src-work/minecraft/net/minecraft/util/StringTranslate.java @@ -18,16 +18,38 @@ { - private static final Pattern field_111053_a = Pattern.compile("%(\\d+\\$)?[\\d\\.]*[df]"); - private static final Splitter field_135065_b = Splitter.on('=').limit(2); -+ private final Map field_74816_c; - private static StringTranslate field_74817_a = new StringTranslate(); -- private final Map field_74816_c = Maps.newHashMap(); - private long field_150511_e; + private static final Pattern numericVariablePattern = Pattern.compile("%(\\d+\\$)?[\\d\\.]*[df]"); + private static final Splitter equalSignSplitter = Splitter.on('=').limit(2); ++ private final Map languageList; + private static StringTranslate instance = new StringTranslate(); +- private final Map languageList = Maps.newHashMap(); + private long lastUpdateTimeInMilliseconds; private static final String __OBFID = "CL_00001212"; public StringTranslate() { + InputStream inputstream = StringTranslate.class.getResourceAsStream("/assets/minecraft/lang/en_US.lang"); -+ field_74816_c = Maps.newHashMap(); ++ languageList = Maps.newHashMap(); + inject(this, inputstream); + } + + public static void inject(InputStream inputstream) + { -+ inject(field_74817_a, inputstream); ++ inject(instance, inputstream); + } + + private static void inject(StringTranslate inst, InputStream inputstream) + { + java.util.HashMap map = parseLangFile(inputstream); -+ inst.field_74816_c.putAll(map); -+ inst.field_150511_e = System.currentTimeMillis(); ++ inst.languageList.putAll(map); ++ inst.lastUpdateTimeInMilliseconds = System.currentTimeMillis(); + } + + public static java.util.HashMap parseLangFile(InputStream inputstream) @@ -44,14 +44,14 @@ @@ -42,17 +64,17 @@ { String s1 = astring[0]; - String s2 = field_111053_a.matcher(astring[1]).replaceAll("%$1s"); -- this.field_74816_c.put(s1, s2); + String s2 = numericVariablePattern.matcher(astring[1]).replaceAll("%$1s"); +- this.languageList.put(s1, s2); + table.put(s1, s2); } } } -- this.field_150511_e = System.currentTimeMillis(); +- this.lastUpdateTimeInMilliseconds = System.currentTimeMillis(); } - catch (IOException ioexception) + catch (Exception ioexception) @@ -61,4 +61,4 @@ + return table; } - static StringTranslate func_74808_a() + static StringTranslate getInstance() diff --git a/patches.mcp/minecraft/net/minecraft/util/Vec3.java.patch b/patches.mcp/minecraft/net/minecraft/util/Vec3.java.patch new file mode 100644 index 000000000..8712a1f7b --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/util/Vec3.java.patch @@ -0,0 +1,27 @@ +--- ../src-base/minecraft/net/minecraft/util/Vec3.java ++++ ../src-work/minecraft/net/minecraft/util/Vec3.java +@@ -1,8 +1,5 @@ + package net.minecraft.util; + +-import net.minecraftforge.fml.relauncher.Side; +-import net.minecraftforge.fml.relauncher.SideOnly; +- + public class Vec3 + { + public final double xCoord; +@@ -32,7 +29,6 @@ + this.zCoord = z; + } + +- @SideOnly(Side.CLIENT) + public Vec3 subtractReverse(Vec3 vec) + { + return new Vec3(vec.xCoord - this.xCoord, vec.yCoord - this.yCoord, vec.zCoord - this.zCoord); +@@ -49,7 +45,6 @@ + return this.xCoord * vec.xCoord + this.yCoord * vec.yCoord + this.zCoord * vec.zCoord; + } + +- @SideOnly(Side.CLIENT) + public Vec3 crossProduct(Vec3 vec) + { + return new Vec3(this.yCoord * vec.zCoord - this.zCoord * vec.yCoord, this.zCoord * vec.xCoord - this.xCoord * vec.zCoord, this.xCoord * vec.yCoord - this.yCoord * vec.xCoord); diff --git a/patches/minecraft/net/minecraft/util/WeightedRandomChestContent.java.patch b/patches.mcp/minecraft/net/minecraft/util/WeightedRandomChestContent.java.patch similarity index 54% rename from patches/minecraft/net/minecraft/util/WeightedRandomChestContent.java.patch rename to patches.mcp/minecraft/net/minecraft/util/WeightedRandomChestContent.java.patch index 12827e52b..86dfe202c 100644 --- a/patches/minecraft/net/minecraft/util/WeightedRandomChestContent.java.patch +++ b/patches.mcp/minecraft/net/minecraft/util/WeightedRandomChestContent.java.patch @@ -3,24 +3,24 @@ @@ -38,23 +38,12 @@ for (int j = 0; j < p_177630_3_; ++j) { - WeightedRandomChestContent weightedrandomchestcontent = (WeightedRandomChestContent)WeightedRandom.func_76271_a(p_177630_0_, p_177630_1_); -- int k = weightedrandomchestcontent.field_76295_d + p_177630_0_.nextInt(weightedrandomchestcontent.field_76296_e - weightedrandomchestcontent.field_76295_d + 1); -+ ItemStack[] stacks = weightedrandomchestcontent.generateChestContent(p_177630_0_, p_177630_2_); + WeightedRandomChestContent weightedrandomchestcontent = (WeightedRandomChestContent)WeightedRandom.getRandomItem(random, p_177630_1_); +- int k = weightedrandomchestcontent.theMinimumChanceToGenerateItem + random.nextInt(weightedrandomchestcontent.theMaximumChanceToGenerateItem - weightedrandomchestcontent.theMinimumChanceToGenerateItem + 1); ++ ItemStack[] stacks = weightedrandomchestcontent.generateChestContent(random, p_177630_2_); -- if (weightedrandomchestcontent.field_76297_b.func_77976_d() >= k) +- if (weightedrandomchestcontent.theItemId.getMaxStackSize() >= k) + for (ItemStack itemstack : stacks) { -- ItemStack itemstack = weightedrandomchestcontent.field_76297_b.func_77946_l(); -- itemstack.field_77994_a = k; - p_177630_2_.func_70299_a(p_177630_0_.nextInt(p_177630_2_.func_70302_i_()), itemstack); +- ItemStack itemstack = weightedrandomchestcontent.theItemId.copy(); +- itemstack.stackSize = k; + p_177630_2_.setInventorySlotContents(random.nextInt(p_177630_2_.getSizeInventory()), itemstack); } - else - { - for (int l = 0; l < k; ++l) - { -- ItemStack itemstack1 = weightedrandomchestcontent.field_76297_b.func_77946_l(); -- itemstack1.field_77994_a = 1; -- p_177630_2_.func_70299_a(p_177630_0_.nextInt(p_177630_2_.func_70302_i_()), itemstack1); +- ItemStack itemstack1 = weightedrandomchestcontent.theItemId.copy(); +- itemstack1.stackSize = 1; +- p_177630_2_.setInventorySlotContents(random.nextInt(p_177630_2_.getSizeInventory()), itemstack1); - } - } } @@ -29,24 +29,24 @@ @@ -63,23 +52,12 @@ for (int j = 0; j < p_177631_3_; ++j) { - WeightedRandomChestContent weightedrandomchestcontent = (WeightedRandomChestContent)WeightedRandom.func_76271_a(p_177631_0_, p_177631_1_); -- int k = weightedrandomchestcontent.field_76295_d + p_177631_0_.nextInt(weightedrandomchestcontent.field_76296_e - weightedrandomchestcontent.field_76295_d + 1); -+ ItemStack[] stacks = weightedrandomchestcontent.generateChestContent(p_177631_0_, p_177631_2_); + WeightedRandomChestContent weightedrandomchestcontent = (WeightedRandomChestContent)WeightedRandom.getRandomItem(random, p_177631_1_); +- int k = weightedrandomchestcontent.theMinimumChanceToGenerateItem + random.nextInt(weightedrandomchestcontent.theMaximumChanceToGenerateItem - weightedrandomchestcontent.theMinimumChanceToGenerateItem + 1); ++ ItemStack[] stacks = weightedrandomchestcontent.generateChestContent(random, dispenser); -- if (weightedrandomchestcontent.field_76297_b.func_77976_d() >= k) +- if (weightedrandomchestcontent.theItemId.getMaxStackSize() >= k) + for (ItemStack itemstack : stacks) { -- ItemStack itemstack = weightedrandomchestcontent.field_76297_b.func_77946_l(); -- itemstack.field_77994_a = k; - p_177631_2_.func_70299_a(p_177631_0_.nextInt(p_177631_2_.func_70302_i_()), itemstack); +- ItemStack itemstack = weightedrandomchestcontent.theItemId.copy(); +- itemstack.stackSize = k; + dispenser.setInventorySlotContents(random.nextInt(dispenser.getSizeInventory()), itemstack); } - else - { - for (int l = 0; l < k; ++l) - { -- ItemStack itemstack1 = weightedrandomchestcontent.field_76297_b.func_77946_l(); -- itemstack1.field_77994_a = 1; -- p_177631_2_.func_70299_a(p_177631_0_.nextInt(p_177631_2_.func_70302_i_()), itemstack1); +- ItemStack itemstack1 = weightedrandomchestcontent.theItemId.copy(); +- itemstack1.stackSize = 1; +- dispenser.setInventorySlotContents(random.nextInt(dispenser.getSizeInventory()), itemstack1); - } - } } @@ -67,6 +67,6 @@ + */ + protected ItemStack[] generateChestContent(Random random, IInventory newInventory) + { -+ return net.minecraftforge.common.ChestGenHooks.generateStacks(random, field_76297_b, field_76295_d, field_76296_e); ++ return net.minecraftforge.common.ChestGenHooks.generateStacks(random, theItemId, theMinimumChanceToGenerateItem, theMaximumChanceToGenerateItem); + } } diff --git a/patches.mcp/minecraft/net/minecraft/world/ChunkCache.java.patch b/patches.mcp/minecraft/net/minecraft/world/ChunkCache.java.patch new file mode 100644 index 000000000..4f50d372d --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/ChunkCache.java.patch @@ -0,0 +1,61 @@ +--- ../src-base/minecraft/net/minecraft/world/ChunkCache.java ++++ ../src-work/minecraft/net/minecraft/world/ChunkCache.java +@@ -64,6 +64,8 @@ + { + int i = (pos.getX() >> 4) - this.chunkX; + int j = (pos.getZ() >> 4) - this.chunkZ; ++ if (i < 0 || i >= chunkArray.length || j < 0 || j >= chunkArray[i].length) return null; ++ if (chunkArray[i][j] == null) return null; + return this.chunkArray[i][j].getTileEntity(pos, Chunk.EnumCreateEntityType.IMMEDIATE); + } + +@@ -87,6 +89,7 @@ + { + int i = (pos.getX() >> 4) - this.chunkX; + int j = (pos.getZ() >> 4) - this.chunkZ; ++ if (i < 0 || i >= chunkArray.length || j < 0 || i >= chunkArray[i].length) return Blocks.air.getDefaultState(); + + if (i >= 0 && i < this.chunkArray.length && j >= 0 && j < this.chunkArray[i].length) + { +@@ -147,6 +150,8 @@ + { + i = (pos.getX() >> 4) - this.chunkX; + int j = (pos.getZ() >> 4) - this.chunkZ; ++ if (i < 0 || i >= chunkArray.length || j < 0 || j >= chunkArray[i].length) return p_175629_1_.defaultLightValue; ++ if (chunkArray[i][j] == null) return p_175629_1_.defaultLightValue; + return this.chunkArray[i][j].getLightFor(p_175629_1_, pos); + } + } +@@ -158,7 +163,7 @@ + + public boolean isAirBlock(BlockPos pos) + { +- return this.getBlockState(pos).getBlock().getMaterial() == Material.air; ++ return this.getBlockState(pos).getBlock().isAir(this, pos); + } + + @SideOnly(Side.CLIENT) +@@ -168,6 +173,7 @@ + { + int i = (pos.getX() >> 4) - this.chunkX; + int j = (pos.getZ() >> 4) - this.chunkZ; ++ if (i < 0 || i >= chunkArray.length || j < 0 || i >= chunkArray[i].length) return p_175628_1_.defaultLightValue; + return this.chunkArray[i][j].getLightFor(p_175628_1_, pos); + } + else +@@ -187,4 +193,15 @@ + { + return this.worldObj.getWorldType(); + } ++ ++ @Override ++ public boolean isSideSolid(BlockPos pos, EnumFacing side, boolean _default) ++ { ++ int x = (pos.getX() >> 4) - this.chunkX; ++ int z = (pos.getZ() >> 4) - this.chunkZ; ++ if (pos.getY() >= 0 && pos.getY() < 256) return _default; ++ if (x < 0 || x >= chunkArray.length || z < 0 || x >= chunkArray[x].length) return _default; ++ ++ return getBlockState(pos).getBlock().isSideSolid(this, pos, side); ++ } + } diff --git a/patches.mcp/minecraft/net/minecraft/world/Explosion.java.patch b/patches.mcp/minecraft/net/minecraft/world/Explosion.java.patch new file mode 100644 index 000000000..36ea6a9b2 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/Explosion.java.patch @@ -0,0 +1,52 @@ +--- ../src-base/minecraft/net/minecraft/world/Explosion.java ++++ ../src-work/minecraft/net/minecraft/world/Explosion.java +@@ -40,6 +40,7 @@ + private final List affectedBlockPositions; + private final Map field_77288_k; + private static final String __OBFID = "CL_00000134"; ++ private final Vec3 position; + + @SideOnly(Side.CLIENT) + public Explosion(World worldIn, Entity p_i45752_2_, double p_i45752_3_, double p_i45752_5_, double p_i45752_7_, float p_i45752_9_, List p_i45752_10_) +@@ -67,6 +68,7 @@ + this.explosionZ = p_i45754_7_; + this.isFlaming = p_i45754_10_; + this.isSmoking = p_i45754_11_; ++ this.position = new Vec3(explosionX, explosionY, explosionZ); + } + + public void doExplosionA() +@@ -103,7 +105,7 @@ + + if (iblockstate.getBlock().getMaterial() != Material.air) + { +- float f2 = this.exploder != null ? this.exploder.getExplosionResistance(this, this.worldObj, blockpos, iblockstate) : iblockstate.getBlock().getExplosionResistance((Entity)null); ++ float f2 = this.exploder != null ? this.exploder.getExplosionResistance(this, this.worldObj, blockpos, iblockstate) : iblockstate.getBlock().getExplosionResistance(worldObj, blockpos, (Entity)null, this); + f -= (f2 + 0.3F) * 0.3F; + } + +@@ -130,6 +132,7 @@ + int k1 = MathHelper.floor_double(this.explosionZ - (double)f3 - 1.0D); + int i1 = MathHelper.floor_double(this.explosionZ + (double)f3 + 1.0D); + List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this.exploder, new AxisAlignedBB((double)j, (double)j1, (double)k1, (double)k, (double)l, (double)i1)); ++ net.minecraftforge.event.ForgeEventFactory.onExplosionDetonate(this.worldObj, this, list, f3); + Vec3 vec3 = new Vec3(this.explosionX, this.explosionY, this.explosionZ); + + for (int l1 = 0; l1 < list.size(); ++l1) +@@ -223,8 +226,7 @@ + block.dropBlockAsItemWithChance(this.worldObj, blockpos, this.worldObj.getBlockState(blockpos), 1.0F / this.explosionSize, 0); + } + +- this.worldObj.setBlockState(blockpos, Blocks.air.getDefaultState(), 3); +- block.onBlockDestroyedByExplosion(this.worldObj, blockpos, this); ++ block.onBlockExploded(this.worldObj, blockpos, this); + } + } + } +@@ -264,4 +266,6 @@ + { + return this.affectedBlockPositions; + } ++ ++ public Vec3 getPosition(){ return this.position; } + } diff --git a/patches/minecraft/net/minecraft/world/IBlockAccess.java.patch b/patches.mcp/minecraft/net/minecraft/world/IBlockAccess.java.patch similarity index 93% rename from patches/minecraft/net/minecraft/world/IBlockAccess.java.patch rename to patches.mcp/minecraft/net/minecraft/world/IBlockAccess.java.patch index e6b7d331d..7fb64f305 100644 --- a/patches/minecraft/net/minecraft/world/IBlockAccess.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/IBlockAccess.java.patch @@ -3,7 +3,7 @@ @@ -29,4 +29,14 @@ @SideOnly(Side.CLIENT) - WorldType func_175624_G(); + WorldType getWorldType(); + + /** + * FORGE: isSideSolid, pulled up from {@link World} diff --git a/patches/minecraft/net/minecraft/world/SpawnerAnimals.java.patch b/patches.mcp/minecraft/net/minecraft/world/SpawnerAnimals.java.patch similarity index 65% rename from patches/minecraft/net/minecraft/world/SpawnerAnimals.java.patch rename to patches.mcp/minecraft/net/minecraft/world/SpawnerAnimals.java.patch index d7dd9a4d2..8bc35b522 100644 --- a/patches/minecraft/net/minecraft/world/SpawnerAnimals.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/SpawnerAnimals.java.patch @@ -13,16 +13,16 @@ { @@ -80,12 +84,15 @@ - if ((!enumcreaturetype.func_75599_d() || p_77192_3_) && (enumcreaturetype.func_75599_d() || p_77192_2_) && (!enumcreaturetype.func_82705_e() || p_77192_4_)) + if ((!enumcreaturetype.getPeacefulCreature() || p_77192_3_) && (enumcreaturetype.getPeacefulCreature() || p_77192_2_) && (!enumcreaturetype.getAnimal() || p_77192_4_)) { -- i1 = p_77192_1_.func_72907_a(enumcreaturetype.func_75598_a()); +- i1 = p_77192_1_.countEntities(enumcreaturetype.getCreatureClass()); + i1 = p_77192_1_.countEntities(enumcreaturetype, true); - int i4 = enumcreaturetype.func_75601_b() * i / field_180268_a; + int i4 = enumcreaturetype.getMaxNumberOfCreature() * i / MOB_COUNT_DIV; if (i1 <= i4) { - Iterator iterator1 = this.field_77193_b.iterator(); -+ ArrayList tmp = new ArrayList(field_77193_b); + Iterator iterator1 = this.eligibleChunksForSpawning.iterator(); ++ ArrayList tmp = new ArrayList(eligibleChunksForSpawning); + Collections.shuffle(tmp); + iterator1 = tmp.iterator(); label115: @@ -30,31 +30,31 @@ while (iterator1.hasNext()) @@ -153,8 +160,10 @@ - entityliving.func_70012_b((double)f, (double)l2, (double)f1, p_77192_1_.field_73012_v.nextFloat() * 360.0F, 0.0F); + entityliving.setLocationAndAngles((double)f, (double)l2, (double)f1, p_77192_1_.rand.nextFloat() * 360.0F, 0.0F); -- if (entityliving.func_70601_bi() && entityliving.func_70058_J()) +- if (entityliving.getCanSpawnHere() && entityliving.handleLavaMovement()) + Result canSpawn = ForgeEventFactory.canEntitySpawn(entityliving, p_77192_1_, f, l2, f1); -+ if (canSpawn == Result.ALLOW || (canSpawn == Result.DEFAULT && (entityliving.func_70601_bi() && entityliving.func_70058_J()))) ++ if (canSpawn == Result.ALLOW || (canSpawn == Result.DEFAULT && (entityliving.getCanSpawnHere() && entityliving.handleLavaMovement()))) { + if (!ForgeEventFactory.doSpecialSpawn(entityliving, p_77192_1_, f1, l2, f1)) - ientitylivingdata = entityliving.func_180482_a(p_77192_1_.func_175649_E(new BlockPos(entityliving)), ientitylivingdata); + ientitylivingdata = entityliving.func_180482_a(p_77192_1_.getDifficultyForLocation(new BlockPos(entityliving)), ientitylivingdata); - if (entityliving.func_70058_J()) + if (entityliving.handleLavaMovement()) @@ -163,7 +172,7 @@ - p_77192_1_.func_72838_d(entityliving); + p_77192_1_.spawnEntityInWorld(entityliving); } -- if (i2 >= entityliving.func_70641_bl()) +- if (i2 >= entityliving.getMaxSpawnedInChunk()) + if (i2 >= ForgeEventFactory.getMaxSpawnPackSize(entityliving)) { continue label115; } @@ -220,7 +229,7 @@ { - BlockPos blockpos1 = p_180267_2_.func_177977_b(); + BlockPos blockpos1 = pos.down(); -- if (!World.func_175683_a(p_180267_1_, blockpos1)) -+ if (!p_180267_1_.func_180495_p(blockpos1).func_177230_c().canCreatureSpawn(p_180267_1_, blockpos1, p_180267_0_)) +- if (!World.doesBlockHaveSolidTopSurface(worldIn, blockpos1)) ++ if (!worldIn.getBlockState(blockpos1).getBlock().canCreatureSpawn(worldIn, blockpos1, p_180267_0_)) { return false; } diff --git a/patches.mcp/minecraft/net/minecraft/world/World.java.patch b/patches.mcp/minecraft/net/minecraft/world/World.java.patch new file mode 100644 index 000000000..1d9f76d6d --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/World.java.patch @@ -0,0 +1,902 @@ +--- ../src-base/minecraft/net/minecraft/world/World.java ++++ ../src-work/minecraft/net/minecraft/world/World.java +@@ -56,8 +56,30 @@ + import net.minecraftforge.fml.relauncher.Side; + import net.minecraftforge.fml.relauncher.SideOnly; + ++import net.minecraftforge.fml.common.FMLLog; ++import com.google.common.collect.ImmutableSetMultimap; ++import net.minecraftforge.client.ForgeHooksClient; ++import net.minecraftforge.common.ForgeChunkManager; ++import net.minecraftforge.common.ForgeChunkManager.Ticket; ++import net.minecraftforge.common.ForgeModContainer; ++import net.minecraftforge.common.ForgeHooks; ++import net.minecraftforge.common.MinecraftForge; ++import net.minecraftforge.common.WorldSpecificSaveHandler; ++import net.minecraftforge.event.entity.EntityEvent; ++import net.minecraftforge.event.entity.EntityJoinWorldEvent; ++import net.minecraftforge.event.world.WorldEvent; ++import net.minecraftforge.event.entity.PlaySoundAtEntityEvent; ++import net.minecraft.entity.EnumCreatureType; ++ + public abstract class World implements IBlockAccess + { ++ /** ++ * Used in the getEntitiesWithinAABB functions to expand the search area for entities. ++ * Modders should change this variable to a higher value if it is less then the radius ++ * of one of there entities. ++ */ ++ public static double MAX_ENTITY_RADIUS = 2.0D; ++ + protected boolean scheduledUpdatesAreImmediate; + public final List loadedEntityList = Lists.newArrayList(); + protected final List unloadedEntityList = Lists.newArrayList(); +@@ -99,6 +121,10 @@ + int[] lightUpdateBlockList; + private static final String __OBFID = "CL_00000140"; + ++ public boolean restoringBlockSnapshots = false; ++ public boolean captureBlockSnapshots = false; ++ public ArrayList capturedBlockSnapshots = new ArrayList(); ++ + protected World(ISaveHandler saveHandlerIn, WorldInfo info, WorldProvider providerIn, Profiler profilerIn, boolean client) + { + this.ambientTickCountdown = this.rand.nextInt(12000); +@@ -111,6 +137,7 @@ + this.provider = providerIn; + this.isRemote = client; + this.worldBorder = providerIn.getWorldBorder(); ++ perWorldStorage = new MapStorage((ISaveHandler)null); + } + + public World init() +@@ -120,6 +147,11 @@ + + public BiomeGenBase getBiomeGenForCoords(final BlockPos pos) + { ++ return this.provider.getBiomeGenForCoords(pos); ++ } ++ ++ public BiomeGenBase getBiomeGenForCoordsBody(final BlockPos pos) ++ { + if (this.isBlockLoaded(pos)) + { + Chunk chunk = this.getChunkFromBlockCoords(pos); +@@ -186,7 +218,7 @@ + + public boolean isAirBlock(BlockPos pos) + { +- return this.getBlockState(pos).getBlock().getMaterial() == Material.air; ++ return this.getBlockState(pos).getBlock().isAir(this, pos); + } + + public boolean isBlockLoaded(BlockPos pos) +@@ -286,39 +318,58 @@ + { + Chunk chunk = this.getChunkFromBlockCoords(pos); + Block block = newState.getBlock(); ++ ++ net.minecraftforge.common.util.BlockSnapshot blockSnapshot = null; ++ if (this.captureBlockSnapshots && !this.isRemote) ++ { ++ blockSnapshot = net.minecraftforge.common.util.BlockSnapshot.getBlockSnapshot(this, pos, flags); ++ this.capturedBlockSnapshots.add(blockSnapshot); ++ } ++ int oldLight = getBlockState(pos).getBlock().getLightValue(this, pos); ++ + IBlockState iblockstate1 = chunk.setBlockState(pos, newState); + + if (iblockstate1 == null) + { ++ if (blockSnapshot != null) this.capturedBlockSnapshots.remove(blockSnapshot); + return false; + } + else + { + Block block1 = iblockstate1.getBlock(); + +- if (block.getLightOpacity() != block1.getLightOpacity() || block.getLightValue() != block1.getLightValue()) ++ if (block.getLightOpacity() != block1.getLightOpacity() || block.getLightValue(this, pos) != oldLight) + { + this.theProfiler.startSection("checkLight"); + this.checkLight(pos); + this.theProfiler.endSection(); + } + +- if ((flags & 2) != 0 && (!this.isRemote || (flags & 4) == 0) && chunk.isPopulated()) ++ if (blockSnapshot == null) // Don't notify clients or update physics while capturing blockstates + { +- this.markBlockForUpdate(pos); ++ this.markAndNotifyBlock(pos, chunk, iblockstate1, newState, flags); // Modularize client and physic updates + } + +- if (!this.isRemote && (flags & 1) != 0) +- { +- this.notifyNeighborsRespectDebug(pos, iblockstate1.getBlock()); ++ return true; ++ } ++ } ++ } + +- if (block.hasComparatorInputOverride()) +- { +- this.updateComparatorOutputLevel(pos, block); +- } +- } ++ // Split off from original setBlockState(BlockPos, IBlockState Block p_147465_4_, int) method in order to directly send client and physic updates ++ public void markAndNotifyBlock(BlockPos pos, Chunk chunk, IBlockState old, IBlockState new_, int flags) ++ { ++ if ((flags & 2) != 0 && (!this.isRemote || (flags & 4) == 0) && (chunk == null || chunk.isPopulated())) ++ { ++ this.markBlockForUpdate(pos); ++ } + +- return true; ++ if (!this.isRemote && (flags & 1) != 0) ++ { ++ this.notifyNeighborsRespectDebug(pos, old.getBlock()); ++ ++ if (new_.getBlock().hasComparatorInputOverride()) ++ { ++ this.updateComparatorOutputLevel(pos, new_.getBlock()); + } + } + } +@@ -408,6 +459,9 @@ + + public void notifyNeighborsOfStateChange(BlockPos pos, Block blockType) + { ++ if(net.minecraftforge.event.ForgeEventFactory.onNeighborNotify(this, pos, this.getBlockState(pos), java.util.EnumSet.allOf(EnumFacing.class)).isCanceled()) ++ return; ++ + this.notifyBlockOfStateChange(pos.west(), blockType); + this.notifyBlockOfStateChange(pos.east(), blockType); + this.notifyBlockOfStateChange(pos.down(), blockType); +@@ -418,6 +472,11 @@ + + public void notifyNeighborsOfStateExcept(BlockPos pos, Block blockType, EnumFacing skipSide) + { ++ java.util.EnumSet directions = java.util.EnumSet.allOf(EnumFacing.class); ++ directions.remove(skipSide); ++ if(net.minecraftforge.event.ForgeEventFactory.onNeighborNotify(this, pos, this.getBlockState(pos), directions).isCanceled()) ++ return; ++ + if (skipSide != EnumFacing.WEST) + { + this.notifyBlockOfStateChange(pos.west(), blockType); +@@ -782,7 +841,7 @@ + + public boolean isDaytime() + { +- return this.skylightSubtracted < 4; ++ return this.provider.isDaytime(); + } + + public MovingObjectPosition rayTraceBlocks(Vec3 p_72933_1_, Vec3 p_72933_2_) +@@ -978,6 +1037,11 @@ + + public void playSoundAtEntity(Entity p_72956_1_, String p_72956_2_, float p_72956_3_, float p_72956_4_) + { ++ PlaySoundAtEntityEvent event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(p_72956_1_, p_72956_2_, p_72956_3_, p_72956_4_); ++ if (event.isCanceled() || event.name == null) return; ++ p_72956_2_ = event.name; ++ p_72956_3_ = event.newVolume; ++ p_72956_4_ = event.newPitch; + for (int i = 0; i < this.worldAccesses.size(); ++i) + { + ((IWorldAccess)this.worldAccesses.get(i)).playSound(p_72956_2_, p_72956_1_.posX, p_72956_1_.posY, p_72956_1_.posZ, p_72956_3_, p_72956_4_); +@@ -986,6 +1050,11 @@ + + public void playSoundToNearExcept(EntityPlayer p_85173_1_, String p_85173_2_, float p_85173_3_, float p_85173_4_) + { ++ PlaySoundAtEntityEvent event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(p_85173_1_, p_85173_2_, p_85173_3_, p_85173_4_); ++ if (event.isCanceled() || event.name == null) return; ++ p_85173_2_ = event.name; ++ p_85173_3_ = event.newVolume; ++ p_85173_4_ = event.newPitch; + for (int i = 0; i < this.worldAccesses.size(); ++i) + { + ((IWorldAccess)this.worldAccesses.get(i)).playSoundToNearExcept(p_85173_1_, p_85173_2_, p_85173_1_.posX, p_85173_1_.posY, p_85173_1_.posZ, p_85173_3_, p_85173_4_); +@@ -1037,6 +1106,9 @@ + + public boolean spawnEntityInWorld(Entity p_72838_1_) + { ++ // do not drop any items while restoring blocksnapshots. Prevents dupes ++ if (!this.isRemote && (p_72838_1_ == null || (p_72838_1_ instanceof net.minecraft.entity.item.EntityItem && this.restoringBlockSnapshots))) return false; ++ + int i = MathHelper.floor_double(p_72838_1_.posX / 16.0D); + int j = MathHelper.floor_double(p_72838_1_.posZ / 16.0D); + boolean flag = p_72838_1_.forceSpawn; +@@ -1059,6 +1131,8 @@ + this.updateAllPlayersSleepingFlag(); + } + ++ if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.EntityJoinWorldEvent(p_72838_1_, this)) && !flag) return false; ++ + this.getChunkFromChunkCoords(i, j).addEntity(p_72838_1_); + this.loadedEntityList.add(p_72838_1_); + this.onEntityAdded(p_72838_1_); +@@ -1271,17 +1345,29 @@ + + public int calculateSkylightSubtracted(float p_72967_1_) + { ++ float f2 = provider.getSunBrightnessFactor(p_72967_1_); ++ f2 = 1.0F - f2; ++ return (int)(f2 * 11.0F); ++ } ++ ++ /** ++ * The current sun brightness factor for this dimension. ++ * 0.0f means no light at all, and 1.0f means maximum sunlight. ++ * Highly recommended for sunlight detection like solar panel. ++ * ++ * @return The current brightness factor ++ * */ ++ public float getSunBrightnessFactor(float p_72967_1_) ++ { + float f1 = this.getCelestialAngle(p_72967_1_); + float f2 = 1.0F - (MathHelper.cos(f1 * (float)Math.PI * 2.0F) * 2.0F + 0.5F); + f2 = MathHelper.clamp_float(f2, 0.0F, 1.0F); + f2 = 1.0F - f2; + f2 = (float)((double)f2 * (1.0D - (double)(this.getRainStrength(p_72967_1_) * 5.0F) / 16.0D)); + f2 = (float)((double)f2 * (1.0D - (double)(this.getThunderStrength(p_72967_1_) * 5.0F) / 16.0D)); +- f2 = 1.0F - f2; +- return (int)(f2 * 11.0F); ++ return f2; + } + +- @SideOnly(Side.CLIENT) + public void removeWorldAccess(IWorldAccess p_72848_1_) + { + this.worldAccesses.remove(p_72848_1_); +@@ -1290,6 +1376,12 @@ + @SideOnly(Side.CLIENT) + public float getSunBrightness(float p_72971_1_) + { ++ return this.provider.getSunBrightness(p_72971_1_); ++ } ++ ++ @SideOnly(Side.CLIENT) ++ public float getSunBrightnessBody(float p_72971_1_) ++ { + float f1 = this.getCelestialAngle(p_72971_1_); + float f2 = 1.0F - (MathHelper.cos(f1 * (float)Math.PI * 2.0F) * 2.0F + 0.2F); + f2 = MathHelper.clamp_float(f2, 0.0F, 1.0F); +@@ -1302,6 +1394,12 @@ + @SideOnly(Side.CLIENT) + public Vec3 getSkyColor(Entity p_72833_1_, float p_72833_2_) + { ++ return this.provider.getSkyColor(p_72833_1_, p_72833_2_); ++ } ++ ++ @SideOnly(Side.CLIENT) ++ public Vec3 getSkyColorBody(Entity p_72833_1_, float p_72833_2_) ++ { + float f1 = this.getCelestialAngle(p_72833_2_); + float f2 = MathHelper.cos(f1 * (float)Math.PI * 2.0F) * 2.0F + 0.5F; + f2 = MathHelper.clamp_float(f2, 0.0F, 1.0F); +@@ -1309,9 +1407,7 @@ + int j = MathHelper.floor_double(p_72833_1_.posY); + int k = MathHelper.floor_double(p_72833_1_.posZ); + BlockPos blockpos = new BlockPos(i, j, k); +- BiomeGenBase biomegenbase = this.getBiomeGenForCoords(blockpos); +- float f3 = biomegenbase.getFloatTemperature(blockpos); +- int l = biomegenbase.getSkyColorByTemp(f3); ++ int l = net.minecraftforge.client.ForgeHooksClient.getSkyBlendColour(this, blockpos); + float f4 = (float)(l >> 16 & 255) / 255.0F; + float f5 = (float)(l >> 8 & 255) / 255.0F; + float f6 = (float)(l & 255) / 255.0F; +@@ -1373,6 +1469,11 @@ + + public float getCurrentMoonPhaseFactor() + { ++ return provider.getCurrentMoonPhaseFactor(); ++ } ++ ++ public float getCurrentMoonPhaseFactorBody() ++ { + return WorldProvider.moonPhaseFactors[this.provider.getMoonPhase(this.worldInfo.getWorldTime())]; + } + +@@ -1385,6 +1486,12 @@ + @SideOnly(Side.CLIENT) + public Vec3 getCloudColour(float p_72824_1_) + { ++ return this.provider.drawClouds(p_72824_1_); ++ } ++ ++ @SideOnly(Side.CLIENT) ++ public Vec3 drawCloudsBody(float p_72824_1_) ++ { + float f1 = this.getCelestialAngle(p_72824_1_); + float f2 = MathHelper.cos(f1 * (float)Math.PI * 2.0F) * 2.0F + 0.5F; + f2 = MathHelper.clamp_float(f2, 0.0F, 1.0F); +@@ -1442,9 +1549,9 @@ + for (blockpos1 = new BlockPos(pos.getX(), chunk.getTopFilledSegment() + 16, pos.getZ()); blockpos1.getY() >= 0; blockpos1 = blockpos2) + { + blockpos2 = blockpos1.down(); +- Material material = chunk.getBlock(blockpos2).getMaterial(); ++ Block block = chunk.getBlock(blockpos2); + +- if (material.blocksMovement() && material != Material.leaves) ++ if (block.getMaterial().blocksMovement() && !block.isLeaves(this, blockpos2) && !block.isFoliage(this, blockpos2)) + { + break; + } +@@ -1456,6 +1563,12 @@ + @SideOnly(Side.CLIENT) + public float getStarBrightness(float p_72880_1_) + { ++ return this.provider.getStarBrightness(p_72880_1_); ++ } ++ ++ @SideOnly(Side.CLIENT) ++ public float getStarBrightnessBody(float p_72880_1_) ++ { + float f1 = this.getCelestialAngle(p_72880_1_); + float f2 = 1.0F - (MathHelper.cos(f1 * (float)Math.PI * 2.0F) * 2.0F + 0.25F); + f2 = MathHelper.clamp_float(f2, 0.0F, 1.0F); +@@ -1500,7 +1613,15 @@ + entity.addEntityCrashInfo(crashreportcategory); + } + +- throw new ReportedException(crashreport); ++ if (ForgeModContainer.removeErroringEntities) ++ { ++ FMLLog.severe(crashreport.getCompleteReport()); ++ removeEntity(entity); ++ } ++ else ++ { ++ throw new ReportedException(crashreport); ++ } + } + + if (entity.isDead) +@@ -1562,7 +1683,16 @@ + crashreport = CrashReport.makeCrashReport(throwable1, "Ticking entity"); + crashreportcategory = crashreport.makeCategory("Entity being ticked"); + entity.addEntityCrashInfo(crashreportcategory); +- throw new ReportedException(crashreport); ++ if (ForgeModContainer.removeErroringEntities) ++ { ++ FMLLog.severe(crashreport.getCompleteReport()); ++ removeEntity(entity); ++ } ++ else ++ { ++ throw new ReportedException(crashreport); ++ } ++ + } + } + +@@ -1609,7 +1739,16 @@ + CrashReport crashreport1 = CrashReport.makeCrashReport(throwable, "Ticking block entity"); + CrashReportCategory crashreportcategory1 = crashreport1.makeCategory("Block entity being ticked"); + tileentity.addInfoToCrashReport(crashreportcategory1); +- throw new ReportedException(crashreport1); ++ if (ForgeModContainer.removeErroringTileEntities) ++ { ++ FMLLog.severe(crashreport1.getCompleteReport()); ++ tileentity.invalidate(); ++ this.removeTileEntity(tileentity.getPos()); ++ } ++ else ++ { ++ throw new ReportedException(crashreport1); ++ } + } + } + } +@@ -1626,15 +1765,19 @@ + } + } + +- this.processingLoadedTiles = false; +- + if (!this.tileEntitiesToBeRemoved.isEmpty()) + { ++ for (Object tile : tileEntitiesToBeRemoved) ++ { ++ ((TileEntity)tile).onChunkUnload(); ++ } + this.tickableTileEntities.removeAll(this.tileEntitiesToBeRemoved); + this.loadedTileEntityList.removeAll(this.tileEntitiesToBeRemoved); + this.tileEntitiesToBeRemoved.clear(); + } + ++ this.processingLoadedTiles = false; //FML Move below remove to prevent CMEs ++ + this.theProfiler.endStartSection("pendingBlockEntities"); + + if (!this.addedTileEntityList.isEmpty()) +@@ -1668,7 +1811,8 @@ + + public boolean addTileEntity(TileEntity tile) + { +- boolean flag = this.loadedTileEntityList.add(tile); ++ List dest = processingLoadedTiles ? addedTileEntityList : loadedTileEntityList; ++ boolean flag = dest.add(tile); + + if (flag && tile instanceof IUpdatePlayerListBox) + { +@@ -1710,9 +1854,12 @@ + { + int i = MathHelper.floor_double(p_72866_1_.posX); + int j = MathHelper.floor_double(p_72866_1_.posZ); +- byte b0 = 32; ++ boolean isForced = getPersistentChunks().containsKey(new ChunkCoordIntPair(i >> 4, j >> 4)); ++ byte b0 = isForced ? (byte)0 : 32; ++ boolean canUpdate = !p_72866_2_ || this.isAreaLoaded(i - b0, 0, j - b0, i + b0, 0, j + b0, true); ++ if (!canUpdate) canUpdate = net.minecraftforge.event.ForgeEventFactory.canEntityUpdate(p_72866_1_); + +- if (!p_72866_2_ || this.isAreaLoaded(i - b0, 0, j - b0, i + b0, 0, j + b0, true)) ++ if (canUpdate) + { + p_72866_1_.lastTickPosX = p_72866_1_.posX; + p_72866_1_.lastTickPosY = p_72866_1_.posY; +@@ -1839,7 +1986,7 @@ + { + Block block = this.getBlockState(new BlockPos(k1, l1, i2)).getBlock(); + +- if (block.getMaterial() != Material.air) ++ if (!block.isAir(this, new BlockPos(k1, l1, i2))) + { + return true; + } +@@ -1901,6 +2048,10 @@ + { + return true; + } ++ else if (block.isBurning(this, new BlockPos(k1, l1, i2))) ++ { ++ return true; ++ } + } + } + } +@@ -2039,6 +2190,7 @@ + public Explosion newExplosion(Entity p_72885_1_, double p_72885_2_, double p_72885_4_, double p_72885_6_, float p_72885_8_, boolean p_72885_9_, boolean p_72885_10_) + { + Explosion explosion = new Explosion(this, p_72885_1_, p_72885_2_, p_72885_4_, p_72885_6_, p_72885_8_, p_72885_9_, p_72885_10_); ++ if (net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this, explosion)) return explosion; + explosion.doExplosionA(); + explosion.doExplosionB(true); + return explosion; +@@ -2185,19 +2337,28 @@ + else + { + this.addTileEntity(tileEntityIn); +- this.getChunkFromBlockCoords(pos).addTileEntity(pos, tileEntityIn); ++ Chunk chunk = this.getChunkFromBlockCoords(pos); //Forge add NPE protection ++ if (chunk != null) chunk.addTileEntity(pos, tileEntityIn); + } ++ this.updateComparatorOutputLevel(pos, getBlockState(pos).getBlock()); //Notify neighbors of changes + } + } + + public void removeTileEntity(BlockPos pos) + { ++ //Chunk chunk = this.getChunkFromBlockCoords(pos); ++ //if (chunk != null) chunk.removeTileEntity(pos); ++ //Forge ToDO: Are these patches needed anymore? ++ + TileEntity tileentity = this.getTileEntity(pos); + + if (tileentity != null && this.processingLoadedTiles) + { + tileentity.invalidate(); + this.addedTileEntityList.remove(tileentity); ++ if (!(tileentity instanceof IUpdatePlayerListBox)) //Forge: If they are not tickable they wont be removed in the update loop. ++ this.loadedTileEntityList.remove(tileentity); ++ + } + else + { +@@ -2210,6 +2371,7 @@ + + this.getChunkFromBlockCoords(pos).removeTileEntity(pos); + } ++ this.updateComparatorOutputLevel(pos, getBlockState(pos).getBlock()); //Notify neighbors of changes + } + + public void markTileEntityForRemoval(TileEntity tileEntityIn) +@@ -2228,7 +2390,7 @@ + { + IBlockState iblockstate = p_175683_0_.getBlockState(p_175683_1_); + Block block = iblockstate.getBlock(); +- return block.getMaterial().isOpaque() && block.isFullCube() ? true : (block instanceof BlockStairs ? iblockstate.getValue(BlockStairs.HALF) == BlockStairs.EnumHalf.TOP : (block instanceof BlockSlab ? iblockstate.getValue(BlockSlab.HALF) == BlockSlab.EnumBlockHalf.TOP : (block instanceof BlockHopper ? true : (block instanceof BlockSnow ? ((Integer)iblockstate.getValue(BlockSnow.LAYERS)).intValue() == 7 : false)))); ++ return block.isSideSolid(p_175683_0_, p_175683_1_, EnumFacing.UP); + } + + public boolean isBlockNormalCube(BlockPos p_175677_1_, boolean p_175677_2_) +@@ -2248,7 +2410,7 @@ + else + { + Block block = this.getBlockState(p_175677_1_).getBlock(); +- return block.getMaterial().isOpaque() && block.isFullCube(); ++ return block.isNormalCube(this, p_175677_1_); + } + } + } +@@ -2265,8 +2427,7 @@ + + public void setAllowedSpawnTypes(boolean hostile, boolean peaceful) + { +- this.spawnHostileMobs = hostile; +- this.spawnPeacefulMobs = peaceful; ++ this.provider.setAllowedSpawnTypes(hostile, peaceful); + } + + public void tick() +@@ -2276,6 +2437,11 @@ + + protected void calculateInitialWeather() + { ++ this.provider.calculateInitialWeather(); ++ } ++ ++ public void calculateInitialWeatherBody() ++ { + if (this.worldInfo.isRaining()) + { + this.rainingStrength = 1.0F; +@@ -2289,6 +2455,11 @@ + + protected void updateWeather() + { ++ this.provider.updateWeather(); ++ } ++ ++ public void updateWeatherBody() ++ { + if (!this.provider.getHasNoSky()) + { + if (!this.isRemote) +@@ -2383,6 +2554,7 @@ + { + this.activeChunkSet.clear(); + this.theProfiler.startSection("buildList"); ++ this.activeChunkSet.addAll(getPersistentChunks().keySet()); + int i; + EntityPlayer entityplayer; + int j; +@@ -2445,7 +2617,7 @@ + l += p_147467_1_; + i1 += p_147467_2_; + +- if (block.getMaterial() == Material.air && this.getLight(blockpos) <= this.rand.nextInt(8) && this.getLightFor(EnumSkyBlock.SKY, blockpos) <= 0) ++ if (block.isAir(this, blockpos) && this.getLight(blockpos) <= this.rand.nextInt(8) && this.getLightFor(EnumSkyBlock.SKY, blockpos) <= 0) + { + EntityPlayer entityplayer = this.getClosestPlayer((double)l + 0.5D, (double)j1 + 0.5D, (double)i1 + 0.5D, 8.0D); + +@@ -2485,6 +2657,11 @@ + + public boolean canBlockFreeze(BlockPos pos, boolean noWaterAdj) + { ++ return this.provider.canBlockFreeze(pos, noWaterAdj); ++ } ++ ++ public boolean canBlockFreezeBody(BlockPos pos, boolean noWaterAdj) ++ { + BiomeGenBase biomegenbase = this.getBiomeGenForCoords(pos); + float f = biomegenbase.getFloatTemperature(pos); + +@@ -2526,6 +2703,11 @@ + + public boolean canSnowAt(BlockPos pos, boolean checkLight) + { ++ return this.provider.canSnowAt(pos, checkLight); ++ } ++ ++ public boolean canSnowAtBody(BlockPos pos, boolean checkLight) ++ { + BiomeGenBase biomegenbase = this.getBiomeGenForCoords(pos); + float f = biomegenbase.getFloatTemperature(pos); + +@@ -2543,7 +2725,7 @@ + { + Block block = this.getBlockState(pos).getBlock(); + +- if (block.getMaterial() == Material.air && Blocks.snow_layer.canPlaceBlockAt(this, pos)) ++ if (block.isAir(this, pos) && Blocks.snow_layer.canPlaceBlockAt(this, pos)) + { + return true; + } +@@ -2575,10 +2757,11 @@ + else + { + Block block = this.getBlockState(pos).getBlock(); +- int i = lightType == EnumSkyBlock.SKY ? 0 : block.getLightValue(); +- int j = block.getLightOpacity(); ++ int blockLight = block.getLightValue(this, pos); ++ int i = lightType == EnumSkyBlock.SKY ? 0 : blockLight; ++ int j = block.getLightOpacity(this, pos); + +- if (j >= 15 && block.getLightValue() > 0) ++ if (j >= 15 && blockLight > 0) + { + j = 1; + } +@@ -2792,10 +2975,10 @@ + public List func_175674_a(Entity entityIn, AxisAlignedBB p_175674_2_, Predicate p_175674_3_) + { + ArrayList arraylist = Lists.newArrayList(); +- int i = MathHelper.floor_double((p_175674_2_.minX - 2.0D) / 16.0D); +- int j = MathHelper.floor_double((p_175674_2_.maxX + 2.0D) / 16.0D); +- int k = MathHelper.floor_double((p_175674_2_.minZ - 2.0D) / 16.0D); +- int l = MathHelper.floor_double((p_175674_2_.maxZ + 2.0D) / 16.0D); ++ int i = MathHelper.floor_double((p_175674_2_.minX - MAX_ENTITY_RADIUS) / 16.0D); ++ int j = MathHelper.floor_double((p_175674_2_.maxX + MAX_ENTITY_RADIUS) / 16.0D); ++ int k = MathHelper.floor_double((p_175674_2_.minZ - MAX_ENTITY_RADIUS) / 16.0D); ++ int l = MathHelper.floor_double((p_175674_2_.maxZ + MAX_ENTITY_RADIUS) / 16.0D); + + for (int i1 = i; i1 <= j; ++i1) + { +@@ -2854,10 +3037,10 @@ + + public List getEntitiesWithinAABB(Class clazz, AxisAlignedBB aabb, Predicate filter) + { +- int i = MathHelper.floor_double((aabb.minX - 2.0D) / 16.0D); +- int j = MathHelper.floor_double((aabb.maxX + 2.0D) / 16.0D); +- int k = MathHelper.floor_double((aabb.minZ - 2.0D) / 16.0D); +- int l = MathHelper.floor_double((aabb.maxZ + 2.0D) / 16.0D); ++ int i = MathHelper.floor_double((aabb.minX - MAX_ENTITY_RADIUS) / 16.0D); ++ int j = MathHelper.floor_double((aabb.maxX + MAX_ENTITY_RADIUS) / 16.0D); ++ int k = MathHelper.floor_double((aabb.minZ - MAX_ENTITY_RADIUS) / 16.0D); ++ int l = MathHelper.floor_double((aabb.maxZ + MAX_ENTITY_RADIUS) / 16.0D); + ArrayList arraylist = Lists.newArrayList(); + + for (int i1 = i; i1 <= j; ++i1) +@@ -2938,13 +3121,16 @@ + + public void loadEntities(Collection entityCollection) + { +- this.loadedEntityList.addAll(entityCollection); + Iterator iterator = entityCollection.iterator(); + + while (iterator.hasNext()) + { + Entity entity = (Entity)iterator.next(); +- this.onEntityAdded(entity); ++ if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.EntityJoinWorldEvent(entity, this))) ++ { ++ loadedEntityList.add(entity); ++ this.onEntityAdded(entity); ++ } + } + } + +@@ -2957,7 +3143,9 @@ + { + Block block1 = this.getBlockState(p_175716_2_).getBlock(); + AxisAlignedBB axisalignedbb = p_175716_3_ ? null : p_175716_1_.getCollisionBoundingBox(this, p_175716_2_, p_175716_1_.getDefaultState()); +- return axisalignedbb != null && !this.checkNoEntityCollision(axisalignedbb, p_175716_5_) ? false : (block1.getMaterial() == Material.circuits && p_175716_1_ == Blocks.anvil ? true : block1.getMaterial().isReplaceable() && p_175716_1_.canReplace(this, p_175716_2_, p_175716_4_, p_175716_6_)); ++ if (axisalignedbb != null && !this.checkNoEntityCollision(axisalignedbb, p_175716_5_)) return false; ++ if (block1.getMaterial() == Material.circuits && p_175716_1_ == Blocks.anvil) return true; ++ return block1.isReplaceable(this, p_175716_2_) && p_175716_1_.canReplace(this, p_175716_2_, p_175716_4_, p_175716_6_); + } + + public int getStrongPower(BlockPos pos, EnumFacing direction) +@@ -3032,7 +3220,7 @@ + { + IBlockState iblockstate = this.getBlockState(pos); + Block block = iblockstate.getBlock(); +- return block.isNormalCube() ? this.getStrongPower(pos) : block.isProvidingWeakPower(this, pos, iblockstate, facing); ++ return block.shouldCheckWeakPower(this, pos, facing) ? this.getStrongPower(pos) : block.isProvidingWeakPower(this, pos, iblockstate, facing); + } + + public boolean isBlockPowered(BlockPos pos) +@@ -3160,7 +3348,7 @@ + + public long getSeed() + { +- return this.worldInfo.getSeed(); ++ return this.provider.getSeed(); + } + + public long getTotalWorldTime() +@@ -3170,17 +3358,17 @@ + + public long getWorldTime() + { +- return this.worldInfo.getWorldTime(); ++ return this.provider.getWorldTime(); + } + + public void setWorldTime(long time) + { +- this.worldInfo.setWorldTime(time); ++ this.provider.setWorldTime(time); + } + + public BlockPos getSpawnPoint() + { +- BlockPos blockpos = new BlockPos(this.worldInfo.getSpawnX(), this.worldInfo.getSpawnY(), this.worldInfo.getSpawnZ()); ++ BlockPos blockpos = this.provider.getSpawnPoint(); + + if (!this.getWorldBorder().contains(blockpos)) + { +@@ -3192,7 +3380,7 @@ + + public void setSpawnPoint(BlockPos pos) + { +- this.worldInfo.setSpawn(pos); ++ this.provider.setSpawnPoint(pos); + } + + @SideOnly(Side.CLIENT) +@@ -3212,12 +3400,18 @@ + + if (!this.loadedEntityList.contains(entityIn)) + { ++ if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.EntityJoinWorldEvent(entityIn, this))) + this.loadedEntityList.add(entityIn); + } + } + + public boolean isBlockModifiable(EntityPlayer player, BlockPos pos) + { ++ return this.provider.canMineBlock(player, pos); ++ } ++ ++ public boolean canMineBlockBody(EntityPlayer player, BlockPos pos) ++ { + return true; + } + +@@ -3307,8 +3501,7 @@ + + public boolean isBlockinHighHumidity(BlockPos pos) + { +- BiomeGenBase biomegenbase = this.getBiomeGenForCoords(pos); +- return biomegenbase.isHighHumidity(); ++ return this.provider.isBlockHighHumidity(pos); + } + + public MapStorage getMapStorage() +@@ -3367,12 +3560,12 @@ + + public int getHeight() + { +- return 256; ++ return this.provider.getHeight(); + } + + public int getActualHeight() + { +- return this.provider.getHasNoSky() ? 128 : 256; ++ return this.provider.getActualHeight(); + } + + public Random setRandomSeed(int p_72843_1_, int p_72843_2_, int p_72843_3_) +@@ -3429,7 +3622,7 @@ + @SideOnly(Side.CLIENT) + public double getHorizon() + { +- return this.worldInfo.getTerrainType() == WorldType.FLAT ? 0.0D : 63.0D; ++ return provider.getHorizon(); + } + + public void sendBlockBreakProgress(int breakerId, BlockPos pos, int progress) +@@ -3461,29 +3654,21 @@ + + public void updateComparatorOutputLevel(BlockPos pos, Block blockIn) + { +- Iterator iterator = EnumFacing.Plane.HORIZONTAL.iterator(); +- +- while (iterator.hasNext()) ++ for (EnumFacing enumfacing : EnumFacing.values()) + { +- EnumFacing enumfacing = (EnumFacing)iterator.next(); + BlockPos blockpos1 = pos.offset(enumfacing); + + if (this.isBlockLoaded(blockpos1)) + { + IBlockState iblockstate = this.getBlockState(blockpos1); +- +- if (Blocks.unpowered_comparator.isAssociated(iblockstate.getBlock())) ++ iblockstate.getBlock().onNeighborChange(this, blockpos1, pos); ++ if (iblockstate.getBlock().isNormalCube(this, blockpos1)) + { +- iblockstate.getBlock().onNeighborBlockChange(this, blockpos1, iblockstate, blockIn); +- } +- else if (iblockstate.getBlock().isNormalCube()) +- { +- blockpos1 = blockpos1.offset(enumfacing); +- iblockstate = this.getBlockState(blockpos1); +- +- if (Blocks.unpowered_comparator.isAssociated(iblockstate.getBlock())) ++ BlockPos posOther = blockpos1.offset(enumfacing); ++ Block other = getBlockState(posOther).getBlock(); ++ if (other.getWeakChanges(this, posOther)) + { +- iblockstate.getBlock().onNeighborBlockChange(this, blockpos1, iblockstate, blockIn); ++ other.onNeighborChange(this, posOther, pos); + } + } + } +@@ -3553,4 +3738,82 @@ + short short1 = 128; + return k >= -short1 && k <= short1 && l >= -short1 && l <= short1; + } ++ ++ ++ /* ======================================== FORGE START =====================================*/ ++ /** ++ * Determine if the given block is considered solid on the ++ * specified side. Used by placement logic. ++ * ++ * @param pos Block Position ++ * @param side The Side in question ++ * @return True if the side is solid ++ */ ++ public boolean isSideSolid(BlockPos pos, EnumFacing side) ++ { ++ return isSideSolid(pos, side, false); ++ } ++ ++ /** ++ * Determine if the given block is considered solid on the ++ * specified side. Used by placement logic. ++ * ++ * @param pos Block Position ++ * @param side The Side in question ++ * @param _default The default to return if the block doesn't exist. ++ * @return True if the side is solid ++ */ ++ @Override ++ public boolean isSideSolid(BlockPos pos, EnumFacing side, boolean _default) ++ { ++ if (!this.isValid(pos)) return _default; ++ ++ Chunk chunk = getChunkFromBlockCoords(pos); ++ if (chunk == null || chunk.isEmpty()) return _default; ++ return getBlockState(pos).getBlock().isSideSolid(this, pos, side); ++ } ++ ++ /** ++ * Get the persistent chunks for this world ++ * ++ * @return ++ */ ++ public ImmutableSetMultimap getPersistentChunks() ++ { ++ return ForgeChunkManager.getPersistentChunksFor(this); ++ } ++ ++ /** ++ * Readded as it was removed, very useful helper function ++ * ++ * @param pos Block position ++ * @return The blocks light opacity ++ */ ++ public int getBlockLightOpacity(BlockPos pos) ++ { ++ if (!this.isValid(pos)) return 0; ++ return getChunkFromBlockCoords(pos).getBlockLightOpacity(pos); ++ } ++ ++ /** ++ * Returns a count of entities that classify themselves as the specified creature type. ++ */ ++ public int countEntities(EnumCreatureType type, boolean forSpawnCount) ++ { ++ int count = 0; ++ for (int x = 0; x < loadedEntityList.size(); x++) ++ { ++ if (((Entity)loadedEntityList.get(x)).isCreatureType(type, forSpawnCount)) ++ { ++ count++; ++ } ++ } ++ return count; ++ } ++ ++ protected MapStorage perWorldStorage; //Moved to a getter to simulate final without being final so we can load in subclasses. ++ public MapStorage getPerWorldStorage() ++ { ++ return perWorldStorage; ++ } + } diff --git a/patches/minecraft/net/minecraft/world/WorldProvider.java.patch b/patches.mcp/minecraft/net/minecraft/world/WorldProvider.java.patch similarity index 61% rename from patches/minecraft/net/minecraft/world/WorldProvider.java.patch rename to patches.mcp/minecraft/net/minecraft/world/WorldProvider.java.patch index 1a809089e..992abea45 100644 --- a/patches/minecraft/net/minecraft/world/WorldProvider.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/WorldProvider.java.patch @@ -2,62 +2,62 @@ +++ ../src-work/minecraft/net/minecraft/world/WorldProvider.java @@ -52,26 +52,12 @@ - protected void func_76572_b() + protected void registerWorldChunkManager() { -- WorldType worldtype = this.field_76579_a.func_72912_H().func_76067_t(); +- WorldType worldtype = this.worldObj.getWorldInfo().getTerrainType(); - -- if (worldtype == WorldType.field_77138_c) +- if (worldtype == WorldType.FLAT) - { -- FlatGeneratorInfo flatgeneratorinfo = FlatGeneratorInfo.func_82651_a(this.field_76579_a.func_72912_H().func_82571_y()); -- this.field_76578_c = new WorldChunkManagerHell(BiomeGenBase.func_180276_a(flatgeneratorinfo.func_82648_a(), BiomeGenBase.field_180279_ad), 0.5F); +- FlatGeneratorInfo flatgeneratorinfo = FlatGeneratorInfo.createFlatGeneratorFromString(this.worldObj.getWorldInfo().getGeneratorOptions()); +- this.worldChunkMgr = new WorldChunkManagerHell(BiomeGenBase.getBiomeFromBiomeList(flatgeneratorinfo.getBiome(), BiomeGenBase.field_180279_ad), 0.5F); - } -- else if (worldtype == WorldType.field_180272_g) +- else if (worldtype == WorldType.DEBUG_WORLD) - { -- this.field_76578_c = new WorldChunkManagerHell(BiomeGenBase.field_76772_c, 0.0F); +- this.worldChunkMgr = new WorldChunkManagerHell(BiomeGenBase.plains, 0.0F); - } - else - { -- this.field_76578_c = new WorldChunkManager(this.field_76579_a); +- this.worldChunkMgr = new WorldChunkManager(this.worldObj); - } -+ this.field_76578_c = field_76577_b.getChunkManager(field_76579_a); ++ this.worldChunkMgr = terrainType.getChunkManager(worldObj); } - public IChunkProvider func_76555_c() + public IChunkProvider createChunkGenerator() { -- return (IChunkProvider)(this.field_76577_b == WorldType.field_77138_c ? new ChunkProviderFlat(this.field_76579_a, this.field_76579_a.func_72905_C(), this.field_76579_a.func_72912_H().func_76089_r(), this.field_82913_c) : (this.field_76577_b == WorldType.field_180272_g ? new ChunkProviderDebug(this.field_76579_a) : (this.field_76577_b == WorldType.field_180271_f ? new ChunkProviderGenerate(this.field_76579_a, this.field_76579_a.func_72905_C(), this.field_76579_a.func_72912_H().func_76089_r(), this.field_82913_c) : new ChunkProviderGenerate(this.field_76579_a, this.field_76579_a.func_72905_C(), this.field_76579_a.func_72912_H().func_76089_r(), this.field_82913_c)))); -+ return field_76577_b.getChunkGenerator(field_76579_a, field_82913_c); +- return (IChunkProvider)(this.terrainType == WorldType.FLAT ? new ChunkProviderFlat(this.worldObj, this.worldObj.getSeed(), this.worldObj.getWorldInfo().isMapFeaturesEnabled(), this.generatorSettings) : (this.terrainType == WorldType.DEBUG_WORLD ? new ChunkProviderDebug(this.worldObj) : (this.terrainType == WorldType.CUSTOMIZED ? new ChunkProviderGenerate(this.worldObj, this.worldObj.getSeed(), this.worldObj.getWorldInfo().isMapFeaturesEnabled(), this.generatorSettings) : new ChunkProviderGenerate(this.worldObj, this.worldObj.getSeed(), this.worldObj.getWorldInfo().isMapFeaturesEnabled(), this.generatorSettings)))); ++ return terrainType.getChunkGenerator(worldObj, generatorSettings); } - public boolean func_76566_a(int p_76566_1_, int p_76566_2_) + public boolean canCoordinateBeSpawn(int x, int z) @@ -155,13 +141,13 @@ - public static WorldProvider func_76570_a(int p_76570_0_) + public static WorldProvider getProviderForDimension(int dimension) { -- return (WorldProvider)(p_76570_0_ == -1 ? new WorldProviderHell() : (p_76570_0_ == 0 ? new WorldProviderSurface() : (p_76570_0_ == 1 ? new WorldProviderEnd() : null))); -+ return net.minecraftforge.common.DimensionManager.createProviderFor(p_76570_0_); +- return (WorldProvider)(dimension == -1 ? new WorldProviderHell() : (dimension == 0 ? new WorldProviderSurface() : (dimension == 1 ? new WorldProviderEnd() : null))); ++ return net.minecraftforge.common.DimensionManager.createProviderFor(dimension); } @SideOnly(Side.CLIENT) - public float func_76571_f() + public float getCloudHeight() { - return 128.0F; -+ return this.field_76577_b.getCloudHeight(); ++ return this.terrainType.getCloudHeight(); } @SideOnly(Side.CLIENT) @@ -177,13 +163,13 @@ - public int func_76557_i() + public int getAverageGroundLevel() { -- return this.field_76577_b == WorldType.field_77138_c ? 4 : 64; -+ return this.field_76577_b.getMinimumSpawnHeight(this.field_76579_a); +- return this.terrainType == WorldType.FLAT ? 4 : 64; ++ return this.terrainType.getMinimumSpawnHeight(this.worldObj); } @SideOnly(Side.CLIENT) - public double func_76565_k() + public double getVoidFogYFactor() { -- return this.field_76577_b == WorldType.field_77138_c ? 1.0D : 0.03125D; -+ return this.field_76577_b.voidFadeMagnitude(); +- return this.terrainType == WorldType.FLAT ? 1.0D : 0.03125D; ++ return this.terrainType.voidFadeMagnitude(); } @SideOnly(Side.CLIENT) @@ -79,7 +79,7 @@ + */ + public void setDimension(int dim) + { -+ this.field_76574_g = dim; ++ this.dimensionId = dim; + } + + /** @@ -89,7 +89,7 @@ + */ + public String getSaveFolder() + { -+ return (field_76574_g == 0 ? null : "DIM" + field_76574_g); ++ return (dimensionId == 0 ? null : "DIM" + dimensionId); + } + + /** @@ -181,18 +181,18 @@ + + public BlockPos getRandomizedSpawnPoint() + { -+ BlockPos ret = this.field_76579_a.func_175694_M(); ++ BlockPos ret = this.worldObj.getSpawnPoint(); + -+ boolean isAdventure = field_76579_a.func_72912_H().func_76077_q() == WorldSettings.GameType.ADVENTURE; -+ int spawnFuzz = field_76577_b.getSpawnFuzz(); -+ int border = MathHelper.func_76128_c(field_76579_a.func_175723_af().func_177729_b(ret.func_177958_n(), ret.func_177952_p())); ++ boolean isAdventure = worldObj.getWorldInfo().getGameType() == WorldSettings.GameType.ADVENTURE; ++ int spawnFuzz = terrainType.getSpawnFuzz(); ++ int border = MathHelper.floor_double(worldObj.getWorldBorder().getClosestDistance(ret.getX(), ret.getZ())); + if (border < spawnFuzz) spawnFuzz = border; + if (spawnFuzz < 1) spawnFuzz = 1; + int spawnFuzzHalf = spawnFuzz / 2; + -+ if (!func_177495_o() && !isAdventure) ++ if (!getHasNoSky() && !isAdventure) + { -+ ret = field_76579_a.func_175672_r(ret.func_177982_a(field_76579_a.field_73012_v.nextInt(spawnFuzzHalf) - spawnFuzz, 0, field_76579_a.field_73012_v.nextInt(spawnFuzzHalf) - spawnFuzz)); ++ ret = worldObj.getTopSolidOrLiquidBlock(ret.add(worldObj.rand.nextInt(spawnFuzzHalf) - spawnFuzz, 0, worldObj.rand.nextInt(spawnFuzzHalf) - spawnFuzz)); + } + + return ret; @@ -208,7 +208,7 @@ + */ + public boolean shouldMapSpin(String entity, double x, double y, double z) + { -+ return field_76574_g < 0; ++ return dimensionId < 0; + } + + /** @@ -226,12 +226,12 @@ + + public BiomeGenBase getBiomeGenForCoords(BlockPos pos) + { -+ return field_76579_a.getBiomeGenForCoordsBody(pos); ++ return worldObj.getBiomeGenForCoordsBody(pos); + } + + public boolean isDaytime() + { -+ return field_76579_a.func_175657_ab() < 4; ++ return worldObj.getSkylightSubtracted() < 4; + } + + /** @@ -244,7 +244,7 @@ + * */ + public float getSunBrightnessFactor(float par1) + { -+ return field_76579_a.getSunBrightnessFactor(par1); ++ return worldObj.getSunBrightnessFactor(par1); + } + + /** @@ -254,19 +254,19 @@ + * */ + public float getCurrentMoonPhaseFactor() + { -+ return field_76579_a.getCurrentMoonPhaseFactorBody(); ++ return worldObj.getCurrentMoonPhaseFactorBody(); + } + + @SideOnly(Side.CLIENT) + public Vec3 getSkyColor(net.minecraft.entity.Entity cameraEntity, float partialTicks) + { -+ return field_76579_a.getSkyColorBody(cameraEntity, partialTicks); ++ return worldObj.getSkyColorBody(cameraEntity, partialTicks); + } + + @SideOnly(Side.CLIENT) + public Vec3 drawClouds(float partialTicks) + { -+ return field_76579_a.drawCloudsBody(partialTicks); ++ return worldObj.drawCloudsBody(partialTicks); + } + + /** @@ -275,7 +275,7 @@ + @SideOnly(Side.CLIENT) + public float getSunBrightness(float par1) + { -+ return field_76579_a.getSunBrightnessBody(par1); ++ return worldObj.getSunBrightnessBody(par1); + } + + /** @@ -284,68 +284,68 @@ + @SideOnly(Side.CLIENT) + public float getStarBrightness(float par1) + { -+ return field_76579_a.getStarBrightnessBody(par1); ++ return worldObj.getStarBrightnessBody(par1); + } + + public void setAllowedSpawnTypes(boolean allowHostile, boolean allowPeaceful) + { -+ field_76579_a.field_72985_G = allowHostile; -+ field_76579_a.field_72992_H = allowPeaceful; ++ worldObj.spawnHostileMobs = allowHostile; ++ worldObj.spawnPeacefulMobs = allowPeaceful; + } + + public void calculateInitialWeather() + { -+ field_76579_a.calculateInitialWeatherBody(); ++ worldObj.calculateInitialWeatherBody(); + } + + public void updateWeather() + { -+ field_76579_a.updateWeatherBody(); ++ worldObj.updateWeatherBody(); + } + + public boolean canBlockFreeze(BlockPos pos, boolean byWater) + { -+ return field_76579_a.canBlockFreezeBody(pos, byWater); ++ return worldObj.canBlockFreezeBody(pos, byWater); + } + + public boolean canSnowAt(BlockPos pos, boolean checkLight) + { -+ return field_76579_a.canSnowAtBody(pos, checkLight); ++ return worldObj.canSnowAtBody(pos, checkLight); + } + public void setWorldTime(long time) + { -+ field_76579_a.field_72986_A.func_76068_b(time); ++ worldObj.worldInfo.setWorldTime(time); + } + + public long getSeed() + { -+ return field_76579_a.field_72986_A.func_76063_b(); ++ return worldObj.worldInfo.getSeed(); + } + + public long getWorldTime() + { -+ return field_76579_a.field_72986_A.func_76073_f(); ++ return worldObj.worldInfo.getWorldTime(); + } + + public BlockPos getSpawnPoint() + { -+ net.minecraft.world.storage.WorldInfo info = field_76579_a.field_72986_A; -+ return new BlockPos(info.func_76079_c(), info.func_76075_d(), info.func_76074_e()); ++ net.minecraft.world.storage.WorldInfo info = worldObj.worldInfo; ++ return new BlockPos(info.getSpawnX(), info.getSpawnY(), info.getSpawnZ()); + } + + public void setSpawnPoint(BlockPos pos) + { -+ field_76579_a.field_72986_A.func_176143_a(pos); ++ worldObj.worldInfo.setSpawn(pos); + } + + public boolean canMineBlock(net.minecraft.entity.player.EntityPlayer player, BlockPos pos) + { -+ return field_76579_a.canMineBlockBody(player, pos); ++ return worldObj.canMineBlockBody(player, pos); + } + + public boolean isBlockHighHumidity(BlockPos pos) + { -+ return field_76579_a.func_180494_b(pos).func_76736_e(); ++ return worldObj.getBiomeGenForCoords(pos).isHighHumidity(); + } + + public int getHeight() @@ -355,20 +355,20 @@ + + public int getActualHeight() + { -+ return field_76576_e ? 128 : 256; ++ return hasNoSky ? 128 : 256; + } + + public double getHorizon() + { -+ return field_76579_a.field_72986_A.func_76067_t().getHorizon(field_76579_a); ++ return worldObj.worldInfo.getTerrainType().getHorizon(worldObj); + } + + public void resetRainAndThunder() + { -+ field_76579_a.field_72986_A.func_76080_g(0); -+ field_76579_a.field_72986_A.func_76084_b(false); -+ field_76579_a.field_72986_A.func_76090_f(0); -+ field_76579_a.field_72986_A.func_76069_a(false); ++ worldObj.worldInfo.setRainTime(0); ++ worldObj.worldInfo.setRaining(false); ++ worldObj.worldInfo.setThunderTime(0); ++ worldObj.worldInfo.setThundering(false); + } + + public boolean canDoLightning(net.minecraft.world.chunk.Chunk chunk) diff --git a/patches.mcp/minecraft/net/minecraft/world/WorldServer.java.patch b/patches.mcp/minecraft/net/minecraft/world/WorldServer.java.patch new file mode 100644 index 000000000..f403791da --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/WorldServer.java.patch @@ -0,0 +1,257 @@ +--- ../src-base/minecraft/net/minecraft/world/WorldServer.java ++++ ../src-work/minecraft/net/minecraft/world/WorldServer.java +@@ -94,30 +94,46 @@ + private List pendingTickListEntriesThisTick = Lists.newArrayList(); + private static final String __OBFID = "CL_00001437"; + ++ /** Stores the recently processed (lighting) chunks */ ++ protected Set doneChunks = new java.util.HashSet(); ++ public List customTeleporters = new ArrayList(); ++ private static boolean initChest = false; ++ public static void fillChestHook() ++ { ++ if (!initChest) ++ net.minecraftforge.common.ChestGenHooks.init(net.minecraftforge.common.ChestGenHooks.BONUS_CHEST, bonusChestContent, 10, 10); ++ initChest = true; ++ } ++ + public WorldServer(MinecraftServer server, ISaveHandler saveHandlerIn, WorldInfo info, int dimensionId, Profiler profilerIn) + { + super(saveHandlerIn, info, WorldProvider.getProviderForDimension(dimensionId), profilerIn, false); + this.mcServer = server; + this.theEntityTracker = new EntityTracker(this); + this.thePlayerManager = new PlayerManager(this); ++ // Guarantee the dimension ID was not reset by the provider ++ int providerDim = this.provider.dimensionId; + this.provider.registerWorld(this); ++ this.provider.dimensionId = providerDim; + this.chunkProvider = this.createChunkProvider(); ++ perWorldStorage = new MapStorage(new net.minecraftforge.common.WorldSpecificSaveHandler((WorldServer)this, saveHandlerIn)); + this.worldTeleporter = new Teleporter(this); + this.calculateInitialSkylight(); + this.calculateInitialWeather(); + this.getWorldBorder().setSize(server.getMaxWorldSize()); ++ net.minecraftforge.common.DimensionManager.setWorld(dimensionId, this); + } + + public World init() + { + this.mapStorage = new MapStorage(this.saveHandler); + String s = VillageCollection.fileNameForProvider(this.provider); +- VillageCollection villagecollection = (VillageCollection)this.mapStorage.loadData(VillageCollection.class, s); ++ VillageCollection villagecollection = (VillageCollection)this.perWorldStorage.loadData(VillageCollection.class, s); + + if (villagecollection == null) + { + this.villageCollectionObj = new VillageCollection(this); +- this.mapStorage.setData(s, this.villageCollectionObj); ++ this.perWorldStorage.setData(s, this.villageCollectionObj); + } + else + { +@@ -210,6 +226,10 @@ + this.villageSiege.tick(); + this.theProfiler.endStartSection("portalForcer"); + this.worldTeleporter.removeStalePortalLocations(this.getTotalWorldTime()); ++ for (Teleporter tele : customTeleporters) ++ { ++ tele.removeStalePortalLocations(getTotalWorldTime()); ++ } + this.theProfiler.endSection(); + this.sendQueuedBlockEvents(); + } +@@ -217,6 +237,7 @@ + public BiomeGenBase.SpawnListEntry func_175734_a(EnumCreatureType p_175734_1_, BlockPos p_175734_2_) + { + List list = this.getChunkProvider().func_177458_a(p_175734_1_, p_175734_2_); ++ list = net.minecraftforge.event.ForgeEventFactory.getPotentialSpawns(this, p_175734_1_, p_175734_2_, list); + return list != null && !list.isEmpty() ? (BiomeGenBase.SpawnListEntry)WeightedRandom.getRandomItem(this.rand, list) : null; + } + +@@ -274,10 +295,7 @@ + + private void resetRainAndThunder() + { +- this.worldInfo.setRainTime(0); +- this.worldInfo.setRaining(false); +- this.worldInfo.setThunderTime(0); +- this.worldInfo.setThundering(false); ++ this.provider.resetRainAndThunder(); + } + + public boolean areAllPlayersAsleep() +@@ -367,7 +385,7 @@ + int i1; + BlockPos blockpos; + +- if (this.rand.nextInt(100000) == 0 && this.isRaining() && this.isThundering()) ++ if (this.provider.canDoLightning(chunk) && this.rand.nextInt(100000) == 0 && this.isRaining() && this.isThundering()) + { + this.updateLCG = this.updateLCG * 3 + 1013904223; + i1 = this.updateLCG >> 2; +@@ -381,7 +399,7 @@ + + this.theProfiler.endStartSection("iceandsnow"); + +- if (this.rand.nextInt(16) == 0) ++ if (this.provider.canDoRainSnowIce(chunk) && this.rand.nextInt(16) == 0) + { + this.updateLCG = this.updateLCG * 3 + 1013904223; + i1 = this.updateLCG >> 2; +@@ -483,6 +501,9 @@ + if (p_175654_2_.requiresUpdates()) + { + b0 = 8; ++ //Keeping here as a note for future when it may be restored. ++ boolean isForced = getPersistentChunks().containsKey(new ChunkCoordIntPair(nextticklistentry.position.getX() >> 4, nextticklistentry.position.getZ() >> 4)); ++ b0 = (byte)(isForced ? 0 : 8); + + if (this.isAreaLoaded(nextticklistentry.position.add(-b0, -b0, -b0), nextticklistentry.position.add(b0, b0, b0))) + { +@@ -535,7 +556,7 @@ + + public void updateEntities() + { +- if (this.playerEntities.isEmpty()) ++ if (this.playerEntities.isEmpty() && getPersistentChunks().isEmpty()) + { + if (this.updateEntityTick++ >= 1200) + { +@@ -601,6 +622,9 @@ + { + nextticklistentry = (NextTickListEntry)iterator.next(); + iterator.remove(); ++ //Keeping here as a note for future when it may be restored. ++ //boolean isForced = getPersistentChunks().containsKey(new ChunkCoordIntPair(nextticklistentry.xCoord >> 4, nextticklistentry.zCoord >> 4)); ++ //byte b0 = isForced ? 0 : 8; + byte b0 = 0; + + if (this.isAreaLoaded(nextticklistentry.position.add(-b0, -b0, -b0), nextticklistentry.position.add(b0, b0, b0))) +@@ -729,14 +753,29 @@ + { + ArrayList arraylist = Lists.newArrayList(); + +- for (int k1 = 0; k1 < this.loadedTileEntityList.size(); ++k1) ++ //Forge: Optomize this loop to only grab from the chunks it needs ++ for (int x = (p_147486_1_ >> 4); x <= (p_147486_4_ >> 4); x++) + { +- TileEntity tileentity = (TileEntity)this.loadedTileEntityList.get(k1); +- BlockPos blockpos = tileentity.getPos(); +- +- if (blockpos.getX() >= p_147486_1_ && blockpos.getY() >= p_147486_2_ && blockpos.getZ() >= p_147486_3_ && blockpos.getX() < p_147486_4_ && blockpos.getY() < p_147486_5_ && blockpos.getZ() < p_147486_6_) ++ for (int z = (p_147486_3_ >> 4); z <= (p_147486_6_ >> 4); z++) + { +- arraylist.add(tileentity); ++ Chunk chunk = this.getChunkFromChunkCoords(x, z); ++ if (chunk != null) ++ { ++ for (Object obj : chunk.getTileEntityMap().values()) ++ { ++ TileEntity entity = (TileEntity)obj; ++ if (!entity.isInvalid()) ++ { ++ BlockPos pos = entity.getPos(); ++ if (pos.getX() >= p_147486_1_ && pos.getY() >= p_147486_2_ && pos.getZ() >= p_147486_3_ && ++ pos.getX() <= p_147486_4_ && pos.getY() <= p_147486_5_ && pos.getZ() <= p_147486_6_) ++ { ++ arraylist.add(entity); ++ } ++ ++ } ++ } ++ } + } + } + +@@ -745,6 +784,10 @@ + + public boolean isBlockModifiable(EntityPlayer player, BlockPos pos) + { ++ return super.isBlockModifiable(player, pos); ++ } ++ public boolean canMineBlockBody(EntityPlayer player, BlockPos pos) ++ { + return !this.mcServer.isBlockProtected(this, pos, player) && this.getWorldBorder().contains(pos); + } + +@@ -810,6 +853,7 @@ + } + else + { ++ if (net.minecraftforge.event.ForgeEventFactory.onCreateWorldSpawn(this, p_73052_1_)) return; + this.findingSpawnPoint = true; + WorldChunkManager worldchunkmanager = this.provider.getWorldChunkManager(); + List list = worldchunkmanager.getBiomesToSpawnIn(); +@@ -855,7 +899,7 @@ + + protected void createBonusChest() + { +- WorldGeneratorBonusChest worldgeneratorbonuschest = new WorldGeneratorBonusChest(bonusChestContent, 10); ++ WorldGeneratorBonusChest worldgeneratorbonuschest = net.minecraftforge.common.ForgeHooks.getBonusChest(rand); + + for (int i = 0; i < 10; ++i) + { +@@ -892,6 +936,7 @@ + } + + this.chunkProvider.saveChunks(p_73044_1_, p_73044_2_); ++ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.WorldEvent.Save(this)); + List list = this.theChunkProviderServer.func_152380_a(); + Iterator iterator = list.iterator(); + +@@ -929,6 +974,7 @@ + this.worldInfo.setBorderLerpTime(this.getWorldBorder().getTimeUntilTarget()); + this.saveHandler.saveWorldInfoWithPlayer(this.worldInfo, this.mcServer.getConfigurationManager().getHostPlayerData()); + this.mapStorage.saveAllData(); ++ this.perWorldStorage.saveAllData(); + } + + public void onEntityAdded(Entity p_72923_1_) +@@ -984,6 +1030,7 @@ + public Explosion newExplosion(Entity p_72885_1_, double p_72885_2_, double p_72885_4_, double p_72885_6_, float p_72885_8_, boolean p_72885_9_, boolean p_72885_10_) + { + Explosion explosion = new Explosion(this, p_72885_1_, p_72885_2_, p_72885_4_, p_72885_6_, p_72885_8_, p_72885_9_, p_72885_10_); ++ if (net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this, explosion)) return explosion; + explosion.doExplosionA(); + explosion.doExplosionB(false); + +@@ -1074,19 +1121,23 @@ + this.mcServer.getConfigurationManager().sendPacketToAllPlayersInDimension(new S2BPacketChangeGameState(8, this.thunderingStrength), this.provider.getDimensionId()); + } + ++ /* The function in use here has been replaced in order to only send the weather info to players in the correct dimension, ++ * rather than to all players on the server. This is what causes the client-side rain, as the ++ * client believes that it has started raining locally, rather than in another dimension. ++ */ + if (flag != this.isRaining()) + { + if (flag) + { +- this.mcServer.getConfigurationManager().sendPacketToAllPlayers(new S2BPacketChangeGameState(2, 0.0F)); ++ this.mcServer.getConfigurationManager().sendPacketToAllPlayersInDimension(new S2BPacketChangeGameState(2, 0.0F), this.provider.dimensionId); + } + else + { +- this.mcServer.getConfigurationManager().sendPacketToAllPlayers(new S2BPacketChangeGameState(1, 0.0F)); ++ this.mcServer.getConfigurationManager().sendPacketToAllPlayersInDimension(new S2BPacketChangeGameState(1, 0.0F), this.provider.dimensionId); + } + +- this.mcServer.getConfigurationManager().sendPacketToAllPlayers(new S2BPacketChangeGameState(7, this.rainingStrength)); +- this.mcServer.getConfigurationManager().sendPacketToAllPlayers(new S2BPacketChangeGameState(8, this.thunderingStrength)); ++ this.mcServer.getConfigurationManager().sendPacketToAllPlayersInDimension(new S2BPacketChangeGameState(7, this.rainingStrength), this.provider.dimensionId); ++ this.mcServer.getConfigurationManager().sendPacketToAllPlayersInDimension(new S2BPacketChangeGameState(8, this.thunderingStrength), this.provider.dimensionId); + } + } + +@@ -1152,6 +1203,11 @@ + return this.mcServer.isCallingFromMinecraftThread(); + } + ++ public java.io.File getChunkSaveLocation() ++ { ++ return ((net.minecraft.world.chunk.storage.AnvilChunkLoader)theChunkProviderServer.chunkLoader).chunkSaveLocation; ++ } ++ + static class ServerBlockEventList extends ArrayList + { + private static final String __OBFID = "CL_00001439"; diff --git a/patches.mcp/minecraft/net/minecraft/world/WorldServerMulti.java.patch b/patches.mcp/minecraft/net/minecraft/world/WorldServerMulti.java.patch new file mode 100644 index 000000000..f1d3cd163 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/WorldServerMulti.java.patch @@ -0,0 +1,62 @@ +--- ../src-base/minecraft/net/minecraft/world/WorldServerMulti.java ++++ ../src-work/minecraft/net/minecraft/world/WorldServerMulti.java +@@ -11,13 +11,14 @@ + public class WorldServerMulti extends WorldServer + { + private WorldServer delegate; ++ private IBorderListener borderListener; + private static final String __OBFID = "CL_00001430"; + + public WorldServerMulti(MinecraftServer server, ISaveHandler saveHandlerIn, int dimensionId, WorldServer delegate, Profiler profilerIn) + { + super(server, saveHandlerIn, new DerivedWorldInfo(delegate.getWorldInfo()), dimensionId, profilerIn); + this.delegate = delegate; +- delegate.getWorldBorder().addListener(new IBorderListener() ++ this.borderListener = new IBorderListener() + { + private static final String __OBFID = "CL_00002273"; + public void onSizeChanged(WorldBorder border, double newSize) +@@ -48,22 +49,26 @@ + { + WorldServerMulti.this.getWorldBorder().setDamageBuffer(newSize); + } +- }); ++ }; ++ this.delegate.getWorldBorder().addListener(this.borderListener); + } + +- protected void saveLevel() throws MinecraftException {} ++ protected void saveLevel() throws MinecraftException ++ { ++ this.perWorldStorage.saveAllData(); ++ } + + public World init() + { + this.mapStorage = this.delegate.getMapStorage(); + this.worldScoreboard = this.delegate.getScoreboard(); + String s = VillageCollection.fileNameForProvider(this.provider); +- VillageCollection villagecollection = (VillageCollection)this.mapStorage.loadData(VillageCollection.class, s); ++ VillageCollection villagecollection = (VillageCollection)this.perWorldStorage.loadData(VillageCollection.class, s); + + if (villagecollection == null) + { + this.villageCollectionObj = new VillageCollection(this); +- this.mapStorage.setData(s, this.villageCollectionObj); ++ this.perWorldStorage.setData(s, this.villageCollectionObj); + } + else + { +@@ -73,4 +78,12 @@ + + return this; + } ++ ++ ++ @Override ++ public void flush() ++ { ++ super.flush(); ++ this.delegate.getWorldBorder().removeListener(this.borderListener); // Unlink ourselves, to prevent world leak. ++ } + } diff --git a/patches/minecraft/net/minecraft/world/WorldType.java.patch b/patches.mcp/minecraft/net/minecraft/world/WorldType.java.patch similarity index 67% rename from patches/minecraft/net/minecraft/world/WorldType.java.patch rename to patches.mcp/minecraft/net/minecraft/world/WorldType.java.patch index 26290a812..e5e993721 100644 --- a/patches/minecraft/net/minecraft/world/WorldType.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/WorldType.java.patch @@ -17,27 +17,27 @@ @@ -28,6 +37,7 @@ - private WorldType(int p_i1960_1_, String p_i1960_2_, int p_i1960_3_) + private WorldType(int id, String name, int version) { -+ if (p_i1960_2_.length() > 16 && field_180272_g != null) throw new IllegalArgumentException("World type names must not be longer then 16: " + p_i1960_2_); - this.field_77133_f = p_i1960_2_; - this.field_77134_g = p_i1960_3_; - this.field_77140_h = true; ++ if (name.length() > 16 && DEBUG_WORLD != null) throw new IllegalArgumentException("World type names must not be longer then 16: " + name); + this.worldType = name; + this.generatorVersion = version; + this.canBeCreated = true; @@ -114,4 +124,144 @@ - this.field_151361_l = true; + this.hasNotificationData = true; return this; } + + public net.minecraft.world.biome.WorldChunkManager getChunkManager(World world) + { -+ if (this == field_77138_c) ++ if (this == FLAT) + { -+ net.minecraft.world.gen.FlatGeneratorInfo flatgeneratorinfo = net.minecraft.world.gen.FlatGeneratorInfo.func_82651_a(world.func_72912_H().func_82571_y()); -+ return new net.minecraft.world.biome.WorldChunkManagerHell(net.minecraft.world.biome.BiomeGenBase.func_180276_a(flatgeneratorinfo.func_82648_a(), net.minecraft.world.biome.BiomeGenBase.field_180279_ad), 0.5F); ++ net.minecraft.world.gen.FlatGeneratorInfo flatgeneratorinfo = net.minecraft.world.gen.FlatGeneratorInfo.createFlatGeneratorFromString(world.getWorldInfo().getGeneratorOptions()); ++ return new net.minecraft.world.biome.WorldChunkManagerHell(net.minecraft.world.biome.BiomeGenBase.getBiomeFromBiomeList(flatgeneratorinfo.getBiome(), net.minecraft.world.biome.BiomeGenBase.field_180279_ad), 0.5F); + } -+ else if (this == field_180272_g) ++ else if (this == DEBUG_WORLD) + { -+ return new net.minecraft.world.biome.WorldChunkManagerHell(net.minecraft.world.biome.BiomeGenBase.field_76772_c, 0.0F); ++ return new net.minecraft.world.biome.WorldChunkManagerHell(net.minecraft.world.biome.BiomeGenBase.plains, 0.0F); + } + else + { @@ -47,44 +47,44 @@ + + public net.minecraft.world.chunk.IChunkProvider getChunkGenerator(World world, String generatorOptions) + { -+ if (this == field_77138_c) return new net.minecraft.world.gen.ChunkProviderFlat(world, world.func_72905_C(), world.func_72912_H().func_76089_r(), generatorOptions); -+ if (this == field_180272_g) return new net.minecraft.world.gen.ChunkProviderDebug(world); -+ return new net.minecraft.world.gen.ChunkProviderGenerate(world, world.func_72905_C(), world.func_72912_H().func_76089_r(), generatorOptions); ++ if (this == FLAT) return new net.minecraft.world.gen.ChunkProviderFlat(world, world.getSeed(), world.getWorldInfo().isMapFeaturesEnabled(), generatorOptions); ++ if (this == DEBUG_WORLD) return new net.minecraft.world.gen.ChunkProviderDebug(world); ++ return new net.minecraft.world.gen.ChunkProviderGenerate(world, world.getSeed(), world.getWorldInfo().isMapFeaturesEnabled(), generatorOptions); + } + + public int getMinimumSpawnHeight(World world) + { -+ return this == field_77138_c ? 4 : 64; ++ return this == FLAT ? 4 : 64; + } + + public double getHorizon(World world) + { -+ return this == field_77138_c ? 0.0D : 63.0D; ++ return this == FLAT ? 0.0D : 63.0D; + } + + public double voidFadeMagnitude() + { -+ return this == field_77138_c ? 1.0D : 0.03125D; ++ return this == FLAT ? 1.0D : 0.03125D; + } + + public boolean handleSlimeSpawnReduction(java.util.Random random, World world) + { -+ return this == field_77138_c ? random.nextInt(4) != 1 : false; ++ return this == FLAT ? random.nextInt(4) != 1 : false; + } + + /*=================================================== FORGE START ======================================*/ + private static int getNextID() + { -+ for (int x = 0; x < field_77139_a.length; x++) ++ for (int x = 0; x < worldTypes.length; x++) + { -+ if (field_77139_a[x] == null) ++ if (worldTypes[x] == null) + { + return x; + } + } + -+ int oldLen = field_77139_a.length; -+ field_77139_a = Arrays.copyOf(field_77139_a, oldLen + 16); ++ int oldLen = worldTypes.length; ++ worldTypes = Arrays.copyOf(worldTypes, oldLen + 16); + return oldLen; + } + @@ -110,7 +110,7 @@ + */ + public int getSpawnFuzz() + { -+ return Math.max(5, net.minecraft.server.MinecraftServer.func_71276_C().func_82357_ak() - 6); ++ return Math.max(5, net.minecraft.server.MinecraftServer.getServer().getSpawnProtectionSize() - 6); + } + + /** @@ -121,13 +121,13 @@ + @SideOnly(Side.CLIENT) + public void onCustomizeButton(Minecraft mc, GuiCreateWorld guiCreateWorld) + { -+ if (this == WorldType.field_77138_c) ++ if (this == WorldType.FLAT) + { -+ mc.func_147108_a(new GuiCreateFlatWorld(guiCreateWorld, guiCreateWorld.field_146334_a)); ++ mc.displayGuiScreen(new GuiCreateFlatWorld(guiCreateWorld, guiCreateWorld.chunkProviderSettingsJson)); + } -+ else if (this == WorldType.field_180271_f) ++ else if (this == WorldType.CUSTOMIZED) + { -+ mc.func_147108_a(new GuiCustomizeWorldScreen(guiCreateWorld, guiCreateWorld.field_146334_a)); ++ mc.displayGuiScreen(new GuiCustomizeWorldScreen(guiCreateWorld, guiCreateWorld.chunkProviderSettingsJson)); + } + } + @@ -137,7 +137,7 @@ + */ + public boolean isCustomizable() + { -+ return this == field_77138_c || this == WorldType.field_180271_f; ++ return this == FLAT || this == WorldType.CUSTOMIZED; + } + + @@ -163,7 +163,7 @@ + public GenLayer getBiomeLayer(long worldSeed, GenLayer parentLayer, String chunkProviderSettingsJson) + { + GenLayer ret = new GenLayerBiome(200L, parentLayer, this, chunkProviderSettingsJson); -+ ret = GenLayerZoom.func_75915_a(1000L, ret, 2); ++ ret = GenLayerZoom.magnify(1000L, ret, 2); + ret = new GenLayerBiomeEdge(1000L, ret); + return ret; + } diff --git a/patches/minecraft/net/minecraft/world/biome/BiomeColorHelper.java.patch b/patches.mcp/minecraft/net/minecraft/world/biome/BiomeColorHelper.java.patch similarity index 73% rename from patches/minecraft/net/minecraft/world/biome/BiomeColorHelper.java.patch rename to patches.mcp/minecraft/net/minecraft/world/biome/BiomeColorHelper.java.patch index bcd054cb7..2006f5b38 100644 --- a/patches/minecraft/net/minecraft/world/biome/BiomeColorHelper.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/biome/BiomeColorHelper.java.patch @@ -2,9 +2,9 @@ +++ ../src-work/minecraft/net/minecraft/world/biome/BiomeColorHelper.java @@ -30,7 +30,7 @@ private static final String __OBFID = "CL_00002146"; - public int func_180283_a(BiomeGenBase p_180283_1_, BlockPos p_180283_2_) + public int getColorAtPos(BiomeGenBase p_180283_1_, BlockPos blockPosition) { -- return p_180283_1_.field_76759_H; +- return p_180283_1_.waterColorMultiplier; + return p_180283_1_.getWaterColorMultiplier(); } }; diff --git a/patches.mcp/minecraft/net/minecraft/world/biome/BiomeDecorator.java.patch b/patches.mcp/minecraft/net/minecraft/world/biome/BiomeDecorator.java.patch new file mode 100644 index 000000000..2ce959e0f --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/biome/BiomeDecorator.java.patch @@ -0,0 +1,267 @@ +--- ../src-base/minecraft/net/minecraft/world/biome/BiomeDecorator.java ++++ ../src-work/minecraft/net/minecraft/world/biome/BiomeDecorator.java +@@ -23,6 +23,11 @@ + import net.minecraft.world.gen.feature.WorldGenWaterlily; + import net.minecraft.world.gen.feature.WorldGenerator; + ++import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.*; ++import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.*; ++import net.minecraftforge.common.*; ++import net.minecraftforge.event.terraingen.*; ++ + public class BiomeDecorator + { + public World currentWorld; +@@ -125,26 +130,30 @@ + + protected void genDecorations(BiomeGenBase p_150513_1_) + { ++ MinecraftForge.EVENT_BUS.post(new DecorateBiomeEvent.Pre(currentWorld, randomGenerator, field_180294_c)); + this.generateOres(); + int i; + int j; + int k; + +- for (i = 0; i < this.sandPerChunk2; ++i) ++ boolean doGen = TerrainGen.decorate(currentWorld, randomGenerator, field_180294_c, SAND); ++ for (i = 0; doGen && i < this.sandPerChunk2; ++i) + { + j = this.randomGenerator.nextInt(16) + 8; + k = this.randomGenerator.nextInt(16) + 8; + this.sandGen.generate(this.currentWorld, this.randomGenerator, this.currentWorld.getTopSolidOrLiquidBlock(this.field_180294_c.add(j, 0, k))); + } + +- for (i = 0; i < this.clayPerChunk; ++i) ++ doGen = TerrainGen.decorate(currentWorld, randomGenerator, field_180294_c, CLAY); ++ for (i = 0; doGen && i < this.clayPerChunk; ++i) + { + j = this.randomGenerator.nextInt(16) + 8; + k = this.randomGenerator.nextInt(16) + 8; + this.clayGen.generate(this.currentWorld, this.randomGenerator, this.currentWorld.getTopSolidOrLiquidBlock(this.field_180294_c.add(j, 0, k))); + } + +- for (i = 0; i < this.sandPerChunk; ++i) ++ doGen = TerrainGen.decorate(currentWorld, randomGenerator, field_180294_c, SAND_PASS2); ++ for (i = 0; doGen && i < this.sandPerChunk; ++i) + { + j = this.randomGenerator.nextInt(16) + 8; + k = this.randomGenerator.nextInt(16) + 8; +@@ -161,7 +170,8 @@ + int l; + BlockPos blockpos; + +- for (j = 0; j < i; ++j) ++ doGen = TerrainGen.decorate(currentWorld, randomGenerator, field_180294_c, TREE); ++ for (j = 0; doGen && j < i; ++j) + { + k = this.randomGenerator.nextInt(16) + 8; + l = this.randomGenerator.nextInt(16) + 8; +@@ -175,7 +185,8 @@ + } + } + +- for (j = 0; j < this.bigMushroomsPerChunk; ++j) ++ doGen = TerrainGen.decorate(currentWorld, randomGenerator, field_180294_c, BIG_SHROOM); ++ for (j = 0; doGen && j < this.bigMushroomsPerChunk; ++j) + { + k = this.randomGenerator.nextInt(16) + 8; + l = this.randomGenerator.nextInt(16) + 8; +@@ -184,11 +195,12 @@ + + int i1; + +- for (j = 0; j < this.flowersPerChunk; ++j) ++ doGen = TerrainGen.decorate(currentWorld, randomGenerator, field_180294_c, FLOWERS); ++ for (j = 0; doGen && j < this.flowersPerChunk; ++j) + { + k = this.randomGenerator.nextInt(16) + 8; + l = this.randomGenerator.nextInt(16) + 8; +- i1 = this.randomGenerator.nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(k, 0, l)).getY() + 32); ++ i1 = nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(k, 0, l)).getY() + 32); + blockpos = this.field_180294_c.add(k, i1, l); + BlockFlower.EnumFlowerType enumflowertype = p_150513_1_.pickRandomFlower(this.randomGenerator, blockpos); + BlockFlower blockflower = enumflowertype.getBlockType().getBlock(); +@@ -200,29 +212,32 @@ + } + } + +- for (j = 0; j < this.grassPerChunk; ++j) ++ doGen = TerrainGen.decorate(currentWorld, randomGenerator, field_180294_c, GRASS); ++ for (j = 0; doGen && j < this.grassPerChunk; ++j) + { + k = this.randomGenerator.nextInt(16) + 8; + l = this.randomGenerator.nextInt(16) + 8; +- i1 = this.randomGenerator.nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(k, 0, l)).getY() * 2); ++ i1 = nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(k, 0, l)).getY() * 2); + p_150513_1_.getRandomWorldGenForGrass(this.randomGenerator).generate(this.currentWorld, this.randomGenerator, this.field_180294_c.add(k, i1, l)); + } + +- for (j = 0; j < this.deadBushPerChunk; ++j) ++ doGen = TerrainGen.decorate(currentWorld, randomGenerator, field_180294_c, DEAD_BUSH); ++ for (j = 0; doGen && j < this.deadBushPerChunk; ++j) + { + k = this.randomGenerator.nextInt(16) + 8; + l = this.randomGenerator.nextInt(16) + 8; +- i1 = this.randomGenerator.nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(k, 0, l)).getY() * 2); ++ i1 = nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(k, 0, l)).getY() * 2); + (new WorldGenDeadBush()).generate(this.currentWorld, this.randomGenerator, this.field_180294_c.add(k, i1, l)); + } + + j = 0; + +- while (j < this.waterlilyPerChunk) ++ doGen = TerrainGen.decorate(currentWorld, randomGenerator, field_180294_c, LILYPAD); ++ while (doGen && j < this.waterlilyPerChunk) + { + k = this.randomGenerator.nextInt(16) + 8; + l = this.randomGenerator.nextInt(16) + 8; +- i1 = this.randomGenerator.nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(k, 0, l)).getY() * 2); ++ i1 = nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(k, 0, l)).getY() * 2); + blockpos = this.field_180294_c.add(k, i1, l); + + while (true) +@@ -244,7 +259,8 @@ + } + } + +- for (j = 0; j < this.mushroomsPerChunk; ++j) ++ doGen = TerrainGen.decorate(currentWorld, randomGenerator, field_180294_c, SHROOM); ++ for (j = 0; doGen && j < this.mushroomsPerChunk; ++j) + { + if (this.randomGenerator.nextInt(4) == 0) + { +@@ -258,57 +274,60 @@ + { + k = this.randomGenerator.nextInt(16) + 8; + l = this.randomGenerator.nextInt(16) + 8; +- i1 = this.randomGenerator.nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(k, 0, l)).getY() * 2); ++ i1 = nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(k, 0, l)).getY() * 2); + blockpos = this.field_180294_c.add(k, i1, l); + this.mushroomRedGen.generate(this.currentWorld, this.randomGenerator, blockpos); + } + } + +- if (this.randomGenerator.nextInt(4) == 0) ++ if (doGen && this.randomGenerator.nextInt(4) == 0) + { + j = this.randomGenerator.nextInt(16) + 8; + k = this.randomGenerator.nextInt(16) + 8; +- l = this.randomGenerator.nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(j, 0, k)).getY() * 2); ++ l = nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(j, 0, k)).getY() * 2); + this.mushroomBrownGen.generate(this.currentWorld, this.randomGenerator, this.field_180294_c.add(j, l, k)); + } + +- if (this.randomGenerator.nextInt(8) == 0) ++ if (doGen && this.randomGenerator.nextInt(8) == 0) + { + j = this.randomGenerator.nextInt(16) + 8; + k = this.randomGenerator.nextInt(16) + 8; +- l = this.randomGenerator.nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(j, 0, k)).getY() * 2); ++ l = nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(j, 0, k)).getY() * 2); + this.mushroomRedGen.generate(this.currentWorld, this.randomGenerator, this.field_180294_c.add(j, l, k)); + } + +- for (j = 0; j < this.reedsPerChunk; ++j) ++ doGen = TerrainGen.decorate(currentWorld, randomGenerator, field_180294_c, REED); ++ for (j = 0; doGen && j < this.reedsPerChunk; ++j) + { + k = this.randomGenerator.nextInt(16) + 8; + l = this.randomGenerator.nextInt(16) + 8; +- i1 = this.randomGenerator.nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(k, 0, l)).getY() * 2); ++ i1 = nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(k, 0, l)).getY() * 2); + this.reedGen.generate(this.currentWorld, this.randomGenerator, this.field_180294_c.add(k, i1, l)); + } + +- for (j = 0; j < 10; ++j) ++ for (j = 0; doGen && j < 10; ++j) + { + k = this.randomGenerator.nextInt(16) + 8; + l = this.randomGenerator.nextInt(16) + 8; +- i1 = this.randomGenerator.nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(k, 0, l)).getY() * 2); ++ i1 = nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(k, 0, l)).getY() * 2); + this.reedGen.generate(this.currentWorld, this.randomGenerator, this.field_180294_c.add(k, i1, l)); + } + +- if (this.randomGenerator.nextInt(32) == 0) ++ doGen = TerrainGen.decorate(currentWorld, randomGenerator, field_180294_c, PUMPKIN); ++ if (doGen && this.randomGenerator.nextInt(32) == 0) + { + j = this.randomGenerator.nextInt(16) + 8; + k = this.randomGenerator.nextInt(16) + 8; +- l = this.randomGenerator.nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(j, 0, k)).getY() * 2); ++ l = nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(j, 0, k)).getY() * 2); + (new WorldGenPumpkin()).generate(this.currentWorld, this.randomGenerator, this.field_180294_c.add(j, l, k)); + } + +- for (j = 0; j < this.cactiPerChunk; ++j) ++ doGen = TerrainGen.decorate(currentWorld, randomGenerator, field_180294_c, CACTUS); ++ for (j = 0; doGen && j < this.cactiPerChunk; ++j) + { + k = this.randomGenerator.nextInt(16) + 8; + l = this.randomGenerator.nextInt(16) + 8; +- i1 = this.randomGenerator.nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(k, 0, l)).getY() * 2); ++ i1 = nextInt(this.currentWorld.getHorizon(this.field_180294_c.add(k, 0, l)).getY() * 2); + this.cactusGen.generate(this.currentWorld, this.randomGenerator, this.field_180294_c.add(k, i1, l)); + } + +@@ -316,18 +335,22 @@ + { + BlockPos blockpos1; + +- for (j = 0; j < 50; ++j) ++ doGen = TerrainGen.decorate(currentWorld, randomGenerator, field_180294_c, LAKE_WATER); ++ for (j = 0; doGen && j < 50; ++j) + { + blockpos1 = this.field_180294_c.add(this.randomGenerator.nextInt(16) + 8, this.randomGenerator.nextInt(this.randomGenerator.nextInt(248) + 8), this.randomGenerator.nextInt(16) + 8); + (new WorldGenLiquids(Blocks.flowing_water)).generate(this.currentWorld, this.randomGenerator, blockpos1); + } + +- for (j = 0; j < 20; ++j) ++ doGen = TerrainGen.decorate(currentWorld, randomGenerator, field_180294_c, LAKE_LAVA); ++ for (j = 0; doGen && j < 20; ++j) + { + blockpos1 = this.field_180294_c.add(this.randomGenerator.nextInt(16) + 8, this.randomGenerator.nextInt(this.randomGenerator.nextInt(this.randomGenerator.nextInt(240) + 8) + 8), this.randomGenerator.nextInt(16) + 8); + (new WorldGenLiquids(Blocks.flowing_lava)).generate(this.currentWorld, this.randomGenerator, blockpos1); + } + } ++ ++ MinecraftForge.EVENT_BUS.post(new DecorateBiomeEvent.Post(currentWorld, randomGenerator, field_180294_c)); + } + + protected void genStandardOre1(int p_76795_1_, WorldGenerator p_76795_2_, int p_76795_3_, int p_76795_4_) +@@ -370,16 +393,35 @@ + + protected void generateOres() + { ++ MinecraftForge.ORE_GEN_BUS.post(new OreGenEvent.Pre(currentWorld, randomGenerator, field_180294_c)); ++ if (TerrainGen.generateOre(currentWorld, randomGenerator, dirtGen, field_180294_c, DIRT)) + this.genStandardOre1(this.chunkProviderSettings.dirtCount, this.dirtGen, this.chunkProviderSettings.dirtMinHeight, this.chunkProviderSettings.dirtMaxHeight); ++ if (TerrainGen.generateOre(currentWorld, randomGenerator, gravelGen, field_180294_c, GRAVEL)) + this.genStandardOre1(this.chunkProviderSettings.gravelCount, this.gravelGen, this.chunkProviderSettings.gravelMinHeight, this.chunkProviderSettings.gravelMaxHeight); ++ if (TerrainGen.generateOre(currentWorld, randomGenerator, dioriteGen, field_180294_c, DIORITE)) + this.genStandardOre1(this.chunkProviderSettings.dioriteCount, this.dioriteGen, this.chunkProviderSettings.dioriteMinHeight, this.chunkProviderSettings.dioriteMaxHeight); ++ if (TerrainGen.generateOre(currentWorld, randomGenerator, graniteGen, field_180294_c, GRANITE)) + this.genStandardOre1(this.chunkProviderSettings.graniteCount, this.graniteGen, this.chunkProviderSettings.graniteMinHeight, this.chunkProviderSettings.graniteMaxHeight); ++ if (TerrainGen.generateOre(currentWorld, randomGenerator, andesiteGen, field_180294_c, ANDESITE)) + this.genStandardOre1(this.chunkProviderSettings.andesiteCount, this.andesiteGen, this.chunkProviderSettings.andesiteMinHeight, this.chunkProviderSettings.andesiteMaxHeight); ++ if (TerrainGen.generateOre(currentWorld, randomGenerator, coalGen, field_180294_c, COAL)) + this.genStandardOre1(this.chunkProviderSettings.coalCount, this.coalGen, this.chunkProviderSettings.coalMinHeight, this.chunkProviderSettings.coalMaxHeight); ++ if (TerrainGen.generateOre(currentWorld, randomGenerator, ironGen, field_180294_c, IRON)) + this.genStandardOre1(this.chunkProviderSettings.ironCount, this.ironGen, this.chunkProviderSettings.ironMinHeight, this.chunkProviderSettings.ironMaxHeight); ++ if (TerrainGen.generateOre(currentWorld, randomGenerator, goldGen, field_180294_c, GOLD)) + this.genStandardOre1(this.chunkProviderSettings.goldCount, this.goldGen, this.chunkProviderSettings.goldMinHeight, this.chunkProviderSettings.goldMaxHeight); ++ if (TerrainGen.generateOre(currentWorld, randomGenerator, redstoneGen, field_180294_c, REDSTONE)) + this.genStandardOre1(this.chunkProviderSettings.redstoneCount, this.redstoneGen, this.chunkProviderSettings.redstoneMinHeight, this.chunkProviderSettings.redstoneMaxHeight); ++ if (TerrainGen.generateOre(currentWorld, randomGenerator, diamondGen, field_180294_c, DIAMOND)) + this.genStandardOre1(this.chunkProviderSettings.diamondCount, this.diamondGen, this.chunkProviderSettings.diamondMinHeight, this.chunkProviderSettings.diamondMaxHeight); ++ if (TerrainGen.generateOre(currentWorld, randomGenerator, lapisGen, field_180294_c, LAPIS)) + this.genStandardOre2(this.chunkProviderSettings.lapisCount, this.lapisGen, this.chunkProviderSettings.lapisCenterHeight, this.chunkProviderSettings.lapisSpread); ++ MinecraftForge.ORE_GEN_BUS.post(new OreGenEvent.Post(currentWorld, randomGenerator, field_180294_c)); + } ++ ++ private int nextInt(int i) { //Safety wrapper to prevent exceptions. ++ if (i <= 1) ++ return 0; ++ return this.randomGenerator.nextInt(i); ++ } + } diff --git a/patches/minecraft/net/minecraft/world/biome/BiomeGenBase.java.patch b/patches.mcp/minecraft/net/minecraft/world/biome/BiomeGenBase.java.patch similarity index 57% rename from patches/minecraft/net/minecraft/world/biome/BiomeGenBase.java.patch rename to patches.mcp/minecraft/net/minecraft/world/biome/BiomeGenBase.java.patch index ab745af60..7b45e807f 100644 --- a/patches/minecraft/net/minecraft/world/biome/BiomeGenBase.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/biome/BiomeGenBase.java.patch @@ -9,7 +9,7 @@ + public abstract class BiomeGenBase { - private static final Logger field_150586_aC = LogManager.getLogger(); + private static final Logger logger = LogManager.getLogger(); @@ -139,6 +142,10 @@ public BiomeGenBase(int p_i1971_1_) @@ -18,49 +18,49 @@ + } + public BiomeGenBase(int p_i1971_1_, boolean register) + { - this.field_76752_A = Blocks.field_150349_c.func_176223_P(); - this.field_76753_B = Blocks.field_150346_d.func_176223_P(); - this.field_76754_C = 5169201; + this.topBlock = Blocks.grass.getDefaultState(); + this.fillerBlock = Blocks.dirt.getDefaultState(); + this.fillerBlockMetadata = 5169201; @@ -156,6 +163,7 @@ - this.field_76758_O = new WorldGenBigTree(false); - this.field_76763_Q = new WorldGenSwamp(); - this.field_76756_M = p_i1971_1_; + this.worldGeneratorBigTree = new WorldGenBigTree(false); + this.worldGeneratorSwamp = new WorldGenSwamp(); + this.biomeID = p_i1971_1_; + if (register) - field_76773_a[p_i1971_1_] = this; - this.field_76760_I = this.func_76729_a(); - this.field_76762_K.add(new BiomeGenBase.SpawnListEntry(EntitySheep.class, 12, 4, 4)); + biomeList[p_i1971_1_] = this; + this.theBiomeDecorator = this.createBiomeDecorator(); + this.spawnableCreatureList.add(new BiomeGenBase.SpawnListEntry(EntitySheep.class, 12, 4, 4)); @@ -172,11 +180,12 @@ - this.field_76761_J.add(new BiomeGenBase.SpawnListEntry(EntityWitch.class, 5, 1, 1)); - this.field_76755_L.add(new BiomeGenBase.SpawnListEntry(EntitySquid.class, 10, 4, 4)); - this.field_82914_M.add(new BiomeGenBase.SpawnListEntry(EntityBat.class, 10, 8, 8)); + this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityWitch.class, 5, 1, 1)); + this.spawnableWaterCreatureList.add(new BiomeGenBase.SpawnListEntry(EntitySquid.class, 10, 4, 4)); + this.spawnableCaveCreatureList.add(new BiomeGenBase.SpawnListEntry(EntityBat.class, 10, 8, 8)); + this.addDefaultFlowers(); } - public BiomeDecorator func_76729_a() + public BiomeDecorator createBiomeDecorator() { - return new BiomeDecorator(); + return getModdedBiomeDecorator(new BiomeDecorator()); } - public BiomeGenBase func_76732_a(float p_76732_1_, float p_76732_2_) + public BiomeGenBase setTemperatureRainfall(float p_76732_1_, float p_76732_2_) @@ -346,7 +355,7 @@ { - double d0 = (double)MathHelper.func_76131_a(this.func_180626_a(p_180627_1_), 0.0F, 1.0F); - double d1 = (double)MathHelper.func_76131_a(this.func_76727_i(), 0.0F, 1.0F); -- return ColorizerGrass.func_77480_a(d0, d1); -+ return getModdedBiomeGrassColor(ColorizerGrass.func_77480_a(d0, d1)); + double d0 = (double)MathHelper.clamp_float(this.getFloatTemperature(p_180627_1_), 0.0F, 1.0F); + double d1 = (double)MathHelper.clamp_float(this.getFloatRainfall(), 0.0F, 1.0F); +- return ColorizerGrass.getGrassColor(d0, d1); ++ return getModdedBiomeGrassColor(ColorizerGrass.getGrassColor(d0, d1)); } @SideOnly(Side.CLIENT) @@ -354,7 +363,7 @@ { - double d0 = (double)MathHelper.func_76131_a(this.func_180626_a(p_180625_1_), 0.0F, 1.0F); - double d1 = (double)MathHelper.func_76131_a(this.func_76727_i(), 0.0F, 1.0F); -- return ColorizerFoliage.func_77470_a(d0, d1); -+ return getModdedBiomeFoliageColor(ColorizerFoliage.func_77470_a(d0, d1)); + double d0 = (double)MathHelper.clamp_float(this.getFloatTemperature(p_180625_1_), 0.0F, 1.0F); + double d1 = (double)MathHelper.clamp_float(this.getFloatRainfall(), 0.0F, 1.0F); +- return ColorizerFoliage.getFoliageColor(d0, d1); ++ return getModdedBiomeFoliageColor(ColorizerFoliage.getFoliageColor(d0, d1)); } - public boolean func_150559_j() + public boolean isSnowyBiome() @@ -500,6 +509,84 @@ } } @@ -75,7 +75,7 @@ + + public int getWaterColorMultiplier() + { -+ BiomeEvent.GetWaterColor event = new BiomeEvent.GetWaterColor(this, field_76759_H); ++ BiomeEvent.GetWaterColor event = new BiomeEvent.GetWaterColor(this, waterColorMultiplier); + MinecraftForge.EVENT_BUS.post(event); + return event.newColor; + } @@ -113,8 +113,8 @@ + */ + public void addDefaultFlowers() + { -+ addFlower(Blocks.field_150327_N.func_176223_P().func_177226_a(Blocks.field_150327_N.func_176494_l(), BlockFlower.EnumFlowerType.DANDELION), 20); -+ addFlower(Blocks.field_150328_O.func_176223_P().func_177226_a(Blocks.field_150328_O.func_176494_l(), BlockFlower.EnumFlowerType.POPPY), 20); ++ addFlower(Blocks.yellow_flower.getDefaultState().withProperty(Blocks.yellow_flower.getTypeProperty(), BlockFlower.EnumFlowerType.DANDELION), 20); ++ addFlower(Blocks.red_flower.getDefaultState().withProperty(Blocks.red_flower.getTypeProperty(), BlockFlower.EnumFlowerType.POPPY), 20); + } + + /** Register a new plant to be planted when bonemeal is used on grass. @@ -129,15 +129,15 @@ + + public void plantFlower(World world, Random rand, BlockPos pos) + { -+ FlowerEntry flower = (FlowerEntry)WeightedRandom.func_76271_a(rand, flowers); ++ FlowerEntry flower = (FlowerEntry)WeightedRandom.getRandomItem(rand, flowers); + if (flower == null || flower.state == null || -+ (flower.state.func_177230_c() instanceof net.minecraft.block.BlockBush && -+ !((net.minecraft.block.BlockBush)flower.state.func_177230_c()).func_180671_f(world, pos, flower.state))) ++ (flower.state.getBlock() instanceof net.minecraft.block.BlockBush && ++ !((net.minecraft.block.BlockBush)flower.state.getBlock()).canBlockStay(world, pos, flower.state))) + { + return; + } + -+ world.func_180501_a(pos, flower.state, 3); ++ world.setBlockState(pos, flower.state, 3); + } + + @@ -145,4 +145,4 @@ + static { - field_76772_c.func_150566_k(); + plains.createMutation(); diff --git a/patches/minecraft/net/minecraft/world/biome/BiomeGenForest.java.patch b/patches.mcp/minecraft/net/minecraft/world/biome/BiomeGenForest.java.patch similarity index 70% rename from patches/minecraft/net/minecraft/world/biome/BiomeGenForest.java.patch rename to patches.mcp/minecraft/net/minecraft/world/biome/BiomeGenForest.java.patch index baadaaa76..5d628a6e1 100644 --- a/patches/minecraft/net/minecraft/world/biome/BiomeGenForest.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/biome/BiomeGenForest.java.patch @@ -15,9 +15,9 @@ + } + for (BlockFlower.EnumFlowerType type : BlockFlower.EnumFlowerType.values()) + { -+ if (type.func_176964_a() == BlockFlower.EnumFlowerColor.YELLOW) continue; ++ if (type.getBlockType() == BlockFlower.EnumFlowerColor.YELLOW) continue; + if (type == BlockFlower.EnumFlowerType.BLUE_ORCHID) type = BlockFlower.EnumFlowerType.POPPY; -+ addFlower(net.minecraft.init.Blocks.field_150328_O.func_176223_P().func_177226_a(net.minecraft.init.Blocks.field_150328_O.func_176494_l(), type), 10); ++ addFlower(net.minecraft.init.Blocks.red_flower.getDefaultState().withProperty(net.minecraft.init.Blocks.red_flower.getTypeProperty(), type), 10); + } + } } diff --git a/patches.mcp/minecraft/net/minecraft/world/biome/BiomeGenHills.java.patch b/patches.mcp/minecraft/net/minecraft/world/biome/BiomeGenHills.java.patch new file mode 100644 index 000000000..34bce4338 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/biome/BiomeGenHills.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/world/biome/BiomeGenHills.java ++++ ../src-work/minecraft/net/minecraft/world/biome/BiomeGenHills.java +@@ -58,7 +58,7 @@ + int i1 = p_180624_2_.nextInt(16); + BlockPos blockpos1 = p_180624_3_.add(k, l, i1); + +- if (worldIn.getBlockState(blockpos1).getBlock() == Blocks.stone) ++ if (worldIn.getBlockState(blockpos1).getBlock().isReplaceableOreGen(worldIn, blockpos1, net.minecraft.block.state.pattern.BlockHelper.forBlock(Blocks.stone))) + { + worldIn.setBlockState(blockpos1, Blocks.emerald_ore.getDefaultState(), 2); + } diff --git a/patches.mcp/minecraft/net/minecraft/world/biome/BiomeGenJungle.java.patch b/patches.mcp/minecraft/net/minecraft/world/biome/BiomeGenJungle.java.patch new file mode 100644 index 000000000..80a4c94ec --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/biome/BiomeGenJungle.java.patch @@ -0,0 +1,13 @@ +--- ../src-base/minecraft/net/minecraft/world/biome/BiomeGenJungle.java ++++ ../src-work/minecraft/net/minecraft/world/biome/BiomeGenJungle.java +@@ -61,7 +61,9 @@ + super.decorate(worldIn, p_180624_2_, p_180624_3_); + int i = p_180624_2_.nextInt(16) + 8; + int j = p_180624_2_.nextInt(16) + 8; +- int k = p_180624_2_.nextInt(worldIn.getHorizon(p_180624_3_.add(i, 0, j)).getY() * 2); ++ int height = worldIn.getHorizon(p_180624_3_.add(i, 0, j)).getY() * 2; // could == 0, which crashes nextInt ++ if (height < 1) height = 1; ++ int k = p_180624_2_.nextInt(height); + (new WorldGenMelon()).generate(worldIn, p_180624_2_, p_180624_3_.add(i, k, j)); + WorldGenVines worldgenvines = new WorldGenVines(); + diff --git a/patches.mcp/minecraft/net/minecraft/world/biome/BiomeGenPlains.java.patch b/patches.mcp/minecraft/net/minecraft/world/biome/BiomeGenPlains.java.patch new file mode 100644 index 000000000..ba1884cfb --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/biome/BiomeGenPlains.java.patch @@ -0,0 +1,22 @@ +--- ../src-base/minecraft/net/minecraft/world/biome/BiomeGenPlains.java ++++ ../src-work/minecraft/net/minecraft/world/biome/BiomeGenPlains.java +@@ -109,4 +109,19 @@ + biomegenplains.field_150609_ah = 14273354; + return biomegenplains; + } ++ ++ @Override ++ public void addDefaultFlowers() ++ { ++ BlockFlower red = net.minecraft.init.Blocks.red_flower; ++ BlockFlower yel = net.minecraft.init.Blocks.yellow_flower; ++ addFlower(red.getDefaultState().withProperty(red.getTypeProperty(), BlockFlower.EnumFlowerType.ORANGE_TULIP), 3); ++ addFlower(red.getDefaultState().withProperty(red.getTypeProperty(), BlockFlower.EnumFlowerType.RED_TULIP), 3); ++ addFlower(red.getDefaultState().withProperty(red.getTypeProperty(), BlockFlower.EnumFlowerType.PINK_TULIP), 3); ++ addFlower(red.getDefaultState().withProperty(red.getTypeProperty(), BlockFlower.EnumFlowerType.WHITE_TULIP), 3); ++ addFlower(red.getDefaultState().withProperty(red.getTypeProperty(), BlockFlower.EnumFlowerType.POPPY), 20); ++ addFlower(red.getDefaultState().withProperty(red.getTypeProperty(), BlockFlower.EnumFlowerType.HOUSTONIA), 20); ++ addFlower(red.getDefaultState().withProperty(red.getTypeProperty(), BlockFlower.EnumFlowerType.OXEYE_DAISY), 20); ++ addFlower(yel.getDefaultState().withProperty(yel.getTypeProperty(), BlockFlower.EnumFlowerType.DANDELION), 30); ++ } + } diff --git a/patches/minecraft/net/minecraft/world/biome/BiomeGenSwamp.java.patch b/patches.mcp/minecraft/net/minecraft/world/biome/BiomeGenSwamp.java.patch similarity index 63% rename from patches/minecraft/net/minecraft/world/biome/BiomeGenSwamp.java.patch rename to patches.mcp/minecraft/net/minecraft/world/biome/BiomeGenSwamp.java.patch index d3c19e270..c4cea2dc1 100644 --- a/patches/minecraft/net/minecraft/world/biome/BiomeGenSwamp.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/biome/BiomeGenSwamp.java.patch @@ -8,6 +8,6 @@ + @Override + public void addDefaultFlowers() + { -+ addFlower(Blocks.field_150328_O.func_176223_P().func_177226_a(Blocks.field_150328_O.func_176494_l(), BlockFlower.EnumFlowerType.BLUE_ORCHID), 10); ++ addFlower(Blocks.red_flower.getDefaultState().withProperty(Blocks.red_flower.getTypeProperty(), BlockFlower.EnumFlowerType.BLUE_ORCHID), 10); + } } diff --git a/patches/minecraft/net/minecraft/world/biome/WorldChunkManager.java.patch b/patches.mcp/minecraft/net/minecraft/world/biome/WorldChunkManager.java.patch similarity index 53% rename from patches/minecraft/net/minecraft/world/biome/WorldChunkManager.java.patch rename to patches.mcp/minecraft/net/minecraft/world/biome/WorldChunkManager.java.patch index c23cb8256..4b2493b2f 100644 --- a/patches/minecraft/net/minecraft/world/biome/WorldChunkManager.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/biome/WorldChunkManager.java.patch @@ -10,36 +10,36 @@ + public class WorldChunkManager { -+ public static List allowedBiomes = Lists.newArrayList(field_76767_f, field_76772_c, field_76768_g, field_76784_u, field_76785_t, field_76782_w, field_76792_x); - private GenLayer field_76944_d; - private GenLayer field_76945_e; - private BiomeCache field_76942_f; ++ public static List allowedBiomes = Lists.newArrayList(forest, plains, taiga, taigaHills, forestHills, jungle, jungleHills); + private GenLayer genBiomes; + private GenLayer biomeIndexLayer; + private BiomeCache biomeCache; @@ -28,13 +33,7 @@ - this.field_76942_f = new BiomeCache(this); + this.biomeCache = new BiomeCache(this); this.field_180301_f = ""; - this.field_76943_g = Lists.newArrayList(); -- this.field_76943_g.add(BiomeGenBase.field_76767_f); -- this.field_76943_g.add(BiomeGenBase.field_76772_c); -- this.field_76943_g.add(BiomeGenBase.field_76768_g); -- this.field_76943_g.add(BiomeGenBase.field_76784_u); -- this.field_76943_g.add(BiomeGenBase.field_76785_t); -- this.field_76943_g.add(BiomeGenBase.field_76782_w); -- this.field_76943_g.add(BiomeGenBase.field_76792_x); -+ this.field_76943_g.addAll(allowedBiomes); + this.biomesToSpawnIn = Lists.newArrayList(); +- this.biomesToSpawnIn.add(BiomeGenBase.forest); +- this.biomesToSpawnIn.add(BiomeGenBase.plains); +- this.biomesToSpawnIn.add(BiomeGenBase.taiga); +- this.biomesToSpawnIn.add(BiomeGenBase.taigaHills); +- this.biomesToSpawnIn.add(BiomeGenBase.forestHills); +- this.biomesToSpawnIn.add(BiomeGenBase.jungle); +- this.biomesToSpawnIn.add(BiomeGenBase.jungleHills); ++ this.biomesToSpawnIn.addAll(allowedBiomes); } public WorldChunkManager(long p_i45744_1_, WorldType p_i45744_3_, String p_i45744_4_) @@ -42,6 +41,7 @@ this(); this.field_180301_f = p_i45744_4_; - GenLayer[] agenlayer = GenLayer.func_180781_a(p_i45744_1_, p_i45744_3_, p_i45744_4_); + GenLayer[] agenlayer = GenLayer.initializeAllBiomeGenerators(p_i45744_1_, p_i45744_3_, p_i45744_4_); + agenlayer = getModdedBiomeGenerators(p_i45744_3_, p_i45744_1_, agenlayer); - this.field_76944_d = agenlayer[0]; - this.field_76945_e = agenlayer[1]; + this.genBiomes = agenlayer[0]; + this.biomeIndexLayer = agenlayer[1]; } @@ -250,4 +250,11 @@ { - this.field_76942_f.func_76838_a(); + this.biomeCache.cleanupCache(); } + + public GenLayer[] getModdedBiomeGenerators(WorldType worldType, long seed, GenLayer[] original) diff --git a/patches/minecraft/net/minecraft/world/border/WorldBorder.java.patch b/patches.mcp/minecraft/net/minecraft/world/border/WorldBorder.java.patch similarity index 68% rename from patches/minecraft/net/minecraft/world/border/WorldBorder.java.patch rename to patches.mcp/minecraft/net/minecraft/world/border/WorldBorder.java.patch index c7f2cf0b9..ed0813c8b 100644 --- a/patches/minecraft/net/minecraft/world/border/WorldBorder.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/border/WorldBorder.java.patch @@ -1,12 +1,12 @@ --- ../src-base/minecraft/net/minecraft/world/border/WorldBorder.java +++ ../src-work/minecraft/net/minecraft/world/border/WorldBorder.java @@ -293,4 +293,9 @@ - iborderlistener.func_177690_b(this, p_177747_1_); + iborderlistener.onWarningDistanceChanged(this, warningDistance); } } + + public void removeListener(IBorderListener listener) + { -+ this.field_177758_a.remove(listener); ++ this.listeners.remove(listener); + } } diff --git a/patches.mcp/minecraft/net/minecraft/world/chunk/Chunk.java.patch b/patches.mcp/minecraft/net/minecraft/world/chunk/Chunk.java.patch new file mode 100644 index 000000000..93c7472d8 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/chunk/Chunk.java.patch @@ -0,0 +1,264 @@ +--- ../src-base/minecraft/net/minecraft/world/chunk/Chunk.java ++++ ../src-work/minecraft/net/minecraft/world/chunk/Chunk.java +@@ -35,6 +35,9 @@ + import net.minecraft.world.gen.ChunkProviderDebug; + import net.minecraftforge.fml.relauncher.Side; + import net.minecraftforge.fml.relauncher.SideOnly; ++import net.minecraftforge.common.MinecraftForge; ++import net.minecraftforge.event.entity.EntityEvent; ++import net.minecraftforge.event.world.ChunkEvent; + import org.apache.logging.log4j.LogManager; + import org.apache.logging.log4j.Logger; + +@@ -174,7 +177,7 @@ + { + Block block = this.getBlock0(j, l - 1, k); + +- if (block.getLightOpacity() == 0) ++ if (getBlockLightOpacity(j, l - 1, k) == 0) + { + --l; + continue; +@@ -469,12 +472,12 @@ + + public int getBlockLightOpacity(BlockPos pos) + { +- return this.getBlock(pos).getLightOpacity(); ++ return this.getBlock(pos).getLightOpacity(worldObj, pos); + } + + private int getBlockLightOpacity(int x, int y, int z) + { +- return this.getBlock0(x, y, z).getLightOpacity(); ++ return getBlockLightOpacity(new BlockPos((xPosition << 4) + x, y, (zPosition << 4) + z)); + } + + private Block getBlock0(int x, int y, int z) +@@ -653,16 +656,23 @@ + flag = j >= i1; + } + ++ int j1 = block.getLightOpacity(this.worldObj, pos); ++ + extendedblockstorage.set(i, j & 15, k, state); + +- if (block1 != block) ++ //if (block1 != block) + { + if (!this.worldObj.isRemote) + { ++ if (iblockstate1.getBlock() != state.getBlock()) //Only fire block breaks when the block changes. + block1.breakBlock(this.worldObj, pos, iblockstate1); ++ TileEntity te = this.getTileEntity(pos, Chunk.EnumCreateEntityType.CHECK); ++ if (te != null && te.shouldRefresh(this.worldObj, pos, iblockstate1, state)) this.worldObj.removeTileEntity(pos); + } +- else if (block1 instanceof ITileEntityProvider) ++ else if (block1.hasTileEntity(iblockstate1)) + { ++ TileEntity te = this.getTileEntity(pos, Chunk.EnumCreateEntityType.CHECK); ++ if (te != null && te.shouldRefresh(this.worldObj, pos, iblockstate1, state)) + this.worldObj.removeTileEntity(pos); + } + } +@@ -679,8 +689,7 @@ + } + else + { +- int j1 = block.getLightOpacity(); +- int k1 = block1.getLightOpacity(); ++ int k1 = block.getLightOpacity(this.worldObj, pos); + + if (j1 > 0) + { +@@ -702,28 +711,18 @@ + + TileEntity tileentity; + +- if (block1 instanceof ITileEntityProvider) +- { +- tileentity = this.getTileEntity(pos, Chunk.EnumCreateEntityType.CHECK); +- +- if (tileentity != null) +- { +- tileentity.updateContainingBlockInfo(); +- } +- } +- + if (!this.worldObj.isRemote && block1 != block) + { + block.onBlockAdded(this.worldObj, pos, state); + } + +- if (block instanceof ITileEntityProvider) ++ if (block.hasTileEntity(state)) + { + tileentity = this.getTileEntity(pos, Chunk.EnumCreateEntityType.CHECK); + + if (tileentity == null) + { +- tileentity = ((ITileEntityProvider)block).createNewTileEntity(this.worldObj, block.getMetaFromState(state)); ++ tileentity = block.createTileEntity(this.worldObj, state); + this.worldObj.setTileEntity(pos, tileentity); + } + +@@ -826,6 +825,7 @@ + k = this.entityLists.length - 1; + } + ++ MinecraftForge.EVENT_BUS.post(new EntityEvent.EnteringChunk(entityIn, this.xPosition, this.zPosition, entityIn.chunkCoordX, entityIn.chunkCoordZ)); + entityIn.addedToChunk = true; + entityIn.chunkCoordX = this.xPosition; + entityIn.chunkCoordY = k; +@@ -864,13 +864,20 @@ + private TileEntity createNewTileEntity(BlockPos pos) + { + Block block = this.getBlock(pos); +- return !block.hasTileEntity() ? null : ((ITileEntityProvider)block).createNewTileEntity(this.worldObj, this.getBlockMetadata(pos)); ++ IBlockState state = block.getStateFromMeta(this.getBlockMetadata(pos)); ++ return !block.hasTileEntity(state) ? null : block.createTileEntity(this.worldObj, state); + } + + public TileEntity getTileEntity(BlockPos pos, Chunk.EnumCreateEntityType p_177424_2_) + { + TileEntity tileentity = (TileEntity)this.chunkTileEntityMap.get(pos); + ++ if (tileentity != null && tileentity.isInvalid()) ++ { ++ chunkTileEntityMap.remove(pos); ++ tileentity = null; ++ } ++ + if (tileentity == null) + { + if (p_177424_2_ == Chunk.EnumCreateEntityType.IMMEDIATE) +@@ -883,11 +890,6 @@ + this.field_177447_w.add(pos); + } + } +- else if (tileentity.isInvalid()) +- { +- this.chunkTileEntityMap.remove(pos); +- return null; +- } + + return tileentity; + } +@@ -907,7 +909,7 @@ + tileEntityIn.setWorldObj(this.worldObj); + tileEntityIn.setPos(pos); + +- if (this.getBlock(pos) instanceof ITileEntityProvider) ++ if (this.getBlock(pos).hasTileEntity(getBlock(pos).getStateFromMeta(this.getBlockMetadata(pos)))) + { + if (this.chunkTileEntityMap.containsKey(pos)) + { +@@ -947,8 +949,9 @@ + entity.onChunkLoad(); + } + +- this.worldObj.loadEntities(this.entityLists[i]); ++ this.worldObj.loadEntities(com.google.common.collect.ImmutableList.copyOf(this.entityLists[i])); + } ++ MinecraftForge.EVENT_BUS.post(new ChunkEvent.Load(this)); + } + + public void onChunkUnload() +@@ -966,6 +969,7 @@ + { + this.worldObj.unloadEntities(this.entityLists[i]); + } ++ MinecraftForge.EVENT_BUS.post(new ChunkEvent.Unload(this)); + } + + public void setChunkModified() +@@ -975,8 +979,8 @@ + + public void getEntitiesWithinAABBForEntity(Entity entityIn, AxisAlignedBB aabb, List listToFill, Predicate p_177414_4_) + { +- int i = MathHelper.floor_double((aabb.minY - 2.0D) / 16.0D); +- int j = MathHelper.floor_double((aabb.maxY + 2.0D) / 16.0D); ++ int i = MathHelper.floor_double((aabb.minY - World.MAX_ENTITY_RADIUS) / 16.0D); ++ int j = MathHelper.floor_double((aabb.maxY + World.MAX_ENTITY_RADIUS) / 16.0D); + i = MathHelper.clamp_int(i, 0, this.entityLists.length - 1); + j = MathHelper.clamp_int(j, 0, this.entityLists.length - 1); + +@@ -1012,8 +1016,8 @@ + + public void getEntitiesOfTypeWithinAAAB(Class entityClass, AxisAlignedBB aabb, List listToFill, Predicate p_177430_4_) + { +- int i = MathHelper.floor_double((aabb.minY - 2.0D) / 16.0D); +- int j = MathHelper.floor_double((aabb.maxY + 2.0D) / 16.0D); ++ int i = MathHelper.floor_double((aabb.minY - World.MAX_ENTITY_RADIUS) / 16.0D); ++ int j = MathHelper.floor_double((aabb.maxY + World.MAX_ENTITY_RADIUS) / 16.0D); + i = MathHelper.clamp_int(i, 0, this.entityLists.length - 1); + j = MathHelper.clamp_int(j, 0, this.entityLists.length - 1); + +@@ -1179,8 +1183,10 @@ + while (!this.field_177447_w.isEmpty()) + { + BlockPos blockpos = (BlockPos)this.field_177447_w.poll(); ++ Block block = this.getBlock(blockpos); ++ IBlockState state = block.getStateFromMeta(this.getBlockMetadata(blockpos)); + +- if (this.getTileEntity(blockpos, Chunk.EnumCreateEntityType.CHECK) == null && this.getBlock(blockpos).hasTileEntity()) ++ if (this.getTileEntity(blockpos, Chunk.EnumCreateEntityType.CHECK) == null && block.hasTileEntity(state)) + { + TileEntity tileentity = this.createNewTileEntity(blockpos); + this.worldObj.setTileEntity(blockpos, tileentity); +@@ -1242,6 +1248,15 @@ + @SideOnly(Side.CLIENT) + public void fillChunk(byte[] p_177439_1_, int p_177439_2_, boolean p_177439_3_) + { ++ Iterator iterator = chunkTileEntityMap.values().iterator(); ++ while(iterator.hasNext()) ++ { ++ TileEntity tileEntity = (TileEntity)iterator.next(); ++ tileEntity.updateContainingBlockInfo(); ++ tileEntity.getBlockMetadata(); ++ tileEntity.getBlockType(); ++ } ++ + int j = 0; + boolean flag1 = !this.worldObj.provider.getHasNoSky(); + int k; +@@ -1311,13 +1326,18 @@ + this.isLightPopulated = true; + this.isTerrainPopulated = true; + this.generateHeightMap(); +- Iterator iterator = this.chunkTileEntityMap.values().iterator(); ++ List invalidList = new java.util.ArrayList(); ++ iterator = this.chunkTileEntityMap.values().iterator(); + + while (iterator.hasNext()) + { + TileEntity tileentity = (TileEntity)iterator.next(); ++ if (tileentity.shouldRefresh(this.worldObj, tileentity.getPos(), tileentity.getBlockType().getStateFromMeta(tileentity.getBlockMetadata()), getBlockState(tileentity.getPos()))) ++ invalidList.add(tileentity); + tileentity.updateContainingBlockInfo(); + } ++ ++ for (TileEntity te : invalidList) te.invalidate(); + } + + public BiomeGenBase getBiome(BlockPos pos, WorldChunkManager chunkManager) +@@ -1644,4 +1664,20 @@ + + private static final String __OBFID = "CL_00002009"; + } ++ ++ /** ++ * Removes the tile entity at the specified position, only if it's ++ * marked as invalid. ++ */ ++ public void removeInvalidTileEntity(BlockPos pos) ++ { ++ if (isChunkLoaded) ++ { ++ TileEntity entity = (TileEntity)chunkTileEntityMap.get(pos); ++ if (entity != null && entity.isInvalid()) ++ { ++ chunkTileEntityMap.remove(pos); ++ } ++ } ++ } + } diff --git a/patches/minecraft/net/minecraft/world/chunk/storage/AnvilChunkLoader.java.patch b/patches.mcp/minecraft/net/minecraft/world/chunk/storage/AnvilChunkLoader.java.patch similarity index 52% rename from patches/minecraft/net/minecraft/world/chunk/storage/AnvilChunkLoader.java.patch rename to patches.mcp/minecraft/net/minecraft/world/chunk/storage/AnvilChunkLoader.java.patch index b19f7eb70..08e154bdb 100644 --- a/patches/minecraft/net/minecraft/world/chunk/storage/AnvilChunkLoader.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/chunk/storage/AnvilChunkLoader.java.patch @@ -10,22 +10,22 @@ import org.apache.logging.log4j.Logger; @@ -43,8 +45,45 @@ - this.field_75825_d = p_i2003_1_; + this.chunkSaveLocation = chunkSaveLocationIn; } + public boolean chunkExists(World world, int x, int z) + { + ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(x, z); + -+ synchronized (this.field_75827_c) ++ synchronized (this.syncLockObject) + { -+ if (this.field_75826_b.contains(chunkcoordintpair)) ++ if (this.pendingAnvilChunksCoordinates.contains(chunkcoordintpair)) + { -+ Iterator iter = this.field_75828_a.iterator(); ++ Iterator iter = this.chunksToRemove.iterator(); + while (iter.hasNext()) + { + PendingChunk pendingChunk = (PendingChunk)iter.next(); -+ if (pendingChunk.field_76548_a.equals(chunkcoordintpair)) ++ if (pendingChunk.chunkCoordinate.equals(chunkcoordintpair)) + { + return true; + } @@ -33,82 +33,82 @@ + } + } + -+ return RegionFileCache.func_76550_a(this.field_75825_d, x, z).chunkExists(x & 31, z & 31); ++ return RegionFileCache.createOrLoadRegionFile(this.chunkSaveLocation, x, z).chunkExists(x & 31, z & 31); + } - public Chunk func_75815_a(World p_75815_1_, int p_75815_2_, int p_75815_3_) throws IOException + public Chunk loadChunk(World worldIn, int x, int z) throws IOException { -+ Object[] data = this.loadChunk__Async(p_75815_1_, p_75815_2_, p_75815_3_); ++ Object[] data = this.loadChunk__Async(worldIn, x, z); + + if (data != null) + { + Chunk chunk = (Chunk) data[0]; + NBTTagCompound nbttagcompound = (NBTTagCompound) data[1]; -+ this.loadEntities(p_75815_1_, nbttagcompound.func_74775_l("Level"), chunk); ++ this.loadEntities(worldIn, nbttagcompound.getCompoundTag("Level"), chunk); + return chunk; + } + + return null; + } + -+ public Object[] loadChunk__Async(World p_75815_1_, int p_75815_2_, int p_75815_3_) throws IOException ++ public Object[] loadChunk__Async(World worldIn, int x, int z) throws IOException + { NBTTagCompound nbttagcompound = null; - ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(p_75815_2_, p_75815_3_); - Object object = this.field_75827_c; + ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(x, z); + Object object = this.syncLockObject; @@ -53,11 +92,13 @@ { - if (this.field_75826_b.contains(chunkcoordintpair)) + if (this.pendingAnvilChunksCoordinates.contains(chunkcoordintpair)) { -- for (int k = 0; k < this.field_75828_a.size(); ++k) -+ Iterator iter = this.field_75828_a.iterator(); +- for (int k = 0; k < this.chunksToRemove.size(); ++k) ++ Iterator iter = this.chunksToRemove.iterator(); + while (iter.hasNext()) { -- if (((AnvilChunkLoader.PendingChunk)this.field_75828_a.get(k)).field_76548_a.equals(chunkcoordintpair)) +- if (((AnvilChunkLoader.PendingChunk)this.chunksToRemove.get(k)).chunkCoordinate.equals(chunkcoordintpair)) + PendingChunk pendingChunk = (PendingChunk)iter.next(); -+ if (pendingChunk.field_76548_a.equals(chunkcoordintpair)) ++ if (pendingChunk.chunkCoordinate.equals(chunkcoordintpair)) { -- nbttagcompound = ((AnvilChunkLoader.PendingChunk)this.field_75828_a.get(k)).field_76547_b; -+ nbttagcompound = pendingChunk.field_76547_b; +- nbttagcompound = ((AnvilChunkLoader.PendingChunk)this.chunksToRemove.get(k)).nbtTags; ++ nbttagcompound = pendingChunk.nbtTags; break; } } @@ -76,11 +117,17 @@ - nbttagcompound = CompressedStreamTools.func_74794_a(datainputstream); + nbttagcompound = CompressedStreamTools.read(datainputstream); } -- return this.func_75822_a(p_75815_1_, p_75815_2_, p_75815_3_, nbttagcompound); -+ return this.checkedReadChunkFromNBT__Async(p_75815_1_, p_75815_2_, p_75815_3_, nbttagcompound); +- return this.checkedReadChunkFromNBT(worldIn, x, z, nbttagcompound); ++ return this.checkedReadChunkFromNBT__Async(worldIn, x, z, nbttagcompound); } - protected Chunk func_75822_a(World p_75822_1_, int p_75822_2_, int p_75822_3_, NBTTagCompound p_75822_4_) + protected Chunk checkedReadChunkFromNBT(World worldIn, int x, int z, NBTTagCompound p_75822_4_) { -+ Object[] data = this.checkedReadChunkFromNBT__Async(p_75822_1_, p_75822_2_, p_75822_3_, p_75822_4_); ++ Object[] data = this.checkedReadChunkFromNBT__Async(worldIn, x, z, p_75822_4_); + return data != null ? (Chunk)data[0] : null; + } + -+ protected Object[] checkedReadChunkFromNBT__Async(World p_75822_1_, int p_75822_2_, int p_75822_3_, NBTTagCompound p_75822_4_) ++ protected Object[] checkedReadChunkFromNBT__Async(World worldIn, int x, int z, NBTTagCompound p_75822_4_) + { - if (!p_75822_4_.func_150297_b("Level", 10)) + if (!p_75822_4_.hasKey("Level", 10)) { - field_151505_a.error("Chunk file at " + p_75822_2_ + "," + p_75822_3_ + " is missing level data, skipping"); + logger.error("Chunk file at " + x + "," + z + " is missing level data, skipping"); @@ -100,10 +147,27 @@ - field_151505_a.error("Chunk file at " + p_75822_2_ + "," + p_75822_3_ + " is in the wrong location; relocating. (Expected " + p_75822_2_ + ", " + p_75822_3_ + ", got " + chunk.field_76635_g + ", " + chunk.field_76647_h + ")"); - p_75822_4_.func_74768_a("xPos", p_75822_2_); - p_75822_4_.func_74768_a("zPos", p_75822_3_); + logger.error("Chunk file at " + x + "," + z + " is in the wrong location; relocating. (Expected " + x + ", " + z + ", got " + chunk.xPosition + ", " + chunk.zPosition + ")"); + p_75822_4_.setInteger("xPos", x); + p_75822_4_.setInteger("zPos", z); + + // Have to move tile entities since we don't load them at this stage -+ NBTTagList _tileEntities = p_75822_4_.func_74775_l("Level").func_150295_c("TileEntities", 10); ++ NBTTagList _tileEntities = p_75822_4_.getCompoundTag("Level").getTagList("TileEntities", 10); + + if (_tileEntities != null) + { -+ for (int te = 0; te < _tileEntities.func_74745_c(); te++) ++ for (int te = 0; te < _tileEntities.tagCount(); te++) + { -+ NBTTagCompound _nbt = (NBTTagCompound) _tileEntities.func_150305_b(te); -+ _nbt.func_74768_a("x", p_75822_2_ * 16 + (_nbt.func_74762_e("x") - chunk.field_76635_g * 16)); -+ _nbt.func_74768_a("z", p_75822_3_ * 16 + (_nbt.func_74762_e("z") - chunk.field_76647_h * 16)); ++ NBTTagCompound _nbt = (NBTTagCompound) _tileEntities.getCompoundTagAt(te); ++ _nbt.setInteger("x", x * 16 + (_nbt.getInteger("x") - chunk.xPosition * 16)); ++ _nbt.setInteger("z", z * 16 + (_nbt.getInteger("z") - chunk.zPosition * 16)); + } + } - chunk = this.func_75823_a(p_75822_1_, p_75822_4_.func_74775_l("Level")); + chunk = this.readChunkFromNBT(worldIn, p_75822_4_.getCompoundTag("Level")); } - - return chunk; @@ -123,10 +123,10 @@ @@ -117,6 +181,7 @@ NBTTagCompound nbttagcompound1 = new NBTTagCompound(); - nbttagcompound.func_74782_a("Level", nbttagcompound1); - this.func_75820_a(p_75816_2_, p_75816_1_, nbttagcompound1); -+ MinecraftForge.EVENT_BUS.post(new ChunkDataEvent.Save(p_75816_2_, nbttagcompound)); - this.func_75824_a(p_75816_2_.func_76632_l(), nbttagcompound); + nbttagcompound.setTag("Level", nbttagcompound1); + this.writeChunkToNBT(chunkIn, worldIn, nbttagcompound1); ++ MinecraftForge.EVENT_BUS.post(new ChunkDataEvent.Save(chunkIn, nbttagcompound)); + this.addChunkToPending(chunkIn.getChunkCoordIntPair(), nbttagcompound); } catch (Exception exception) @@ -287,11 +352,20 @@ @@ -135,10 +135,10 @@ + try + { - if (entity.func_70039_c(nbttagcompound1)) + if (entity.writeToNBTOptional(nbttagcompound1)) { - p_75820_1_.func_177409_g(true); - nbttaglist1.func_74742_a(nbttagcompound1); + chunkIn.setHasEntities(true); + nbttaglist1.appendTag(nbttagcompound1); } + } + catch (Exception e) @@ -156,8 +156,8 @@ nbttagcompound1 = new NBTTagCompound(); + try + { - tileentity.func_145841_b(nbttagcompound1); - nbttaglist2.func_74742_a(nbttagcompound1); + tileentity.writeToNBT(nbttagcompound1); + nbttaglist2.appendTag(nbttagcompound1); + } + catch (Exception e) + { @@ -167,18 +167,18 @@ + } } - p_75820_3_.func_74782_a("TileEntities", nbttaglist2); + p_75820_3_.setTag("TileEntities", nbttaglist2); @@ -386,6 +469,12 @@ - chunk.func_76616_a(p_75823_2_.func_74770_j("Biomes")); + chunk.setBiomeArray(p_75823_2_.getByteArray("Biomes")); } + // End this method here and split off entity loading to another method + return chunk; + } + -+ public void loadEntities(World p_75823_1_, NBTTagCompound p_75823_2_, Chunk chunk) ++ public void loadEntities(World worldIn, NBTTagCompound p_75823_2_, Chunk chunk) + { - NBTTagList nbttaglist1 = p_75823_2_.func_150295_c("Entities", 10); + NBTTagList nbttaglist1 = p_75823_2_.getTagList("Entities", 10); if (nbttaglist1 != null) @@ -457,8 +546,6 @@ diff --git a/patches/minecraft/net/minecraft/world/chunk/storage/AnvilSaveHandler.java.patch b/patches.mcp/minecraft/net/minecraft/world/chunk/storage/AnvilSaveHandler.java.patch similarity index 68% rename from patches/minecraft/net/minecraft/world/chunk/storage/AnvilSaveHandler.java.patch rename to patches.mcp/minecraft/net/minecraft/world/chunk/storage/AnvilSaveHandler.java.patch index dc0036916..216e06a41 100644 --- a/patches/minecraft/net/minecraft/world/chunk/storage/AnvilSaveHandler.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/chunk/storage/AnvilSaveHandler.java.patch @@ -1,18 +1,18 @@ --- ../src-base/minecraft/net/minecraft/world/chunk/storage/AnvilSaveHandler.java +++ ../src-work/minecraft/net/minecraft/world/chunk/storage/AnvilSaveHandler.java @@ -23,18 +23,12 @@ - File file1 = this.func_75765_b(); + File file1 = this.getWorldDirectory(); File file2; -- if (p_75763_1_ instanceof WorldProviderHell) -+ if (p_75763_1_.getSaveFolder() != null) +- if (provider instanceof WorldProviderHell) ++ if (provider.getSaveFolder() != null) { - file2 = new File(file1, "DIM-1"); -+ file2 = new File(file1, p_75763_1_.getSaveFolder()); ++ file2 = new File(file1, provider.getSaveFolder()); file2.mkdirs(); return new AnvilChunkLoader(file2); } -- else if (p_75763_1_ instanceof WorldProviderEnd) +- else if (provider instanceof WorldProviderEnd) - { - file2 = new File(file1, "DIM1"); - file2.mkdirs(); diff --git a/patches.mcp/minecraft/net/minecraft/world/chunk/storage/ExtendedBlockStorage.java.patch b/patches.mcp/minecraft/net/minecraft/world/chunk/storage/ExtendedBlockStorage.java.patch new file mode 100644 index 000000000..0473edcfc --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/chunk/storage/ExtendedBlockStorage.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/world/chunk/storage/ExtendedBlockStorage.java ++++ ../src-work/minecraft/net/minecraft/world/chunk/storage/ExtendedBlockStorage.java +@@ -35,6 +35,8 @@ + + public void set(int x, int y, int z, IBlockState state) + { ++ if (state instanceof net.minecraftforge.common.property.IExtendedBlockState) ++ state = ((net.minecraftforge.common.property.IExtendedBlockState) state).getClean(); + IBlockState iblockstate1 = this.get(x, y, z); + Block block = iblockstate1.getBlock(); + Block block1 = state.getBlock(); diff --git a/patches/minecraft/net/minecraft/world/chunk/storage/RegionFile.java.patch b/patches.mcp/minecraft/net/minecraft/world/chunk/storage/RegionFile.java.patch similarity index 60% rename from patches/minecraft/net/minecraft/world/chunk/storage/RegionFile.java.patch rename to patches.mcp/minecraft/net/minecraft/world/chunk/storage/RegionFile.java.patch index af121db7f..134243601 100644 --- a/patches/minecraft/net/minecraft/world/chunk/storage/RegionFile.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/chunk/storage/RegionFile.java.patch @@ -7,25 +7,25 @@ + // This is a copy (sort of) of the method below it, make sure they stay in sync + public synchronized boolean chunkExists(int x, int z) + { -+ if (this.func_76705_d(x, z)) return false; ++ if (this.outOfBounds(x, z)) return false; + + try + { -+ int offset = this.func_76707_e(x, z); ++ int offset = this.getOffset(x, z); + + if (offset == 0) return false; + + int sectorNumber = offset >> 8; + int numSectors = offset & 255; + -+ if (sectorNumber + numSectors > this.field_76714_f.size()) return false; ++ if (sectorNumber + numSectors > this.sectorFree.size()) return false; + -+ this.field_76719_c.seek((long)(sectorNumber * 4096)); -+ int length = this.field_76719_c.readInt(); ++ this.dataFile.seek((long)(sectorNumber * 4096)); ++ int length = this.dataFile.readInt(); + + if (length > 4096 * numSectors || length <= 0) return false; + -+ byte version = this.field_76719_c.readByte(); ++ byte version = this.dataFile.readByte(); + + if (version == 1 || version == 2) return true; + } @@ -37,6 +37,6 @@ + return false; + } + - public synchronized DataInputStream func_76704_a(int p_76704_1_, int p_76704_2_) + public synchronized DataInputStream getChunkDataInputStream(int x, int z) { - if (this.func_76705_d(p_76704_1_, p_76704_2_)) + if (this.outOfBounds(x, z)) diff --git a/patches/minecraft/net/minecraft/world/gen/ChunkProviderEnd.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/ChunkProviderEnd.java.patch similarity index 50% rename from patches/minecraft/net/minecraft/world/gen/ChunkProviderEnd.java.patch rename to patches.mcp/minecraft/net/minecraft/world/gen/ChunkProviderEnd.java.patch index c3e3d7a75..968222076 100644 --- a/patches/minecraft/net/minecraft/world/gen/ChunkProviderEnd.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/gen/ChunkProviderEnd.java.patch @@ -11,17 +11,17 @@ public class ChunkProviderEnd implements IChunkProvider { @@ -43,6 +46,14 @@ - this.field_73199_l = new NoiseGeneratorOctaves(this.field_73204_i, 8); - this.field_73196_a = new NoiseGeneratorOctaves(this.field_73204_i, 10); - this.field_73194_b = new NoiseGeneratorOctaves(this.field_73204_i, 16); + this.noiseGen3 = new NoiseGeneratorOctaves(this.endRNG, 8); + this.noiseGen4 = new NoiseGeneratorOctaves(this.endRNG, 10); + this.noiseGen5 = new NoiseGeneratorOctaves(this.endRNG, 16); + -+ NoiseGenerator[] noiseGens = {field_73201_j, field_73202_k, field_73199_l, field_73196_a, field_73194_b}; -+ noiseGens = TerrainGen.getModdedNoiseGenerators(p_i2007_1_, this.field_73204_i, noiseGens); -+ this.field_73201_j = (NoiseGeneratorOctaves)noiseGens[0]; -+ this.field_73202_k = (NoiseGeneratorOctaves)noiseGens[1]; -+ this.field_73199_l = (NoiseGeneratorOctaves)noiseGens[2]; -+ this.field_73196_a = (NoiseGeneratorOctaves)noiseGens[3]; -+ this.field_73194_b = (NoiseGeneratorOctaves)noiseGens[4]; ++ NoiseGenerator[] noiseGens = {noiseGen1, noiseGen2, noiseGen3, noiseGen4, noiseGen5}; ++ noiseGens = TerrainGen.getModdedNoiseGenerators(worldIn, this.endRNG, noiseGens); ++ this.noiseGen1 = (NoiseGeneratorOctaves)noiseGens[0]; ++ this.noiseGen2 = (NoiseGeneratorOctaves)noiseGens[1]; ++ this.noiseGen3 = (NoiseGeneratorOctaves)noiseGens[2]; ++ this.noiseGen4 = (NoiseGeneratorOctaves)noiseGens[3]; ++ this.noiseGen5 = (NoiseGeneratorOctaves)noiseGens[4]; } public void func_180520_a(int p_180520_1_, int p_180520_2_, ChunkPrimer p_180520_3_) @@ -29,7 +29,7 @@ public void func_180519_a(ChunkPrimer p_180519_1_) { -+ ChunkProviderEvent.ReplaceBiomeBlocks event = new ChunkProviderEvent.ReplaceBiomeBlocks(this, chunkX, chunkZ, p_180519_1_, this.field_73200_m); ++ ChunkProviderEvent.ReplaceBiomeBlocks event = new ChunkProviderEvent.ReplaceBiomeBlocks(this, chunkX, chunkZ, p_180519_1_, this.endWorld); + MinecraftForge.EVENT_BUS.post(event); + if (event.getResult() == Result.DENY) return; for (int i = 0; i < 16; ++i) @@ -40,15 +40,15 @@ } + private int chunkX=0, chunkZ=0; - public Chunk func_73154_d(int p_73154_1_, int p_73154_2_) + public Chunk provideChunk(int x, int z) { -+ chunkX = p_73154_1_; chunkZ = p_73154_2_; - this.field_73204_i.setSeed((long)p_73154_1_ * 341873128712L + (long)p_73154_2_ * 132897987541L); ++ chunkX = x; chunkZ = z; + this.endRNG.setSeed((long)x * 341873128712L + (long)z * 132897987541L); ChunkPrimer chunkprimer = new ChunkPrimer(); - this.field_73198_o = this.field_73200_m.func_72959_q().func_76933_b(this.field_73198_o, p_73154_1_ * 16, p_73154_2_ * 16, 16, 16); + this.biomesForGeneration = this.endWorld.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, x * 16, z * 16, 16, 16); @@ -185,6 +201,10 @@ - private double[] func_73187_a(double[] p_73187_1_, int p_73187_2_, int p_73187_3_, int p_73187_4_, int p_73187_5_, int p_73187_6_, int p_73187_7_) + private double[] initializeNoiseField(double[] p_73187_1_, int p_73187_2_, int p_73187_3_, int p_73187_4_, int p_73187_5_, int p_73187_6_, int p_73187_7_) { + ChunkProviderEvent.InitNoiseField event = new ChunkProviderEvent.InitNoiseField(this, p_73187_1_, p_73187_2_, p_73187_3_, p_73187_4_, p_73187_5_, p_73187_6_, p_73187_7_); + MinecraftForge.EVENT_BUS.post(event); @@ -58,17 +58,17 @@ { p_73187_1_ = new double[p_73187_5_ * p_73187_6_ * p_73187_7_]; @@ -275,8 +295,14 @@ - public void func_73153_a(IChunkProvider p_73153_1_, int p_73153_2_, int p_73153_3_) + public void populate(IChunkProvider p_73153_1_, int p_73153_2_, int p_73153_3_) { - BlockFalling.field_149832_M = true; + BlockFalling.fallInstantly = true; + -+ MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Pre(p_73153_1_, field_73200_m, field_73200_m.field_73012_v, p_73153_2_, p_73153_3_, false)); ++ MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Pre(p_73153_1_, endWorld, endWorld.rand, p_73153_2_, p_73153_3_, false)); + BlockPos blockpos = new BlockPos(p_73153_2_ * 16, 0, p_73153_3_ * 16); - this.field_73200_m.func_180494_b(blockpos.func_177982_a(16, 0, 16)).func_180624_a(this.field_73200_m, this.field_73200_m.field_73012_v, blockpos); + this.endWorld.getBiomeGenForCoords(blockpos.add(16, 0, 16)).decorate(this.endWorld, this.endWorld.rand, blockpos); + -+ MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Post(p_73153_1_, field_73200_m, field_73200_m.field_73012_v, p_73153_2_, p_73153_3_, false)); ++ MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Post(p_73153_1_, endWorld, endWorld.rand, p_73153_2_, p_73153_3_, false)); + - BlockFalling.field_149832_M = false; + BlockFalling.fallInstantly = false; } diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/ChunkProviderGenerate.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/ChunkProviderGenerate.java.patch new file mode 100644 index 000000000..dc67e29f2 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/ChunkProviderGenerate.java.patch @@ -0,0 +1,121 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/ChunkProviderGenerate.java ++++ ../src-work/minecraft/net/minecraft/world/gen/ChunkProviderGenerate.java +@@ -24,6 +24,11 @@ + import net.minecraft.world.gen.structure.MapGenStronghold; + import net.minecraft.world.gen.structure.MapGenVillage; + import net.minecraft.world.gen.structure.StructureOceanMonument; ++import static net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.*; ++import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.*; ++import net.minecraftforge.common.*; ++import net.minecraftforge.fml.common.eventhandler.Event.*; ++import net.minecraftforge.event.terraingen.*; + + public class ChunkProviderGenerate implements IChunkProvider + { +@@ -68,6 +73,15 @@ + this.scatteredFeatureGenerator = new MapGenScatteredFeature(); + this.ravineGenerator = new MapGenRavine(); + this.oceanMonumentGenerator = new StructureOceanMonument(); ++ { ++ caveGenerator = TerrainGen.getModdedMapGen(caveGenerator, CAVE); ++ strongholdGenerator = (MapGenStronghold)TerrainGen.getModdedMapGen(strongholdGenerator, STRONGHOLD); ++ villageGenerator = (MapGenVillage)TerrainGen.getModdedMapGen(villageGenerator, VILLAGE); ++ mineshaftGenerator = (MapGenMineshaft)TerrainGen.getModdedMapGen(mineshaftGenerator, MINESHAFT); ++ scatteredFeatureGenerator = (MapGenScatteredFeature)TerrainGen.getModdedMapGen(scatteredFeatureGenerator, SCATTERED_FEATURE); ++ ravineGenerator = TerrainGen.getModdedMapGen(ravineGenerator, RAVINE); ++ oceanMonumentGenerator = (StructureOceanMonument)TerrainGen.getModdedMapGen(oceanMonumentGenerator, OCEAN_MONUMENT); ++ } + this.worldObj = worldIn; + this.mapFeaturesEnabled = p_i45636_4_; + this.field_177475_o = worldIn.getWorldInfo().getTerrainType(); +@@ -96,6 +110,16 @@ + this.settings = ChunkProviderSettings.Factory.func_177865_a(p_i45636_5_).func_177864_b(); + this.field_177476_s = this.settings.useLavaOceans ? Blocks.lava : Blocks.water; + } ++ ++ NoiseGenerator[] noiseGens = {field_147431_j, field_147432_k, field_147429_l, field_147430_m, noiseGen5, noiseGen6, mobSpawnerNoise}; ++ noiseGens = TerrainGen.getModdedNoiseGenerators(worldIn, this.rand, noiseGens); ++ this.field_147431_j = (NoiseGeneratorOctaves)noiseGens[0]; ++ this.field_147432_k = (NoiseGeneratorOctaves)noiseGens[1]; ++ this.field_147429_l = (NoiseGeneratorOctaves)noiseGens[2]; ++ this.field_147430_m = (NoiseGeneratorPerlin)noiseGens[3]; ++ this.noiseGen5 = (NoiseGeneratorOctaves)noiseGens[4]; ++ this.noiseGen6 = (NoiseGeneratorOctaves)noiseGens[5]; ++ this.mobSpawnerNoise = (NoiseGeneratorOctaves)noiseGens[6]; + } + + public void setBlocksInChunk(int p_180518_1_, int p_180518_2_, ChunkPrimer p_180518_3_) +@@ -169,6 +193,10 @@ + + public void func_180517_a(int p_180517_1_, int p_180517_2_, ChunkPrimer p_180517_3_, BiomeGenBase[] p_180517_4_) + { ++ ChunkProviderEvent.ReplaceBiomeBlocks event = new ChunkProviderEvent.ReplaceBiomeBlocks(this, p_180517_1_, p_180517_2_, p_180517_3_, this.worldObj); ++ MinecraftForge.EVENT_BUS.post(event); ++ if (event.getResult() == Result.DENY) return; ++ + double d0 = 0.03125D; + this.stoneNoise = this.field_147430_m.func_151599_a(this.stoneNoise, (double)(p_180517_1_ * 16), (double)(p_180517_2_ * 16), 16, 16, d0 * 2.0D, d0 * 2.0D, 1.0D); + +@@ -375,6 +403,8 @@ + boolean flag = false; + ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(p_73153_2_, p_73153_3_); + ++ MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Pre(p_73153_1_, worldObj, rand, p_73153_2_, p_73153_3_, flag)); ++ + if (this.settings.useMineShafts && this.mapFeaturesEnabled) + { + this.mineshaftGenerator.func_175794_a(this.worldObj, this.rand, chunkcoordintpair); +@@ -404,7 +434,8 @@ + int l1; + int i2; + +- if (biomegenbase != BiomeGenBase.desert && biomegenbase != BiomeGenBase.desertHills && this.settings.useWaterLakes && !flag && this.rand.nextInt(this.settings.waterLakeChance) == 0) ++ if (biomegenbase != BiomeGenBase.desert && biomegenbase != BiomeGenBase.desertHills && this.settings.useWaterLakes && !flag && this.rand.nextInt(this.settings.waterLakeChance) == 0 ++ && TerrainGen.populate(p_73153_1_, worldObj, rand, p_73153_2_, p_73153_3_, flag, LAKE)) + { + k1 = this.rand.nextInt(16) + 8; + l1 = this.rand.nextInt(256); +@@ -412,7 +443,7 @@ + (new WorldGenLakes(Blocks.water)).generate(this.worldObj, this.rand, blockpos.add(k1, l1, i2)); + } + +- if (!flag && this.rand.nextInt(this.settings.lavaLakeChance / 10) == 0 && this.settings.useLavaLakes) ++ if (TerrainGen.populate(p_73153_1_, worldObj, rand, p_73153_2_, p_73153_3_, flag, LAVA) && !flag && this.rand.nextInt(this.settings.lavaLakeChance / 10) == 0 && this.settings.useLavaLakes) + { + k1 = this.rand.nextInt(16) + 8; + l1 = this.rand.nextInt(this.rand.nextInt(248) + 8); +@@ -426,7 +457,8 @@ + + if (this.settings.useDungeons) + { +- for (k1 = 0; k1 < this.settings.dungeonChance; ++k1) ++ boolean doGen = TerrainGen.populate(p_73153_1_, worldObj, rand, p_73153_2_, p_73153_3_, flag, DUNGEON); ++ for (k1 = 0; doGen && k1 < this.settings.dungeonChance; ++k1) + { + l1 = this.rand.nextInt(16) + 8; + i2 = this.rand.nextInt(256); +@@ -436,10 +468,14 @@ + } + + biomegenbase.decorate(this.worldObj, this.rand, new BlockPos(k, 0, l)); ++ if (TerrainGen.populate(p_73153_1_, worldObj, rand, p_73153_2_, p_73153_3_, flag, ANIMALS)) ++ { + SpawnerAnimals.performWorldGenSpawning(this.worldObj, biomegenbase, k + 8, l + 8, 16, 16, this.rand); ++ } + blockpos = blockpos.add(8, 0, 8); + +- for (k1 = 0; k1 < 16; ++k1) ++ boolean doGen = TerrainGen.populate(p_73153_1_, worldObj, rand, p_73153_2_, p_73153_3_, flag, ICE); ++ for (k1 = 0; doGen && k1 < 16; ++k1) + { + for (l1 = 0; l1 < 16; ++l1) + { +@@ -458,6 +494,8 @@ + } + } + ++ MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Post(p_73153_1_, worldObj, rand, p_73153_2_, p_73153_3_, flag)); ++ + BlockFalling.fallInstantly = false; + } + diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/ChunkProviderHell.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/ChunkProviderHell.java.patch new file mode 100644 index 000000000..ac0ed930c --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/ChunkProviderHell.java.patch @@ -0,0 +1,145 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/ChunkProviderHell.java ++++ ../src-work/minecraft/net/minecraft/world/gen/ChunkProviderHell.java +@@ -24,6 +24,13 @@ + import net.minecraft.world.gen.feature.WorldGenMinable; + import net.minecraft.world.gen.feature.WorldGenerator; + import net.minecraft.world.gen.structure.MapGenNetherBridge; ++import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.*; ++import static net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.*; ++import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.*; ++import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.*; ++import net.minecraftforge.common.*; ++import net.minecraftforge.fml.common.eventhandler.Event.*; ++import net.minecraftforge.event.terraingen.*; + + public class ChunkProviderHell implements IChunkProvider + { +@@ -65,18 +72,30 @@ + this.field_177472_y = new WorldGenHellLava(Blocks.flowing_lava, false); + this.field_177471_z = new GeneratorBushFeature(Blocks.brown_mushroom); + this.field_177465_A = new GeneratorBushFeature(Blocks.red_mushroom); +- this.genNetherBridge = new MapGenNetherBridge(); +- this.netherCaveGenerator = new MapGenCavesHell(); ++ this.genNetherBridge = (MapGenNetherBridge) TerrainGen.getModdedMapGen(new MapGenNetherBridge(), NETHER_BRIDGE); ++ this.netherCaveGenerator = TerrainGen.getModdedMapGen(new MapGenCavesHell(), NETHER_CAVE); + this.worldObj = worldIn; + this.field_177466_i = p_i45637_2_; + this.hellRNG = new Random(p_i45637_3_); +- this.netherNoiseGen1 = new NoiseGeneratorOctaves(this.hellRNG, 16); +- this.netherNoiseGen2 = new NoiseGeneratorOctaves(this.hellRNG, 16); +- this.netherNoiseGen3 = new NoiseGeneratorOctaves(this.hellRNG, 8); +- this.slowsandGravelNoiseGen = new NoiseGeneratorOctaves(this.hellRNG, 4); +- this.netherrackExculsivityNoiseGen = new NoiseGeneratorOctaves(this.hellRNG, 4); +- this.netherNoiseGen6 = new NoiseGeneratorOctaves(this.hellRNG, 10); +- this.netherNoiseGen7 = new NoiseGeneratorOctaves(this.hellRNG, 16); ++ ++ NoiseGenerator[] noiseGens = ++ { ++ new NoiseGeneratorOctaves(this.hellRNG, 16), ++ new NoiseGeneratorOctaves(this.hellRNG, 16), ++ new NoiseGeneratorOctaves(this.hellRNG, 8), ++ new NoiseGeneratorOctaves(this.hellRNG, 4), ++ new NoiseGeneratorOctaves(this.hellRNG, 4), ++ new NoiseGeneratorOctaves(this.hellRNG, 10), ++ new NoiseGeneratorOctaves(this.hellRNG, 16) ++ }; ++ noiseGens = TerrainGen.getModdedNoiseGenerators(worldIn, this.hellRNG, noiseGens); ++ this.netherNoiseGen1 = (NoiseGeneratorOctaves)noiseGens[0]; ++ this.netherNoiseGen2 = (NoiseGeneratorOctaves)noiseGens[1]; ++ this.netherNoiseGen3 = (NoiseGeneratorOctaves)noiseGens[2]; ++ this.slowsandGravelNoiseGen = (NoiseGeneratorOctaves)noiseGens[3]; ++ this.netherrackExculsivityNoiseGen = (NoiseGeneratorOctaves)noiseGens[4]; ++ this.netherNoiseGen6 = (NoiseGeneratorOctaves)noiseGens[5]; ++ this.netherNoiseGen7 = (NoiseGeneratorOctaves)noiseGens[6]; + } + + public void func_180515_a(int p_180515_1_, int p_180515_2_, ChunkPrimer p_180515_3_) +@@ -155,6 +174,10 @@ + + public void func_180516_b(int p_180516_1_, int p_180516_2_, ChunkPrimer p_180516_3_) + { ++ ChunkProviderEvent.ReplaceBiomeBlocks event = new ChunkProviderEvent.ReplaceBiomeBlocks(this, p_180516_1_, p_180516_2_, p_180516_3_, this.worldObj); ++ MinecraftForge.EVENT_BUS.post(event); ++ if (event.getResult() == Result.DENY) return; ++ + byte b0 = 64; + double d0 = 0.03125D; + this.slowsandNoise = this.slowsandGravelNoiseGen.generateNoiseOctaves(this.slowsandNoise, p_180516_1_ * 16, p_180516_2_ * 16, 0, 16, 16, 1, d0, d0, 1.0D); +@@ -272,6 +295,10 @@ + + private double[] initializeNoiseField(double[] p_73164_1_, int p_73164_2_, int p_73164_3_, int p_73164_4_, int p_73164_5_, int p_73164_6_, int p_73164_7_) + { ++ ChunkProviderEvent.InitNoiseField event = new ChunkProviderEvent.InitNoiseField(this, p_73164_1_, p_73164_2_, p_73164_3_, p_73164_4_, p_73164_5_, p_73164_6_, p_73164_7_); ++ MinecraftForge.EVENT_BUS.post(event); ++ if (event.getResult() == Result.DENY) return event.noisefield; ++ + if (p_73164_1_ == null) + { + p_73164_1_ = new double[p_73164_5_ * p_73164_6_ * p_73164_7_]; +@@ -365,47 +392,58 @@ + public void populate(IChunkProvider p_73153_1_, int p_73153_2_, int p_73153_3_) + { + BlockFalling.fallInstantly = true; ++ ++ MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Pre(p_73153_1_, worldObj, hellRNG, p_73153_2_, p_73153_3_, false)); ++ + BlockPos blockpos = new BlockPos(p_73153_2_ * 16, 0, p_73153_3_ * 16); + ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(p_73153_2_, p_73153_3_); + this.genNetherBridge.func_175794_a(this.worldObj, this.hellRNG, chunkcoordintpair); + int k; + +- for (k = 0; k < 8; ++k) ++ boolean doGen = TerrainGen.populate(p_73153_1_, worldObj, hellRNG, p_73153_2_, p_73153_3_, false, NETHER_LAVA); ++ for (k = 0; doGen && k < 8; ++k) + { + this.field_177472_y.generate(this.worldObj, this.hellRNG, blockpos.add(this.hellRNG.nextInt(16) + 8, this.hellRNG.nextInt(120) + 4, this.hellRNG.nextInt(16) + 8)); + } + +- for (k = 0; k < this.hellRNG.nextInt(this.hellRNG.nextInt(10) + 1) + 1; ++k) ++ doGen = TerrainGen.populate(p_73153_1_, worldObj, hellRNG, p_73153_2_, p_73153_3_, false, FIRE); ++ for (k = 0; doGen && k < this.hellRNG.nextInt(this.hellRNG.nextInt(10) + 1) + 1; ++k) + { + this.field_177470_t.generate(this.worldObj, this.hellRNG, blockpos.add(this.hellRNG.nextInt(16) + 8, this.hellRNG.nextInt(120) + 4, this.hellRNG.nextInt(16) + 8)); + } + +- for (k = 0; k < this.hellRNG.nextInt(this.hellRNG.nextInt(10) + 1); ++k) ++ doGen = TerrainGen.populate(p_73153_1_, worldObj, hellRNG, p_73153_2_, p_73153_3_, false, GLOWSTONE); ++ for (k = 0; doGen && k < this.hellRNG.nextInt(this.hellRNG.nextInt(10) + 1); ++k) + { + this.field_177469_u.generate(this.worldObj, this.hellRNG, blockpos.add(this.hellRNG.nextInt(16) + 8, this.hellRNG.nextInt(120) + 4, this.hellRNG.nextInt(16) + 8)); + } + +- for (k = 0; k < 10; ++k) ++ for (k = 0; doGen && k < 10; ++k) + { + this.field_177468_v.generate(this.worldObj, this.hellRNG, blockpos.add(this.hellRNG.nextInt(16) + 8, this.hellRNG.nextInt(128), this.hellRNG.nextInt(16) + 8)); + } + +- if (this.hellRNG.nextBoolean()) ++ MinecraftForge.EVENT_BUS.post(new DecorateBiomeEvent.Pre(worldObj, hellRNG, blockpos)); ++ ++ doGen = TerrainGen.decorate(worldObj, hellRNG, blockpos, SHROOM); ++ if (doGen && this.hellRNG.nextBoolean()) + { + this.field_177471_z.generate(this.worldObj, this.hellRNG, blockpos.add(this.hellRNG.nextInt(16) + 8, this.hellRNG.nextInt(128), this.hellRNG.nextInt(16) + 8)); + } + +- if (this.hellRNG.nextBoolean()) ++ if (doGen && this.hellRNG.nextBoolean()) + { + this.field_177465_A.generate(this.worldObj, this.hellRNG, blockpos.add(this.hellRNG.nextInt(16) + 8, this.hellRNG.nextInt(128), this.hellRNG.nextInt(16) + 8)); + } + +- for (k = 0; k < 16; ++k) ++ doGen = TerrainGen.generateOre(worldObj, hellRNG, field_177467_w, blockpos, QUARTZ); ++ for (k = 0; doGen && k < 16; ++k) + { + this.field_177467_w.generate(this.worldObj, this.hellRNG, blockpos.add(this.hellRNG.nextInt(16), this.hellRNG.nextInt(108) + 10, this.hellRNG.nextInt(16))); + } + +- for (k = 0; k < 16; ++k) ++ doGen = TerrainGen.populate(p_73153_1_, worldObj, hellRNG, p_73153_2_, p_73153_3_, false, NETHER_LAVA2); ++ for (k = 0; doGen && k < 16; ++k) + { + this.field_177473_x.generate(this.worldObj, this.hellRNG, blockpos.add(this.hellRNG.nextInt(16), this.hellRNG.nextInt(108) + 10, this.hellRNG.nextInt(16))); + } diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/ChunkProviderServer.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/ChunkProviderServer.java.patch new file mode 100644 index 000000000..2c367ab51 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/ChunkProviderServer.java.patch @@ -0,0 +1,138 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/ChunkProviderServer.java ++++ ../src-work/minecraft/net/minecraft/world/gen/ChunkProviderServer.java +@@ -24,6 +24,10 @@ + import net.minecraft.world.chunk.storage.IChunkLoader; + import org.apache.logging.log4j.LogManager; + import org.apache.logging.log4j.Logger; ++import net.minecraft.world.chunk.storage.AnvilChunkLoader; ++import net.minecraftforge.common.DimensionManager; ++import net.minecraftforge.common.ForgeChunkManager; ++import net.minecraftforge.common.chunkio.ChunkIOExecutor; + + public class ChunkProviderServer implements IChunkProvider + { +@@ -36,6 +40,7 @@ + public LongHashMap id2ChunkMap = new LongHashMap(); + public List loadedChunks = Lists.newArrayList(); + public WorldServer worldObj; ++ private Set loadingChunks = com.google.common.collect.Sets.newHashSet(); + private static final String __OBFID = "CL_00001436"; + + public ChunkProviderServer(WorldServer p_i1520_1_, IChunkLoader p_i1520_2_, IChunkProvider p_i1520_3_) +@@ -58,7 +63,7 @@ + + public void dropChunk(int p_73241_1_, int p_73241_2_) + { +- if (this.worldObj.provider.canRespawnHere()) ++ if (this.worldObj.provider.canRespawnHere() && DimensionManager.shouldLoadSpawn(this.worldObj.provider.getDimensionId())) + { + if (!this.worldObj.isSpawnChunk(p_73241_1_, p_73241_2_)) + { +@@ -84,12 +89,64 @@ + + public Chunk loadChunk(int p_73158_1_, int p_73158_2_) + { ++ return loadChunk(p_73158_1_, p_73158_2_, null); ++ } ++ ++ public Chunk loadChunk(int par1, int par2, Runnable runnable) ++ { ++ long k = ChunkCoordIntPair.chunkXZ2Int(par1, par2); ++ this.droppedChunksSet.remove(Long.valueOf(k)); ++ Chunk chunk = (Chunk)this.id2ChunkMap.getValueByKey(k); ++ AnvilChunkLoader loader = null; ++ ++ if (this.chunkLoader instanceof AnvilChunkLoader) ++ { ++ loader = (AnvilChunkLoader) this.chunkLoader; ++ } ++ ++ // We can only use the queue for already generated chunks ++ if (chunk == null && loader != null && loader.chunkExists(this.worldObj, par1, par2)) ++ { ++ if (runnable != null) ++ { ++ ChunkIOExecutor.queueChunkLoad(this.worldObj, loader, this, par1, par2, runnable); ++ return null; ++ } ++ else ++ { ++ chunk = ChunkIOExecutor.syncChunkLoad(this.worldObj, loader, this, par1, par2); ++ } ++ } ++ else if (chunk == null) ++ { ++ chunk = this.originalLoadChunk(par1, par2); ++ } ++ ++ // If we didn't load the chunk async and have a callback run it now ++ if (runnable != null) ++ { ++ runnable.run(); ++ } ++ ++ return chunk; ++ } ++ ++ public Chunk originalLoadChunk(int p_73158_1_, int p_73158_2_) ++ { + long k = ChunkCoordIntPair.chunkXZ2Int(p_73158_1_, p_73158_2_); + this.droppedChunksSet.remove(Long.valueOf(k)); + Chunk chunk = (Chunk)this.id2ChunkMap.getValueByKey(k); + + if (chunk == null) + { ++ boolean added = loadingChunks.add(k); ++ if (!added) ++ { ++ net.minecraftforge.fml.common.FMLLog.bigWarning("There is an attempt to load a chunk (%d,%d) in dimension %d that is already being loaded. This will cause weird chunk breakages.", p_73158_1_, p_73158_2_, worldObj.provider.getDimensionId()); ++ } ++ chunk = ForgeChunkManager.fetchDormantChunk(k, this.worldObj); ++ ++ if (chunk == null) + chunk = this.loadChunkFromFile(p_73158_1_, p_73158_2_); + + if (chunk == null) +@@ -118,6 +175,7 @@ + + this.id2ChunkMap.add(k, chunk); + this.loadedChunks.add(chunk); ++ loadingChunks.remove(k); + chunk.onChunkLoad(); + chunk.populateChunk(this, this, p_73158_1_, p_73158_2_); + } +@@ -209,6 +267,7 @@ + if (this.serverChunkGenerator != null) + { + this.serverChunkGenerator.populate(p_73153_1_, p_73153_2_, p_73153_3_); ++ net.minecraftforge.fml.common.registry.GameRegistry.generateWorld(p_73153_2_, p_73153_3_, worldObj, serverChunkGenerator, p_73153_1_); + chunk.setChunkModified(); + } + } +@@ -269,8 +328,13 @@ + { + if (!this.worldObj.disableLevelSaving) + { +- for (int i = 0; i < 100; ++i) ++ for (ChunkCoordIntPair forced : this.worldObj.getPersistentChunks().keySet()) + { ++ this.droppedChunksSet.remove(ChunkCoordIntPair.chunkXZ2Int(forced.chunkXPos, forced.chunkZPos)); ++ } ++ ++ for (int i = 0; i < 100; ++i) ++ { + if (!this.droppedChunksSet.isEmpty()) + { + Long olong = (Long)this.droppedChunksSet.iterator().next(); +@@ -283,6 +347,11 @@ + this.saveChunkExtraData(chunk); + this.id2ChunkMap.remove(olong.longValue()); + this.loadedChunks.remove(chunk); ++ ForgeChunkManager.putDormantChunk(ChunkCoordIntPair.chunkXZ2Int(chunk.xPosition, chunk.zPosition), chunk); ++ if(loadedChunks.size() == 0 && ForgeChunkManager.getPersistentChunksFor(this.worldObj).size() == 0 && !DimensionManager.shouldLoadSpawn(this.worldObj.provider.getDimensionId())){ ++ DimensionManager.unloadWorld(this.worldObj.provider.getDimensionId()); ++ return serverChunkGenerator.unloadQueuedChunks(); ++ } + } + + this.droppedChunksSet.remove(olong); diff --git a/patches/minecraft/net/minecraft/world/gen/MapGenCaves.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/MapGenCaves.java.patch similarity index 59% rename from patches/minecraft/net/minecraft/world/gen/MapGenCaves.java.patch rename to patches.mcp/minecraft/net/minecraft/world/gen/MapGenCaves.java.patch index 741188f61..27c43977a 100644 --- a/patches/minecraft/net/minecraft/world/gen/MapGenCaves.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/gen/MapGenCaves.java.patch @@ -10,18 +10,18 @@ import net.minecraft.block.state.IBlockState; @@ -141,7 +142,7 @@ { - IBlockState iblockstate = p_180702_5_.func_177856_a(k2, i3, l2); + IBlockState iblockstate = p_180702_5_.getBlockState(k2, i3, l2); -- if (iblockstate.func_177230_c() == Blocks.field_150358_i || iblockstate.func_177230_c() == Blocks.field_150355_j) +- if (iblockstate.getBlock() == Blocks.flowing_water || iblockstate.getBlock() == Blocks.water) + if (isOceanBlock(p_180702_5_, k2, i3, l2, p_180702_3_, p_180702_4_)) { flag3 = true; } @@ -177,32 +178,11 @@ - IBlockState iblockstate1 = p_180702_5_.func_177856_a(k2, j3, j4); - IBlockState iblockstate2 = (IBlockState)Objects.firstNonNull(p_180702_5_.func_177856_a(k2, j3 + 1, j4), Blocks.field_150350_a.func_176223_P()); + IBlockState iblockstate1 = p_180702_5_.getBlockState(k2, j3, j4); + IBlockState iblockstate2 = (IBlockState)Objects.firstNonNull(p_180702_5_.getBlockState(k2, j3 + 1, j4), Blocks.air.getDefaultState()); -- if (iblockstate1.func_177230_c() == Blocks.field_150349_c || iblockstate1.func_177230_c() == Blocks.field_150391_bh) +- if (iblockstate1.getBlock() == Blocks.grass || iblockstate1.getBlock() == Blocks.mycelium) + if (isTopBlock(p_180702_5_, k2, j3, j4, p_180702_3_, p_180702_4_)) { flag1 = true; @@ -31,20 +31,20 @@ - { - if (j3 - 1 < 10) - { -- p_180702_5_.func_177855_a(k2, j3, j4, Blocks.field_150353_l.func_176223_P()); +- p_180702_5_.setBlockState(k2, j3, j4, Blocks.lava.getDefaultState()); - } - else - { -- p_180702_5_.func_177855_a(k2, j3, j4, Blocks.field_150350_a.func_176223_P()); +- p_180702_5_.setBlockState(k2, j3, j4, Blocks.air.getDefaultState()); - -- if (iblockstate2.func_177230_c() == Blocks.field_150354_m) +- if (iblockstate2.getBlock() == Blocks.sand) - { -- p_180702_5_.func_177855_a(k2, j3 + 1, j4, iblockstate2.func_177229_b(BlockSand.field_176504_a) == BlockSand.EnumType.RED_SAND ? Blocks.field_180395_cM.func_176223_P() : Blocks.field_150322_A.func_176223_P()); +- p_180702_5_.setBlockState(k2, j3 + 1, j4, iblockstate2.getValue(BlockSand.VARIANT) == BlockSand.EnumType.RED_SAND ? Blocks.red_sandstone.getDefaultState() : Blocks.sandstone.getDefaultState()); - } - -- if (flag1 && p_180702_5_.func_177856_a(k2, j3 - 1, j4).func_177230_c() == Blocks.field_150346_d) +- if (flag1 && p_180702_5_.getBlockState(k2, j3 - 1, j4).getBlock() == Blocks.dirt) - { -- p_180702_5_.func_177855_a(k2, j3 - 1, j4, this.field_75039_c.func_180494_b(new BlockPos(k2 + p_180702_3_ * 16, 0, j4 + p_180702_4_ * 16)).field_76752_A.func_177230_c().func_176223_P()); +- p_180702_5_.setBlockState(k2, j3 - 1, j4, this.worldObj.getBiomeGenForCoords(new BlockPos(k2 + p_180702_3_ * 16, 0, j4 + p_180702_4_ * 16)).topBlock.getBlock().getDefaultState()); - } - } - } @@ -59,15 +59,15 @@ + + protected boolean isOceanBlock(ChunkPrimer data, int x, int y, int z, int chunkX, int chunkZ) + { -+ net.minecraft.block.Block block = data.func_177856_a(x, y, z).func_177230_c(); -+ return block== Blocks.field_150358_i || block == Blocks.field_150355_j; ++ net.minecraft.block.Block block = data.getBlockState(x, y, z).getBlock(); ++ return block== Blocks.flowing_water || block == Blocks.water; + } + + //Exception biomes to make sure we generate like vanilla + private boolean isExceptionBiome(net.minecraft.world.biome.BiomeGenBase biome) + { -+ if (biome == net.minecraft.world.biome.BiomeGenBase.field_76787_r) return true; -+ if (biome == net.minecraft.world.biome.BiomeGenBase.field_76769_d) return true; ++ if (biome == net.minecraft.world.biome.BiomeGenBase.beach) return true; ++ if (biome == net.minecraft.world.biome.BiomeGenBase.desert) return true; + return false; + } + @@ -75,9 +75,9 @@ + //Vanilla bugs to make sure that we generate the map the same way vanilla does. + private boolean isTopBlock(ChunkPrimer data, int x, int y, int z, int chunkX, int chunkZ) + { -+ net.minecraft.world.biome.BiomeGenBase biome = field_75039_c.func_180494_b(new BlockPos(x + chunkX * 16, 0, z + chunkZ * 16)); -+ IBlockState state = data.func_177856_a(x, y, z); -+ return (isExceptionBiome(biome) ? state.func_177230_c() == Blocks.field_150349_c : state.func_177230_c() == biome.field_76752_A); ++ net.minecraft.world.biome.BiomeGenBase biome = worldObj.getBiomeGenForCoords(new BlockPos(x + chunkX * 16, 0, z + chunkZ * 16)); ++ IBlockState state = data.getBlockState(x, y, z); ++ return (isExceptionBiome(biome) ? state.getBlock() == Blocks.grass : state.getBlock() == biome.topBlock); + } + + /** @@ -97,28 +97,28 @@ + */ + protected void digBlock(ChunkPrimer data, int x, int y, int z, int chunkX, int chunkZ, boolean foundTop, IBlockState state, IBlockState up) + { -+ net.minecraft.world.biome.BiomeGenBase biome = field_75039_c.func_180494_b(new BlockPos(x + chunkX * 16, 0, z + chunkZ * 16)); -+ IBlockState top = biome.field_76752_A; -+ IBlockState filler = biome.field_76753_B; ++ net.minecraft.world.biome.BiomeGenBase biome = worldObj.getBiomeGenForCoords(new BlockPos(x + chunkX * 16, 0, z + chunkZ * 16)); ++ IBlockState top = biome.topBlock; ++ IBlockState filler = biome.fillerBlock; + -+ if (this.func_175793_a(state, up) || state.func_177230_c() == top.func_177230_c() || state.func_177230_c() == filler.func_177230_c()) ++ if (this.func_175793_a(state, up) || state.getBlock() == top.getBlock() || state.getBlock() == filler.getBlock()) + { + if (y < 10) + { -+ data.func_177855_a(x, y, z, Blocks.field_150353_l.func_176223_P()); ++ data.setBlockState(x, y, z, Blocks.lava.getDefaultState()); + } + else + { -+ data.func_177855_a(x, y, z, Blocks.field_150350_a.func_176223_P()); ++ data.setBlockState(x, y, z, Blocks.air.getDefaultState()); + -+ if (up.func_177230_c() == Blocks.field_150354_m) ++ if (up.getBlock() == Blocks.sand) + { -+ data.func_177855_a(x, y + 1, z, up.func_177229_b(BlockSand.field_176504_a) == BlockSand.EnumType.RED_SAND ? Blocks.field_180395_cM.func_176223_P() : Blocks.field_150322_A.func_176223_P()); ++ data.setBlockState(x, y + 1, z, up.getValue(BlockSand.VARIANT) == BlockSand.EnumType.RED_SAND ? Blocks.red_sandstone.getDefaultState() : Blocks.sandstone.getDefaultState()); + } + -+ if (foundTop && data.func_177856_a(x, y - 1, z).func_177230_c() == filler.func_177230_c()) ++ if (foundTop && data.getBlockState(x, y - 1, z).getBlock() == filler.getBlock()) + { -+ data.func_177855_a(x, y - 1, z, top.func_177230_c().func_176223_P()); ++ data.setBlockState(x, y - 1, z, top.getBlock().getDefaultState()); + } + } + } diff --git a/patches/minecraft/net/minecraft/world/gen/MapGenRavine.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/MapGenRavine.java.patch similarity index 56% rename from patches/minecraft/net/minecraft/world/gen/MapGenRavine.java.patch rename to patches.mcp/minecraft/net/minecraft/world/gen/MapGenRavine.java.patch index 3e88554e1..da96d56c0 100644 --- a/patches/minecraft/net/minecraft/world/gen/MapGenRavine.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/gen/MapGenRavine.java.patch @@ -2,36 +2,36 @@ +++ ../src-work/minecraft/net/minecraft/world/gen/MapGenRavine.java @@ -130,7 +130,7 @@ { - IBlockState iblockstate = p_180707_5_.func_177856_a(k2, i3, l2); + IBlockState iblockstate = p_180707_5_.getBlockState(k2, i3, l2); -- if (iblockstate.func_177230_c() == Blocks.field_150358_i || iblockstate.func_177230_c() == Blocks.field_150355_j) +- if (iblockstate.getBlock() == Blocks.flowing_water || iblockstate.getBlock() == Blocks.water) + if (isOceanBlock(p_180707_5_, k2, i2, l2, p_180707_3_, p_180707_4_)) { flag2 = true; } @@ -165,27 +165,12 @@ { - IBlockState iblockstate1 = p_180707_5_.func_177856_a(k2, j3, j4); + IBlockState iblockstate1 = p_180707_5_.getBlockState(k2, j3, j4); -- if (iblockstate1.func_177230_c() == Blocks.field_150349_c) +- if (iblockstate1.getBlock() == Blocks.grass) + if (isTopBlock(p_180707_5_, k2, j3, j4, p_180707_3_, p_180707_4_)) { flag = true; } -- if (iblockstate1.func_177230_c() == Blocks.field_150348_b || iblockstate1.func_177230_c() == Blocks.field_150346_d || iblockstate1.func_177230_c() == Blocks.field_150349_c) +- if (iblockstate1.getBlock() == Blocks.stone || iblockstate1.getBlock() == Blocks.dirt || iblockstate1.getBlock() == Blocks.grass) - { - if (j3 - 1 < 10) - { -- p_180707_5_.func_177855_a(k2, j3, j4, Blocks.field_150356_k.func_176223_P()); +- p_180707_5_.setBlockState(k2, j3, j4, Blocks.flowing_lava.getDefaultState()); - } - else - { -- p_180707_5_.func_177855_a(k2, j3, j4, Blocks.field_150350_a.func_176223_P()); +- p_180707_5_.setBlockState(k2, j3, j4, Blocks.air.getDefaultState()); - -- if (flag && p_180707_5_.func_177856_a(k2, j3 - 1, j4).func_177230_c() == Blocks.field_150346_d) +- if (flag && p_180707_5_.getBlockState(k2, j3 - 1, j4).getBlock() == Blocks.dirt) - { -- p_180707_5_.func_177855_a(k2, j3 - 1, j4, this.field_75039_c.func_180494_b(new BlockPos(k2 + p_180707_3_ * 16, 0, j4 + p_180707_4_ * 16)).field_76752_A); +- p_180707_5_.setBlockState(k2, j3 - 1, j4, this.worldObj.getBiomeGenForCoords(new BlockPos(k2 + p_180707_3_ * 16, 0, j4 + p_180707_4_ * 16)).topBlock); - } - } - } @@ -45,17 +45,17 @@ } + protected boolean isOceanBlock(ChunkPrimer data, int x, int y, int z, int chunkX, int chunkZ) + { -+ net.minecraft.block.Block block = data.func_177856_a(x, y, z).func_177230_c(); -+ return block== Blocks.field_150358_i || block == Blocks.field_150355_j; ++ net.minecraft.block.Block block = data.getBlockState(x, y, z).getBlock(); ++ return block== Blocks.flowing_water || block == Blocks.water; + } + + //Exception biomes to make sure we generate like vanilla + private boolean isExceptionBiome(net.minecraft.world.biome.BiomeGenBase biome) + { -+ if (biome == net.minecraft.world.biome.BiomeGenBase.field_76787_r) return true; -+ if (biome == net.minecraft.world.biome.BiomeGenBase.field_76769_d) return true; -+ if (biome == net.minecraft.world.biome.BiomeGenBase.field_76789_p) return true; -+ if (biome == net.minecraft.world.biome.BiomeGenBase.field_76788_q) return true; ++ if (biome == net.minecraft.world.biome.BiomeGenBase.beach) return true; ++ if (biome == net.minecraft.world.biome.BiomeGenBase.desert) return true; ++ if (biome == net.minecraft.world.biome.BiomeGenBase.mushroomIsland) return true; ++ if (biome == net.minecraft.world.biome.BiomeGenBase.mushroomIslandShore) return true; + return false; + } + @@ -63,9 +63,9 @@ + //Vanilla bugs to make sure that we generate the map the same way vanilla does. + private boolean isTopBlock(ChunkPrimer data, int x, int y, int z, int chunkX, int chunkZ) + { -+ net.minecraft.world.biome.BiomeGenBase biome = field_75039_c.func_180494_b(new BlockPos(x + chunkX * 16, 0, z + chunkZ * 16)); -+ IBlockState state = data.func_177856_a(x, y, z); -+ return (isExceptionBiome(biome) ? state.func_177230_c() == Blocks.field_150349_c : state.func_177230_c() == biome.field_76752_A); ++ net.minecraft.world.biome.BiomeGenBase biome = worldObj.getBiomeGenForCoords(new BlockPos(x + chunkX * 16, 0, z + chunkZ * 16)); ++ IBlockState state = data.getBlockState(x, y, z); ++ return (isExceptionBiome(biome) ? state.getBlock() == Blocks.grass : state.getBlock() == biome.topBlock); + } + + /** @@ -85,24 +85,24 @@ + */ + protected void digBlock(ChunkPrimer data, int x, int y, int z, int chunkX, int chunkZ, boolean foundTop) + { -+ net.minecraft.world.biome.BiomeGenBase biome = field_75039_c.func_180494_b(new BlockPos(x + chunkX * 16, 0, z + chunkZ * 16)); -+ IBlockState state = data.func_177856_a(x, y, z); -+ IBlockState top = isExceptionBiome(biome) ? Blocks.field_150349_c.func_176223_P() : biome.field_76752_A; -+ IBlockState filler = isExceptionBiome(biome) ? Blocks.field_150346_d.func_176223_P() : biome.field_76753_B; ++ net.minecraft.world.biome.BiomeGenBase biome = worldObj.getBiomeGenForCoords(new BlockPos(x + chunkX * 16, 0, z + chunkZ * 16)); ++ IBlockState state = data.getBlockState(x, y, z); ++ IBlockState top = isExceptionBiome(biome) ? Blocks.grass.getDefaultState() : biome.topBlock; ++ IBlockState filler = isExceptionBiome(biome) ? Blocks.dirt.getDefaultState() : biome.fillerBlock; + -+ if (state.func_177230_c() == Blocks.field_150348_b || state.func_177230_c() == top.func_177230_c() || state.func_177230_c() == filler.func_177230_c()) ++ if (state.getBlock() == Blocks.stone || state.getBlock() == top.getBlock() || state.getBlock() == filler.getBlock()) + { + if (y < 10) + { -+ data.func_177855_a(x, y, z, Blocks.field_150353_l.func_176223_P()); ++ data.setBlockState(x, y, z, Blocks.lava.getDefaultState()); + } + else + { -+ data.func_177855_a(x, y, z, Blocks.field_150350_a.func_176223_P()); ++ data.setBlockState(x, y, z, Blocks.air.getDefaultState()); + -+ if (foundTop && data.func_177856_a(x, y - 1, z).func_177230_c() == filler.func_177230_c()) ++ if (foundTop && data.getBlockState(x, y - 1, z).getBlock() == filler.getBlock()) + { -+ data.func_177855_a(x, y - 1, z, top.func_177230_c().func_176223_P()); ++ data.setBlockState(x, y - 1, z, top.getBlock().getDefaultState()); + } + } + } diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenAbstractTree.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenAbstractTree.java.patch new file mode 100644 index 000000000..48879ccc0 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenAbstractTree.java.patch @@ -0,0 +1,13 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenAbstractTree.java ++++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenAbstractTree.java +@@ -30,4 +30,10 @@ + this.func_175903_a(worldIn, p_175921_2_, Blocks.dirt.getDefaultState()); + } + } ++ ++ public boolean isReplaceable(World world, BlockPos pos) ++ { ++ net.minecraft.block.state.IBlockState state = world.getBlockState(pos); ++ return state.getBlock().isAir(world, pos) || state.getBlock().isLeaves(world, pos) || state.getBlock().isWood(world, pos) || func_150523_a(state.getBlock()); ++ } + } diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenBigMushroom.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenBigMushroom.java.patch new file mode 100644 index 000000000..be61529d5 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenBigMushroom.java.patch @@ -0,0 +1,37 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenBigMushroom.java ++++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenBigMushroom.java +@@ -55,9 +55,10 @@ + { + if (k >= 0 && k < 256) + { +- Block block = worldIn.getBlockState(new BlockPos(l, k, i1)).getBlock(); ++ BlockPos pos = new BlockPos(l, k, i1); ++ net.minecraft.block.state.IBlockState state = worldIn.getBlockState(pos); + +- if (block.getMaterial() != Material.air && block.getMaterial() != Material.leaves) ++ if (!state.getBlock().isAir(worldIn, pos) && !state.getBlock().isLeaves(worldIn, pos)) + { + flag = false; + } +@@ -188,7 +189,7 @@ + { + BlockPos blockpos1 = new BlockPos(i2, l, j1); + +- if (!worldIn.getBlockState(blockpos1).getBlock().isFullBlock()) ++ if (worldIn.getBlockState(blockpos1).getBlock().canBeReplacedByLeaves(worldIn, blockpos1)) + { + this.func_175905_a(worldIn, blockpos1, Block.getBlockById(Block.getIdFromBlock(Blocks.brown_mushroom_block) + i), k1); + } +@@ -199,9 +200,10 @@ + + for (l = 0; l < j; ++l) + { +- Block block2 = worldIn.getBlockState(p_180709_3_.up(l)).getBlock(); ++ BlockPos upN = p_180709_3_.up(l); ++ net.minecraft.block.state.IBlockState state = worldIn.getBlockState(upN); + +- if (!block2.isFullBlock()) ++ if (state.getBlock().canBeReplacedByLeaves(worldIn, upN)) + { + this.func_175905_a(worldIn, p_180709_3_.up(l), Block.getBlockById(Block.getIdFromBlock(Blocks.brown_mushroom_block) + i), 10); + } diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.java.patch new file mode 100644 index 000000000..770a0d932 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.java.patch @@ -0,0 +1,52 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.java ++++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.java +@@ -107,9 +107,9 @@ + if (Math.pow((double)Math.abs(j) + 0.5D, 2.0D) + Math.pow((double)Math.abs(k) + 0.5D, 2.0D) <= (double)(p_180712_2_ * p_180712_2_)) + { + BlockPos blockpos1 = p_180712_1_.add(j, 0, k); +- Material material = this.world.getBlockState(blockpos1).getBlock().getMaterial(); ++ net.minecraft.block.state.IBlockState state = this.world.getBlockState(blockpos1); + +- if (material == Material.air || material == Material.leaves) ++ if (state.getBlock().isAir(this.world, blockpos1) || state.getBlock().isLeaves(this.world, blockpos1)) + { + this.func_175905_a(this.world, blockpos1, p_180712_3_, 0); + } +@@ -268,7 +268,7 @@ + { + BlockPos blockpos3 = p_175936_1_.add((double)(0.5F + (float)j * f), (double)(0.5F + (float)j * f1), (double)(0.5F + (float)j * f2)); + +- if (!this.func_150523_a(this.world.getBlockState(blockpos3).getBlock())) ++ if (!this.isReplaceable(world, blockpos3)) + { + return j; + } +@@ -296,6 +296,7 @@ + + if (!this.validTreeLocation()) + { ++ this.world = null; //Fix vanilla Mem leak, holds latest world + return false; + } + else +@@ -304,15 +305,18 @@ + this.func_175941_b(); + this.func_175942_c(); + this.func_175939_d(); ++ this.world = null; //Fix vanilla Mem leak, holds latest world + return true; + } + } + + private boolean validTreeLocation() + { +- Block block = this.world.getBlockState(this.field_175947_m.down()).getBlock(); ++ BlockPos down = this.field_175947_m.down(); ++ net.minecraft.block.state.IBlockState state = this.world.getBlockState(down); ++ boolean isSoil = state.getBlock().canSustainPlant(this.world, down, net.minecraft.util.EnumFacing.UP, ((net.minecraft.block.BlockSapling)Blocks.sapling)); + +- if (block != Blocks.dirt && block != Blocks.grass && block != Blocks.farmland) ++ if (!isSoil) + { + return false; + } diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenCanopyTree.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenCanopyTree.java.patch new file mode 100644 index 000000000..20776886b --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenCanopyTree.java.patch @@ -0,0 +1,67 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenCanopyTree.java ++++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenCanopyTree.java +@@ -48,7 +48,7 @@ + { + if (j >= 0 && j < 256) + { +- if (!this.func_150523_a(worldIn.getBlockState(new BlockPos(k, j, l)).getBlock())) ++ if (!this.isReplaceable(worldIn, new BlockPos(k, j, l))) + { + flag = false; + } +@@ -67,14 +67,16 @@ + } + else + { +- Block block = worldIn.getBlockState(p_180709_3_.down()).getBlock(); ++ BlockPos down = p_180709_3_.down(); ++ net.minecraft.block.state.IBlockState state = worldIn.getBlockState(down); ++ boolean isSoil = state.getBlock().canSustainPlant(worldIn, down, net.minecraft.util.EnumFacing.UP, ((net.minecraft.block.BlockSapling)Blocks.sapling)); + +- if ((block == Blocks.grass || block == Blocks.dirt) && p_180709_3_.getY() < 256 - i - 1) ++ if (isSoil && p_180709_3_.getY() < 256 - i - 1) + { +- this.func_175921_a(worldIn, p_180709_3_.down()); +- this.func_175921_a(worldIn, p_180709_3_.add(1, -1, 0)); +- this.func_175921_a(worldIn, p_180709_3_.add(1, -1, 1)); +- this.func_175921_a(worldIn, p_180709_3_.add(0, -1, 1)); ++ this.onPlantGrow(worldIn, p_180709_3_.down(), p_180709_3_); ++ this.onPlantGrow(worldIn, p_180709_3_.add(1, -1, 0), p_180709_3_); ++ this.onPlantGrow(worldIn, p_180709_3_.add(1, -1, 1), p_180709_3_); ++ this.onPlantGrow(worldIn, p_180709_3_.add(0, -1, 1), p_180709_3_); + EnumFacing enumfacing = EnumFacing.Plane.HORIZONTAL.random(p_180709_2_); + k = i - p_180709_2_.nextInt(4); + l = 2 - p_180709_2_.nextInt(3); +@@ -96,9 +98,9 @@ + } + + BlockPos blockpos1 = new BlockPos(i1, i2, j1); +- Material material = worldIn.getBlockState(blockpos1).getBlock().getMaterial(); ++ state = worldIn.getBlockState(blockpos1); + +- if (material == Material.air || material == Material.leaves) ++ if (state.getBlock().isAir(worldIn, blockpos1) || state.getBlock().isLeaves(worldIn, blockpos1)) + { + this.func_175905_a(worldIn, blockpos1, Blocks.log2, BlockPlanks.EnumType.DARK_OAK.getMetadata() - 4); + this.func_175905_a(worldIn, blockpos1.east(), Blocks.log2, BlockPlanks.EnumType.DARK_OAK.getMetadata() - 4); +@@ -202,11 +204,18 @@ + + private void func_150526_a(World worldIn, int p_150526_2_, int p_150526_3_, int p_150526_4_) + { +- Block block = worldIn.getBlockState(new BlockPos(p_150526_2_, p_150526_3_, p_150526_4_)).getBlock(); ++ BlockPos pos = new BlockPos(p_150526_2_, p_150526_3_, p_150526_4_); ++ net.minecraft.block.state.IBlockState state = worldIn.getBlockState(pos); + +- if (block.getMaterial() == Material.air) ++ if (state.getBlock().isAir(worldIn, pos)) + { + this.func_175905_a(worldIn, new BlockPos(p_150526_2_, p_150526_3_, p_150526_4_), Blocks.leaves2, 1); + } + } ++ ++ //Just a helper macro ++ private void onPlantGrow(World world, BlockPos pos, BlockPos source) ++ { ++ world.getBlockState(pos).getBlock().onPlantGrow(world, pos, source); ++ } + } diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenDeadBush.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenDeadBush.java.patch new file mode 100644 index 000000000..f831c5456 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenDeadBush.java.patch @@ -0,0 +1,17 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenDeadBush.java ++++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenDeadBush.java +@@ -15,10 +15,12 @@ + { + Block block; + +- while (((block = worldIn.getBlockState(p_180709_3_).getBlock()).getMaterial() == Material.air || block.getMaterial() == Material.leaves) && p_180709_3_.getY() > 0) ++ do + { ++ block = worldIn.getBlockState(p_180709_3_).getBlock(); ++ if (!block.isLeaves(worldIn, p_180709_3_) && !block.isLeaves(worldIn, p_180709_3_)) break; + p_180709_3_ = p_180709_3_.down(); +- } ++ } while (p_180709_3_.getY() > 0); + + for (int i = 0; i < 4; ++i) + { diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenDungeons.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenDungeons.java.patch similarity index 57% rename from patches/minecraft/net/minecraft/world/gen/feature/WorldGenDungeons.java.patch rename to patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenDungeons.java.patch index ab64b259f..0e03624a9 100644 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenDungeons.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenDungeons.java.patch @@ -13,28 +13,28 @@ @@ -140,12 +143,11 @@ if (k2 == 1) { - p_180709_1_.func_180501_a(blockpos2, Blocks.field_150486_ae.func_176458_f(p_180709_1_, blockpos2, Blocks.field_150486_ae.func_176223_P()), 2); -- List list = WeightedRandomChestContent.func_177629_a(field_175917_c, new WeightedRandomChestContent[] {Items.field_151134_bR.func_92114_b(p_180709_2_)}); - TileEntity tileentity1 = p_180709_1_.func_175625_s(blockpos2); + worldIn.setBlockState(blockpos2, Blocks.chest.correctFacing(worldIn, blockpos2, Blocks.chest.getDefaultState()), 2); +- List list = WeightedRandomChestContent.func_177629_a(CHESTCONTENT, new WeightedRandomChestContent[] {Items.enchanted_book.getRandom(p_180709_2_)}); + TileEntity tileentity1 = worldIn.getTileEntity(blockpos2); if (tileentity1 instanceof TileEntityChest) { -- WeightedRandomChestContent.func_177630_a(p_180709_2_, list, (TileEntityChest)tileentity1, 8); -+ WeightedRandomChestContent.func_177630_a(p_180709_2_, ChestGenHooks.getItems(DUNGEON_CHEST, p_180709_2_), (TileEntityChest)tileentity1, ChestGenHooks.getCount(DUNGEON_CHEST, p_180709_2_)); +- WeightedRandomChestContent.generateChestContents(p_180709_2_, list, (TileEntityChest)tileentity1, 8); ++ WeightedRandomChestContent.generateChestContents(p_180709_2_, ChestGenHooks.getItems(DUNGEON_CHEST, p_180709_2_), (TileEntityChest)tileentity1, ChestGenHooks.getCount(DUNGEON_CHEST, p_180709_2_)); } break label197; @@ -184,6 +186,12 @@ - private String func_76543_b(Random p_76543_1_) + private String pickMobSpawner(Random p_76543_1_) { -- return field_175916_b[p_76543_1_.nextInt(field_175916_b.length)]; +- return SPAWNERTYPES[p_76543_1_.nextInt(SPAWNERTYPES.length)]; + return DungeonHooks.getRandomDungeonMob(p_76543_1_); } + + static + { -+ ChestGenHooks.init(DUNGEON_CHEST, field_175917_c, 8, 8); -+ ChestGenHooks.addItem(DUNGEON_CHEST, new WeightedRandomChestContent(new net.minecraft.item.ItemStack(Items.field_151134_bR, 1, 0), 1, 1, 1)); ++ ChestGenHooks.init(DUNGEON_CHEST, CHESTCONTENT, 8, 8); ++ ChestGenHooks.addItem(DUNGEON_CHEST, new WeightedRandomChestContent(new net.minecraft.item.ItemStack(Items.enchanted_book, 1, 0), 1, 1, 1)); + } } diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenForest.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenForest.java.patch new file mode 100644 index 000000000..2d2f4adf8 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenForest.java.patch @@ -0,0 +1,50 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenForest.java ++++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenForest.java +@@ -55,7 +55,7 @@ + { + if (j >= 0 && j < 256) + { +- if (!this.func_150523_a(worldIn.getBlockState(new BlockPos(k, j, l)).getBlock())) ++ if (!this.isReplaceable(worldIn, new BlockPos(k, j, l))) + { + flag = false; + } +@@ -74,11 +74,13 @@ + } + else + { +- Block block1 = worldIn.getBlockState(p_180709_3_.down()).getBlock(); ++ BlockPos down = p_180709_3_.down(); ++ Block block1 = worldIn.getBlockState(down).getBlock(); ++ boolean isSoil = block1.canSustainPlant(worldIn, down, net.minecraft.util.EnumFacing.UP, ((net.minecraft.block.BlockSapling)Blocks.sapling)); + +- if ((block1 == Blocks.grass || block1 == Blocks.dirt || block1 == Blocks.farmland) && p_180709_3_.getY() < 256 - i - 1) ++ if (isSoil && p_180709_3_.getY() < 256 - i - 1) + { +- this.func_175921_a(worldIn, p_180709_3_.down()); ++ block1.onPlantGrow(worldIn, down, p_180709_3_); + int i2; + + for (i2 = p_180709_3_.getY() - 3 + i; i2 <= p_180709_3_.getY() + i; ++i2) +@@ -99,7 +101,7 @@ + BlockPos blockpos1 = new BlockPos(i1, i2, k1); + Block block = worldIn.getBlockState(blockpos1).getBlock(); + +- if (block.getMaterial() == Material.air || block.getMaterial() == Material.leaves) ++ if (block.isAir(worldIn, blockpos1) || block.isLeaves(worldIn, blockpos1)) + { + this.func_175905_a(worldIn, blockpos1, Blocks.leaves, BlockPlanks.EnumType.BIRCH.getMetadata()); + } +@@ -110,9 +112,10 @@ + + for (i2 = 0; i2 < i; ++i2) + { +- Block block2 = worldIn.getBlockState(p_180709_3_.up(i2)).getBlock(); ++ BlockPos upN = p_180709_3_.up(i2); ++ Block block2 = worldIn.getBlockState(upN).getBlock(); + +- if (block2.getMaterial() == Material.air || block2.getMaterial() == Material.leaves) ++ if (block2.isAir(worldIn, upN) || block2.isLeaves(worldIn, upN)) + { + this.func_175905_a(worldIn, p_180709_3_.up(i2), Blocks.log, BlockPlanks.EnumType.BIRCH.getMetadata()); + } diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenHugeTrees.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenHugeTrees.java.patch new file mode 100644 index 000000000..ba7c2ce39 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenHugeTrees.java.patch @@ -0,0 +1,66 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenHugeTrees.java ++++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenHugeTrees.java +@@ -59,7 +59,7 @@ + { + for (int l = -b0; l <= b0 && flag; ++l) + { +- if (p_175926_2_.getY() + j < 0 || p_175926_2_.getY() + j >= 256 || !this.func_150523_a(worldIn.getBlockState(p_175926_2_.add(k, j, l)).getBlock())) ++ if (p_175926_2_.getY() + j < 0 || p_175926_2_.getY() + j >= 256 || !this.isReplaceable(worldIn, p_175926_2_.add(k, j, l))) + { + flag = false; + } +@@ -79,13 +79,14 @@ + { + BlockPos blockpos1 = p_175927_1_.down(); + Block block = worldIn.getBlockState(blockpos1).getBlock(); ++ boolean isSoil = block.canSustainPlant(worldIn, blockpos1, net.minecraft.util.EnumFacing.UP, ((net.minecraft.block.BlockSapling)Blocks.sapling)); + +- if ((block == Blocks.grass || block == Blocks.dirt) && p_175927_1_.getY() >= 2) ++ if (isSoil && p_175927_1_.getY() >= 2) + { +- this.func_175921_a(worldIn, blockpos1); +- this.func_175921_a(worldIn, blockpos1.east()); +- this.func_175921_a(worldIn, blockpos1.south()); +- this.func_175921_a(worldIn, blockpos1.south().east()); ++ this.onPlantGrow(worldIn, blockpos1, p_175927_1_); ++ this.onPlantGrow(worldIn, blockpos1.east(), p_175927_1_); ++ this.onPlantGrow(worldIn, blockpos1.south(), p_175927_1_); ++ this.onPlantGrow(worldIn, blockpos1.south().east(), p_175927_1_); + return true; + } + else +@@ -113,9 +114,9 @@ + if (k * k + l * l <= j || i1 * i1 + j1 * j1 <= j || k * k + j1 * j1 <= j || i1 * i1 + l * l <= j) + { + BlockPos blockpos1 = p_175925_2_.add(k, 0, l); +- Material material = worldIn.getBlockState(blockpos1).getBlock().getMaterial(); ++ net.minecraft.block.state.IBlockState state = worldIn.getBlockState(blockpos1); + +- if (material == Material.air || material == Material.leaves) ++ if (state.getBlock().isAir(worldIn, blockpos1) || state.getBlock().isLeaves(worldIn, blockpos1)) + { + this.func_175905_a(worldIn, blockpos1, Blocks.leaves, this.leavesMetadata); + } +@@ -135,9 +136,9 @@ + if (k * k + l * l <= j) + { + BlockPos blockpos1 = p_175928_2_.add(k, 0, l); +- Material material = worldIn.getBlockState(blockpos1).getBlock().getMaterial(); ++ Block block = worldIn.getBlockState(blockpos1).getBlock(); + +- if (material == Material.air || material == Material.leaves) ++ if (block.isAir(worldIn, blockpos1) || block.isLeaves(worldIn, blockpos1)) + { + this.func_175905_a(worldIn, blockpos1, Blocks.leaves, this.leavesMetadata); + } +@@ -145,4 +146,10 @@ + } + } + } ++ ++ //Just a helper macro ++ private void onPlantGrow(World world, BlockPos pos, BlockPos source) ++ { ++ world.getBlockState(pos).getBlock().onPlantGrow(world, pos, source); ++ } + } diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenMegaJungle.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenMegaJungle.java.patch new file mode 100644 index 000000000..e68e9e598 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenMegaJungle.java.patch @@ -0,0 +1,62 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenMegaJungle.java ++++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenMegaJungle.java +@@ -57,7 +57,7 @@ + { + BlockPos blockpos1 = p_180709_3_.up(i2); + +- if (this.func_175931_a(worldIn.getBlockState(blockpos1).getBlock().getMaterial())) ++ if (this.isAirLeaves(worldIn, blockpos1)) + { + this.func_175905_a(worldIn, blockpos1, Blocks.log, this.woodMetadata); + +@@ -72,7 +72,7 @@ + { + BlockPos blockpos2 = blockpos1.east(); + +- if (this.func_175931_a(worldIn.getBlockState(blockpos2).getBlock().getMaterial())) ++ if (this.isAirLeaves(worldIn, blockpos2)) + { + this.func_175905_a(worldIn, blockpos2, Blocks.log, this.woodMetadata); + +@@ -85,7 +85,7 @@ + + BlockPos blockpos3 = blockpos1.south().east(); + +- if (this.func_175931_a(worldIn.getBlockState(blockpos3).getBlock().getMaterial())) ++ if (this.isAirLeaves(worldIn, blockpos3)) + { + this.func_175905_a(worldIn, blockpos3, Blocks.log, this.woodMetadata); + +@@ -98,7 +98,7 @@ + + BlockPos blockpos4 = blockpos1.south(); + +- if (this.func_175931_a(worldIn.getBlockState(blockpos4).getBlock().getMaterial())) ++ if (this.isAirLeaves(worldIn, blockpos4)) + { + this.func_175905_a(worldIn, blockpos4, Blocks.log, this.woodMetadata); + +@@ -115,11 +115,6 @@ + } + } + +- private boolean func_175931_a(Material p_175931_1_) +- { +- return p_175931_1_ == Material.air || p_175931_1_ == Material.leaves; +- } +- + private void func_175932_b(World worldIn, Random p_175932_2_, BlockPos p_175932_3_, int p_175932_4_) + { + if (p_175932_2_.nextInt(3) > 0 && worldIn.isAirBlock(p_175932_3_)) +@@ -137,4 +132,11 @@ + this.func_175925_a(worldIn, p_175930_2_.up(j), p_175930_3_ + 1 - j); + } + } ++ ++ //Helper macro ++ private boolean isAirLeaves(World world, BlockPos pos) ++ { ++ net.minecraft.block.Block block = world.getBlockState(pos).getBlock(); ++ return block.isAir(world, pos) || block.isLeaves(world, pos); ++ } + } diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenMegaPineTree.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenMegaPineTree.java.patch new file mode 100644 index 000000000..977698bfd --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenMegaPineTree.java.patch @@ -0,0 +1,65 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenMegaPineTree.java ++++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenMegaPineTree.java +@@ -35,32 +35,24 @@ + + for (int j = 0; j < i; ++j) + { +- Block block = worldIn.getBlockState(p_180709_3_.up(j)).getBlock(); +- +- if (block.getMaterial() == Material.air || block.getMaterial() == Material.leaves) ++ if (this.isAirLeaves(worldIn, p_180709_3_.up(j))) + { + this.func_175905_a(worldIn, p_180709_3_.up(j), Blocks.log, this.woodMetadata); + } + + if (j < i - 1) + { +- block = worldIn.getBlockState(p_180709_3_.add(1, j, 0)).getBlock(); +- +- if (block.getMaterial() == Material.air || block.getMaterial() == Material.leaves) ++ if (this.isAirLeaves(worldIn, p_180709_3_.add(1, j, 0))) + { + this.func_175905_a(worldIn, p_180709_3_.add(1, j, 0), Blocks.log, this.woodMetadata); + } + +- block = worldIn.getBlockState(p_180709_3_.add(1, j, 1)).getBlock(); +- +- if (block.getMaterial() == Material.air || block.getMaterial() == Material.leaves) ++ if (this.isAirLeaves(worldIn, p_180709_3_.add(1, j, 1))) + { + this.func_175905_a(worldIn, p_180709_3_.add(1, j, 1), Blocks.log, this.woodMetadata); + } + +- block = worldIn.getBlockState(p_180709_3_.add(0, j, 1)).getBlock(); +- +- if (block.getMaterial() == Material.air || block.getMaterial() == Material.leaves) ++ if (this.isAirLeaves(worldIn, p_180709_3_.add(0, j, 1))) + { + this.func_175905_a(worldIn, p_180709_3_.add(0, j, 1), Blocks.log, this.woodMetadata); + } +@@ -126,16 +118,23 @@ + BlockPos blockpos1 = p_175934_2_.up(i); + Block block = worldIn.getBlockState(blockpos1).getBlock(); + +- if (block == Blocks.grass || block == Blocks.dirt) ++ if (block.canSustainPlant(worldIn, blockpos1, net.minecraft.util.EnumFacing.UP, ((net.minecraft.block.BlockSapling)Blocks.sapling))) + { + this.func_175905_a(worldIn, blockpos1, Blocks.dirt, BlockDirt.DirtType.PODZOL.getMetadata()); + break; + } + +- if (block.getMaterial() != Material.air && i < 0) ++ if (!block.isAir(worldIn, blockpos1) && i < 0) + { + break; + } + } + } ++ ++ //Helper macro ++ private boolean isAirLeaves(World world, BlockPos pos) ++ { ++ net.minecraft.block.Block block = world.getBlockState(pos).getBlock(); ++ return block.isAir(world, pos) || block.isLeaves(world, pos); ++ } + } diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenMinable.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenMinable.java.patch similarity index 59% rename from patches/minecraft/net/minecraft/world/gen/feature/WorldGenMinable.java.patch rename to patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenMinable.java.patch index b8dbd5446..481106e17 100644 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenMinable.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenMinable.java.patch @@ -4,8 +4,8 @@ { BlockPos blockpos1 = new BlockPos(l1, i2, j2); -- if (this.field_175919_c.apply(p_180709_1_.func_180495_p(blockpos1))) -+ if (p_180709_1_.func_180495_p(blockpos1).func_177230_c().isReplaceableOreGen(p_180709_1_, blockpos1, this.field_175919_c)) +- if (this.field_175919_c.apply(worldIn.getBlockState(blockpos1))) ++ if (worldIn.getBlockState(blockpos1).getBlock().isReplaceableOreGen(worldIn, blockpos1, this.field_175919_c)) { - p_180709_1_.func_180501_a(blockpos1, this.field_175920_a, 2); + worldIn.setBlockState(blockpos1, this.oreBlock, 2); } diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenSavannaTree.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenSavannaTree.java.patch new file mode 100644 index 000000000..c7fe1a680 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenSavannaTree.java.patch @@ -0,0 +1,64 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenSavannaTree.java ++++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenSavannaTree.java +@@ -48,7 +48,7 @@ + { + if (j >= 0 && j < 256) + { +- if (!this.func_150523_a(worldIn.getBlockState(new BlockPos(k, j, l)).getBlock())) ++ if (!this.isReplaceable(worldIn, new BlockPos(k, j, l))) + { + flag = false; + } +@@ -67,11 +67,13 @@ + } + else + { +- Block block = worldIn.getBlockState(p_180709_3_.down()).getBlock(); ++ BlockPos down = p_180709_3_.down(); ++ Block block = worldIn.getBlockState(down).getBlock(); ++ boolean isSoil = block.canSustainPlant(worldIn, down, net.minecraft.util.EnumFacing.UP, ((net.minecraft.block.BlockSapling)Blocks.sapling)); + +- if ((block == Blocks.grass || block == Blocks.dirt) && p_180709_3_.getY() < 256 - i - 1) ++ if (isSoil && p_180709_3_.getY() < 256 - i - 1) + { +- this.func_175921_a(worldIn, p_180709_3_.down()); ++ block.onPlantGrow(worldIn, down, p_180709_3_); + EnumFacing enumfacing = EnumFacing.Plane.HORIZONTAL.random(p_180709_2_); + k = i - p_180709_2_.nextInt(4) - 1; + l = 3 - p_180709_2_.nextInt(3); +@@ -92,9 +94,9 @@ + } + + BlockPos blockpos1 = new BlockPos(i1, i2, j1); +- Material material = worldIn.getBlockState(blockpos1).getBlock().getMaterial(); ++ block = worldIn.getBlockState(blockpos1).getBlock(); + +- if (material == Material.air || material == Material.leaves) ++ if (block.isAir(worldIn, blockpos1) || block.isLeaves(worldIn, blockpos1)) + { + this.func_175905_a(worldIn, blockpos1, Blocks.log2, BlockPlanks.EnumType.ACACIA.getMetadata() - 4); + k1 = i2; +@@ -148,9 +150,9 @@ + i1 += enumfacing1.getFrontOffsetX(); + j1 += enumfacing1.getFrontOffsetZ(); + BlockPos blockpos2 = new BlockPos(i1, j2, j1); +- Material material1 = worldIn.getBlockState(blockpos2).getBlock().getMaterial(); ++ block = worldIn.getBlockState(blockpos2).getBlock(); + +- if (material1 == Material.air || material1 == Material.leaves) ++ if (block.isAir(worldIn, blockpos2) || block.isLeaves(worldIn, blockpos2)) + { + this.func_175905_a(worldIn, blockpos2, Blocks.log2, BlockPlanks.EnumType.ACACIA.getMetadata() - 4); + k1 = j2; +@@ -204,9 +206,9 @@ + + private void func_175924_b(World worldIn, BlockPos p_175924_2_) + { +- Material material = worldIn.getBlockState(p_175924_2_).getBlock().getMaterial(); ++ Block block = worldIn.getBlockState(p_175924_2_).getBlock(); + +- if (material == Material.air || material == Material.leaves) ++ if (block.isAir(worldIn, p_175924_2_) || block.isLeaves(worldIn, p_175924_2_)) + { + this.func_175905_a(worldIn, p_175924_2_, Blocks.leaves2, 0); + } diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenShrub.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenShrub.java.patch new file mode 100644 index 000000000..8e0457eb7 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenShrub.java.patch @@ -0,0 +1,31 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenShrub.java ++++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenShrub.java +@@ -24,14 +24,16 @@ + { + Block block; + +- while (((block = worldIn.getBlockState(p_180709_3_).getBlock()).getMaterial() == Material.air || block.getMaterial() == Material.leaves) && p_180709_3_.getY() > 0) ++ do + { ++ block = worldIn.getBlockState(p_180709_3_).getBlock(); ++ if (!block.isAir(worldIn, p_180709_3_) && !block.isLeaves(worldIn, p_180709_3_)) break; + p_180709_3_ = p_180709_3_.down(); +- } ++ } while (p_180709_3_.getY() > 0); + + Block block1 = worldIn.getBlockState(p_180709_3_).getBlock(); + +- if (block1 == Blocks.dirt || block1 == Blocks.grass) ++ if (block1.canSustainPlant(worldIn, p_180709_3_, net.minecraft.util.EnumFacing.UP, ((net.minecraft.block.BlockSapling)Blocks.sapling))) + { + p_180709_3_ = p_180709_3_.up(); + this.func_175905_a(worldIn, p_180709_3_, Blocks.log, this.field_150527_b); +@@ -53,7 +55,7 @@ + { + BlockPos blockpos1 = new BlockPos(l, i, j1); + +- if (!worldIn.getBlockState(blockpos1).getBlock().isFullBlock()) ++ if (worldIn.getBlockState(blockpos1).getBlock().canBeReplacedByLeaves(worldIn, blockpos1)) + { + this.func_175905_a(worldIn, blockpos1, Blocks.leaves, this.field_150528_a); + } diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenSwamp.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenSwamp.java.patch new file mode 100644 index 000000000..9f494c4d2 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenSwamp.java.patch @@ -0,0 +1,98 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenSwamp.java ++++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenSwamp.java +@@ -53,9 +53,10 @@ + { + if (j >= 0 && j < 256) + { +- Block block = worldIn.getBlockState(new BlockPos(k, j, l)).getBlock(); ++ BlockPos pos = new BlockPos(k, j, l); ++ Block block = worldIn.getBlockState(pos).getBlock(); + +- if (block.getMaterial() != Material.air && block.getMaterial() != Material.leaves) ++ if (!block.isAir(worldIn, pos) && !block.isLeaves(worldIn, pos)) + { + if (block != Blocks.water && block != Blocks.flowing_water) + { +@@ -81,11 +82,13 @@ + } + else + { +- Block block1 = worldIn.getBlockState(p_180709_3_.down()).getBlock(); ++ BlockPos down = p_180709_3_.down(); ++ Block block1 = worldIn.getBlockState(down).getBlock(); ++ boolean isSoil = block1.canSustainPlant(worldIn, down, net.minecraft.util.EnumFacing.UP, ((net.minecraft.block.BlockSapling)Blocks.sapling)); + +- if ((block1 == Blocks.grass || block1 == Blocks.dirt) && p_180709_3_.getY() < 256 - i - 1) ++ if (isSoil && p_180709_3_.getY() < 256 - i - 1) + { +- this.func_175921_a(worldIn, p_180709_3_.down()); ++ block1.onPlantGrow(worldIn, down, p_180709_3_); + int i1; + BlockPos blockpos1; + int l1; +@@ -108,7 +111,7 @@ + { + blockpos1 = new BlockPos(i2, l1, j1); + +- if (!worldIn.getBlockState(blockpos1).getBlock().isFullBlock()) ++ if (worldIn.getBlockState(blockpos1).getBlock().canBeReplacedByLeaves(worldIn, blockpos1)) + { + this.func_175906_a(worldIn, blockpos1, Blocks.leaves); + } +@@ -119,9 +122,10 @@ + + for (l1 = 0; l1 < i; ++l1) + { +- Block block2 = worldIn.getBlockState(p_180709_3_.up(l1)).getBlock(); ++ BlockPos upN = p_180709_3_.up(l1); ++ Block block2 = worldIn.getBlockState(upN).getBlock(); + +- if (block2.getMaterial() == Material.air || block2.getMaterial() == Material.leaves || block2 == Blocks.flowing_water || block2 == Blocks.water) ++ if (block2.isAir(worldIn, upN) || block2.isLeaves(worldIn, upN) || block2 == Blocks.flowing_water || block2 == Blocks.water) + { + this.func_175906_a(worldIn, p_180709_3_.up(l1), Blocks.log); + } +@@ -138,29 +142,29 @@ + { + BlockPos blockpos4 = new BlockPos(i2, l1, i1); + +- if (worldIn.getBlockState(blockpos4).getBlock().getMaterial() == Material.leaves) ++ if (worldIn.getBlockState(blockpos4).getBlock().isLeaves(worldIn, blockpos4)) + { + BlockPos blockpos5 = blockpos4.west(); + blockpos1 = blockpos4.east(); + BlockPos blockpos2 = blockpos4.north(); + BlockPos blockpos3 = blockpos4.south(); + +- if (p_180709_2_.nextInt(4) == 0 && worldIn.getBlockState(blockpos5).getBlock().getMaterial() == Material.air) ++ if (p_180709_2_.nextInt(4) == 0 && worldIn.getBlockState(blockpos5).getBlock().isAir(worldIn, blockpos5)) + { + this.func_175922_a(worldIn, blockpos5, BlockVine.EAST_FLAG); + } + +- if (p_180709_2_.nextInt(4) == 0 && worldIn.getBlockState(blockpos1).getBlock().getMaterial() == Material.air) ++ if (p_180709_2_.nextInt(4) == 0 && worldIn.getBlockState(blockpos1).getBlock().isAir(worldIn, blockpos1)) + { + this.func_175922_a(worldIn, blockpos1, BlockVine.WEST_FLAG); + } + +- if (p_180709_2_.nextInt(4) == 0 && worldIn.getBlockState(blockpos2).getBlock().getMaterial() == Material.air) ++ if (p_180709_2_.nextInt(4) == 0 && worldIn.getBlockState(blockpos2).getBlock().isAir(worldIn, blockpos2)) + { + this.func_175922_a(worldIn, blockpos2, BlockVine.SOUTH_FLAG); + } + +- if (p_180709_2_.nextInt(4) == 0 && worldIn.getBlockState(blockpos3).getBlock().getMaterial() == Material.air) ++ if (p_180709_2_.nextInt(4) == 0 && worldIn.getBlockState(blockpos3).getBlock().isAir(worldIn, blockpos3)) + { + this.func_175922_a(worldIn, blockpos3, BlockVine.NORTH_FLAG); + } +@@ -188,7 +192,7 @@ + this.func_175905_a(worldIn, p_175922_2_, Blocks.vine, p_175922_3_); + int j = 4; + +- for (p_175922_2_ = p_175922_2_.down(); worldIn.getBlockState(p_175922_2_).getBlock().getMaterial() == Material.air && j > 0; --j) ++ for (p_175922_2_ = p_175922_2_.down(); worldIn.getBlockState(p_175922_2_).getBlock().isAir(worldIn, p_175922_2_) && j > 0; --j) + { + this.func_175905_a(worldIn, p_175922_2_, Blocks.vine, p_175922_3_); + p_175922_2_ = p_175922_2_.down(); diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga1.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga1.java.patch new file mode 100644 index 000000000..61623fed2 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga1.java.patch @@ -0,0 +1,50 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga1.java ++++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga1.java +@@ -50,7 +50,7 @@ + { + if (i1 >= 0 && i1 < 256) + { +- if (!this.func_150523_a(worldIn.getBlockState(new BlockPos(j1, i1, k1)).getBlock())) ++ if (!this.isReplaceable(worldIn, new BlockPos(j1, i1, k1))) + { + flag = false; + } +@@ -69,11 +69,13 @@ + } + else + { +- Block block = worldIn.getBlockState(p_180709_3_.down()).getBlock(); ++ BlockPos down = p_180709_3_.down(); ++ Block block = worldIn.getBlockState(down).getBlock(); ++ boolean isSoil = block.canSustainPlant(worldIn, down, net.minecraft.util.EnumFacing.UP, (net.minecraft.block.BlockSapling)Blocks.sapling); + +- if ((block == Blocks.grass || block == Blocks.dirt) && p_180709_3_.getY() < 256 - i - 1) ++ if (isSoil && p_180709_3_.getY() < 256 - i - 1) + { +- this.func_175921_a(worldIn, p_180709_3_.down()); ++ block.onPlantGrow(worldIn, down, p_180709_3_); + k2 = 0; + + for (j1 = p_180709_3_.getY() + i; j1 >= p_180709_3_.getY() + j; --j1) +@@ -90,7 +92,7 @@ + { + BlockPos blockpos1 = new BlockPos(k1, j1, i2); + +- if (!worldIn.getBlockState(blockpos1).getBlock().isFullBlock()) ++ if (worldIn.getBlockState(blockpos1).getBlock().canBeReplacedByLeaves(worldIn, blockpos1)) + { + this.func_175905_a(worldIn, blockpos1, Blocks.leaves, BlockPlanks.EnumType.SPRUCE.getMetadata()); + } +@@ -110,9 +112,10 @@ + + for (j1 = 0; j1 < i - 1; ++j1) + { +- Block block1 = worldIn.getBlockState(p_180709_3_.up(j1)).getBlock(); ++ BlockPos upN = p_180709_3_.up(j1); ++ Block block1 = worldIn.getBlockState(upN).getBlock(); + +- if (block1.getMaterial() == Material.air || block1.getMaterial() == Material.leaves) ++ if (block1.isAir(worldIn, upN) || block1.isLeaves(worldIn, upN)) + { + this.func_175905_a(worldIn, p_180709_3_.up(j1), Blocks.log, BlockPlanks.EnumType.SPRUCE.getMetadata()); + } diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga2.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga2.java.patch new file mode 100644 index 000000000..ba4253cd2 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga2.java.patch @@ -0,0 +1,54 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga2.java ++++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga2.java +@@ -49,9 +49,10 @@ + { + if (i1 >= 0 && i1 < 256) + { +- Block block = worldIn.getBlockState(new BlockPos(j1, i1, k1)).getBlock(); ++ BlockPos off = new BlockPos(j1, i1, k1); ++ Block block = worldIn.getBlockState(off).getBlock(); + +- if (block.getMaterial() != Material.air && block.getMaterial() != Material.leaves) ++ if (!block.isAir(worldIn, off) && !block.isLeaves(worldIn, off)) + { + flag = false; + } +@@ -70,11 +71,13 @@ + } + else + { +- Block block1 = worldIn.getBlockState(p_180709_3_.down()).getBlock(); ++ BlockPos down = p_180709_3_.down(); ++ Block block1 = worldIn.getBlockState(down).getBlock(); ++ boolean isSoil = block1.canSustainPlant(worldIn, down, net.minecraft.util.EnumFacing.UP, (net.minecraft.block.BlockSapling)Blocks.sapling); + +- if ((block1 == Blocks.grass || block1 == Blocks.dirt || block1 == Blocks.farmland) && p_180709_3_.getY() < 256 - i - 1) ++ if (isSoil && p_180709_3_.getY() < 256 - i - 1) + { +- this.func_175921_a(worldIn, p_180709_3_.down()); ++ block1.onPlantGrow(worldIn, down, p_180709_3_); + i3 = p_180709_2_.nextInt(2); + j1 = 1; + byte b0 = 0; +@@ -97,7 +100,7 @@ + { + BlockPos blockpos1 = new BlockPos(i2, l1, k2); + +- if (!worldIn.getBlockState(blockpos1).getBlock().isFullBlock()) ++ if (worldIn.getBlockState(blockpos1).getBlock().canBeReplacedByLeaves(worldIn, blockpos1)) + { + this.func_175905_a(worldIn, blockpos1, Blocks.leaves, BlockPlanks.EnumType.SPRUCE.getMetadata()); + } +@@ -126,9 +129,10 @@ + + for (l1 = 0; l1 < i - j3; ++l1) + { +- Block block2 = worldIn.getBlockState(p_180709_3_.up(l1)).getBlock(); ++ BlockPos upN = p_180709_3_.up(l1); ++ Block block2 = worldIn.getBlockState(upN).getBlock(); + +- if (block2.getMaterial() == Material.air || block2.getMaterial() == Material.leaves) ++ if (block2.isAir(worldIn, upN) || block2.isLeaves(worldIn, upN)) + { + this.func_175905_a(worldIn, p_180709_3_.up(l1), Blocks.log, BlockPlanks.EnumType.SPRUCE.getMetadata()); + } diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenTallGrass.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenTallGrass.java.patch new file mode 100644 index 000000000..b4a3e7320 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenTallGrass.java.patch @@ -0,0 +1,17 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenTallGrass.java ++++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenTallGrass.java +@@ -23,10 +23,12 @@ + { + Block block; + +- while (((block = worldIn.getBlockState(p_180709_3_).getBlock()).getMaterial() == Material.air || block.getMaterial() == Material.leaves) && p_180709_3_.getY() > 0) ++ do + { ++ block = worldIn.getBlockState(p_180709_3_).getBlock(); ++ if (!block.isAir(worldIn, p_180709_3_) && !block.isLeaves(worldIn, p_180709_3_)) break; + p_180709_3_ = p_180709_3_.down(); +- } ++ } while (p_180709_3_.getY() > 0); + + for (int i = 0; i < 128; ++i) + { diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenTrees.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenTrees.java.patch new file mode 100644 index 000000000..83d55d981 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGenTrees.java.patch @@ -0,0 +1,94 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenTrees.java ++++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenTrees.java +@@ -61,7 +61,7 @@ + { + if (j >= 0 && j < 256) + { +- if (!this.func_150523_a(worldIn.getBlockState(new BlockPos(k, j, l)).getBlock())) ++ if (!this.isReplaceable(worldIn, new BlockPos(k, j, l))) + { + flag = false; + } +@@ -80,11 +80,13 @@ + } + else + { +- Block block1 = worldIn.getBlockState(p_180709_3_.down()).getBlock(); ++ BlockPos down = p_180709_3_.down(); ++ Block block1 = worldIn.getBlockState(down).getBlock(); ++ boolean isSoil = block1.canSustainPlant(worldIn, down, net.minecraft.util.EnumFacing.UP, (net.minecraft.block.BlockSapling)Blocks.sapling); + +- if ((block1 == Blocks.grass || block1 == Blocks.dirt || block1 == Blocks.farmland) && p_180709_3_.getY() < 256 - i - 1) ++ if (isSoil && p_180709_3_.getY() < 256 - i - 1) + { +- this.func_175921_a(worldIn, p_180709_3_.down()); ++ block1.onPlantGrow(worldIn, down, p_180709_3_); + b0 = 3; + byte b1 = 0; + int i1; +@@ -111,7 +113,7 @@ + blockpos1 = new BlockPos(k1, l, i2); + Block block = worldIn.getBlockState(blockpos1).getBlock(); + +- if (block.getMaterial() == Material.air || block.getMaterial() == Material.leaves || block.getMaterial() == Material.vine) ++ if (block.isAir(worldIn, blockpos1) || block.isLeaves(worldIn, blockpos1) || block.getMaterial() == Material.vine) + { + this.func_175905_a(worldIn, blockpos1, Blocks.leaves, this.metaLeaves); + } +@@ -122,9 +124,10 @@ + + for (l = 0; l < i; ++l) + { +- Block block2 = worldIn.getBlockState(p_180709_3_.up(l)).getBlock(); ++ BlockPos upN = p_180709_3_.up(l); ++ Block block2 = worldIn.getBlockState(upN).getBlock(); + +- if (block2.getMaterial() == Material.air || block2.getMaterial() == Material.leaves || block2.getMaterial() == Material.vine) ++ if (block2.isAir(worldIn, upN) || block2.isLeaves(worldIn, upN) || block2.getMaterial() == Material.vine) + { + this.func_175905_a(worldIn, p_180709_3_.up(l), Blocks.log, this.metaWood); + +@@ -166,29 +169,29 @@ + { + BlockPos blockpos3 = new BlockPos(k1, l, l1); + +- if (worldIn.getBlockState(blockpos3).getBlock().getMaterial() == Material.leaves) ++ if (worldIn.getBlockState(blockpos3).getBlock().isLeaves(worldIn, blockpos3)) + { + BlockPos blockpos4 = blockpos3.west(); + blockpos1 = blockpos3.east(); + BlockPos blockpos5 = blockpos3.north(); + BlockPos blockpos2 = blockpos3.south(); + +- if (p_180709_2_.nextInt(4) == 0 && worldIn.getBlockState(blockpos4).getBlock().getMaterial() == Material.air) ++ if (p_180709_2_.nextInt(4) == 0 && worldIn.getBlockState(blockpos4).getBlock().isAir(worldIn, blockpos4)) + { + this.func_175923_a(worldIn, blockpos4, BlockVine.EAST_FLAG); + } + +- if (p_180709_2_.nextInt(4) == 0 && worldIn.getBlockState(blockpos1).getBlock().getMaterial() == Material.air) ++ if (p_180709_2_.nextInt(4) == 0 && worldIn.getBlockState(blockpos1).getBlock().isAir(worldIn, blockpos1)) + { + this.func_175923_a(worldIn, blockpos1, BlockVine.WEST_FLAG); + } + +- if (p_180709_2_.nextInt(4) == 0 && worldIn.getBlockState(blockpos5).getBlock().getMaterial() == Material.air) ++ if (p_180709_2_.nextInt(4) == 0 && worldIn.getBlockState(blockpos5).getBlock().isAir(worldIn, blockpos5)) + { + this.func_175923_a(worldIn, blockpos5, BlockVine.SOUTH_FLAG); + } + +- if (p_180709_2_.nextInt(4) == 0 && worldIn.getBlockState(blockpos2).getBlock().getMaterial() == Material.air) ++ if (p_180709_2_.nextInt(4) == 0 && worldIn.getBlockState(blockpos2).getBlock().isAir(worldIn, blockpos2)) + { + this.func_175923_a(worldIn, blockpos2, BlockVine.NORTH_FLAG); + } +@@ -233,7 +236,7 @@ + this.func_175905_a(worldIn, p_175923_2_, Blocks.vine, p_175923_3_); + int j = 4; + +- for (p_175923_2_ = p_175923_2_.down(); worldIn.getBlockState(p_175923_2_).getBlock().getMaterial() == Material.air && j > 0; --j) ++ for (p_175923_2_ = p_175923_2_.down(); worldIn.getBlockState(p_175923_2_).getBlock().isAir(worldIn, p_175923_2_) && j > 0; --j) + { + this.func_175905_a(worldIn, p_175923_2_, Blocks.vine, p_175923_3_); + p_175923_2_ = p_175923_2_.down(); diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGeneratorBonusChest.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGeneratorBonusChest.java.patch new file mode 100644 index 000000000..e46096942 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/feature/WorldGeneratorBonusChest.java.patch @@ -0,0 +1,17 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGeneratorBonusChest.java ++++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGeneratorBonusChest.java +@@ -27,10 +27,12 @@ + { + Block block; + +- while (((block = worldIn.getBlockState(p_180709_3_).getBlock()).getMaterial() == Material.air || block.getMaterial() == Material.leaves) && p_180709_3_.getY() > 1) ++ do + { ++ block = worldIn.getBlockState(p_180709_3_).getBlock(); ++ if (!block.isAir(worldIn, p_180709_3_) && !block.isLeaves(worldIn, p_180709_3_)) break; + p_180709_3_ = p_180709_3_.down(); +- } ++ } while (p_180709_3_.getY() > 0); + + if (p_180709_3_.getY() < 1) + { diff --git a/patches/minecraft/net/minecraft/world/gen/layer/GenLayer.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/layer/GenLayer.java.patch similarity index 68% rename from patches/minecraft/net/minecraft/world/gen/layer/GenLayer.java.patch rename to patches.mcp/minecraft/net/minecraft/world/gen/layer/GenLayer.java.patch index 1fe3bb9aa..a6a1784f0 100644 --- a/patches/minecraft/net/minecraft/world/gen/layer/GenLayer.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/gen/layer/GenLayer.java.patch @@ -9,48 +9,48 @@ + public abstract class GenLayer { - private long field_75907_b; + private long worldGenSeed; @@ -53,11 +56,11 @@ j = 6; } + j = getModdedBiomeSize(p_180781_2_, j); + - GenLayer genlayer = GenLayerZoom.func_75915_a(1000L, genlayer2, 0); + GenLayer genlayer = GenLayerZoom.magnify(1000L, genlayer2, 0); GenLayerRiverInit genlayerriverinit = new GenLayerRiverInit(100L, genlayer); - GenLayerBiome genlayerbiome = new GenLayerBiome(200L, genlayer2, p_180781_2_, p_180781_3_); -- GenLayer genlayer3 = GenLayerZoom.func_75915_a(1000L, genlayerbiome, 2); +- GenLayer genlayer3 = GenLayerZoom.magnify(1000L, genlayerbiome, 2); - GenLayerBiomeEdge genlayerbiomeedge = new GenLayerBiomeEdge(1000L, genlayer3); + GenLayer genlayerbiomeedge = p_180781_2_.getBiomeLayer(p_180781_0_, genlayer2, p_180781_3_); - GenLayer genlayer1 = GenLayerZoom.func_75915_a(1000L, genlayerriverinit, 2); + GenLayer genlayer1 = GenLayerZoom.magnify(1000L, genlayerriverinit, 2); GenLayerHills genlayerhills = new GenLayerHills(1000L, genlayerbiomeedge, genlayer1); - genlayer = GenLayerZoom.func_75915_a(1000L, genlayerriverinit, 2); + genlayer = GenLayerZoom.magnify(1000L, genlayerriverinit, 2); @@ -194,7 +197,7 @@ - protected static boolean func_151618_b(int p_151618_0_) + protected static boolean isBiomeOceanic(int p_151618_0_) { -- return p_151618_0_ == BiomeGenBase.field_76771_b.field_76756_M || p_151618_0_ == BiomeGenBase.field_150575_M.field_76756_M || p_151618_0_ == BiomeGenBase.field_76776_l.field_76756_M; -+ return BiomeManager.oceanBiomes.contains(BiomeGenBase.func_150568_d(p_151618_0_)); +- return p_151618_0_ == BiomeGenBase.ocean.biomeID || p_151618_0_ == BiomeGenBase.deepOcean.biomeID || p_151618_0_ == BiomeGenBase.frozenOcean.biomeID; ++ return BiomeManager.oceanBiomes.contains(BiomeGenBase.getBiome(p_151618_0_)); } - protected int func_151619_a(int ... p_151619_1_) + protected int selectRandom(int ... p_151619_1_) @@ -206,4 +209,27 @@ { - return p_151617_2_ == p_151617_3_ && p_151617_3_ == p_151617_4_ ? p_151617_2_ : (p_151617_1_ == p_151617_2_ && p_151617_1_ == p_151617_3_ ? p_151617_1_ : (p_151617_1_ == p_151617_2_ && p_151617_1_ == p_151617_4_ ? p_151617_1_ : (p_151617_1_ == p_151617_3_ && p_151617_1_ == p_151617_4_ ? p_151617_1_ : (p_151617_1_ == p_151617_2_ && p_151617_3_ != p_151617_4_ ? p_151617_1_ : (p_151617_1_ == p_151617_3_ && p_151617_2_ != p_151617_4_ ? p_151617_1_ : (p_151617_1_ == p_151617_4_ && p_151617_2_ != p_151617_3_ ? p_151617_1_ : (p_151617_2_ == p_151617_3_ && p_151617_1_ != p_151617_4_ ? p_151617_2_ : (p_151617_2_ == p_151617_4_ && p_151617_1_ != p_151617_3_ ? p_151617_2_ : (p_151617_3_ == p_151617_4_ && p_151617_1_ != p_151617_2_ ? p_151617_3_ : this.func_151619_a(new int[] {p_151617_1_, p_151617_2_, p_151617_3_, p_151617_4_})))))))))); + return p_151617_2_ == p_151617_3_ && p_151617_3_ == p_151617_4_ ? p_151617_2_ : (p_151617_1_ == p_151617_2_ && p_151617_1_ == p_151617_3_ ? p_151617_1_ : (p_151617_1_ == p_151617_2_ && p_151617_1_ == p_151617_4_ ? p_151617_1_ : (p_151617_1_ == p_151617_3_ && p_151617_1_ == p_151617_4_ ? p_151617_1_ : (p_151617_1_ == p_151617_2_ && p_151617_3_ != p_151617_4_ ? p_151617_1_ : (p_151617_1_ == p_151617_3_ && p_151617_2_ != p_151617_4_ ? p_151617_1_ : (p_151617_1_ == p_151617_4_ && p_151617_2_ != p_151617_3_ ? p_151617_1_ : (p_151617_2_ == p_151617_3_ && p_151617_1_ != p_151617_4_ ? p_151617_2_ : (p_151617_2_ == p_151617_4_ && p_151617_1_ != p_151617_3_ ? p_151617_2_ : (p_151617_3_ == p_151617_4_ && p_151617_1_ != p_151617_2_ ? p_151617_3_ : this.selectRandom(new int[] {p_151617_1_, p_151617_2_, p_151617_3_, p_151617_4_})))))))))); } + + /* ======================================== FORGE START =====================================*/ + protected long nextLong(long par1) + { -+ long j = (this.field_75908_c >> 24) % par1; ++ long j = (this.chunkSeed >> 24) % par1; + + if (j < 0) + { + j += par1; + } + -+ this.field_75908_c *= this.field_75908_c * 6364136223846793005L + 1442695040888963407L; -+ this.field_75908_c += this.field_75907_b; ++ this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L; ++ this.chunkSeed += this.worldGenSeed; + return j; + } + diff --git a/patches/minecraft/net/minecraft/world/gen/layer/GenLayerBiome.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/layer/GenLayerBiome.java.patch similarity index 51% rename from patches/minecraft/net/minecraft/world/gen/layer/GenLayerBiome.java.patch rename to patches.mcp/minecraft/net/minecraft/world/gen/layer/GenLayerBiome.java.patch index e8a8a6350..ecfb39760 100644 --- a/patches/minecraft/net/minecraft/world/gen/layer/GenLayerBiome.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/gen/layer/GenLayerBiome.java.patch @@ -25,11 +25,11 @@ public GenLayerBiome(long p_i45560_1_, GenLayer p_i45560_3_, WorldType p_i45560_4_, String p_i45560_5_) { super(p_i45560_1_); -- this.field_151623_c = new BiomeGenBase[] {BiomeGenBase.field_76769_d, BiomeGenBase.field_76769_d, BiomeGenBase.field_76769_d, BiomeGenBase.field_150588_X, BiomeGenBase.field_150588_X, BiomeGenBase.field_76772_c}; -- this.field_151621_d = new BiomeGenBase[] {BiomeGenBase.field_76767_f, BiomeGenBase.field_150585_R, BiomeGenBase.field_76770_e, BiomeGenBase.field_76772_c, BiomeGenBase.field_150583_P, BiomeGenBase.field_76780_h}; -- this.field_151622_e = new BiomeGenBase[] {BiomeGenBase.field_76767_f, BiomeGenBase.field_76770_e, BiomeGenBase.field_76768_g, BiomeGenBase.field_76772_c}; -- this.field_151620_f = new BiomeGenBase[] {BiomeGenBase.field_76774_n, BiomeGenBase.field_76774_n, BiomeGenBase.field_76774_n, BiomeGenBase.field_150584_S}; - this.field_75909_a = p_i45560_3_; +- this.field_151623_c = new BiomeGenBase[] {BiomeGenBase.desert, BiomeGenBase.desert, BiomeGenBase.desert, BiomeGenBase.savanna, BiomeGenBase.savanna, BiomeGenBase.plains}; +- this.field_151621_d = new BiomeGenBase[] {BiomeGenBase.forest, BiomeGenBase.roofedForest, BiomeGenBase.extremeHills, BiomeGenBase.plains, BiomeGenBase.birchForest, BiomeGenBase.swampland}; +- this.field_151622_e = new BiomeGenBase[] {BiomeGenBase.forest, BiomeGenBase.extremeHills, BiomeGenBase.taiga, BiomeGenBase.plains}; +- this.field_151620_f = new BiomeGenBase[] {BiomeGenBase.icePlains, BiomeGenBase.icePlains, BiomeGenBase.icePlains, BiomeGenBase.coldTaiga}; + this.parent = p_i45560_3_; + for (BiomeManager.BiomeType type : BiomeManager.BiomeType.values()) + { @@ -42,29 +42,29 @@ + + int desertIdx = DESERT.ordinal(); + -+ biomes[desertIdx].add(new BiomeEntry(BiomeGenBase.field_76769_d, 30)); -+ biomes[desertIdx].add(new BiomeEntry(BiomeGenBase.field_150588_X, 20)); -+ biomes[desertIdx].add(new BiomeEntry(BiomeGenBase.field_76772_c, 10)); ++ biomes[desertIdx].add(new BiomeEntry(BiomeGenBase.desert, 30)); ++ biomes[desertIdx].add(new BiomeEntry(BiomeGenBase.savanna, 20)); ++ biomes[desertIdx].add(new BiomeEntry(BiomeGenBase.plains, 10)); + - if (p_i45560_4_ == WorldType.field_77136_e) + if (p_i45560_4_ == WorldType.DEFAULT_1_1) { -- this.field_151623_c = new BiomeGenBase[] {BiomeGenBase.field_76769_d, BiomeGenBase.field_76767_f, BiomeGenBase.field_76770_e, BiomeGenBase.field_76780_h, BiomeGenBase.field_76772_c, BiomeGenBase.field_76768_g}; +- this.field_151623_c = new BiomeGenBase[] {BiomeGenBase.desert, BiomeGenBase.forest, BiomeGenBase.extremeHills, BiomeGenBase.swampland, BiomeGenBase.plains, BiomeGenBase.taiga}; + biomes[desertIdx].clear(); -+ biomes[desertIdx].add(new BiomeEntry(BiomeGenBase.field_76769_d, 10)); -+ biomes[desertIdx].add(new BiomeEntry(BiomeGenBase.field_76767_f, 10)); -+ biomes[desertIdx].add(new BiomeEntry(BiomeGenBase.field_76770_e, 10)); -+ biomes[desertIdx].add(new BiomeEntry(BiomeGenBase.field_76780_h, 10)); -+ biomes[desertIdx].add(new BiomeEntry(BiomeGenBase.field_76772_c, 10)); -+ biomes[desertIdx].add(new BiomeEntry(BiomeGenBase.field_76768_g, 10)); ++ biomes[desertIdx].add(new BiomeEntry(BiomeGenBase.desert, 10)); ++ biomes[desertIdx].add(new BiomeEntry(BiomeGenBase.forest, 10)); ++ biomes[desertIdx].add(new BiomeEntry(BiomeGenBase.extremeHills, 10)); ++ biomes[desertIdx].add(new BiomeEntry(BiomeGenBase.swampland, 10)); ++ biomes[desertIdx].add(new BiomeEntry(BiomeGenBase.plains, 10)); ++ biomes[desertIdx].add(new BiomeEntry(BiomeGenBase.taiga, 10)); this.field_175973_g = null; } - else if (p_i45560_4_ == WorldType.field_180271_f) + else if (p_i45560_4_ == WorldType.CUSTOMIZED) @@ -78,7 +99,7 @@ } else { -- aint1[j1 + i1 * p_75904_3_] = this.field_151623_c[this.func_75902_a(this.field_151623_c.length)].field_76756_M; -+ aint1[j1 + i1 * p_75904_3_] = getWeightedBiomeEntry(DESERT).biome.field_76756_M; +- aint1[j1 + i1 * areaWidth] = this.field_151623_c[this.nextInt(this.field_151623_c.length)].biomeID; ++ aint1[j1 + i1 * areaWidth] = getWeightedBiomeEntry(DESERT).biome.biomeID; } } else if (k1 == 2) @@ -72,8 +72,8 @@ } else { -- aint1[j1 + i1 * p_75904_3_] = this.field_151621_d[this.func_75902_a(this.field_151621_d.length)].field_76756_M; -+ aint1[j1 + i1 * p_75904_3_] = getWeightedBiomeEntry(WARM).biome.field_76756_M; +- aint1[j1 + i1 * areaWidth] = this.field_151621_d[this.nextInt(this.field_151621_d.length)].biomeID; ++ aint1[j1 + i1 * areaWidth] = getWeightedBiomeEntry(WARM).biome.biomeID; } } else if (k1 == 3) @@ -81,14 +81,14 @@ } else { -- aint1[j1 + i1 * p_75904_3_] = this.field_151622_e[this.func_75902_a(this.field_151622_e.length)].field_76756_M; -+ aint1[j1 + i1 * p_75904_3_] = getWeightedBiomeEntry(COOL).biome.field_76756_M; +- aint1[j1 + i1 * areaWidth] = this.field_151622_e[this.nextInt(this.field_151622_e.length)].biomeID; ++ aint1[j1 + i1 * areaWidth] = getWeightedBiomeEntry(COOL).biome.biomeID; } } else if (k1 == 4) { -- aint1[j1 + i1 * p_75904_3_] = this.field_151620_f[this.func_75902_a(this.field_151620_f.length)].field_76756_M; -+ aint1[j1 + i1 * p_75904_3_] = getWeightedBiomeEntry(ICY).biome.field_76756_M; +- aint1[j1 + i1 * areaWidth] = this.field_151620_f[this.nextInt(this.field_151620_f.length)].biomeID; ++ aint1[j1 + i1 * areaWidth] = getWeightedBiomeEntry(ICY).biome.biomeID; } else { @@ -100,8 +100,8 @@ + protected BiomeEntry getWeightedBiomeEntry(BiomeManager.BiomeType type) + { + List biomeList = biomes[type.ordinal()]; -+ int totalWeight = WeightedRandom.func_76272_a(biomeList); -+ int weight = BiomeManager.isTypeListModded(type)?func_75902_a(totalWeight):func_75902_a(totalWeight / 10) * 10; -+ return (BiomeEntry)WeightedRandom.func_180166_a(biomeList, weight); ++ int totalWeight = WeightedRandom.getTotalWeight(biomeList); ++ int weight = BiomeManager.isTypeListModded(type)?nextInt(totalWeight):nextInt(totalWeight / 10) * 10; ++ return (BiomeEntry)WeightedRandom.getRandomItem(biomeList, weight); + } } diff --git a/patches/minecraft/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces.java.patch similarity index 50% rename from patches/minecraft/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces.java.patch rename to patches.mcp/minecraft/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces.java.patch index f300249a0..ee65e0a22 100644 --- a/patches/minecraft/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces.java.patch @@ -21,8 +21,8 @@ + static + { -+ ChestGenHooks.init(PYRAMID_DESERT_CHEST, field_74941_i, 2, 7); -+ ChestGenHooks.addItem(PYRAMID_DESERT_CHEST, new WeightedRandomChestContent(new ItemStack(Items.field_151134_bR, 1, 0), 1, 1, 1)); ++ ChestGenHooks.init(PYRAMID_DESERT_CHEST, itemsToGenerateInTemple, 2, 7); ++ ChestGenHooks.addItem(PYRAMID_DESERT_CHEST, new WeightedRandomChestContent(new ItemStack(Items.enchanted_book, 1, 0), 1, 1, 1)); + } + public DesertPyramid(Random p_i2062_1_, int p_i2062_2_, int p_i2062_3_) @@ -30,65 +30,65 @@ super(p_i2062_1_, p_i2062_2_, 64, p_i2062_3_, 21, 15, 21); @@ -267,7 +276,7 @@ { - int k1 = enumfacing.func_82601_c() * 2; - int l1 = enumfacing.func_82599_e() * 2; -- this.field_74940_h[enumfacing.func_176736_b()] = this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 10 + k1, -11, 10 + l1, WeightedRandomChestContent.func_177629_a(field_74941_i, new WeightedRandomChestContent[] {Items.field_151134_bR.func_92114_b(p_74875_2_)}), 2 + p_74875_2_.nextInt(5)); -+ this.field_74940_h[enumfacing.func_176736_b()] = this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 10 + k1, -11, 10 + l1, ChestGenHooks.getItems(PYRAMID_DESERT_CHEST, p_74875_2_), ChestGenHooks.getCount(PYRAMID_DESERT_CHEST, p_74875_2_)); + int k1 = enumfacing.getFrontOffsetX() * 2; + int l1 = enumfacing.getFrontOffsetZ() * 2; +- this.field_74940_h[enumfacing.getHorizontalIndex()] = this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 10 + k1, -11, 10 + l1, WeightedRandomChestContent.func_177629_a(itemsToGenerateInTemple, new WeightedRandomChestContent[] {Items.enchanted_book.getRandom(p_74875_2_)}), 2 + p_74875_2_.nextInt(5)); ++ this.field_74940_h[enumfacing.getHorizontalIndex()] = this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 10 + k1, -11, 10 + l1, ChestGenHooks.getItems(PYRAMID_DESERT_CHEST, p_74875_2_), ChestGenHooks.getCount(PYRAMID_DESERT_CHEST, p_74875_2_)); } } @@ -370,6 +379,13 @@ - private static ComponentScatteredFeaturePieces.JunglePyramid.Stones field_74942_n = new ComponentScatteredFeaturePieces.JunglePyramid.Stones((ComponentScatteredFeaturePieces.SwitchEnumFacing)null); + private static ComponentScatteredFeaturePieces.JunglePyramid.Stones junglePyramidsRandomScatteredStones = new ComponentScatteredFeaturePieces.JunglePyramid.Stones((ComponentScatteredFeaturePieces.SwitchEnumFacing)null); private static final String __OBFID = "CL_00000477"; + static + { + ChestGenHooks.init(PYRAMID_JUNGLE_DISPENSER, field_175815_j, 2, 2); + ChestGenHooks.init(PYRAMID_JUNGLE_CHEST, field_175816_i, 2, 7); -+ ChestGenHooks.addItem(PYRAMID_JUNGLE_CHEST, new WeightedRandomChestContent(new ItemStack(Items.field_151134_bR, 1, 0), 1, 1, 1)); ++ ChestGenHooks.addItem(PYRAMID_JUNGLE_CHEST, new WeightedRandomChestContent(new ItemStack(Items.enchanted_book, 1, 0), 1, 1, 1)); + } + public JunglePyramid() {} public JunglePyramid(Random p_i2064_1_, int p_i2064_2_, int p_i2064_3_) @@ -525,9 +541,12 @@ - this.func_175811_a(p_74875_1_, Blocks.field_150488_af.func_176223_P(), 4, -3, 1, p_74875_3_); - this.func_175811_a(p_74875_1_, Blocks.field_150341_Y.func_176223_P(), 3, -3, 1, p_74875_3_); + this.func_175811_a(worldIn, Blocks.redstone_wire.getDefaultState(), 4, -3, 1, p_74875_3_); + this.func_175811_a(worldIn, Blocks.mossy_cobblestone.getDefaultState(), 3, -3, 1, p_74875_3_); + ChestGenHooks dispenser = ChestGenHooks.getInfo(PYRAMID_JUNGLE_DISPENSER); + ChestGenHooks chest = ChestGenHooks.getInfo(PYRAMID_JUNGLE_CHEST); + if (!this.field_74945_j) { -- this.field_74945_j = this.func_175806_a(p_74875_1_, p_74875_3_, p_74875_2_, 3, -2, 1, EnumFacing.NORTH.func_176745_a(), field_175815_j, 2); -+ this.field_74945_j = this.func_175806_a(p_74875_1_, p_74875_3_, p_74875_2_, 3, -2, 1, EnumFacing.NORTH.func_176745_a(), dispenser.getItems(p_74875_2_), dispenser.getCount(p_74875_2_)); +- this.field_74945_j = this.func_175806_a(worldIn, p_74875_3_, p_74875_2_, 3, -2, 1, EnumFacing.NORTH.getIndex(), field_175815_j, 2); ++ this.field_74945_j = this.func_175806_a(worldIn, p_74875_3_, p_74875_2_, 3, -2, 1, EnumFacing.NORTH.getIndex(), dispenser.getItems(p_74875_2_), dispenser.getCount(p_74875_2_)); } - this.func_175811_a(p_74875_1_, Blocks.field_150395_bd.func_176203_a(15), 3, -2, 2, p_74875_3_); + this.func_175811_a(worldIn, Blocks.vine.getStateFromMeta(15), 3, -2, 2, p_74875_3_); @@ -544,7 +563,7 @@ if (!this.field_74946_k) { -- this.field_74946_k = this.func_175806_a(p_74875_1_, p_74875_3_, p_74875_2_, 9, -2, 3, EnumFacing.WEST.func_176745_a(), field_175815_j, 2); -+ this.field_74946_k = this.func_175806_a(p_74875_1_, p_74875_3_, p_74875_2_, 9, -2, 3, EnumFacing.WEST.func_176745_a(), dispenser.getItems(p_74875_2_), dispenser.getCount(p_74875_2_)); +- this.field_74946_k = this.func_175806_a(worldIn, p_74875_3_, p_74875_2_, 9, -2, 3, EnumFacing.WEST.getIndex(), field_175815_j, 2); ++ this.field_74946_k = this.func_175806_a(worldIn, p_74875_3_, p_74875_2_, 9, -2, 3, EnumFacing.WEST.getIndex(), dispenser.getItems(p_74875_2_), dispenser.getCount(p_74875_2_)); } - this.func_175811_a(p_74875_1_, Blocks.field_150395_bd.func_176203_a(15), 8, -1, 3, p_74875_3_); + this.func_175811_a(worldIn, Blocks.vine.getStateFromMeta(15), 8, -1, 3, p_74875_3_); @@ -552,7 +571,7 @@ if (!this.field_74947_h) { -- this.field_74947_h = this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 8, -3, 3, WeightedRandomChestContent.func_177629_a(field_175816_i, new WeightedRandomChestContent[] {Items.field_151134_bR.func_92114_b(p_74875_2_)}), 2 + p_74875_2_.nextInt(5)); -+ this.field_74947_h = this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 8, -3, 3, chest.getItems(p_74875_2_), chest.getCount(p_74875_2_)); +- this.field_74947_h = this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 8, -3, 3, WeightedRandomChestContent.func_177629_a(field_175816_i, new WeightedRandomChestContent[] {Items.enchanted_book.getRandom(p_74875_2_)}), 2 + p_74875_2_.nextInt(5)); ++ this.field_74947_h = this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 8, -3, 3, chest.getItems(p_74875_2_), chest.getCount(p_74875_2_)); } - this.func_175811_a(p_74875_1_, Blocks.field_150341_Y.func_176223_P(), 9, -3, 2, p_74875_3_); + this.func_175811_a(worldIn, Blocks.mossy_cobblestone.getDefaultState(), 9, -3, 2, p_74875_3_); @@ -585,7 +604,7 @@ if (!this.field_74948_i) { -- this.field_74948_i = this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 9, -3, 10, WeightedRandomChestContent.func_177629_a(field_175816_i, new WeightedRandomChestContent[] {Items.field_151134_bR.func_92114_b(p_74875_2_)}), 2 + p_74875_2_.nextInt(5)); -+ this.field_74948_i = this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 9, -3, 10, chest.getItems(p_74875_2_), chest.getCount(p_74875_2_)); +- this.field_74948_i = this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 9, -3, 10, WeightedRandomChestContent.func_177629_a(field_175816_i, new WeightedRandomChestContent[] {Items.enchanted_book.getRandom(p_74875_2_)}), 2 + p_74875_2_.nextInt(5)); ++ this.field_74948_i = this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 9, -3, 10, chest.getItems(p_74875_2_), chest.getCount(p_74875_2_)); } return true; diff --git a/patches/minecraft/net/minecraft/world/gen/structure/MapGenStronghold.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/structure/MapGenStronghold.java.patch similarity index 72% rename from patches/minecraft/net/minecraft/world/gen/structure/MapGenStronghold.java.patch rename to patches.mcp/minecraft/net/minecraft/world/gen/structure/MapGenStronghold.java.patch index 2ac267ebb..6f64cda61 100644 --- a/patches/minecraft/net/minecraft/world/gen/structure/MapGenStronghold.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/gen/structure/MapGenStronghold.java.patch @@ -4,8 +4,8 @@ { BiomeGenBase biomegenbase = abiomegenbase[j]; -- if (biomegenbase != null && biomegenbase.field_76748_D > 0.0F) -+ if (biomegenbase != null && biomegenbase.field_76748_D > 0.0F && !net.minecraftforge.common.BiomeManager.strongHoldBiomesBlackList.contains(biomegenbase)) +- if (biomegenbase != null && biomegenbase.minHeight > 0.0F) ++ if (biomegenbase != null && biomegenbase.minHeight > 0.0F && !net.minecraftforge.common.BiomeManager.strongHoldBiomesBlackList.contains(biomegenbase)) { this.field_151546_e.add(biomegenbase); } diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/structure/MapGenStructure.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/structure/MapGenStructure.java.patch new file mode 100644 index 000000000..0832a9001 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/structure/MapGenStructure.java.patch @@ -0,0 +1,17 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/structure/MapGenStructure.java ++++ ../src-work/minecraft/net/minecraft/world/gen/structure/MapGenStructure.java +@@ -231,12 +231,12 @@ + { + if (this.field_143029_e == null) + { +- this.field_143029_e = (MapGenStructureData)worldIn.loadItemData(MapGenStructureData.class, this.getStructureName()); ++ this.field_143029_e = (MapGenStructureData)worldIn.getPerWorldStorage().loadData(MapGenStructureData.class, this.getStructureName()); + + if (this.field_143029_e == null) + { + this.field_143029_e = new MapGenStructureData(this.getStructureName()); +- worldIn.setItemData(this.getStructureName(), this.field_143029_e); ++ worldIn.getPerWorldStorage().setData(this.getStructureName(), this.field_143029_e); + } + else + { diff --git a/patches/minecraft/net/minecraft/world/gen/structure/StructureComponent.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/structure/StructureComponent.java.patch similarity index 78% rename from patches/minecraft/net/minecraft/world/gen/structure/StructureComponent.java.patch rename to patches.mcp/minecraft/net/minecraft/world/gen/structure/StructureComponent.java.patch index 8c525a612..9f41e1cad 100644 --- a/patches/minecraft/net/minecraft/world/gen/structure/StructureComponent.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/gen/structure/StructureComponent.java.patch @@ -9,5 +9,5 @@ + throw new RuntimeException("StructureComponent \"" + this.getClass().getName() + "\" missing ID Mapping, Modder see MapGenStructureIO"); + } NBTTagCompound nbttagcompound = new NBTTagCompound(); - nbttagcompound.func_74778_a("id", MapGenStructureIO.func_143036_a(this)); - nbttagcompound.func_74782_a("BB", this.field_74887_e.func_151535_h()); + nbttagcompound.setString("id", MapGenStructureIO.func_143036_a(this)); + nbttagcompound.setTag("BB", this.boundingBox.func_151535_h()); diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/structure/StructureMineshaftPieces.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/structure/StructureMineshaftPieces.java.patch new file mode 100644 index 000000000..e1e15e013 --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/structure/StructureMineshaftPieces.java.patch @@ -0,0 +1,42 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/structure/StructureMineshaftPieces.java ++++ ../src-work/minecraft/net/minecraft/world/gen/structure/StructureMineshaftPieces.java +@@ -19,6 +19,8 @@ + import net.minecraft.util.EnumFacing; + import net.minecraft.util.WeightedRandomChestContent; + import net.minecraft.world.World; ++import net.minecraftforge.common.ChestGenHooks; ++import static net.minecraftforge.common.ChestGenHooks.*; + + public class StructureMineshaftPieces + { +@@ -33,6 +35,12 @@ + MapGenStructureIO.registerStructureComponent(StructureMineshaftPieces.Stairs.class, "MSStairs"); + } + ++ static ++ { ++ ChestGenHooks.init(MINESHAFT_CORRIDOR, field_175893_a, 8, 8); ++ ChestGenHooks.addItem(MINESHAFT_CORRIDOR, new WeightedRandomChestContent(new net.minecraft.item.ItemStack(Items.enchanted_book, 1, 0), 1, 1, 1)); ++ } ++ + private static StructureComponent func_175892_a(List p_175892_0_, Random p_175892_1_, int p_175892_2_, int p_175892_3_, int p_175892_4_, EnumFacing p_175892_5_, int p_175892_6_) + { + int i1 = p_175892_1_.nextInt(100); +@@ -354,14 +362,15 @@ + this.func_175809_a(worldIn, p_74875_3_, p_74875_2_, 0.05F, 1, 2, k - 1, Blocks.torch.getStateFromMeta(EnumFacing.UP.getIndex())); + this.func_175809_a(worldIn, p_74875_3_, p_74875_2_, 0.05F, 1, 2, k + 1, Blocks.torch.getStateFromMeta(EnumFacing.UP.getIndex())); + ++ ChestGenHooks info = ChestGenHooks.getInfo(MINESHAFT_CORRIDOR); + if (p_74875_2_.nextInt(100) == 0) + { +- this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 2, 0, k - 1, WeightedRandomChestContent.func_177629_a(StructureMineshaftPieces.field_175893_a, new WeightedRandomChestContent[] {Items.enchanted_book.getRandom(p_74875_2_)}), 3 + p_74875_2_.nextInt(4)); ++ this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 2, 0, k - 1, info.getItems(p_74875_2_), info.getCount(p_74875_2_)); + } + + if (p_74875_2_.nextInt(100) == 0) + { +- this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 0, 0, k + 1, WeightedRandomChestContent.func_177629_a(StructureMineshaftPieces.field_175893_a, new WeightedRandomChestContent[] {Items.enchanted_book.getRandom(p_74875_2_)}), 3 + p_74875_2_.nextInt(4)); ++ this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 0, 0, k + 1, info.getItems(p_74875_2_), info.getCount(p_74875_2_)); + } + + if (this.hasSpiders && !this.spawnerPlaced) diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/structure/StructureNetherBridgePieces.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/structure/StructureNetherBridgePieces.java.patch new file mode 100644 index 000000000..44c0e67ea --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/structure/StructureNetherBridgePieces.java.patch @@ -0,0 +1,28 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/structure/StructureNetherBridgePieces.java ++++ ../src-work/minecraft/net/minecraft/world/gen/structure/StructureNetherBridgePieces.java +@@ -154,7 +154,7 @@ + if (this.field_111021_b && p_74875_3_.func_175898_b(new BlockPos(this.getXWithOffset(3, 3), this.getYWithOffset(2), this.getZWithOffset(3, 3)))) + { + this.field_111021_b = false; +- this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 3, 2, 3, field_111019_a, 2 + p_74875_2_.nextInt(4)); ++ this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 3, 2, 3, net.minecraftforge.common.ChestGenHooks.getItems(net.minecraftforge.common.ChestGenHooks.NETHER_FORTRESS, p_74875_2_), net.minecraftforge.common.ChestGenHooks.getCount(net.minecraftforge.common.ChestGenHooks.NETHER_FORTRESS, p_74875_2_)); + } + + this.func_175804_a(worldIn, p_74875_3_, 0, 6, 0, 4, 6, 4, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); +@@ -224,7 +224,7 @@ + if (this.field_111020_b && p_74875_3_.func_175898_b(new BlockPos(this.getXWithOffset(1, 3), this.getYWithOffset(2), this.getZWithOffset(1, 3)))) + { + this.field_111020_b = false; +- this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 1, 2, 3, field_111019_a, 2 + p_74875_2_.nextInt(4)); ++ this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 1, 2, 3, net.minecraftforge.common.ChestGenHooks.getItems(net.minecraftforge.common.ChestGenHooks.NETHER_FORTRESS, p_74875_2_), net.minecraftforge.common.ChestGenHooks.getCount(net.minecraftforge.common.ChestGenHooks.NETHER_FORTRESS, p_74875_2_)); + } + + this.func_175804_a(worldIn, p_74875_3_, 0, 6, 0, 4, 6, 4, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); +@@ -953,6 +953,7 @@ + abstract static class Piece extends StructureComponent + { + protected static final List field_111019_a = Lists.newArrayList(new WeightedRandomChestContent[] {new WeightedRandomChestContent(Items.diamond, 0, 1, 3, 5), new WeightedRandomChestContent(Items.iron_ingot, 0, 1, 5, 5), new WeightedRandomChestContent(Items.gold_ingot, 0, 1, 3, 15), new WeightedRandomChestContent(Items.golden_sword, 0, 1, 1, 5), new WeightedRandomChestContent(Items.golden_chestplate, 0, 1, 1, 5), new WeightedRandomChestContent(Items.flint_and_steel, 0, 1, 1, 5), new WeightedRandomChestContent(Items.nether_wart, 0, 3, 7, 5), new WeightedRandomChestContent(Items.saddle, 0, 1, 1, 10), new WeightedRandomChestContent(Items.golden_horse_armor, 0, 1, 1, 8), new WeightedRandomChestContent(Items.iron_horse_armor, 0, 1, 1, 5), new WeightedRandomChestContent(Items.diamond_horse_armor, 0, 1, 1, 3), new WeightedRandomChestContent(Item.getItemFromBlock(Blocks.obsidian), 0, 2, 4, 2)}); ++ static { net.minecraftforge.common.ChestGenHooks.init(net.minecraftforge.common.ChestGenHooks.NETHER_FORTRESS, field_111019_a, 2, 5); } + private static final String __OBFID = "CL_00000466"; + + public Piece() {} diff --git a/patches/minecraft/net/minecraft/world/gen/structure/StructureStart.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/structure/StructureStart.java.patch similarity index 60% rename from patches/minecraft/net/minecraft/world/gen/structure/StructureStart.java.patch rename to patches.mcp/minecraft/net/minecraft/world/gen/structure/StructureStart.java.patch index c8db28dbb..1dd1abc4d 100644 --- a/patches/minecraft/net/minecraft/world/gen/structure/StructureStart.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/gen/structure/StructureStart.java.patch @@ -9,15 +9,15 @@ + throw new RuntimeException("StructureStart \"" + this.getClass().getName() + "\" missing ID Mapping, Modder see MapGenStructureIO"); + } NBTTagCompound nbttagcompound = new NBTTagCompound(); - nbttagcompound.func_74778_a("id", MapGenStructureIO.func_143033_a(this)); - nbttagcompound.func_74768_a("ChunkX", p_143021_1_); + nbttagcompound.setString("id", MapGenStructureIO.func_143033_a(this)); + nbttagcompound.setInteger("ChunkX", p_143021_1_); @@ -98,7 +102,8 @@ - for (int i = 0; i < nbttaglist.func_74745_c(); ++i) + for (int i = 0; i < nbttaglist.tagCount(); ++i) { -- this.field_75075_a.add(MapGenStructureIO.func_143032_b(nbttaglist.func_150305_b(i), p_143020_1_)); -+ StructureComponent tmp = MapGenStructureIO.func_143032_b(nbttaglist.func_150305_b(i), p_143020_1_); -+ if (tmp != null) this.field_75075_a.add(tmp); //Forge: Prevent NPEs further down the line when a componenet can't be loaded. +- this.components.add(MapGenStructureIO.func_143032_b(nbttaglist.getCompoundTagAt(i), worldIn)); ++ StructureComponent tmp = MapGenStructureIO.func_143032_b(nbttaglist.getCompoundTagAt(i), worldIn); ++ if (tmp != null) this.components.add(tmp); //Forge: Prevent NPEs further down the line when a componenet can't be loaded. } this.func_143017_b(p_143020_2_); diff --git a/patches.mcp/minecraft/net/minecraft/world/gen/structure/StructureStrongholdPieces.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/structure/StructureStrongholdPieces.java.patch new file mode 100644 index 000000000..390cdf61d --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/gen/structure/StructureStrongholdPieces.java.patch @@ -0,0 +1,84 @@ +--- ../src-base/minecraft/net/minecraft/world/gen/structure/StructureStrongholdPieces.java ++++ ../src-work/minecraft/net/minecraft/world/gen/structure/StructureStrongholdPieces.java +@@ -17,6 +17,8 @@ + import net.minecraft.util.EnumFacing; + import net.minecraft.util.WeightedRandomChestContent; + import net.minecraft.world.World; ++import net.minecraftforge.common.ChestGenHooks; ++import static net.minecraftforge.common.ChestGenHooks.*; + + public class StructureStrongholdPieces + { +@@ -248,6 +250,12 @@ + + public ChestCorridor() {} + ++ static ++ { ++ ChestGenHooks.init(STRONGHOLD_CORRIDOR, strongholdChestContents, 2, 4); ++ ChestGenHooks.addItem(STRONGHOLD_CORRIDOR, new WeightedRandomChestContent(new net.minecraft.item.ItemStack(Items.enchanted_book, 1, 0), 1, 1, 1)); ++ } ++ + public ChestCorridor(int p_i45582_1_, Random p_i45582_2_, StructureBoundingBox p_i45582_3_, EnumFacing p_i45582_4_) + { + super(p_i45582_1_); +@@ -304,7 +312,7 @@ + if (!this.hasMadeChest && p_74875_3_.func_175898_b(new BlockPos(this.getXWithOffset(3, 3), this.getYWithOffset(2), this.getZWithOffset(3, 3)))) + { + this.hasMadeChest = true; +- this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 3, 2, 3, WeightedRandomChestContent.func_177629_a(strongholdChestContents, new WeightedRandomChestContent[] {Items.enchanted_book.getRandom(p_74875_2_)}), 2 + p_74875_2_.nextInt(2)); ++ this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 3, 2, 3, ChestGenHooks.getItems(STRONGHOLD_CORRIDOR, p_74875_2_), ChestGenHooks.getCount(STRONGHOLD_CORRIDOR, p_74875_2_)); + } + + return true; +@@ -599,6 +607,12 @@ + private boolean isLargeRoom; + private static final String __OBFID = "CL_00000491"; + ++ static ++ { ++ ChestGenHooks.init(STRONGHOLD_CORRIDOR, strongholdLibraryChestContents, 1, 5); ++ ChestGenHooks.addItem(STRONGHOLD_CORRIDOR, new WeightedRandomChestContent(new net.minecraft.item.ItemStack(Items.enchanted_book, 1, 0), 1, 5, 2)); ++ } ++ + public Library() {} + + public Library(int p_i45578_1_, Random p_i45578_2_, StructureBoundingBox p_i45578_3_, EnumFacing p_i45578_4_) +@@ -742,12 +756,13 @@ + this.func_175811_a(worldIn, Blocks.torch.getDefaultState(), b1, 8, b2 + 1, p_74875_3_); + } + +- this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 3, 3, 5, WeightedRandomChestContent.func_177629_a(strongholdLibraryChestContents, new WeightedRandomChestContent[] {Items.enchanted_book.getRandom(p_74875_2_, 1, 5, 2)}), 1 + p_74875_2_.nextInt(4)); ++ ChestGenHooks info = ChestGenHooks.getInfo(STRONGHOLD_LIBRARY); ++ this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 3, 3, 5, info.getItems(p_74875_2_), info.getCount(p_74875_2_)); + + if (this.isLargeRoom) + { + this.func_175811_a(worldIn, Blocks.air.getDefaultState(), 12, 9, 1, p_74875_3_); +- this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 12, 8, 1, WeightedRandomChestContent.func_177629_a(strongholdLibraryChestContents, new WeightedRandomChestContent[] {Items.enchanted_book.getRandom(p_74875_2_, 1, 5, 2)}), 1 + p_74875_2_.nextInt(4)); ++ this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 12, 8, 1, info.getItems(p_74875_2_), info.getCount(p_74875_2_)); + } + + return true; +@@ -1024,6 +1039,12 @@ + protected int roomType; + private static final String __OBFID = "CL_00000496"; + ++ static ++ { ++ ChestGenHooks.init(STRONGHOLD_CROSSING, strongholdRoomCrossingChestContents, 1, 5); ++ ChestGenHooks.addItem(STRONGHOLD_CROSSING, new WeightedRandomChestContent(new net.minecraft.item.ItemStack(Items.enchanted_book, 1, 0), 1, 1, 1)); ++ } ++ + public RoomCrossing() {} + + public RoomCrossing(int p_i45575_1_, Random p_i45575_2_, StructureBoundingBox p_i45575_3_, EnumFacing p_i45575_4_) +@@ -1159,7 +1180,7 @@ + this.func_175811_a(worldIn, Blocks.ladder.getStateFromMeta(this.getMetadataWithOffset(Blocks.ladder, EnumFacing.WEST.getIndex())), 9, 1, 3, p_74875_3_); + this.func_175811_a(worldIn, Blocks.ladder.getStateFromMeta(this.getMetadataWithOffset(Blocks.ladder, EnumFacing.WEST.getIndex())), 9, 2, 3, p_74875_3_); + this.func_175811_a(worldIn, Blocks.ladder.getStateFromMeta(this.getMetadataWithOffset(Blocks.ladder, EnumFacing.WEST.getIndex())), 9, 3, 3, p_74875_3_); +- this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 3, 4, 8, WeightedRandomChestContent.func_177629_a(strongholdRoomCrossingChestContents, new WeightedRandomChestContent[] {Items.enchanted_book.getRandom(p_74875_2_)}), 1 + p_74875_2_.nextInt(4)); ++ this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 3, 4, 8, ChestGenHooks.getItems(STRONGHOLD_CROSSING, p_74875_2_), ChestGenHooks.getCount(STRONGHOLD_CROSSING, p_74875_2_)); + } + + return true; diff --git a/patches/minecraft/net/minecraft/world/gen/structure/StructureVillagePieces.java.patch b/patches.mcp/minecraft/net/minecraft/world/gen/structure/StructureVillagePieces.java.patch similarity index 70% rename from patches/minecraft/net/minecraft/world/gen/structure/StructureVillagePieces.java.patch rename to patches.mcp/minecraft/net/minecraft/world/gen/structure/StructureVillagePieces.java.patch index ad1533e4e..e285e0cfe 100644 --- a/patches/minecraft/net/minecraft/world/gen/structure/StructureVillagePieces.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/gen/structure/StructureVillagePieces.java.patch @@ -13,9 +13,9 @@ public class StructureVillagePieces { @@ -59,6 +64,8 @@ - arraylist.add(new StructureVillagePieces.PieceWeight(StructureVillagePieces.Field2.class, 3, MathHelper.func_76136_a(p_75084_0_, 2 + p_75084_1_, 4 + p_75084_1_ * 2))); - arraylist.add(new StructureVillagePieces.PieceWeight(StructureVillagePieces.House2.class, 15, MathHelper.func_76136_a(p_75084_0_, 0, 1 + p_75084_1_))); - arraylist.add(new StructureVillagePieces.PieceWeight(StructureVillagePieces.House3.class, 8, MathHelper.func_76136_a(p_75084_0_, 0 + p_75084_1_, 3 + p_75084_1_ * 2))); + arraylist.add(new StructureVillagePieces.PieceWeight(StructureVillagePieces.Field2.class, 3, MathHelper.getRandomIntegerInRange(p_75084_0_, 2 + p_75084_1_, 4 + p_75084_1_ * 2))); + arraylist.add(new StructureVillagePieces.PieceWeight(StructureVillagePieces.House2.class, 15, MathHelper.getRandomIntegerInRange(p_75084_0_, 0, 1 + p_75084_1_))); + arraylist.add(new StructureVillagePieces.PieceWeight(StructureVillagePieces.House3.class, 8, MathHelper.getRandomIntegerInRange(p_75084_0_, 0 + p_75084_1_, 3 + p_75084_1_ * 2))); + net.minecraftforge.fml.common.registry.VillagerRegistry.addExtraVillageComponents(arraylist, p_75084_0_, p_75084_1_); + Iterator iterator = arraylist.iterator(); @@ -38,18 +38,18 @@ + static + { -+ ChestGenHooks.init(VILLAGE_BLACKSMITH, field_74918_a, 3, 8); ++ ChestGenHooks.init(VILLAGE_BLACKSMITH, villageBlacksmithChestContents, 3, 8); + } + public House2(StructureVillagePieces.Start p_i45563_1_, int p_i45563_2_, Random p_i45563_3_, StructureBoundingBox p_i45563_4_, EnumFacing p_i45563_5_) { super(p_i45563_1_, p_i45563_2_); @@ -920,7 +936,7 @@ - if (!this.field_74917_c && p_74875_3_.func_175898_b(new BlockPos(this.func_74865_a(5, 5), this.func_74862_a(1), this.func_74873_b(5, 5)))) + if (!this.hasMadeChest && p_74875_3_.func_175898_b(new BlockPos(this.getXWithOffset(5, 5), this.getYWithOffset(1), this.getZWithOffset(5, 5)))) { - this.field_74917_c = true; -- this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 5, 1, 5, field_74918_a, 3 + p_74875_2_.nextInt(6)); -+ this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 5, 1, 5, ChestGenHooks.getItems(VILLAGE_BLACKSMITH, p_74875_2_), ChestGenHooks.getCount(VILLAGE_BLACKSMITH, p_74875_2_)); + this.hasMadeChest = true; +- this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 5, 1, 5, villageBlacksmithChestContents, 3 + p_74875_2_.nextInt(6)); ++ this.func_180778_a(worldIn, p_74875_3_, p_74875_2_, 5, 1, 5, ChestGenHooks.getItems(VILLAGE_BLACKSMITH, p_74875_2_), ChestGenHooks.getCount(VILLAGE_BLACKSMITH, p_74875_2_)); } int i; @@ -62,15 +62,15 @@ public Start() {} @@ -1433,6 +1450,7 @@ - this.field_74928_c = p_i2104_7_; + this.terrainType = p_i2104_7_; BiomeGenBase biomegenbase = p_i2104_1_.func_180300_a(new BlockPos(p_i2104_4_, 0, p_i2104_5_), BiomeGenBase.field_180279_ad); - this.field_74927_b = biomegenbase == BiomeGenBase.field_76769_d || biomegenbase == BiomeGenBase.field_76786_s; + this.inDesert = biomegenbase == BiomeGenBase.desert || biomegenbase == BiomeGenBase.desertHills; + this.biome = biomegenbase; - this.func_175846_a(this.field_74927_b); + this.func_175846_a(this.inDesert); } @@ -1540,6 +1558,7 @@ - private int field_74896_a; + private int villagersSpawned; private boolean field_143014_b; private static final String __OBFID = "CL_00000531"; + private StructureVillagePieces.Start startPiece; @@ -80,7 +80,7 @@ @@ -1550,6 +1569,7 @@ if (p_i2107_1_ != null) { - this.field_143014_b = p_i2107_1_.field_74927_b; + this.field_143014_b = p_i2107_1_.inDesert; + startPiece = p_i2107_1_; } } @@ -94,4 +94,4 @@ + if (event.getResult() == Result.DENY) return event.replacement; if (this.field_143014_b) { - if (p_175847_1_.func_177230_c() == Blocks.field_150364_r || p_175847_1_.func_177230_c() == Blocks.field_150363_s) + if (p_175847_1_.getBlock() == Blocks.log || p_175847_1_.getBlock() == Blocks.log2) diff --git a/patches.mcp/minecraft/net/minecraft/world/storage/MapData.java.patch b/patches.mcp/minecraft/net/minecraft/world/storage/MapData.java.patch new file mode 100644 index 000000000..4221e7c3e --- /dev/null +++ b/patches.mcp/minecraft/net/minecraft/world/storage/MapData.java.patch @@ -0,0 +1,48 @@ +--- ../src-base/minecraft/net/minecraft/world/storage/MapData.java ++++ ../src-work/minecraft/net/minecraft/world/storage/MapData.java +@@ -22,7 +22,7 @@ + { + public int xCenter; + public int zCenter; +- public byte dimension; ++ public int dimension; //FML byte -> int + public byte scale; + public byte[] colors = new byte[16384]; + public List playersArrayList = Lists.newArrayList(); +@@ -46,7 +46,17 @@ + + public void readFromNBT(NBTTagCompound nbt) + { +- this.dimension = nbt.getByte("dimension"); ++ net.minecraft.nbt.NBTBase dimension = nbt.getTag("dimension"); ++ ++ if (dimension instanceof net.minecraft.nbt.NBTTagByte) ++ { ++ this.dimension = ((net.minecraft.nbt.NBTTagByte)dimension).getByte(); ++ } ++ else ++ { ++ this.dimension = ((net.minecraft.nbt.NBTTagInt)dimension).getInt(); ++ } ++ + this.xCenter = nbt.getInteger("xCenter"); + this.zCenter = nbt.getInteger("zCenter"); + this.scale = nbt.getByte("scale"); +@@ -87,7 +97,7 @@ + + public void writeToNBT(NBTTagCompound nbt) + { +- nbt.setByte("dimension", this.dimension); ++ nbt.setInteger("dimension", this.dimension); + nbt.setInteger("xCenter", this.xCenter); + nbt.setInteger("zCenter", this.zCenter); + nbt.setByte("scale", this.scale); +@@ -166,7 +176,7 @@ + p_82567_8_ += p_82567_8_ < 0.0D ? -8.0D : 8.0D; + b2 = (byte)((int)(p_82567_8_ * 16.0D / 360.0D)); + +- if (this.dimension < 0) ++ if (worldIn.provider.shouldMapSpin(p_82567_3_, p_82567_4_, p_82567_6_, p_82567_8_)) + { + int k = (int)(worldIn.getWorldInfo().getWorldTime() / 10L); + b2 = (byte)(k * k * 34187121 + k * 121 >> 15 & 15); diff --git a/patches/minecraft/net/minecraft/world/storage/SaveHandler.java.patch b/patches.mcp/minecraft/net/minecraft/world/storage/SaveHandler.java.patch similarity index 66% rename from patches/minecraft/net/minecraft/world/storage/SaveHandler.java.patch rename to patches.mcp/minecraft/net/minecraft/world/storage/SaveHandler.java.patch index f5341e4cd..304284cdb 100644 --- a/patches/minecraft/net/minecraft/world/storage/SaveHandler.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/storage/SaveHandler.java.patch @@ -10,8 +10,8 @@ { try { - nbttagcompound = CompressedStreamTools.func_74796_a(new FileInputStream(file1)); - nbttagcompound1 = nbttagcompound.func_74775_l("Data"); + nbttagcompound = CompressedStreamTools.readCompressed(new FileInputStream(file1)); + nbttagcompound1 = nbttagcompound.getCompoundTag("Data"); - return new WorldInfo(nbttagcompound1); + worldInfo = new WorldInfo(nbttagcompound1); + net.minecraftforge.fml.common.FMLCommonHandler.instance().handleWorldDataLoad(this, worldInfo, nbttagcompound); @@ -28,13 +28,13 @@ } + net.minecraftforge.fml.common.FMLCommonHandler.instance().confirmBackupLevelDatUse(this); - file1 = new File(this.field_75770_b, "level.dat_old"); + file1 = new File(this.worldDirectory, "level.dat_old"); if (file1.exists()) @@ -129,7 +138,13 @@ { - nbttagcompound = CompressedStreamTools.func_74796_a(new FileInputStream(file1)); - nbttagcompound1 = nbttagcompound.func_74775_l("Data"); + nbttagcompound = CompressedStreamTools.readCompressed(new FileInputStream(file1)); + nbttagcompound1 = nbttagcompound.getCompoundTag("Data"); - return new WorldInfo(nbttagcompound1); + worldInfo = new WorldInfo(nbttagcompound1); + net.minecraftforge.fml.common.FMLCommonHandler.instance().handleWorldDataLoad(this, worldInfo, nbttagcompound); @@ -48,57 +48,57 @@ { @@ -146,6 +161,8 @@ NBTTagCompound nbttagcompound2 = new NBTTagCompound(); - nbttagcompound2.func_74782_a("Data", nbttagcompound1); + nbttagcompound2.setTag("Data", nbttagcompound1); -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().handleWorldDataSave(this, p_75755_1_, nbttagcompound2); ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().handleWorldDataSave(this, worldInformation, nbttagcompound2); + try { - File file1 = new File(this.field_75770_b, "level.dat_new"); + File file1 = new File(this.worldDirectory, "level.dat_new"); @@ -184,6 +201,8 @@ NBTTagCompound nbttagcompound1 = new NBTTagCompound(); - nbttagcompound1.func_74782_a("Data", nbttagcompound); + nbttagcompound1.setTag("Data", nbttagcompound); -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().handleWorldDataSave(this, p_75761_1_, nbttagcompound1); ++ net.minecraftforge.fml.common.FMLCommonHandler.instance().handleWorldDataSave(this, worldInformation, nbttagcompound1); + try { - File file1 = new File(this.field_75770_b, "level.dat_new"); + File file1 = new File(this.worldDirectory, "level.dat_new"); @@ -232,6 +251,7 @@ } file1.renameTo(file2); -+ net.minecraftforge.event.ForgeEventFactory.firePlayerSavingEvent(p_75753_1_, this.field_75771_c, p_75753_1_.func_110124_au().toString()); ++ net.minecraftforge.event.ForgeEventFactory.firePlayerSavingEvent(p_75753_1_, this.playersDirectory, p_75753_1_.getUniqueID().toString()); } catch (Exception exception) { @@ -262,6 +282,7 @@ - p_75752_1_.func_70020_e(nbttagcompound); + p_75752_1_.readFromNBT(nbttagcompound); } -+ net.minecraftforge.event.ForgeEventFactory.firePlayerLoadingEvent(p_75752_1_, field_75771_c, p_75752_1_.func_110124_au().toString()); ++ net.minecraftforge.event.ForgeEventFactory.firePlayerLoadingEvent(p_75752_1_, playersDirectory, p_75752_1_.getUniqueID().toString()); return nbttagcompound; } @@ -301,4 +322,22 @@ { - return this.field_75767_f; + return this.saveDirectoryName; } + + public NBTTagCompound getPlayerNBT(net.minecraft.entity.player.EntityPlayerMP player) + { + try + { -+ File file1 = new File(this.field_75771_c, player.func_110124_au().toString() + ".dat"); ++ File file1 = new File(this.playersDirectory, player.getUniqueID().toString() + ".dat"); + + if (file1.exists() && file1.isFile()) + { -+ return CompressedStreamTools.func_74796_a(new FileInputStream(file1)); ++ return CompressedStreamTools.readCompressed(new FileInputStream(file1)); + } + } + catch (Exception exception) + { -+ field_151478_a.warn("Failed to load player data for " + player.func_70005_c_()); ++ logger.warn("Failed to load player data for " + player.getName()); + } + return null; + } diff --git a/patches/minecraft/net/minecraft/world/storage/WorldInfo.java.patch b/patches.mcp/minecraft/net/minecraft/world/storage/WorldInfo.java.patch similarity index 94% rename from patches/minecraft/net/minecraft/world/storage/WorldInfo.java.patch rename to patches.mcp/minecraft/net/minecraft/world/storage/WorldInfo.java.patch index b1d007002..a2901b7f0 100644 --- a/patches/minecraft/net/minecraft/world/storage/WorldInfo.java.patch +++ b/patches.mcp/minecraft/net/minecraft/world/storage/WorldInfo.java.patch @@ -1,8 +1,8 @@ --- ../src-base/minecraft/net/minecraft/world/storage/WorldInfo.java +++ ../src-work/minecraft/net/minecraft/world/storage/WorldInfo.java @@ -52,6 +52,7 @@ - private int field_176155_J; - private GameRules field_82577_x; + private int borderWarningTime; + private GameRules theGameRules; private static final String __OBFID = "CL_00000587"; + private java.util.Map additionalProperties; diff --git a/patches/minecraft/net/minecraft/block/BlockAir.java.patch b/patches/minecraft/net/minecraft/block/BlockAir.java.patch deleted file mode 100644 index 17ba5bdc7..000000000 --- a/patches/minecraft/net/minecraft/block/BlockAir.java.patch +++ /dev/null @@ -1,9 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockAir.java -+++ ../src-work/minecraft/net/minecraft/block/BlockAir.java -@@ -36,4 +36,6 @@ - } - - public void func_180653_a(World p_180653_1_, BlockPos p_180653_2_, IBlockState p_180653_3_, float p_180653_4_, int p_180653_5_) {} -+ -+ public boolean func_176200_f(World worldIn, BlockPos pos){ return true; } - } diff --git a/patches/minecraft/net/minecraft/block/BlockBush.java.patch b/patches/minecraft/net/minecraft/block/BlockBush.java.patch deleted file mode 100644 index fa04998cf..000000000 --- a/patches/minecraft/net/minecraft/block/BlockBush.java.patch +++ /dev/null @@ -1,66 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockBush.java -+++ ../src-work/minecraft/net/minecraft/block/BlockBush.java -@@ -12,7 +12,7 @@ - import net.minecraftforge.fml.relauncher.Side; - import net.minecraftforge.fml.relauncher.SideOnly; - --public class BlockBush extends Block -+public class BlockBush extends Block implements net.minecraftforge.common.IPlantable - { - private static final String __OBFID = "CL_00000208"; - -@@ -32,7 +32,7 @@ - - public boolean func_176196_c(World p_176196_1_, BlockPos p_176196_2_) - { -- return super.func_176196_c(p_176196_1_, p_176196_2_) && this.func_149854_a(p_176196_1_.func_180495_p(p_176196_2_.func_177977_b()).func_177230_c()); -+ return super.func_176196_c(p_176196_1_, p_176196_2_) && p_176196_1_.func_180495_p(p_176196_2_.func_177977_b()).func_177230_c().canSustainPlant(p_176196_1_, p_176196_2_.func_177977_b(), net.minecraft.util.EnumFacing.UP, this); - } - - protected boolean func_149854_a(Block p_149854_1_) -@@ -62,7 +62,10 @@ - - public boolean func_180671_f(World p_180671_1_, BlockPos p_180671_2_, IBlockState p_180671_3_) - { -- return this.func_149854_a(p_180671_1_.func_180495_p(p_180671_2_.func_177977_b()).func_177230_c()); -+ BlockPos down = p_180671_2_.func_177977_b(); -+ Block soil = p_180671_1_.func_180495_p(down).func_177230_c(); -+ if (p_180671_3_.func_177230_c() != this) return this.func_149854_a(soil); //Forge: This function is called during world gen and placement, before this block is set, so if we are not 'here' then assume it's the pre-check. -+ return soil.canSustainPlant(p_180671_1_, down, net.minecraft.util.EnumFacing.UP, this); - } - - public AxisAlignedBB func_180640_a(World p_180640_1_, BlockPos p_180640_2_, IBlockState p_180640_3_) -@@ -85,4 +88,33 @@ - { - return EnumWorldBlockLayer.CUTOUT; - } -+ -+ @Override -+ public net.minecraftforge.common.EnumPlantType getPlantType(net.minecraft.world.IBlockAccess world, BlockPos pos) -+ { -+ if (this == Blocks.field_150464_aj) return net.minecraftforge.common.EnumPlantType.Crop; -+ if (this == Blocks.field_150459_bM) return net.minecraftforge.common.EnumPlantType.Crop; -+ if (this == Blocks.field_150469_bN) return net.minecraftforge.common.EnumPlantType.Crop; -+ if (this == Blocks.field_150394_bc) return net.minecraftforge.common.EnumPlantType.Crop; -+ if (this == Blocks.field_150393_bb) return net.minecraftforge.common.EnumPlantType.Crop; -+ if (this == Blocks.field_150330_I) return net.minecraftforge.common.EnumPlantType.Desert; -+ if (this == Blocks.field_150392_bi) return net.minecraftforge.common.EnumPlantType.Water; -+ if (this == Blocks.field_150337_Q) return net.minecraftforge.common.EnumPlantType.Cave; -+ if (this == Blocks.field_150338_P) return net.minecraftforge.common.EnumPlantType.Cave; -+ if (this == Blocks.field_150388_bm) return net.minecraftforge.common.EnumPlantType.Nether; -+ if (this == Blocks.field_150345_g) return net.minecraftforge.common.EnumPlantType.Plains; -+ if (this == Blocks.field_150329_H) return net.minecraftforge.common.EnumPlantType.Plains; -+ if (this == Blocks.field_150398_cm) return net.minecraftforge.common.EnumPlantType.Plains; -+ if (this == Blocks.field_150328_O) return net.minecraftforge.common.EnumPlantType.Plains; -+ if (this == Blocks.field_150327_N) return net.minecraftforge.common.EnumPlantType.Plains; -+ return net.minecraftforge.common.EnumPlantType.Plains; -+ } -+ -+ @Override -+ public IBlockState getPlant(net.minecraft.world.IBlockAccess world, BlockPos pos) -+ { -+ IBlockState state = world.func_180495_p(pos); -+ if (state.func_177230_c() != this) return func_176223_P(); -+ return state; -+ } - } diff --git a/patches/minecraft/net/minecraft/block/BlockButton.java.patch b/patches/minecraft/net/minecraft/block/BlockButton.java.patch deleted file mode 100644 index 87fff1207..000000000 --- a/patches/minecraft/net/minecraft/block/BlockButton.java.patch +++ /dev/null @@ -1,46 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockButton.java -+++ ../src-work/minecraft/net/minecraft/block/BlockButton.java -@@ -18,6 +18,7 @@ - import net.minecraft.util.EnumFacing; - import net.minecraft.world.IBlockAccess; - import net.minecraft.world.World; -+import static net.minecraft.util.EnumFacing.*; - - public abstract class BlockButton extends Block - { -@@ -57,7 +58,7 @@ - - public boolean func_176198_a(World p_176198_1_, BlockPos p_176198_2_, EnumFacing p_176198_3_) - { -- return p_176198_1_.func_180495_p(p_176198_2_.func_177972_a(p_176198_3_.func_176734_d())).func_177230_c().func_149721_r(); -+ return p_176198_1_.isSideSolid(p_176198_2_.func_177972_a(p_176198_3_.func_176734_d()), p_176198_3_, true); - } - - public boolean func_176196_c(World p_176196_1_, BlockPos p_176196_2_) -@@ -69,7 +70,7 @@ - { - EnumFacing enumfacing = aenumfacing[j]; - -- if (p_176196_1_.func_180495_p(p_176196_2_.func_177972_a(enumfacing)).func_177230_c().func_149721_r()) -+ if (p_176196_1_.isSideSolid(p_176196_2_.func_177972_a(enumfacing), enumfacing.func_176734_d(), true)) - { - return true; - } -@@ -80,7 +81,7 @@ - - public IBlockState func_180642_a(World p_180642_1_, BlockPos p_180642_2_, EnumFacing p_180642_3_, float p_180642_4_, float p_180642_5_, float p_180642_6_, int p_180642_7_, EntityLivingBase p_180642_8_) - { -- return p_180642_1_.func_180495_p(p_180642_2_.func_177972_a(p_180642_3_.func_176734_d())).func_177230_c().func_149721_r() ? this.func_176223_P().func_177226_a(field_176585_a, p_180642_3_).func_177226_a(field_176584_b, Boolean.valueOf(false)) : this.func_176223_P().func_177226_a(field_176585_a, EnumFacing.DOWN).func_177226_a(field_176584_b, Boolean.valueOf(false)); -+ return p_180642_1_.isSideSolid(p_180642_2_.func_177972_a(p_180642_3_.func_176734_d()), p_180642_3_, true) ? this.func_176223_P().func_177226_a(field_176585_a, p_180642_3_).func_177226_a(field_176584_b, Boolean.valueOf(false)) : this.func_176223_P().func_177226_a(field_176585_a, EnumFacing.DOWN).func_177226_a(field_176584_b, Boolean.valueOf(false)); - } - - public void func_176204_a(World p_176204_1_, BlockPos p_176204_2_, IBlockState p_176204_3_, Block p_176204_4_) -@@ -89,7 +90,7 @@ - { - EnumFacing enumfacing = (EnumFacing)p_176204_3_.func_177229_b(field_176585_a); - -- if (!p_176204_1_.func_180495_p(p_176204_2_.func_177972_a(enumfacing.func_176734_d())).func_177230_c().func_149721_r()) -+ if (!p_176204_1_.isSideSolid(p_176204_2_.func_177972_a(enumfacing.func_176734_d()), enumfacing, true)) - { - this.func_176226_b(p_176204_1_, p_176204_2_, p_176204_3_, 0); - p_176204_1_.func_175698_g(p_176204_2_); diff --git a/patches/minecraft/net/minecraft/block/BlockChest.java.patch b/patches/minecraft/net/minecraft/block/BlockChest.java.patch deleted file mode 100644 index 1ab56e42b..000000000 --- a/patches/minecraft/net/minecraft/block/BlockChest.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockChest.java -+++ ../src-work/minecraft/net/minecraft/block/BlockChest.java -@@ -531,7 +531,7 @@ - - private boolean func_176456_n(World p_176456_1_, BlockPos p_176456_2_) - { -- return p_176456_1_.func_180495_p(p_176456_2_.func_177984_a()).func_177230_c().func_149721_r(); -+ return p_176456_1_.isSideSolid(p_176456_2_.func_177984_a(), EnumFacing.DOWN, false); - } - - private boolean func_176453_o(World p_176453_1_, BlockPos p_176453_2_) diff --git a/patches/minecraft/net/minecraft/block/BlockCocoa.java.patch b/patches/minecraft/net/minecraft/block/BlockCocoa.java.patch deleted file mode 100644 index cffac2037..000000000 --- a/patches/minecraft/net/minecraft/block/BlockCocoa.java.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockCocoa.java -+++ ../src-work/minecraft/net/minecraft/block/BlockCocoa.java -@@ -137,7 +137,14 @@ - - public void func_180653_a(World p_180653_1_, BlockPos p_180653_2_, IBlockState p_180653_3_, float p_180653_4_, int p_180653_5_) - { -- int j = ((Integer)p_180653_3_.func_177229_b(field_176501_a)).intValue(); -+ super.func_180653_a(p_180653_1_, p_180653_2_, p_180653_3_, p_180653_4_, p_180653_5_); -+ } -+ -+ @Override -+ public java.util.List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) -+ { -+ java.util.List dropped = super.getDrops(world, pos, state, fortune); -+ int j = ((Integer)state.func_177229_b(field_176501_a)).intValue(); - byte b0 = 1; - - if (j >= 2) -@@ -147,8 +154,9 @@ - - for (int k = 0; k < b0; ++k) - { -- func_180635_a(p_180653_1_, p_180653_2_, new ItemStack(Items.field_151100_aR, 1, EnumDyeColor.BROWN.func_176767_b())); -+ dropped.add(new ItemStack(Items.field_151100_aR, 1, EnumDyeColor.BROWN.func_176767_b())); - } -+ return dropped; - } - - @SideOnly(Side.CLIENT) diff --git a/patches/minecraft/net/minecraft/block/BlockCrops.java.patch b/patches/minecraft/net/minecraft/block/BlockCrops.java.patch deleted file mode 100644 index a9d87a8ea..000000000 --- a/patches/minecraft/net/minecraft/block/BlockCrops.java.patch +++ /dev/null @@ -1,77 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockCrops.java -+++ ../src-work/minecraft/net/minecraft/block/BlockCrops.java -@@ -82,11 +82,11 @@ - float f1 = 0.0F; - IBlockState iblockstate = p_180672_1_.func_180495_p(blockpos1.func_177982_a(i, 0, j)); - -- if (iblockstate.func_177230_c() == Blocks.field_150458_ak) -+ if (iblockstate.func_177230_c().canSustainPlant(p_180672_1_, blockpos1.func_177982_a(i, 0, j), net.minecraft.util.EnumFacing.UP, (net.minecraftforge.common.IPlantable)p_180672_0_)) - { - f1 = 1.0F; - -- if (((Integer)iblockstate.func_177229_b(BlockFarmland.field_176531_a)).intValue() > 0) -+ if (iblockstate.func_177230_c().isFertile(p_180672_1_, blockpos1.func_177982_a(i, 0, j))) - { - f1 = 3.0F; - } -@@ -127,7 +127,7 @@ - - public boolean func_180671_f(World p_180671_1_, BlockPos p_180671_2_, IBlockState p_180671_3_) - { -- return (p_180671_1_.func_175699_k(p_180671_2_) >= 8 || p_180671_1_.func_175678_i(p_180671_2_)) && this.func_149854_a(p_180671_1_.func_180495_p(p_180671_2_.func_177977_b()).func_177230_c()); -+ return (p_180671_1_.func_175699_k(p_180671_2_) >= 8 || p_180671_1_.func_175678_i(p_180671_2_)) && p_180671_1_.func_180495_p(p_180671_2_.func_177977_b()).func_177230_c().canSustainPlant(p_180671_1_, p_180671_2_.func_177977_b(), net.minecraft.util.EnumFacing.UP, this); - } - - protected Item func_149866_i() -@@ -143,24 +143,6 @@ - public void func_180653_a(World p_180653_1_, BlockPos p_180653_2_, IBlockState p_180653_3_, float p_180653_4_, int p_180653_5_) - { - super.func_180653_a(p_180653_1_, p_180653_2_, p_180653_3_, p_180653_4_, 0); -- -- if (!p_180653_1_.field_72995_K) -- { -- int j = ((Integer)p_180653_3_.func_177229_b(field_176488_a)).intValue(); -- -- if (j >= 7) -- { -- int k = 3 + p_180653_5_; -- -- for (int l = 0; l < k; ++l) -- { -- if (p_180653_1_.field_73012_v.nextInt(15) <= j) -- { -- func_180635_a(p_180653_1_, p_180653_2_, new ItemStack(this.func_149866_i(), 1, 0)); -- } -- } -- } -- } - } - - public Item func_180660_a(IBlockState p_180660_1_, Random p_180660_2_, int p_180660_3_) -@@ -203,4 +185,26 @@ - { - return new BlockState(this, new IProperty[] {field_176488_a}); - } -+ -+ @Override -+ public java.util.List getDrops(net.minecraft.world.IBlockAccess world, BlockPos pos, IBlockState state, int fortune) -+ { -+ java.util.List ret = super.getDrops(world, pos, state, fortune); -+ int age = ((Integer)state.func_177229_b(field_176488_a)).intValue(); -+ Random rand = world instanceof World ? ((World)world).field_73012_v : new Random(); -+ -+ if (age >= 7) -+ { -+ int k = 3 + fortune; -+ -+ for (int i = 0; i < 3 + fortune; ++i) -+ { -+ if (rand.nextInt(15) <= age) -+ { -+ ret.add(new ItemStack(this.func_149866_i(), 1, 0)); -+ } -+ } -+ } -+ return ret; -+ } - } diff --git a/patches/minecraft/net/minecraft/block/BlockDoor.java.patch b/patches/minecraft/net/minecraft/block/BlockDoor.java.patch deleted file mode 100644 index c30049e6b..000000000 --- a/patches/minecraft/net/minecraft/block/BlockDoor.java.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockDoor.java -+++ ../src-work/minecraft/net/minecraft/block/BlockDoor.java -@@ -149,7 +149,7 @@ - { - if (this.field_149764_J == Material.field_151573_f) - { -- return true; -+ return false; //Allow items to interact with the door - } - else - { -@@ -267,7 +267,7 @@ - - public boolean func_176196_c(World p_176196_1_, BlockPos p_176196_2_) - { -- return p_176196_2_.func_177956_o() >= 255 ? false : World.func_175683_a(p_176196_1_, p_176196_2_.func_177977_b()) && super.func_176196_c(p_176196_1_, p_176196_2_) && super.func_176196_c(p_176196_1_, p_176196_2_.func_177984_a()); -+ return p_176196_2_.func_177956_o() >= p_176196_1_.func_72800_K() - 1 ? false : World.func_175683_a(p_176196_1_, p_176196_2_.func_177977_b()) && super.func_176196_c(p_176196_1_, p_176196_2_) && super.func_176196_c(p_176196_1_, p_176196_2_.func_177984_a()); - } - - public int func_149656_h() diff --git a/patches/minecraft/net/minecraft/block/BlockDoublePlant.java.patch b/patches/minecraft/net/minecraft/block/BlockDoublePlant.java.patch deleted file mode 100644 index 8fe63ab74..000000000 --- a/patches/minecraft/net/minecraft/block/BlockDoublePlant.java.patch +++ /dev/null @@ -1,89 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockDoublePlant.java -+++ ../src-work/minecraft/net/minecraft/block/BlockDoublePlant.java -@@ -24,7 +24,7 @@ - import net.minecraftforge.fml.relauncher.Side; - import net.minecraftforge.fml.relauncher.SideOnly; - --public class BlockDoublePlant extends BlockBush implements IGrowable -+public class BlockDoublePlant extends BlockBush implements IGrowable, net.minecraftforge.common.IShearable - { - public static final PropertyEnum field_176493_a = PropertyEnum.func_177709_a("variant", BlockDoublePlant.EnumPlantType.class); - public static final PropertyEnum field_176492_b = PropertyEnum.func_177709_a("half", BlockDoublePlant.EnumBlockHalf.class); -@@ -89,6 +89,8 @@ - Object object = flag ? this : p_176475_1_.func_180495_p(blockpos1).func_177230_c(); - Object object1 = flag ? p_176475_1_.func_180495_p(blockpos2).func_177230_c() : this; - -+ if (!flag) this.func_176226_b(p_176475_1_, p_176475_2_, p_176475_3_, 0); //Forge move above the setting to air. -+ - if (object == this) - { - p_176475_1_.func_180501_a(blockpos1, Blocks.field_150350_a.func_176223_P(), 3); -@@ -97,17 +99,13 @@ - if (object1 == this) - { - p_176475_1_.func_180501_a(blockpos2, Blocks.field_150350_a.func_176223_P(), 3); -- -- if (!flag) -- { -- this.func_176226_b(p_176475_1_, blockpos2, p_176475_3_, 0); -- } - } - } - } - - public boolean func_180671_f(World p_180671_1_, BlockPos p_180671_2_, IBlockState p_180671_3_) - { -+ if (p_180671_3_.func_177230_c() != this) return super.func_180671_f(p_180671_1_, p_180671_2_, p_180671_3_); //Forge: This function is called during world gen and placement, before this block is set, so if we are not 'here' then assume it's the pre-check. - if (p_180671_3_.func_177229_b(field_176492_b) == BlockDoublePlant.EnumBlockHalf.UPPER) - { - return p_180671_1_.func_180495_p(p_180671_2_.func_177977_b()).func_177230_c() == this; -@@ -157,7 +155,6 @@ - - public void func_180657_a(World p_180657_1_, EntityPlayer p_180657_2_, BlockPos p_180657_3_, IBlockState p_180657_4_, TileEntity p_180657_5_) - { -- if (p_180657_1_.field_72995_K || p_180657_2_.func_71045_bC() == null || p_180657_2_.func_71045_bC().func_77973_b() != Items.field_151097_aZ || p_180657_4_.func_177229_b(field_176492_b) != BlockDoublePlant.EnumBlockHalf.LOWER || !this.func_176489_b(p_180657_1_, p_180657_3_, p_180657_4_, p_180657_2_)) - { - super.func_180657_a(p_180657_1_, p_180657_2_, p_180657_3_, p_180657_4_, p_180657_5_); - } -@@ -220,8 +217,6 @@ - else - { - p_176489_4_.func_71029_a(StatList.field_75934_C[Block.func_149682_b(this)]); -- int i = (enumplanttype == BlockDoublePlant.EnumPlantType.GRASS ? BlockTallGrass.EnumType.GRASS : BlockTallGrass.EnumType.FERN).func_177044_a(); -- func_180635_a(p_176489_1_, p_176489_2_, new ItemStack(Blocks.field_150329_H, 2, i)); - return true; - } - } -@@ -296,6 +291,32 @@ - return Block.EnumOffsetType.XZ; - } - -+ @Override -+ public boolean isShearable(ItemStack item, IBlockAccess world, BlockPos pos) -+ { -+ IBlockState state = world.func_180495_p(pos); -+ EnumPlantType type = (EnumPlantType)state.func_177229_b(field_176493_a); -+ return state.func_177229_b(field_176492_b) == EnumBlockHalf.LOWER && (type == EnumPlantType.FERN || type == EnumPlantType.GRASS); -+ } -+ @Override -+ public java.util.List onSheared(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) -+ { -+ java.util.List ret = new java.util.ArrayList(); -+ EnumPlantType type = (EnumPlantType)world.func_180495_p(pos).func_177229_b(field_176493_a); -+ if (type == EnumPlantType.FERN) ret.add(new ItemStack(Blocks.field_150329_H, 2, BlockTallGrass.EnumType.FERN.func_177044_a())); -+ if (type == EnumPlantType.GRASS) ret.add(new ItemStack(Blocks.field_150329_H, 2, BlockTallGrass.EnumType.GRASS.func_177044_a())); -+ return ret; -+ } -+ @Override -+ public boolean removedByPlayer(World world, BlockPos pos, EntityPlayer player, boolean willHarvest) -+ { -+ //Forge: Break both parts on the client to prevent the top part flickering as default type for a few frames. -+ IBlockState state = world.func_180495_p(pos); -+ if (state.func_177230_c() == this && state.func_177229_b(field_176492_b) == EnumBlockHalf.LOWER && world.func_180495_p(pos.func_177984_a()).func_177230_c() == this) -+ world.func_175698_g(pos.func_177984_a()); -+ return world.func_175698_g(pos); -+ } -+ - static enum EnumBlockHalf implements IStringSerializable - { - UPPER, diff --git a/patches/minecraft/net/minecraft/block/BlockFalling.java.patch b/patches/minecraft/net/minecraft/block/BlockFalling.java.patch deleted file mode 100644 index c7dd1fa25..000000000 --- a/patches/minecraft/net/minecraft/block/BlockFalling.java.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockFalling.java -+++ ../src-work/minecraft/net/minecraft/block/BlockFalling.java -@@ -85,6 +85,7 @@ - - public static boolean func_180685_d(World p_180685_0_, BlockPos p_180685_1_) - { -+ if (p_180685_0_.func_175623_d(p_180685_1_)) return true; - Block block = p_180685_0_.func_180495_p(p_180685_1_).func_177230_c(); - Material material = block.field_149764_J; - return block == Blocks.field_150480_ab || material == Material.field_151579_a || material == Material.field_151586_h || material == Material.field_151587_i; diff --git a/patches/minecraft/net/minecraft/block/BlockFarmland.java.patch b/patches/minecraft/net/minecraft/block/BlockFarmland.java.patch deleted file mode 100644 index 7547658d3..000000000 --- a/patches/minecraft/net/minecraft/block/BlockFarmland.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockFarmland.java -+++ ../src-work/minecraft/net/minecraft/block/BlockFarmland.java -@@ -89,7 +89,7 @@ - private boolean func_176529_d(World p_176529_1_, BlockPos p_176529_2_) - { - Block block = p_176529_1_.func_180495_p(p_176529_2_.func_177984_a()).func_177230_c(); -- return block instanceof BlockCrops || block instanceof BlockStem; -+ return block instanceof net.minecraftforge.common.IPlantable && canSustainPlant(p_176529_1_, p_176529_2_, net.minecraft.util.EnumFacing.UP, (net.minecraftforge.common.IPlantable)block); - } - - private boolean func_176530_e(World p_176530_1_, BlockPos p_176530_2_) diff --git a/patches/minecraft/net/minecraft/block/BlockFire.java.patch b/patches/minecraft/net/minecraft/block/BlockFire.java.patch deleted file mode 100644 index 989c8cb5b..000000000 --- a/patches/minecraft/net/minecraft/block/BlockFire.java.patch +++ /dev/null @@ -1,211 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockFire.java -+++ ../src-work/minecraft/net/minecraft/block/BlockFire.java -@@ -42,18 +42,24 @@ - int j = p_176221_3_.func_177956_o(); - int k = p_176221_3_.func_177952_p(); - -- if (!World.func_175683_a(p_176221_2_, p_176221_3_.func_177977_b()) && !Blocks.field_150480_ab.func_176535_e(p_176221_2_, p_176221_3_.func_177977_b())) -+ if (!World.func_175683_a(p_176221_2_, p_176221_3_.func_177977_b()) && !Blocks.field_150480_ab.canCatchFire(p_176221_2_, p_176221_3_.func_177977_b(), EnumFacing.UP)) - { - boolean flag = (i + j + k & 1) == 1; - boolean flag1 = (i / 2 + j / 2 + k / 2 & 1) == 1; - int l = 0; - -- if (this.func_176535_e(p_176221_2_, p_176221_3_.func_177984_a())) -+ if (this.canCatchFire(p_176221_2_, p_176221_3_.func_177984_a(), EnumFacing.DOWN)) - { - l = flag ? 1 : 2; - } - -- return p_176221_1_.func_177226_a(field_176545_N, Boolean.valueOf(this.func_176535_e(p_176221_2_, p_176221_3_.func_177978_c()))).func_177226_a(field_176546_O, Boolean.valueOf(this.func_176535_e(p_176221_2_, p_176221_3_.func_177974_f()))).func_177226_a(field_176541_P, Boolean.valueOf(this.func_176535_e(p_176221_2_, p_176221_3_.func_177968_d()))).func_177226_a(field_176539_Q, Boolean.valueOf(this.func_176535_e(p_176221_2_, p_176221_3_.func_177976_e()))).func_177226_a(field_176542_R, Integer.valueOf(l)).func_177226_a(field_176540_b, Boolean.valueOf(flag1)).func_177226_a(field_176544_M, Boolean.valueOf(flag)); -+ return p_176221_1_.func_177226_a(field_176545_N, Boolean.valueOf(this.canCatchFire(p_176221_2_, p_176221_3_.func_177978_c(), EnumFacing.SOUTH))) -+ .func_177226_a(field_176546_O, Boolean.valueOf(this.canCatchFire(p_176221_2_, p_176221_3_.func_177974_f(), EnumFacing.EAST ))) -+ .func_177226_a(field_176541_P, Boolean.valueOf(this.canCatchFire(p_176221_2_, p_176221_3_.func_177968_d(), EnumFacing.NORTH))) -+ .func_177226_a(field_176539_Q, Boolean.valueOf(this.canCatchFire(p_176221_2_, p_176221_3_.func_177976_e(), EnumFacing.EAST ))) -+ .func_177226_a(field_176542_R, Integer.valueOf(l)) -+ .func_177226_a(field_176540_b, Boolean.valueOf(flag1)) -+ .func_177226_a(field_176544_M, Boolean.valueOf(flag)); - } - else - { -@@ -109,6 +115,7 @@ - - public void func_180686_a(Block p_180686_1_, int p_180686_2_, int p_180686_3_) - { -+ if (p_180686_1_ == Blocks.field_150350_a) throw new IllegalArgumentException("Tried to set air on fire... This is bad."); - this.field_149849_a.put(p_180686_1_, Integer.valueOf(p_180686_2_)); - this.field_149848_b.put(p_180686_1_, Integer.valueOf(p_180686_3_)); - } -@@ -148,13 +155,8 @@ - } - - Block block = p_180650_1_.func_180495_p(p_180650_2_.func_177977_b()).func_177230_c(); -- boolean flag = block == Blocks.field_150424_aL; -+ boolean flag = block.isFireSource(p_180650_1_, p_180650_2_.func_177977_b(), EnumFacing.UP); - -- if (p_180650_1_.field_73011_w instanceof WorldProviderEnd && block == Blocks.field_150357_h) -- { -- flag = true; -- } -- - if (!flag && p_180650_1_.func_72896_J() && this.func_176537_d(p_180650_1_, p_180650_2_)) - { - p_180650_1_.func_175698_g(p_180650_2_); -@@ -183,7 +185,7 @@ - return; - } - -- if (!this.func_176535_e(p_180650_1_, p_180650_2_.func_177977_b()) && i == 15 && p_180650_4_.nextInt(4) == 0) -+ if (!this.canCatchFire(p_180650_1_, p_180650_2_.func_177977_b(), EnumFacing.UP) && i == 15 && p_180650_4_.nextInt(4) == 0) - { - p_180650_1_.func_175698_g(p_180650_2_); - return; -@@ -198,12 +200,12 @@ - b0 = -50; - } - -- this.func_176536_a(p_180650_1_, p_180650_2_.func_177974_f(), 300 + b0, p_180650_4_, i); -- this.func_176536_a(p_180650_1_, p_180650_2_.func_177976_e(), 300 + b0, p_180650_4_, i); -- this.func_176536_a(p_180650_1_, p_180650_2_.func_177977_b(), 250 + b0, p_180650_4_, i); -- this.func_176536_a(p_180650_1_, p_180650_2_.func_177984_a(), 250 + b0, p_180650_4_, i); -- this.func_176536_a(p_180650_1_, p_180650_2_.func_177978_c(), 300 + b0, p_180650_4_, i); -- this.func_176536_a(p_180650_1_, p_180650_2_.func_177968_d(), 300 + b0, p_180650_4_, i); -+ this.tryCatchFire(p_180650_1_, p_180650_2_.func_177974_f(), 300 + b0, p_180650_4_, i, EnumFacing.WEST); -+ this.tryCatchFire(p_180650_1_, p_180650_2_.func_177976_e(), 300 + b0, p_180650_4_, i, EnumFacing.EAST); -+ this.tryCatchFire(p_180650_1_, p_180650_2_.func_177977_b(), 250 + b0, p_180650_4_, i, EnumFacing.UP); -+ this.tryCatchFire(p_180650_1_, p_180650_2_.func_177984_a(), 250 + b0, p_180650_4_, i, EnumFacing.DOWN); -+ this.tryCatchFire(p_180650_1_, p_180650_2_.func_177978_c(), 300 + b0, p_180650_4_, i, EnumFacing.SOUTH); -+ this.tryCatchFire(p_180650_1_, p_180650_2_.func_177968_d(), 300 + b0, p_180650_4_, i, EnumFacing.NORTH); - - for (int j = -1; j <= 1; ++j) - { -@@ -262,22 +264,30 @@ - return false; - } - -+ @Deprecated // Use Block.getFlammability - public int func_176532_c(Block p_176532_1_) - { - Integer integer = (Integer)this.field_149848_b.get(p_176532_1_); - return integer == null ? 0 : integer.intValue(); - } - -+ @Deprecated // Use Block.getFlammability - public int func_176534_d(Block p_176534_1_) - { - Integer integer = (Integer)this.field_149849_a.get(p_176534_1_); - return integer == null ? 0 : integer.intValue(); - } - -+ @Deprecated // Use tryCatchFire with face below - private void func_176536_a(World p_176536_1_, BlockPos p_176536_2_, int p_176536_3_, Random p_176536_4_, int p_176536_5_) - { -- int k = this.func_176532_c(p_176536_1_.func_180495_p(p_176536_2_).func_177230_c()); -+ this.tryCatchFire(p_176536_1_, p_176536_2_, p_176536_3_, p_176536_4_, p_176536_5_, EnumFacing.UP); -+ } - -+ private void tryCatchFire(World p_176536_1_, BlockPos p_176536_2_, int p_176536_3_, Random p_176536_4_, int p_176536_5_, EnumFacing face) -+ { -+ int k = p_176536_1_.func_180495_p(p_176536_2_).func_177230_c().getFlammability(p_176536_1_, p_176536_2_, face); -+ - if (p_176536_4_.nextInt(p_176536_3_) < k) - { - IBlockState iblockstate = p_176536_1_.func_180495_p(p_176536_2_); -@@ -314,7 +324,7 @@ - { - EnumFacing enumfacing = aenumfacing[j]; - -- if (this.func_176535_e(p_176533_1_, p_176533_2_.func_177972_a(enumfacing))) -+ if (this.canCatchFire(p_176533_1_, p_176533_2_.func_177972_a(enumfacing), enumfacing.func_176734_d())) - { - return true; - } -@@ -338,7 +348,7 @@ - for (int k = 0; k < j; ++k) - { - EnumFacing enumfacing = aenumfacing[k]; -- i = Math.max(this.func_176534_d(p_176538_1_.func_180495_p(p_176538_2_.func_177972_a(enumfacing)).func_177230_c()), i); -+ i = Math.max(p_176538_1_.func_180495_p(p_176538_2_.func_177972_a(enumfacing)).func_177230_c().getFlammability(p_176538_1_, p_176538_2_.func_177972_a(enumfacing), enumfacing.func_176734_d()), i); - } - - return i; -@@ -350,9 +360,10 @@ - return false; - } - -+ @Deprecated // Use canCatchFire with face sensitive version below - public boolean func_176535_e(IBlockAccess p_176535_1_, BlockPos p_176535_2_) - { -- return this.func_176534_d(p_176535_1_.func_180495_p(p_176535_2_).func_177230_c()) > 0; -+ return canCatchFire(p_176535_1_, p_176535_2_, EnumFacing.UP); - } - - public boolean func_176196_c(World p_176196_1_, BlockPos p_176196_2_) -@@ -396,9 +407,9 @@ - double d1; - double d2; - -- if (!World.func_175683_a(p_180655_1_, p_180655_2_.func_177977_b()) && !Blocks.field_150480_ab.func_176535_e(p_180655_1_, p_180655_2_.func_177977_b())) -+ if (!World.func_175683_a(p_180655_1_, p_180655_2_.func_177977_b()) && !Blocks.field_150480_ab.canCatchFire(p_180655_1_, p_180655_2_.func_177977_b(), EnumFacing.UP)) - { -- if (Blocks.field_150480_ab.func_176535_e(p_180655_1_, p_180655_2_.func_177976_e())) -+ if (Blocks.field_150480_ab.canCatchFire(p_180655_1_, p_180655_2_.func_177976_e(), EnumFacing.EAST)) - { - for (i = 0; i < 2; ++i) - { -@@ -409,7 +420,7 @@ - } - } - -- if (Blocks.field_150480_ab.func_176535_e(p_180655_1_, p_180655_2_.func_177974_f())) -+ if (Blocks.field_150480_ab.canCatchFire(p_180655_1_, p_180655_2_.func_177974_f(), EnumFacing.WEST)) - { - for (i = 0; i < 2; ++i) - { -@@ -420,7 +431,7 @@ - } - } - -- if (Blocks.field_150480_ab.func_176535_e(p_180655_1_, p_180655_2_.func_177978_c())) -+ if (Blocks.field_150480_ab.canCatchFire(p_180655_1_, p_180655_2_.func_177978_c(), EnumFacing.SOUTH)) - { - for (i = 0; i < 2; ++i) - { -@@ -431,7 +442,7 @@ - } - } - -- if (Blocks.field_150480_ab.func_176535_e(p_180655_1_, p_180655_2_.func_177968_d())) -+ if (Blocks.field_150480_ab.canCatchFire(p_180655_1_, p_180655_2_.func_177968_d(), EnumFacing.NORTH)) - { - for (i = 0; i < 2; ++i) - { -@@ -442,7 +453,7 @@ - } - } - -- if (Blocks.field_150480_ab.func_176535_e(p_180655_1_, p_180655_2_.func_177984_a())) -+ if (Blocks.field_150480_ab.canCatchFire(p_180655_1_, p_180655_2_.func_177984_a(), EnumFacing.DOWN)) - { - for (i = 0; i < 2; ++i) - { -@@ -490,4 +501,19 @@ - { - return new BlockState(this, new IProperty[] {field_176543_a, field_176545_N, field_176546_O, field_176541_P, field_176539_Q, field_176542_R, field_176540_b, field_176544_M}); - } -+ -+ /*================================= Forge Start ======================================*/ -+ /** -+ * Side sensitive version that calls the block function. -+ * -+ * @param world The current world -+ * @param pos Block position -+ * @param face The side the fire is coming from -+ * @return True if the face can catch fire. -+ */ -+ public boolean canCatchFire(IBlockAccess world, BlockPos pos, EnumFacing face) -+ { -+ return world.func_180495_p(pos).func_177230_c().isFlammable(world, pos, face); -+ } -+ /*================================= Forge Start ======================================*/ - } diff --git a/patches/minecraft/net/minecraft/block/BlockGrass.java.patch b/patches/minecraft/net/minecraft/block/BlockGrass.java.patch deleted file mode 100644 index dec4d1514..000000000 --- a/patches/minecraft/net/minecraft/block/BlockGrass.java.patch +++ /dev/null @@ -1,41 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockGrass.java -+++ ../src-work/minecraft/net/minecraft/block/BlockGrass.java -@@ -59,7 +59,7 @@ - { - if (!p_180650_1_.field_72995_K) - { -- if (p_180650_1_.func_175671_l(p_180650_2_.func_177984_a()) < 4 && p_180650_1_.func_180495_p(p_180650_2_.func_177984_a()).func_177230_c().func_149717_k() > 2) -+ if (p_180650_1_.func_175671_l(p_180650_2_.func_177984_a()) < 4 && p_180650_1_.func_180495_p(p_180650_2_.func_177984_a()).func_177230_c().getLightOpacity(p_180650_1_, p_180650_2_.func_177984_a()) > 2) - { - p_180650_1_.func_175656_a(p_180650_2_, Blocks.field_150346_d.func_176223_P()); - } -@@ -73,7 +73,7 @@ - Block block = p_180650_1_.func_180495_p(blockpos1.func_177984_a()).func_177230_c(); - IBlockState iblockstate1 = p_180650_1_.func_180495_p(blockpos1); - -- if (iblockstate1.func_177230_c() == Blocks.field_150346_d && iblockstate1.func_177229_b(BlockDirt.field_176386_a) == BlockDirt.DirtType.DIRT && p_180650_1_.func_175671_l(blockpos1.func_177984_a()) >= 4 && block.func_149717_k() <= 2) -+ if (iblockstate1.func_177230_c() == Blocks.field_150346_d && iblockstate1.func_177229_b(BlockDirt.field_176386_a) == BlockDirt.DirtType.DIRT && p_180650_1_.func_175671_l(blockpos1.func_177984_a()) >= 4 && block.getLightOpacity(p_180650_1_, blockpos1.func_177984_a()) <= 2) - { - p_180650_1_.func_175656_a(blockpos1, Blocks.field_150349_c.func_176223_P()); - } -@@ -120,18 +120,11 @@ - continue; - } - } -- else if (p_176474_1_.func_180495_p(blockpos2).func_177230_c().field_149764_J == Material.field_151579_a) -+ else if (p_176474_1_.func_175623_d(blockpos2)) - { - if (p_176474_2_.nextInt(8) == 0) - { -- BlockFlower.EnumFlowerType enumflowertype = p_176474_1_.func_180494_b(blockpos2).func_180623_a(p_176474_2_, blockpos2); -- BlockFlower blockflower = enumflowertype.func_176964_a().func_180346_a(); -- IBlockState iblockstate1 = blockflower.func_176223_P().func_177226_a(blockflower.func_176494_l(), enumflowertype); -- -- if (blockflower.func_180671_f(p_176474_1_, blockpos2, iblockstate1)) -- { -- p_176474_1_.func_180501_a(blockpos2, iblockstate1, 3); -- } -+ p_176474_1_.func_180494_b(blockpos2).plantFlower(p_176474_1_, p_176474_2_, blockpos2); - } - else - { diff --git a/patches/minecraft/net/minecraft/block/BlockIce.java.patch b/patches/minecraft/net/minecraft/block/BlockIce.java.patch deleted file mode 100644 index b4f3090b0..000000000 --- a/patches/minecraft/net/minecraft/block/BlockIce.java.patch +++ /dev/null @@ -1,35 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockIce.java -+++ ../src-work/minecraft/net/minecraft/block/BlockIce.java -@@ -40,14 +40,17 @@ - p_180657_2_.func_71029_a(StatList.field_75934_C[Block.func_149682_b(this)]); - p_180657_2_.func_71020_j(0.025F); - -- if (this.func_149700_E() && EnchantmentHelper.func_77502_d(p_180657_2_)) -+ if (this.canSilkHarvest(p_180657_1_, p_180657_3_, p_180657_1_.func_180495_p(p_180657_3_), p_180657_2_) && EnchantmentHelper.func_77502_d(p_180657_2_)) - { -+ java.util.List items = new java.util.ArrayList(); - ItemStack itemstack = this.func_180643_i(p_180657_4_); - -- if (itemstack != null) -- { -- func_180635_a(p_180657_1_, p_180657_3_, itemstack); -- } -+ if (itemstack != null) items.add(itemstack); -+ -+ net.minecraftforge.event.ForgeEventFactory.fireBlockHarvesting(items, p_180657_1_, p_180657_3_, p_180657_1_.func_180495_p(p_180657_3_), 0, 1.0f, true, p_180657_2_); -+ -+ for (ItemStack is : items) -+ func_180635_a(p_180657_1_, p_180657_3_, is); - } - else - { -@@ -58,7 +61,9 @@ - } - - int i = EnchantmentHelper.func_77517_e(p_180657_2_); -+ harvesters.set(p_180657_2_); - this.func_176226_b(p_180657_1_, p_180657_3_, p_180657_4_, i); -+ harvesters.set(null); - Material material = p_180657_1_.func_180495_p(p_180657_3_.func_177977_b()).func_177230_c().func_149688_o(); - - if (material.func_76230_c() || material.func_76224_d()) diff --git a/patches/minecraft/net/minecraft/block/BlockLadder.java.patch b/patches/minecraft/net/minecraft/block/BlockLadder.java.patch deleted file mode 100644 index b72f616a4..000000000 --- a/patches/minecraft/net/minecraft/block/BlockLadder.java.patch +++ /dev/null @@ -1,32 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockLadder.java -+++ ../src-work/minecraft/net/minecraft/block/BlockLadder.java -@@ -80,7 +80,10 @@ - - public boolean func_176196_c(World p_176196_1_, BlockPos p_176196_2_) - { -- return p_176196_1_.func_180495_p(p_176196_2_.func_177976_e()).func_177230_c().func_149721_r() ? true : (p_176196_1_.func_180495_p(p_176196_2_.func_177974_f()).func_177230_c().func_149721_r() ? true : (p_176196_1_.func_180495_p(p_176196_2_.func_177978_c()).func_177230_c().func_149721_r() ? true : p_176196_1_.func_180495_p(p_176196_2_.func_177968_d()).func_177230_c().func_149721_r())); -+ return p_176196_1_.isSideSolid(p_176196_2_.func_177976_e(), EnumFacing.EAST, true) || -+ p_176196_1_.isSideSolid(p_176196_2_.func_177974_f(), EnumFacing.WEST, true) || -+ p_176196_1_.isSideSolid(p_176196_2_.func_177978_c(), EnumFacing.SOUTH, true) || -+ p_176196_1_.isSideSolid(p_176196_2_.func_177968_d(), EnumFacing.NORTH, true); - } - - public IBlockState func_180642_a(World p_180642_1_, BlockPos p_180642_2_, EnumFacing p_180642_3_, float p_180642_4_, float p_180642_5_, float p_180642_6_, int p_180642_7_, EntityLivingBase p_180642_8_) -@@ -124,7 +127,7 @@ - - protected boolean func_176381_b(World p_176381_1_, BlockPos p_176381_2_, EnumFacing p_176381_3_) - { -- return p_176381_1_.func_180495_p(p_176381_2_.func_177972_a(p_176381_3_.func_176734_d())).func_177230_c().func_149721_r(); -+ return p_176381_1_.isSideSolid(p_176381_2_.func_177972_a(p_176381_3_.func_176734_d()), p_176381_3_, true); - } - - @SideOnly(Side.CLIENT) -@@ -155,6 +158,8 @@ - return new BlockState(this, new IProperty[] {field_176382_a}); - } - -+ @Override public boolean isLadder(IBlockAccess world, BlockPos pos, EntityLivingBase entity) { return true; } -+ - static final class SwitchEnumFacing - { - static final int[] field_180190_a = new int[EnumFacing.values().length]; diff --git a/patches/minecraft/net/minecraft/block/BlockLeaves.java.patch b/patches/minecraft/net/minecraft/block/BlockLeaves.java.patch deleted file mode 100644 index 270eade4c..000000000 --- a/patches/minecraft/net/minecraft/block/BlockLeaves.java.patch +++ /dev/null @@ -1,130 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockLeaves.java -+++ ../src-work/minecraft/net/minecraft/block/BlockLeaves.java -@@ -18,7 +18,7 @@ - import net.minecraftforge.fml.relauncher.Side; - import net.minecraftforge.fml.relauncher.SideOnly; - --public abstract class BlockLeaves extends BlockLeavesBase -+public abstract class BlockLeaves extends BlockLeavesBase implements net.minecraftforge.common.IShearable - { - public static final PropertyBool field_176237_a = PropertyBool.func_177716_a("decayable"); - public static final PropertyBool field_176236_b = PropertyBool.func_177716_a("check_decay"); -@@ -76,9 +76,9 @@ - BlockPos blockpos1 = p_180663_2_.func_177982_a(i1, j1, k1); - IBlockState iblockstate1 = p_180663_1_.func_180495_p(blockpos1); - -- if (iblockstate1.func_177230_c().func_149688_o() == Material.field_151584_j && !((Boolean)iblockstate1.func_177229_b(field_176236_b)).booleanValue()) -+ if (iblockstate1.func_177230_c().isLeaves(p_180663_1_, blockpos1)) - { -- p_180663_1_.func_180501_a(blockpos1, iblockstate1.func_177226_a(field_176236_b, Boolean.valueOf(true)), 4); -+ iblockstate1.func_177230_c().beginLeavesDecay(p_180663_1_, blockpos1); - } - } - } -@@ -119,11 +119,12 @@ - { - for (i2 = -b0; i2 <= b0; ++i2) - { -- Block block = p_180650_1_.func_180495_p(new BlockPos(j + k1, k + l1, l + i2)).func_177230_c(); -+ BlockPos tmp = new BlockPos(j + k1, k + l1, l + i2); -+ Block block = p_180650_1_.func_180495_p(tmp).func_177230_c(); - -- if (block != Blocks.field_150364_r && block != Blocks.field_150363_s) -+ if (!block.canSustainLeaves(p_180650_1_, tmp)) - { -- if (block.func_149688_o() == Material.field_151584_j) -+ if (block.isLeaves(p_180650_1_, tmp)) - { - this.field_150128_a[(k1 + j1) * i1 + (l1 + j1) * b1 + i2 + j1] = -2; - } -@@ -230,40 +231,7 @@ - - public void func_180653_a(World p_180653_1_, BlockPos p_180653_2_, IBlockState p_180653_3_, float p_180653_4_, int p_180653_5_) - { -- if (!p_180653_1_.field_72995_K) -- { -- int j = this.func_176232_d(p_180653_3_); -- -- if (p_180653_5_ > 0) -- { -- j -= 2 << p_180653_5_; -- -- if (j < 10) -- { -- j = 10; -- } -- } -- -- if (p_180653_1_.field_73012_v.nextInt(j) == 0) -- { -- Item item = this.func_180660_a(p_180653_3_, p_180653_1_.field_73012_v, p_180653_5_); -- func_180635_a(p_180653_1_, p_180653_2_, new ItemStack(item, 1, this.func_180651_a(p_180653_3_))); -- } -- -- j = 200; -- -- if (p_180653_5_ > 0) -- { -- j -= 10 << p_180653_5_; -- -- if (j < 40) -- { -- j = 40; -- } -- } -- -- this.func_176234_a(p_180653_1_, p_180653_2_, p_180653_3_, j); -- } -+ super.func_180653_a(p_180653_1_, p_180653_2_, p_180653_3_, p_180653_4_, p_180653_5_); - } - - protected void func_176234_a(World p_176234_1_, BlockPos p_176234_2_, IBlockState p_176234_3_, int p_176234_4_) {} -@@ -298,4 +266,48 @@ - } - - public abstract BlockPlanks.EnumType func_176233_b(int p_176233_1_); -+ -+ @Override public boolean isShearable(ItemStack item, IBlockAccess world, BlockPos pos){ return true; } -+ @Override public boolean isLeaves(IBlockAccess world, BlockPos pos){ return true; } -+ -+ @Override -+ public void beginLeavesDecay(World world, BlockPos pos) -+ { -+ IBlockState state = world.func_180495_p(pos); -+ if (!(Boolean)state.func_177229_b(field_176236_b)) -+ { -+ world.func_180501_a(pos, state.func_177226_a(field_176236_b, true), 4); -+ } -+ } -+ -+ @Override -+ public java.util.List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) -+ { -+ java.util.List ret = new java.util.ArrayList(); -+ Random rand = world instanceof World ? ((World)world).field_73012_v : new Random(); -+ int chance = this.func_176232_d(state); -+ -+ if (fortune > 0) -+ { -+ chance -= 2 << fortune; -+ if (chance < 10) chance = 10; -+ } -+ -+ if (rand.nextInt(chance) == 0) -+ ret.add(new ItemStack(func_180660_a(state, rand, fortune), 1, func_180651_a(state))); -+ -+ chance = 200; -+ if (fortune > 0) -+ { -+ chance -= 10 << fortune; -+ if (chance < 40) chance = 40; -+ } -+ -+ this.captureDrops(true); -+ if (world instanceof World) -+ this.func_176234_a((World)world, pos, state, chance); // Dammet mojang -+ ret.addAll(this.captureDrops(false)); -+ return ret; -+ } -+ - } diff --git a/patches/minecraft/net/minecraft/block/BlockLever.java.patch b/patches/minecraft/net/minecraft/block/BlockLever.java.patch deleted file mode 100644 index ff826eb16..000000000 --- a/patches/minecraft/net/minecraft/block/BlockLever.java.patch +++ /dev/null @@ -1,67 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockLever.java -+++ ../src-work/minecraft/net/minecraft/block/BlockLever.java -@@ -47,24 +47,24 @@ - - public boolean func_176198_a(World p_176198_1_, BlockPos p_176198_2_, EnumFacing p_176198_3_) - { -- return p_176198_3_ == EnumFacing.UP && World.func_175683_a(p_176198_1_, p_176198_2_.func_177977_b()) ? true : this.func_176358_d(p_176198_1_, p_176198_2_.func_177972_a(p_176198_3_.func_176734_d())); -+ return p_176198_3_ == EnumFacing.UP && World.func_175683_a(p_176198_1_, p_176198_2_.func_177977_b()) ? true : p_176198_1_.isSideSolid(p_176198_2_.func_177972_a(p_176198_3_.func_176734_d()), p_176198_3_); - } - - public boolean func_176196_c(World p_176196_1_, BlockPos p_176196_2_) - { -- return this.func_176358_d(p_176196_1_, p_176196_2_.func_177976_e()) ? true : (this.func_176358_d(p_176196_1_, p_176196_2_.func_177974_f()) ? true : (this.func_176358_d(p_176196_1_, p_176196_2_.func_177978_c()) ? true : (this.func_176358_d(p_176196_1_, p_176196_2_.func_177968_d()) ? true : (World.func_175683_a(p_176196_1_, p_176196_2_.func_177977_b()) ? true : this.func_176358_d(p_176196_1_, p_176196_2_.func_177984_a()))))); -+ return p_176196_1_.isSideSolid(p_176196_2_.func_177976_e(), EnumFacing.EAST ) || -+ p_176196_1_.isSideSolid(p_176196_2_.func_177974_f(), EnumFacing.WEST ) || -+ p_176196_1_.isSideSolid(p_176196_2_.func_177978_c(), EnumFacing.SOUTH) || -+ p_176196_1_.isSideSolid(p_176196_2_.func_177968_d(), EnumFacing.NORTH) || -+ p_176196_1_.isSideSolid(p_176196_2_.func_177977_b(), EnumFacing.UP ) || -+ p_176196_1_.isSideSolid(p_176196_2_.func_177984_a(), EnumFacing.DOWN ); - } - -- protected boolean func_176358_d(World p_176358_1_, BlockPos p_176358_2_) -- { -- return p_176358_1_.func_180495_p(p_176358_2_).func_177230_c().func_149721_r(); -- } -- - public IBlockState func_180642_a(World p_180642_1_, BlockPos p_180642_2_, EnumFacing p_180642_3_, float p_180642_4_, float p_180642_5_, float p_180642_6_, int p_180642_7_, EntityLivingBase p_180642_8_) - { - IBlockState iblockstate = this.func_176223_P().func_177226_a(field_176359_b, Boolean.valueOf(false)); - -- if (this.func_176358_d(p_180642_1_, p_180642_2_.func_177972_a(p_180642_3_.func_176734_d()))) -+ if (p_180642_1_.isSideSolid(p_180642_2_.func_177972_a(p_180642_3_.func_176734_d()), p_180642_3_)) - { - return iblockstate.func_177226_a(field_176360_a, BlockLever.EnumOrientation.func_176856_a(p_180642_3_, p_180642_8_.func_174811_aO())); - } -@@ -87,7 +87,7 @@ - - enumfacing1 = (EnumFacing)iterator.next(); - } -- while (enumfacing1 == p_180642_3_ || !this.func_176358_d(p_180642_1_, p_180642_2_.func_177972_a(enumfacing1.func_176734_d()))); -+ while (enumfacing1 == p_180642_3_ || !p_180642_1_.isSideSolid(p_180642_2_.func_177972_a(enumfacing1.func_176734_d()), enumfacing1)); - - return iblockstate.func_177226_a(field_176360_a, BlockLever.EnumOrientation.func_176856_a(enumfacing1, p_180642_8_.func_174811_aO())); - } -@@ -116,7 +116,8 @@ - - public void func_176204_a(World p_176204_1_, BlockPos p_176204_2_, IBlockState p_176204_3_, Block p_176204_4_) - { -- if (this.func_176356_e(p_176204_1_, p_176204_2_) && !this.func_176358_d(p_176204_1_, p_176204_2_.func_177972_a(((BlockLever.EnumOrientation)p_176204_3_.func_177229_b(field_176360_a)).func_176852_c().func_176734_d()))) -+ EnumFacing dir = ((BlockLever.EnumOrientation)p_176204_3_.func_177229_b(field_176360_a)).func_176852_c(); -+ if (this.func_176356_e(p_176204_1_, p_176204_2_) && !p_176204_1_.isSideSolid(p_176204_2_.func_177972_a(dir.func_176734_d()), dir)) - { - this.func_176226_b(p_176204_1_, p_176204_2_, p_176204_3_, 0); - p_176204_1_.func_175698_g(p_176204_2_); -@@ -235,6 +236,12 @@ - return new BlockState(this, new IProperty[] {field_176360_a, field_176359_b}); - } - -+ -+ private boolean canAttach(World world, BlockPos pos, EnumFacing side) -+ { -+ return world.isSideSolid(pos, side); -+ } -+ - public static enum EnumOrientation implements IStringSerializable - { - DOWN_X(0, "down_x", EnumFacing.DOWN), diff --git a/patches/minecraft/net/minecraft/block/BlockLog.java.patch b/patches/minecraft/net/minecraft/block/BlockLog.java.patch deleted file mode 100644 index 39ddc1c69..000000000 --- a/patches/minecraft/net/minecraft/block/BlockLog.java.patch +++ /dev/null @@ -1,24 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockLog.java -+++ ../src-work/minecraft/net/minecraft/block/BlockLog.java -@@ -38,9 +38,9 @@ - BlockPos blockpos1 = (BlockPos)iterator.next(); - IBlockState iblockstate1 = p_180663_1_.func_180495_p(blockpos1); - -- if (iblockstate1.func_177230_c().func_149688_o() == Material.field_151584_j && !((Boolean)iblockstate1.func_177229_b(BlockLeaves.field_176236_b)).booleanValue()) -+ if (iblockstate1.func_177230_c().isLeaves(p_180663_1_, blockpos1)) - { -- p_180663_1_.func_180501_a(blockpos1, iblockstate1.func_177226_a(BlockLeaves.field_176236_b, Boolean.valueOf(true)), 4); -+ iblockstate1.func_177230_c().beginLeavesDecay(p_180663_1_, blockpos1); - } - } - } -@@ -51,6 +51,9 @@ - return super.func_180642_a(p_180642_1_, p_180642_2_, p_180642_3_, p_180642_4_, p_180642_5_, p_180642_6_, p_180642_7_, p_180642_8_).func_177226_a(field_176299_a, BlockLog.EnumAxis.func_176870_a(p_180642_3_.func_176740_k())); - } - -+ @Override public boolean canSustainLeaves(net.minecraft.world.IBlockAccess world, BlockPos pos){ return true; } -+ @Override public boolean isWood(net.minecraft.world.IBlockAccess world, BlockPos pos){ return true; } -+ - public static enum EnumAxis implements IStringSerializable - { - X("x"), diff --git a/patches/minecraft/net/minecraft/block/BlockMobSpawner.java.patch b/patches/minecraft/net/minecraft/block/BlockMobSpawner.java.patch deleted file mode 100644 index cdc8c9e42..000000000 --- a/patches/minecraft/net/minecraft/block/BlockMobSpawner.java.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockMobSpawner.java -+++ ../src-work/minecraft/net/minecraft/block/BlockMobSpawner.java -@@ -39,10 +39,14 @@ - public void func_180653_a(World p_180653_1_, BlockPos p_180653_2_, IBlockState p_180653_3_, float p_180653_4_, int p_180653_5_) - { - super.func_180653_a(p_180653_1_, p_180653_2_, p_180653_3_, p_180653_4_, p_180653_5_); -- int j = 15 + p_180653_1_.field_73012_v.nextInt(15) + p_180653_1_.field_73012_v.nextInt(15); -- this.func_180637_b(p_180653_1_, p_180653_2_, j); - } - -+ @Override -+ public int getExpDrop(net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) -+ { -+ return 15 + RANDOM.nextInt(15) + RANDOM.nextInt(15); -+ } -+ - public boolean func_149662_c() - { - return false; diff --git a/patches/minecraft/net/minecraft/block/BlockMushroom.java.patch b/patches/minecraft/net/minecraft/block/BlockMushroom.java.patch deleted file mode 100644 index bf17395b9..000000000 --- a/patches/minecraft/net/minecraft/block/BlockMushroom.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockMushroom.java -+++ ../src-work/minecraft/net/minecraft/block/BlockMushroom.java -@@ -76,7 +76,7 @@ - if (p_180671_2_.func_177956_o() >= 0 && p_180671_2_.func_177956_o() < 256) - { - IBlockState iblockstate1 = p_180671_1_.func_180495_p(p_180671_2_.func_177977_b()); -- return iblockstate1.func_177230_c() == Blocks.field_150391_bh ? true : (iblockstate1.func_177230_c() == Blocks.field_150346_d && iblockstate1.func_177229_b(BlockDirt.field_176386_a) == BlockDirt.DirtType.PODZOL ? true : p_180671_1_.func_175699_k(p_180671_2_) < 13 && this.func_149854_a(iblockstate1.func_177230_c())); -+ return iblockstate1.func_177230_c() == Blocks.field_150391_bh ? true : (iblockstate1.func_177230_c() == Blocks.field_150346_d && iblockstate1.func_177229_b(BlockDirt.field_176386_a) == BlockDirt.DirtType.PODZOL ? true : p_180671_1_.func_175699_k(p_180671_2_) < 13 && iblockstate1.func_177230_c().canSustainPlant(p_180671_1_, p_180671_2_.func_177977_b(), net.minecraft.util.EnumFacing.UP, this)); - } - else - { diff --git a/patches/minecraft/net/minecraft/block/BlockMycelium.java.patch b/patches/minecraft/net/minecraft/block/BlockMycelium.java.patch deleted file mode 100644 index 4a2c0ac2c..000000000 --- a/patches/minecraft/net/minecraft/block/BlockMycelium.java.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockMycelium.java -+++ ../src-work/minecraft/net/minecraft/block/BlockMycelium.java -@@ -39,7 +39,7 @@ - { - if (!p_180650_1_.field_72995_K) - { -- if (p_180650_1_.func_175671_l(p_180650_2_.func_177984_a()) < 4 && p_180650_1_.func_180495_p(p_180650_2_.func_177984_a()).func_177230_c().func_149717_k() > 2) -+ if (p_180650_1_.func_175671_l(p_180650_2_.func_177984_a()) < 4 && p_180650_1_.func_180495_p(p_180650_2_.func_177984_a()).func_177230_c().getLightOpacity(p_180650_1_, p_180650_2_.func_177984_a()) > 2) - { - p_180650_1_.func_175656_a(p_180650_2_, Blocks.field_150346_d.func_176223_P().func_177226_a(BlockDirt.field_176386_a, BlockDirt.DirtType.DIRT)); - } -@@ -53,7 +53,7 @@ - IBlockState iblockstate1 = p_180650_1_.func_180495_p(blockpos1); - Block block = p_180650_1_.func_180495_p(blockpos1.func_177984_a()).func_177230_c(); - -- if (iblockstate1.func_177230_c() == Blocks.field_150346_d && iblockstate1.func_177229_b(BlockDirt.field_176386_a) == BlockDirt.DirtType.DIRT && p_180650_1_.func_175671_l(blockpos1.func_177984_a()) >= 4 && block.func_149717_k() <= 2) -+ if (iblockstate1.func_177230_c() == Blocks.field_150346_d && iblockstate1.func_177229_b(BlockDirt.field_176386_a) == BlockDirt.DirtType.DIRT && p_180650_1_.func_175671_l(blockpos1.func_177984_a()) >= 4 && block.getLightOpacity(p_180650_1_, blockpos1.func_177984_a()) <= 2) - { - p_180650_1_.func_175656_a(blockpos1, this.func_176223_P()); - } diff --git a/patches/minecraft/net/minecraft/block/BlockNetherWart.java.patch b/patches/minecraft/net/minecraft/block/BlockNetherWart.java.patch deleted file mode 100644 index 374e2ef64..000000000 --- a/patches/minecraft/net/minecraft/block/BlockNetherWart.java.patch +++ /dev/null @@ -1,49 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockNetherWart.java -+++ ../src-work/minecraft/net/minecraft/block/BlockNetherWart.java -@@ -36,7 +36,7 @@ - - public boolean func_180671_f(World p_180671_1_, BlockPos p_180671_2_, IBlockState p_180671_3_) - { -- return this.func_149854_a(p_180671_1_.func_180495_p(p_180671_2_.func_177977_b()).func_177230_c()); -+ return super.func_180671_f(p_180671_1_, p_180671_2_, p_180671_3_); - } - - public void func_180650_b(World p_180650_1_, BlockPos p_180650_2_, IBlockState p_180650_3_, Random p_180650_4_) -@@ -52,9 +52,11 @@ - super.func_180650_b(p_180650_1_, p_180650_2_, p_180650_3_, p_180650_4_); - } - -+ @SuppressWarnings("unused") - public void func_180653_a(World p_180653_1_, BlockPos p_180653_2_, IBlockState p_180653_3_, float p_180653_4_, int p_180653_5_) - { -- if (!p_180653_1_.field_72995_K) -+ super.func_180653_a(p_180653_1_, p_180653_2_, p_180653_3_, p_180653_4_, p_180653_5_); -+ if (false && !p_180653_1_.field_72995_K) - { - int j = 1; - -@@ -105,4 +107,24 @@ - { - return new BlockState(this, new IProperty[] {field_176486_a}); - } -+ -+ @Override -+ public java.util.List getDrops(net.minecraft.world.IBlockAccess world, BlockPos pos, IBlockState state, int fortune) -+ { -+ java.util.List ret = new java.util.ArrayList(); -+ Random rand = world instanceof World ? ((World)world).field_73012_v : new Random(); -+ int count = 1; -+ -+ if (((Integer)state.func_177229_b(field_176486_a)) >= 3) -+ { -+ count = 2 + rand.nextInt(3) + (fortune > 0 ? rand.nextInt(fortune + 1) : 0); -+ } -+ -+ for (int i = 0; i < count; i++) -+ { -+ ret.add(new ItemStack(Items.field_151075_bm)); -+ } -+ -+ return ret; -+ } - } diff --git a/patches/minecraft/net/minecraft/block/BlockNewLeaf.java.patch b/patches/minecraft/net/minecraft/block/BlockNewLeaf.java.patch deleted file mode 100644 index 150aabf9e..000000000 --- a/patches/minecraft/net/minecraft/block/BlockNewLeaf.java.patch +++ /dev/null @@ -1,24 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockNewLeaf.java -+++ ../src-work/minecraft/net/minecraft/block/BlockNewLeaf.java -@@ -105,14 +105,15 @@ - - public void func_180657_a(World p_180657_1_, EntityPlayer p_180657_2_, BlockPos p_180657_3_, IBlockState p_180657_4_, TileEntity p_180657_5_) - { -- if (!p_180657_1_.field_72995_K && p_180657_2_.func_71045_bC() != null && p_180657_2_.func_71045_bC().func_77973_b() == Items.field_151097_aZ) - { -- p_180657_2_.func_71029_a(StatList.field_75934_C[Block.func_149682_b(this)]); -- func_180635_a(p_180657_1_, p_180657_3_, new ItemStack(Item.func_150898_a(this), 1, ((BlockPlanks.EnumType)p_180657_4_.func_177229_b(field_176240_P)).func_176839_a() - 4)); -- } -- else -- { - super.func_180657_a(p_180657_1_, p_180657_2_, p_180657_3_, p_180657_4_, p_180657_5_); - } - } -+ -+ @Override -+ public List onSheared(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) -+ { -+ IBlockState state = world.func_180495_p(pos); -+ return new java.util.ArrayList(java.util.Arrays.asList(new ItemStack(this, 1, ((BlockPlanks.EnumType)state.func_177229_b(field_176240_P)).func_176839_a() - 4))); -+ } - } diff --git a/patches/minecraft/net/minecraft/block/BlockNote.java.patch b/patches/minecraft/net/minecraft/block/BlockNote.java.patch deleted file mode 100644 index dd913e8f5..000000000 --- a/patches/minecraft/net/minecraft/block/BlockNote.java.patch +++ /dev/null @@ -1,23 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockNote.java -+++ ../src-work/minecraft/net/minecraft/block/BlockNote.java -@@ -58,7 +58,9 @@ - if (tileentity instanceof TileEntityNote) - { - TileEntityNote tileentitynote = (TileEntityNote)tileentity; -+ int old = tileentitynote.field_145879_a; - tileentitynote.func_145877_a(); -+ if (old == tileentitynote.field_145879_a) return false; - tileentitynote.func_175108_a(p_180639_1_, p_180639_2_); - } - -@@ -96,6 +98,10 @@ - - public boolean func_180648_a(World p_180648_1_, BlockPos p_180648_2_, IBlockState p_180648_3_, int p_180648_4_, int p_180648_5_) - { -+ net.minecraftforge.event.world.NoteBlockEvent.Play e = new net.minecraftforge.event.world.NoteBlockEvent.Play(p_180648_1_, p_180648_2_, p_180648_3_, p_180648_5_, p_180648_4_); -+ if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(e)) return false; -+ p_180648_4_ = e.instrument.ordinal(); -+ p_180648_5_ = e.getVanillaNoteId(); - float f = (float)Math.pow(2.0D, (double)(p_180648_5_ - 12) / 12.0D); - p_180648_1_.func_72908_a((double)p_180648_2_.func_177958_n() + 0.5D, (double)p_180648_2_.func_177956_o() + 0.5D, (double)p_180648_2_.func_177952_p() + 0.5D, "note." + this.func_176433_b(p_180648_4_), 3.0F, f); - p_180648_1_.func_175688_a(EnumParticleTypes.NOTE, (double)p_180648_2_.func_177958_n() + 0.5D, (double)p_180648_2_.func_177956_o() + 1.2D, (double)p_180648_2_.func_177952_p() + 0.5D, (double)p_180648_5_ / 24.0D, 0.0D, 0.0D, new int[0]); diff --git a/patches/minecraft/net/minecraft/block/BlockOldLeaf.java.patch b/patches/minecraft/net/minecraft/block/BlockOldLeaf.java.patch deleted file mode 100644 index b3bd13fbe..000000000 --- a/patches/minecraft/net/minecraft/block/BlockOldLeaf.java.patch +++ /dev/null @@ -1,21 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockOldLeaf.java -+++ ../src-work/minecraft/net/minecraft/block/BlockOldLeaf.java -@@ -148,11 +148,17 @@ - if (!p_180657_1_.field_72995_K && p_180657_2_.func_71045_bC() != null && p_180657_2_.func_71045_bC().func_77973_b() == Items.field_151097_aZ) - { - p_180657_2_.func_71029_a(StatList.field_75934_C[Block.func_149682_b(this)]); -- func_180635_a(p_180657_1_, p_180657_3_, new ItemStack(Item.func_150898_a(this), 1, ((BlockPlanks.EnumType)p_180657_4_.func_177229_b(field_176239_P)).func_176839_a())); - } - else - { - super.func_180657_a(p_180657_1_, p_180657_2_, p_180657_3_, p_180657_4_, p_180657_5_); - } - } -+ -+ @Override -+ public List onSheared(ItemStack item, IBlockAccess world, BlockPos pos, int fortune) -+ { -+ IBlockState state = world.func_180495_p(pos); -+ return new java.util.ArrayList(java.util.Arrays.asList(new ItemStack(this, 1, ((BlockPlanks.EnumType)state.func_177229_b(field_176239_P)).func_176839_a()))); -+ } - } diff --git a/patches/minecraft/net/minecraft/block/BlockOre.java.patch b/patches/minecraft/net/minecraft/block/BlockOre.java.patch deleted file mode 100644 index 8c026c147..000000000 --- a/patches/minecraft/net/minecraft/block/BlockOre.java.patch +++ /dev/null @@ -1,59 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockOre.java -+++ ../src-work/minecraft/net/minecraft/block/BlockOre.java -@@ -10,6 +10,7 @@ - import net.minecraft.item.Item; - import net.minecraft.util.BlockPos; - import net.minecraft.util.MathHelper; -+import net.minecraft.world.IBlockAccess; - import net.minecraft.world.World; - - public class BlockOre extends Block -@@ -54,34 +55,40 @@ - public void func_180653_a(World p_180653_1_, BlockPos p_180653_2_, IBlockState p_180653_3_, float p_180653_4_, int p_180653_5_) - { - super.func_180653_a(p_180653_1_, p_180653_2_, p_180653_3_, p_180653_4_, p_180653_5_); -- -- if (this.func_180660_a(p_180653_3_, p_180653_1_.field_73012_v, p_180653_5_) != Item.func_150898_a(this)) -+ } -+ @Override -+ public int getExpDrop(IBlockAccess world, BlockPos pos, int fortune) -+ { -+ IBlockState state = world.func_180495_p(pos); -+ Random rand = world instanceof World ? ((World)world).field_73012_v : new Random(); -+ if (this.func_180660_a(state, rand, fortune) != Item.func_150898_a(this)) - { - int j = 0; - - if (this == Blocks.field_150365_q) - { -- j = MathHelper.func_76136_a(p_180653_1_.field_73012_v, 0, 2); -+ j = MathHelper.func_76136_a(rand, 0, 2); - } - else if (this == Blocks.field_150482_ag) - { -- j = MathHelper.func_76136_a(p_180653_1_.field_73012_v, 3, 7); -+ j = MathHelper.func_76136_a(rand, 3, 7); - } - else if (this == Blocks.field_150412_bA) - { -- j = MathHelper.func_76136_a(p_180653_1_.field_73012_v, 3, 7); -+ j = MathHelper.func_76136_a(rand, 3, 7); - } - else if (this == Blocks.field_150369_x) - { -- j = MathHelper.func_76136_a(p_180653_1_.field_73012_v, 2, 5); -+ j = MathHelper.func_76136_a(rand, 2, 5); - } - else if (this == Blocks.field_150449_bY) - { -- j = MathHelper.func_76136_a(p_180653_1_.field_73012_v, 2, 5); -+ j = MathHelper.func_76136_a(rand, 2, 5); - } - -- this.func_180637_b(p_180653_1_, p_180653_2_, j); -+ return j; - } -+ return 0; - } - - public int func_176222_j(World p_176222_1_, BlockPos p_176222_2_) diff --git a/patches/minecraft/net/minecraft/block/BlockPane.java.patch b/patches/minecraft/net/minecraft/block/BlockPane.java.patch deleted file mode 100644 index eb7aee52d..000000000 --- a/patches/minecraft/net/minecraft/block/BlockPane.java.patch +++ /dev/null @@ -1,41 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockPane.java -+++ ../src-work/minecraft/net/minecraft/block/BlockPane.java -@@ -39,7 +39,10 @@ - - public IBlockState func_176221_a(IBlockState p_176221_1_, IBlockAccess p_176221_2_, BlockPos p_176221_3_) - { -- return p_176221_1_.func_177226_a(field_176241_b, Boolean.valueOf(this.func_150098_a(p_176221_2_.func_180495_p(p_176221_3_.func_177978_c()).func_177230_c()))).func_177226_a(field_176243_N, Boolean.valueOf(this.func_150098_a(p_176221_2_.func_180495_p(p_176221_3_.func_177968_d()).func_177230_c()))).func_177226_a(field_176244_O, Boolean.valueOf(this.func_150098_a(p_176221_2_.func_180495_p(p_176221_3_.func_177976_e()).func_177230_c()))).func_177226_a(field_176242_M, Boolean.valueOf(this.func_150098_a(p_176221_2_.func_180495_p(p_176221_3_.func_177974_f()).func_177230_c()))); -+ return p_176221_1_.func_177226_a(field_176241_b, canPaneConnectTo(p_176221_2_, p_176221_3_, EnumFacing.NORTH)) -+ .func_177226_a(field_176243_N, canPaneConnectTo(p_176221_2_, p_176221_3_, EnumFacing.SOUTH)) -+ .func_177226_a(field_176244_O, canPaneConnectTo(p_176221_2_, p_176221_3_, EnumFacing.WEST)) -+ .func_177226_a(field_176242_M, canPaneConnectTo(p_176221_2_, p_176221_3_, EnumFacing.EAST)); - } - - public Item func_180660_a(IBlockState p_180660_1_, Random p_180660_2_, int p_180660_3_) -@@ -65,10 +68,10 @@ - - public void func_180638_a(World p_180638_1_, BlockPos p_180638_2_, IBlockState p_180638_3_, AxisAlignedBB p_180638_4_, List p_180638_5_, Entity p_180638_6_) - { -- boolean flag = this.func_150098_a(p_180638_1_.func_180495_p(p_180638_2_.func_177978_c()).func_177230_c()); -- boolean flag1 = this.func_150098_a(p_180638_1_.func_180495_p(p_180638_2_.func_177968_d()).func_177230_c()); -- boolean flag2 = this.func_150098_a(p_180638_1_.func_180495_p(p_180638_2_.func_177976_e()).func_177230_c()); -- boolean flag3 = this.func_150098_a(p_180638_1_.func_180495_p(p_180638_2_.func_177974_f()).func_177230_c()); -+ boolean flag = this.canPaneConnectTo(p_180638_1_, p_180638_2_, EnumFacing.NORTH); -+ boolean flag1 = this.canPaneConnectTo(p_180638_1_, p_180638_2_, EnumFacing.SOUTH); -+ boolean flag2 = this.canPaneConnectTo(p_180638_1_, p_180638_2_, EnumFacing.WEST); -+ boolean flag3 = this.canPaneConnectTo(p_180638_1_, p_180638_2_, EnumFacing.EAST); - - if ((!flag2 || !flag3) && (flag2 || flag3 || flag || flag1)) - { -@@ -187,4 +190,11 @@ - { - return new BlockState(this, new IProperty[] {field_176241_b, field_176242_M, field_176244_O, field_176243_N}); - } -+ -+ public boolean canPaneConnectTo(IBlockAccess world, BlockPos pos, EnumFacing dir) -+ { -+ BlockPos off = pos.func_177972_a(dir); -+ Block block = world.func_180495_p(off).func_177230_c(); -+ return func_150098_a(block) || block.isSideSolid(world, off, dir.func_176734_d()); -+ } - } diff --git a/patches/minecraft/net/minecraft/block/BlockPistonBase.java.patch b/patches/minecraft/net/minecraft/block/BlockPistonBase.java.patch deleted file mode 100644 index 20426bd9d..000000000 --- a/patches/minecraft/net/minecraft/block/BlockPistonBase.java.patch +++ /dev/null @@ -1,31 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockPistonBase.java -+++ ../src-work/minecraft/net/minecraft/block/BlockPistonBase.java -@@ -200,7 +200,7 @@ - } - } - -- if (!flag1 && block.func_149688_o() != Material.field_151579_a && func_180696_a(block, p_180648_1_, blockpos1, enumfacing.func_176734_d(), false) && (block.func_149656_h() == 0 || block == Blocks.field_150331_J || block == Blocks.field_150320_F)) -+ if (!flag1 && !block.isAir(p_180648_1_, blockpos1) && func_180696_a(block, p_180648_1_, blockpos1, enumfacing.func_176734_d(), false) && (block.func_149656_h() == 0 || block == Blocks.field_150331_J || block == Blocks.field_150320_F)) - { - this.func_176319_a(p_180648_1_, p_180648_2_, enumfacing, false); - } -@@ -344,7 +344,7 @@ - return false; - } - -- return !(p_180696_0_ instanceof ITileEntityProvider); -+ return !(p_180696_0_.hasTileEntity(p_180696_1_.func_180495_p(p_180696_2_))); - } - else - { -@@ -384,7 +384,9 @@ - { - blockpos1 = (BlockPos)list1.get(j); - Block block = p_176319_1_.func_180495_p(blockpos1).func_177230_c(); -- block.func_176226_b(p_176319_1_, blockpos1, p_176319_1_.func_180495_p(blockpos1), 0); -+ //With our change to how snowballs are dropped this needs to disallow to mimic vanilla behavior. -+ float chance = block instanceof BlockSnow ? -1.0f : 1.0f; -+ block.func_180653_a(p_176319_1_, blockpos1, p_176319_1_.func_180495_p(blockpos1), chance, 0); - p_176319_1_.func_175698_g(blockpos1); - --i; - ablock[i] = block; diff --git a/patches/minecraft/net/minecraft/block/BlockPistonMoving.java.patch b/patches/minecraft/net/minecraft/block/BlockPistonMoving.java.patch deleted file mode 100644 index 4f2d1c8a0..000000000 --- a/patches/minecraft/net/minecraft/block/BlockPistonMoving.java.patch +++ /dev/null @@ -1,37 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockPistonMoving.java -+++ ../src-work/minecraft/net/minecraft/block/BlockPistonMoving.java -@@ -110,16 +110,7 @@ - - public void func_180653_a(World p_180653_1_, BlockPos p_180653_2_, IBlockState p_180653_3_, float p_180653_4_, int p_180653_5_) - { -- if (!p_180653_1_.field_72995_K) -- { -- TileEntityPiston tileentitypiston = this.func_176422_e(p_180653_1_, p_180653_2_); -- -- if (tileentitypiston != null) -- { -- IBlockState iblockstate1 = tileentitypiston.func_174927_b(); -- iblockstate1.func_177230_c().func_176226_b(p_180653_1_, p_180653_2_, iblockstate1, 0); -- } -- } -+ super.func_180653_a(p_180653_1_, p_180653_2_, p_180653_3_, p_180653_4_, p_180653_5_); - } - - public MovingObjectPosition func_180636_a(World p_180636_1_, BlockPos p_180636_2_, Vec3 p_180636_3_, Vec3 p_180636_4_) -@@ -283,4 +274,16 @@ - { - return new BlockState(this, new IProperty[] {field_176426_a, field_176425_b}); - } -+ -+ @Override -+ public java.util.List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) -+ { -+ TileEntityPiston tileentitypiston = this.func_176422_e(world, pos); -+ if (tileentitypiston != null) -+ { -+ IBlockState pushed = tileentitypiston.func_174927_b(); -+ return pushed.func_177230_c().getDrops(world, pos, pushed, fortune); -+ } -+ return new java.util.ArrayList(); -+ } - } diff --git a/patches/minecraft/net/minecraft/block/BlockPotato.java.patch b/patches/minecraft/net/minecraft/block/BlockPotato.java.patch deleted file mode 100644 index 2adf70eee..000000000 --- a/patches/minecraft/net/minecraft/block/BlockPotato.java.patch +++ /dev/null @@ -1,25 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockPotato.java -+++ ../src-work/minecraft/net/minecraft/block/BlockPotato.java -@@ -24,13 +24,14 @@ - public void func_180653_a(World p_180653_1_, BlockPos p_180653_2_, IBlockState p_180653_3_, float p_180653_4_, int p_180653_5_) - { - super.func_180653_a(p_180653_1_, p_180653_2_, p_180653_3_, p_180653_4_, p_180653_5_); -- -- if (!p_180653_1_.field_72995_K) -- { -- if (((Integer)p_180653_3_.func_177229_b(field_176488_a)).intValue() >= 7 && p_180653_1_.field_73012_v.nextInt(50) == 0) -- { -- func_180635_a(p_180653_1_, p_180653_2_, new ItemStack(Items.field_151170_bI)); -- } -- } - } -+ @Override -+ public java.util.List getDrops(net.minecraft.world.IBlockAccess world, BlockPos pos, IBlockState state, int fortune) -+ { -+ java.util.List ret = super.getDrops(world, pos, state, fortune); -+ java.util.Random rand = world instanceof World ? ((World)world).field_73012_v : new java.util.Random(); -+ if (((Integer)state.func_177229_b(field_176488_a)) >= 7 && rand.nextInt(50) == 0) -+ ret.add(new ItemStack(Items.field_151170_bI)); -+ return ret; -+ } - } diff --git a/patches/minecraft/net/minecraft/block/BlockPumpkin.java.patch b/patches/minecraft/net/minecraft/block/BlockPumpkin.java.patch deleted file mode 100644 index 87ac6e5da..000000000 --- a/patches/minecraft/net/minecraft/block/BlockPumpkin.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockPumpkin.java -+++ ../src-work/minecraft/net/minecraft/block/BlockPumpkin.java -@@ -109,7 +109,7 @@ - - public boolean func_176196_c(World p_176196_1_, BlockPos p_176196_2_) - { -- return p_176196_1_.func_180495_p(p_176196_2_).func_177230_c().field_149764_J.func_76222_j() && World.func_175683_a(p_176196_1_, p_176196_2_.func_177977_b()); -+ return p_176196_1_.func_180495_p(p_176196_2_).func_177230_c().func_176200_f(p_176196_1_, p_176196_2_) && World.func_175683_a(p_176196_1_, p_176196_2_.func_177977_b()); - } - - public IBlockState func_180642_a(World p_180642_1_, BlockPos p_180642_2_, EnumFacing p_180642_3_, float p_180642_4_, float p_180642_5_, float p_180642_6_, int p_180642_7_, EntityLivingBase p_180642_8_) diff --git a/patches/minecraft/net/minecraft/block/BlockRedstoneDiode.java.patch b/patches/minecraft/net/minecraft/block/BlockRedstoneDiode.java.patch deleted file mode 100644 index b2ed5d2dc..000000000 --- a/patches/minecraft/net/minecraft/block/BlockRedstoneDiode.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockRedstoneDiode.java -+++ ../src-work/minecraft/net/minecraft/block/BlockRedstoneDiode.java -@@ -200,6 +200,8 @@ - { - EnumFacing enumfacing = (EnumFacing)p_176400_3_.func_177229_b(field_176387_N); - BlockPos blockpos1 = p_176400_2_.func_177972_a(enumfacing.func_176734_d()); -+ if(net.minecraftforge.event.ForgeEventFactory.onNeighborNotify(p_176400_1_, p_176400_2_, p_176400_1_.func_180495_p(p_176400_2_), java.util.EnumSet.of(enumfacing.func_176734_d())).isCanceled()) -+ return; - p_176400_1_.func_180496_d(blockpos1, this); - p_176400_1_.func_175695_a(blockpos1, this, enumfacing); - } diff --git a/patches/minecraft/net/minecraft/block/BlockRedstoneOre.java.patch b/patches/minecraft/net/minecraft/block/BlockRedstoneOre.java.patch deleted file mode 100644 index 7716b8837..000000000 --- a/patches/minecraft/net/minecraft/block/BlockRedstoneOre.java.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockRedstoneOre.java -+++ ../src-work/minecraft/net/minecraft/block/BlockRedstoneOre.java -@@ -92,12 +92,16 @@ - public void func_180653_a(World p_180653_1_, BlockPos p_180653_2_, IBlockState p_180653_3_, float p_180653_4_, int p_180653_5_) - { - super.func_180653_a(p_180653_1_, p_180653_2_, p_180653_3_, p_180653_4_, p_180653_5_); -+ } - -- if (this.func_180660_a(p_180653_3_, p_180653_1_.field_73012_v, p_180653_5_) != Item.func_150898_a(this)) -+ @Override -+ public int getExpDrop(net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) -+ { -+ if (this.func_180660_a(world.func_180495_p(pos), RANDOM, fortune) != Item.func_150898_a(this)) - { -- int j = 1 + p_180653_1_.field_73012_v.nextInt(5); -- this.func_180637_b(p_180653_1_, p_180653_2_, j); -+ return 1 + RANDOM.nextInt(5); - } -+ return 0; - } - - @SideOnly(Side.CLIENT) diff --git a/patches/minecraft/net/minecraft/block/BlockRedstoneWire.java.patch b/patches/minecraft/net/minecraft/block/BlockRedstoneWire.java.patch deleted file mode 100644 index b6a66a746..000000000 --- a/patches/minecraft/net/minecraft/block/BlockRedstoneWire.java.patch +++ /dev/null @@ -1,59 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockRedstoneWire.java -+++ ../src-work/minecraft/net/minecraft/block/BlockRedstoneWire.java -@@ -60,10 +60,10 @@ - BlockPos blockpos1 = p_176341_2_.func_177972_a(p_176341_3_); - Block block = p_176341_1_.func_180495_p(p_176341_2_.func_177972_a(p_176341_3_)).func_177230_c(); - -- if (!func_176343_a(p_176341_1_.func_180495_p(blockpos1), p_176341_3_) && (block.func_149637_q() || !func_176346_d(p_176341_1_.func_180495_p(blockpos1.func_177977_b())))) -+ if (!canRestoneConnect(p_176341_1_, blockpos1, p_176341_3_) && (block.func_149637_q() || !canRestoneConnect(p_176341_1_, blockpos1.func_177977_b(), null))) - { - Block block1 = p_176341_1_.func_180495_p(p_176341_2_.func_177984_a()).func_177230_c(); -- return !block1.func_149637_q() && block.func_149637_q() && func_176346_d(p_176341_1_.func_180495_p(blockpos1.func_177984_a())) ? BlockRedstoneWire.EnumAttachPosition.UP : BlockRedstoneWire.EnumAttachPosition.NONE; -+ return !block1.func_149637_q() && block.func_149637_q() && canRestoneConnect(p_176341_1_, blockpos1.func_177984_a(), null) ? BlockRedstoneWire.EnumAttachPosition.UP : BlockRedstoneWire.EnumAttachPosition.NONE; - } - else - { -@@ -393,35 +393,25 @@ - Block block = iblockstate.func_177230_c(); - boolean flag = block.func_149721_r(); - boolean flag1 = p_176339_1_.func_180495_p(p_176339_2_.func_177984_a()).func_177230_c().func_149721_r(); -- return !flag1 && flag && func_176340_e(p_176339_1_, blockpos1.func_177984_a()) ? true : (func_176343_a(iblockstate, p_176339_3_) ? true : (block == Blocks.field_150416_aS && iblockstate.func_177229_b(BlockRedstoneDiode.field_176387_N) == p_176339_3_ ? true : !flag && func_176340_e(p_176339_1_, blockpos1.func_177977_b()))); -+ return !flag1 && flag && canRestoneConnect(p_176339_1_, blockpos1.func_177984_a(), null) ? true : (canRestoneConnect(p_176339_1_, blockpos1, p_176339_3_) ? true : (block == Blocks.field_150416_aS && iblockstate.func_177229_b(BlockRedstoneDiode.field_176387_N) == p_176339_3_ ? true : !flag && canRestoneConnect(p_176339_1_, blockpos1.func_177977_b(), null))); - } - -- protected static boolean func_176340_e(IBlockAccess p_176340_0_, BlockPos p_176340_1_) -+ protected static boolean canRestoneConnect(IBlockAccess world, BlockPos pos, EnumFacing side) - { -- return func_176346_d(p_176340_0_.func_180495_p(p_176340_1_)); -- } -+ IBlockState state = world.func_180495_p(pos); - -- protected static boolean func_176346_d(IBlockState p_176346_0_) -- { -- return func_176343_a(p_176346_0_, (EnumFacing)null); -- } -- -- protected static boolean func_176343_a(IBlockState p_176343_0_, EnumFacing p_176343_1_) -- { -- Block block = p_176343_0_.func_177230_c(); -- -- if (block == Blocks.field_150488_af) -+ if (state.func_177230_c() == Blocks.field_150488_af) - { - return true; - } -- else if (Blocks.field_150413_aR.func_149907_e(block)) -+ else if (Blocks.field_150413_aR.func_149907_e(state.func_177230_c())) - { -- EnumFacing enumfacing1 = (EnumFacing)p_176343_0_.func_177229_b(BlockRedstoneRepeater.field_176387_N); -- return enumfacing1 == p_176343_1_ || enumfacing1.func_176734_d() == p_176343_1_; -+ EnumFacing direction = (EnumFacing)state.func_177229_b(BlockRedstoneRepeater.field_176387_N); -+ return direction == side || direction.func_176734_d() == side; - } - else - { -- return block.func_149744_f() && p_176343_1_ != null; -+ return state.func_177230_c().canConnectRedstone(world, pos, side); - } - } - diff --git a/patches/minecraft/net/minecraft/block/BlockSapling.java.patch b/patches/minecraft/net/minecraft/block/BlockSapling.java.patch deleted file mode 100644 index b7fa64ce7..000000000 --- a/patches/minecraft/net/minecraft/block/BlockSapling.java.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockSapling.java -+++ ../src-work/minecraft/net/minecraft/block/BlockSapling.java -@@ -66,6 +66,7 @@ - - public void func_176476_e(World p_176476_1_, BlockPos p_176476_2_, IBlockState p_176476_3_, Random p_176476_4_) - { -+ if (!net.minecraftforge.event.terraingen.TerrainGen.saplingGrowTree(p_176476_1_, p_176476_4_, p_176476_2_)) return; - Object object = p_176476_4_.nextInt(10) == 0 ? new WorldGenBigTree(true) : new WorldGenTrees(true); - int i = 0; - int j = 0; diff --git a/patches/minecraft/net/minecraft/block/BlockSkull.java.patch b/patches/minecraft/net/minecraft/block/BlockSkull.java.patch deleted file mode 100644 index 9fd41a780..000000000 --- a/patches/minecraft/net/minecraft/block/BlockSkull.java.patch +++ /dev/null @@ -1,55 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockSkull.java -+++ ../src-work/minecraft/net/minecraft/block/BlockSkull.java -@@ -122,8 +122,6 @@ - return tileentity instanceof TileEntitySkull ? ((TileEntitySkull)tileentity).func_145904_a() : super.func_176222_j(p_176222_1_, p_176222_2_); - } - -- public void func_180653_a(World p_180653_1_, BlockPos p_180653_2_, IBlockState p_180653_3_, float p_180653_4_, int p_180653_5_) {} -- - public void func_176208_a(World p_176208_1_, BlockPos p_176208_2_, IBlockState p_176208_3_, EntityPlayer p_176208_4_) - { - if (p_176208_4_.field_71075_bZ.field_75098_d) -@@ -131,13 +129,18 @@ - p_176208_3_ = p_176208_3_.func_177226_a(field_176417_b, Boolean.valueOf(true)); - p_176208_1_.func_180501_a(p_176208_2_, p_176208_3_, 4); - } -+ this.func_176226_b(p_176208_1_, p_176208_2_, p_176208_3_, 0); - - super.func_176208_a(p_176208_1_, p_176208_2_, p_176208_3_, p_176208_4_); - } - - public void func_180663_b(World p_180663_1_, BlockPos p_180663_2_, IBlockState p_180663_3_) - { -- if (!p_180663_1_.field_72995_K) -+ super.func_180663_b(p_180663_1_, p_180663_2_, p_180663_3_); -+ } -+ public java.util.List getDrops(IBlockAccess p_180663_1_, BlockPos p_180663_2_, IBlockState p_180663_3_, int fortune) -+ { -+ java.util.List ret = new java.util.ArrayList(); - { - if (!((Boolean)p_180663_3_.func_177229_b(field_176417_b)).booleanValue()) - { -@@ -146,7 +149,7 @@ - if (tileentity instanceof TileEntitySkull) - { - TileEntitySkull tileentityskull = (TileEntitySkull)tileentity; -- ItemStack itemstack = new ItemStack(Items.field_151144_bL, 1, this.func_176222_j(p_180663_1_, p_180663_2_)); -+ ItemStack itemstack = new ItemStack(Items.field_151144_bL, 1, tileentityskull.func_145904_a()); - - if (tileentityskull.func_145904_a() == 3 && tileentityskull.func_152108_a() != null) - { -@@ -156,12 +159,11 @@ - itemstack.func_77978_p().func_74782_a("SkullOwner", nbttagcompound); - } - -- func_180635_a(p_180663_1_, p_180663_2_, itemstack); -+ ret.add(itemstack); - } - } -- -- super.func_180663_b(p_180663_1_, p_180663_2_, p_180663_3_); - } -+ return ret; - } - - public Item func_180660_a(IBlockState p_180660_1_, Random p_180660_2_, int p_180660_3_) diff --git a/patches/minecraft/net/minecraft/block/BlockSnow.java.patch b/patches/minecraft/net/minecraft/block/BlockSnow.java.patch deleted file mode 100644 index c7c1efbf1..000000000 --- a/patches/minecraft/net/minecraft/block/BlockSnow.java.patch +++ /dev/null @@ -1,53 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockSnow.java -+++ ../src-work/minecraft/net/minecraft/block/BlockSnow.java -@@ -80,7 +80,7 @@ - { - IBlockState iblockstate = p_176196_1_.func_180495_p(p_176196_2_.func_177977_b()); - Block block = iblockstate.func_177230_c(); -- return block != Blocks.field_150432_aD && block != Blocks.field_150403_cj ? (block.func_149688_o() == Material.field_151584_j ? true : (block == this && ((Integer)iblockstate.func_177229_b(field_176315_a)).intValue() == 7 ? true : block.func_149662_c() && block.field_149764_J.func_76230_c())) : false; -+ return block != Blocks.field_150432_aD && block != Blocks.field_150403_cj ? (block.isLeaves(p_176196_1_, p_176196_2_.func_177977_b()) ? true : (block == this && ((Integer)iblockstate.func_177229_b(field_176315_a)).intValue() == 7 ? true : block.func_149662_c() && block.field_149764_J.func_76230_c())) : false; - } - - public void func_176204_a(World p_176204_1_, BlockPos p_176204_2_, IBlockState p_176204_3_, Block p_176204_4_) -@@ -92,7 +92,6 @@ - { - if (!this.func_176196_c(p_176314_1_, p_176314_2_)) - { -- this.func_176226_b(p_176314_1_, p_176314_2_, p_176314_3_, 0); - p_176314_1_.func_175698_g(p_176314_2_); - return false; - } -@@ -104,9 +103,8 @@ - - public void func_180657_a(World p_180657_1_, EntityPlayer p_180657_2_, BlockPos p_180657_3_, IBlockState p_180657_4_, TileEntity p_180657_5_) - { -- func_180635_a(p_180657_1_, p_180657_3_, new ItemStack(Items.field_151126_ay, ((Integer)p_180657_4_.func_177229_b(field_176315_a)).intValue() + 1, 0)); -+ super.func_180657_a(p_180657_1_, p_180657_2_, p_180657_3_, p_180657_4_, p_180657_5_); - p_180657_1_.func_175698_g(p_180657_3_); -- p_180657_2_.func_71029_a(StatList.field_75934_C[Block.func_149682_b(this)]); - } - - public Item func_180660_a(IBlockState p_180660_1_, Random p_180660_2_, int p_180660_3_) -@@ -116,14 +114,13 @@ - - public int func_149745_a(Random p_149745_1_) - { -- return 0; -+ return 1; - } - - public void func_180650_b(World p_180650_1_, BlockPos p_180650_2_, IBlockState p_180650_3_, Random p_180650_4_) - { - if (p_180650_1_.func_175642_b(EnumSkyBlock.BLOCK, p_180650_2_) > 11) - { -- this.func_176226_b(p_180650_1_, p_180650_2_, p_180650_1_.func_180495_p(p_180650_2_), 0); - p_180650_1_.func_175698_g(p_180650_2_); - } - } -@@ -153,4 +150,6 @@ - { - return new BlockState(this, new IProperty[] {field_176315_a}); - } -+ -+ @Override public int quantityDropped(IBlockState state, int fortune, Random random){ return ((Integer)state.func_177229_b(field_176315_a)) + 1; } - } diff --git a/patches/minecraft/net/minecraft/block/BlockStem.java.patch b/patches/minecraft/net/minecraft/block/BlockStem.java.patch deleted file mode 100644 index ab4a31800..000000000 --- a/patches/minecraft/net/minecraft/block/BlockStem.java.patch +++ /dev/null @@ -1,45 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockStem.java -+++ ../src-work/minecraft/net/minecraft/block/BlockStem.java -@@ -108,7 +108,7 @@ - p_180650_2_ = p_180650_2_.func_177972_a(EnumFacing.Plane.HORIZONTAL.func_179518_a(p_180650_4_)); - Block block = p_180650_1_.func_180495_p(p_180650_2_.func_177977_b()).func_177230_c(); - -- if (p_180650_1_.func_180495_p(p_180650_2_).func_177230_c().field_149764_J == Material.field_151579_a && (block == Blocks.field_150458_ak || block == Blocks.field_150346_d || block == Blocks.field_150349_c)) -+ if (p_180650_1_.func_175623_d(p_180650_2_) && (block.canSustainPlant(p_180650_1_, p_180650_2_.func_177977_b(), EnumFacing.UP, this) || block == Blocks.field_150346_d || block == Blocks.field_150349_c)) - { - p_180650_1_.func_175656_a(p_180650_2_, this.field_149877_a.func_176223_P()); - } -@@ -162,24 +162,29 @@ - public void func_180653_a(World p_180653_1_, BlockPos p_180653_2_, IBlockState p_180653_3_, float p_180653_4_, int p_180653_5_) - { - super.func_180653_a(p_180653_1_, p_180653_2_, p_180653_3_, p_180653_4_, p_180653_5_); -+ } - -- if (!p_180653_1_.field_72995_K) -+ @Override -+ public java.util.List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) -+ { -+ java.util.List ret = new java.util.ArrayList(); - { - Item item = this.func_176481_j(); - - if (item != null) - { -- int j = ((Integer)p_180653_3_.func_177229_b(field_176484_a)).intValue(); -+ int j = ((Integer)state.func_177229_b(field_176484_a)).intValue(); - - for (int k = 0; k < 3; ++k) - { -- if (p_180653_1_.field_73012_v.nextInt(15) <= j) -+ if (RANDOM.nextInt(15) <= j) - { -- func_180635_a(p_180653_1_, p_180653_2_, new ItemStack(item)); -+ ret.add(new ItemStack(item)); - } - } - } - } -+ return ret; - } - - protected Item func_176481_j() diff --git a/patches/minecraft/net/minecraft/block/BlockTallGrass.java.patch b/patches/minecraft/net/minecraft/block/BlockTallGrass.java.patch deleted file mode 100644 index df5c0a009..000000000 --- a/patches/minecraft/net/minecraft/block/BlockTallGrass.java.patch +++ /dev/null @@ -1,66 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockTallGrass.java -+++ ../src-work/minecraft/net/minecraft/block/BlockTallGrass.java -@@ -23,7 +23,7 @@ - import net.minecraftforge.fml.relauncher.Side; - import net.minecraftforge.fml.relauncher.SideOnly; - --public class BlockTallGrass extends BlockBush implements IGrowable -+public class BlockTallGrass extends BlockBush implements IGrowable, net.minecraftforge.common.IShearable - { - public static final PropertyEnum field_176497_a = PropertyEnum.func_177709_a("type", BlockTallGrass.EnumType.class); - private static final String __OBFID = "CL_00000321"; -@@ -44,7 +44,7 @@ - - public boolean func_180671_f(World p_180671_1_, BlockPos p_180671_2_, IBlockState p_180671_3_) - { -- return this.func_149854_a(p_180671_1_.func_180495_p(p_180671_2_.func_177977_b()).func_177230_c()); -+ return super.func_180671_f(p_180671_1_, p_180671_2_, p_180671_3_); - } - - public boolean func_176200_f(World p_176200_1_, BlockPos p_176200_2_) -@@ -74,7 +74,7 @@ - - public Item func_180660_a(IBlockState p_180660_1_, Random p_180660_2_, int p_180660_3_) - { -- return p_180660_2_.nextInt(8) == 0 ? Items.field_151014_N : null; -+ return null; - } - - public int func_149679_a(int p_149679_1_, Random p_149679_2_) -@@ -84,13 +84,7 @@ - - public void func_180657_a(World p_180657_1_, EntityPlayer p_180657_2_, BlockPos p_180657_3_, IBlockState p_180657_4_, TileEntity p_180657_5_) - { -- if (!p_180657_1_.field_72995_K && p_180657_2_.func_71045_bC() != null && p_180657_2_.func_71045_bC().func_77973_b() == Items.field_151097_aZ) - { -- p_180657_2_.func_71029_a(StatList.field_75934_C[Block.func_149682_b(this)]); -- func_180635_a(p_180657_1_, p_180657_3_, new ItemStack(Blocks.field_150329_H, 1, ((BlockTallGrass.EnumType)p_180657_4_.func_177229_b(field_176497_a)).func_177044_a())); -- } -- else -- { - super.func_180657_a(p_180657_1_, p_180657_2_, p_180657_3_, p_180657_4_, p_180657_5_); - } - } -@@ -210,4 +204,22 @@ - } - } - } -+ -+ @Override public boolean isShearable(ItemStack item, IBlockAccess world, BlockPos pos){ return true; } -+ @Override -+ public List onSheared(ItemStack item, IBlockAccess world, BlockPos pos, int fortune) -+ { -+ List ret = new java.util.ArrayList(); -+ ret.add(new ItemStack(Blocks.field_150329_H, 1, ((BlockTallGrass.EnumType)world.func_180495_p(pos).func_177229_b(field_176497_a)).func_177044_a())); -+ return ret; -+ } -+ @Override -+ public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) -+ { -+ List ret = new java.util.ArrayList(); -+ if (RANDOM.nextInt(8) != 0) return ret; -+ ItemStack seed = net.minecraftforge.common.ForgeHooks.getGrassSeed(RANDOM); -+ if (seed != null) ret.add(seed); -+ return ret; -+ } - } diff --git a/patches/minecraft/net/minecraft/block/BlockTorch.java.patch b/patches/minecraft/net/minecraft/block/BlockTorch.java.patch deleted file mode 100644 index b7a92250f..000000000 --- a/patches/minecraft/net/minecraft/block/BlockTorch.java.patch +++ /dev/null @@ -1,38 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockTorch.java -+++ ../src-work/minecraft/net/minecraft/block/BlockTorch.java -@@ -70,7 +70,7 @@ - else - { - Block block = p_176594_1_.func_180495_p(p_176594_2_).func_177230_c(); -- return block instanceof BlockFence || block == Blocks.field_150359_w || block == Blocks.field_150463_bK || block == Blocks.field_150399_cn; -+ return block.canPlaceTorchOnTop(p_176594_1_, p_176594_2_); - } - } - -@@ -97,7 +97,7 @@ - { - BlockPos blockpos1 = p_176595_2_.func_177972_a(p_176595_3_.func_176734_d()); - boolean flag = p_176595_3_.func_176740_k().func_176722_c(); -- return flag && p_176595_1_.func_175677_d(blockpos1, true) || p_176595_3_.equals(EnumFacing.UP) && this.func_176594_d(p_176595_1_, blockpos1); -+ return flag && p_176595_1_.isSideSolid(blockpos1, p_176595_3_, true) || p_176595_3_.equals(EnumFacing.UP) && this.func_176594_d(p_176595_1_, blockpos1); - } - - public IBlockState func_180642_a(World p_180642_1_, BlockPos p_180642_2_, EnumFacing p_180642_3_, float p_180642_4_, float p_180642_5_, float p_180642_6_, int p_180642_7_, EntityLivingBase p_180642_8_) -@@ -120,7 +120,7 @@ - - enumfacing1 = (EnumFacing)iterator.next(); - } -- while (!p_180642_1_.func_175677_d(p_180642_2_.func_177972_a(enumfacing1.func_176734_d()), true)); -+ while (!p_180642_1_.isSideSolid(p_180642_2_.func_177972_a(enumfacing1.func_176734_d()), enumfacing1, true)); - - return this.func_176223_P().func_177226_a(field_176596_a, enumfacing1); - } -@@ -149,7 +149,7 @@ - EnumFacing enumfacing1 = enumfacing.func_176734_d(); - boolean flag = false; - -- if (axis.func_176722_c() && !p_176592_1_.func_175677_d(p_176592_2_.func_177972_a(enumfacing1), true)) -+ if (axis.func_176722_c() && !p_176592_1_.isSideSolid(p_176592_2_.func_177972_a(enumfacing1), enumfacing1, true)) - { - flag = true; - } diff --git a/patches/minecraft/net/minecraft/block/BlockTrapDoor.java.patch b/patches/minecraft/net/minecraft/block/BlockTrapDoor.java.patch deleted file mode 100644 index 21ca8d0d9..000000000 --- a/patches/minecraft/net/minecraft/block/BlockTrapDoor.java.patch +++ /dev/null @@ -1,43 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockTrapDoor.java -+++ ../src-work/minecraft/net/minecraft/block/BlockTrapDoor.java -@@ -25,6 +25,8 @@ - - public class BlockTrapDoor extends Block - { -+ /** Set this to allow trapdoors to remain free-floating */ -+ public static boolean disableValidation = false; - public static final PropertyDirection field_176284_a = PropertyDirection.func_177712_a("facing", EnumFacing.Plane.HORIZONTAL); - public static final PropertyBool field_176283_b = PropertyBool.func_177716_a("open"); - public static final PropertyEnum field_176285_M = PropertyEnum.func_177709_a("half", BlockTrapDoor.DoorHalf.class); -@@ -141,9 +143,10 @@ - { - if (!p_176204_1_.field_72995_K) - { -+ EnumFacing direction = (EnumFacing)p_176204_3_.func_177229_b(field_176284_a); - BlockPos blockpos1 = p_176204_2_.func_177972_a(((EnumFacing)p_176204_3_.func_177229_b(field_176284_a)).func_176734_d()); - -- if (!func_150119_a(p_176204_1_.func_180495_p(blockpos1).func_177230_c())) -+ if (!(func_150119_a(p_176204_1_.func_180495_p(blockpos1).func_177230_c()) || p_176204_1_.isSideSolid(blockpos1, direction, true))) - { - p_176204_1_.func_175698_g(p_176204_2_); - this.func_176226_b(p_176204_1_, p_176204_2_, p_176204_3_, 0); -@@ -187,7 +190,10 @@ - - public boolean func_176198_a(World p_176198_1_, BlockPos p_176198_2_, EnumFacing p_176198_3_) - { -- return !p_176198_3_.func_176740_k().func_176720_b() && func_150119_a(p_176198_1_.func_180495_p(p_176198_2_.func_177972_a(p_176198_3_.func_176734_d())).func_177230_c()); -+ if (disableValidation) return true; -+ EnumFacing dir = p_176198_3_.func_176734_d(); -+ p_176198_2_ = p_176198_2_.func_177972_a(dir); -+ return !p_176198_3_.func_176740_k().func_176720_b() && (func_150119_a(p_176198_1_.func_180495_p(p_176198_2_).func_177230_c()) || p_176198_1_.isSideSolid(p_176198_2_, p_176198_3_, true)); - } - - protected static EnumFacing func_176281_b(int p_176281_0_) -@@ -224,6 +230,7 @@ - - private static boolean func_150119_a(Block p_150119_0_) - { -+ if (disableValidation) return true; - return p_150119_0_.field_149764_J.func_76218_k() && p_150119_0_.func_149686_d() || p_150119_0_ == Blocks.field_150426_aN || p_150119_0_ instanceof BlockSlab || p_150119_0_ instanceof BlockStairs; - } - diff --git a/patches/minecraft/net/minecraft/block/BlockTripWireHook.java.patch b/patches/minecraft/net/minecraft/block/BlockTripWireHook.java.patch deleted file mode 100644 index f5b18908b..000000000 --- a/patches/minecraft/net/minecraft/block/BlockTripWireHook.java.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/BlockTripWireHook.java -+++ ../src-work/minecraft/net/minecraft/block/BlockTripWireHook.java -@@ -60,7 +60,7 @@ - - public boolean func_176198_a(World p_176198_1_, BlockPos p_176198_2_, EnumFacing p_176198_3_) - { -- return p_176198_3_.func_176740_k().func_176722_c() && p_176198_1_.func_180495_p(p_176198_2_.func_177972_a(p_176198_3_.func_176734_d())).func_177230_c().func_149721_r(); -+ return p_176198_3_.func_176740_k().func_176722_c() && p_176198_1_.isSideSolid(p_176198_2_.func_177972_a(p_176198_3_.func_176734_d()), p_176198_3_, true); - } - - public boolean func_176196_c(World p_176196_1_, BlockPos p_176196_2_) -@@ -77,7 +77,7 @@ - - enumfacing = (EnumFacing)iterator.next(); - } -- while (!p_176196_1_.func_180495_p(p_176196_2_.func_177972_a(enumfacing)).func_177230_c().func_149721_r()); -+ while (!p_176196_1_.isSideSolid(p_176196_2_.func_177972_a(enumfacing), enumfacing.func_176734_d(), true)); - - return true; - } -@@ -107,7 +107,7 @@ - { - EnumFacing enumfacing = (EnumFacing)p_176204_3_.func_177229_b(field_176264_a); - -- if (!p_176204_1_.func_180495_p(p_176204_2_.func_177972_a(enumfacing.func_176734_d())).func_177230_c().func_149721_r()) -+ if (!p_176204_1_.isSideSolid(p_176204_2_.func_177972_a(enumfacing.func_176734_d()), enumfacing, true)) - { - this.func_176226_b(p_176204_1_, p_176204_2_, p_176204_3_, 0); - p_176204_1_.func_175698_g(p_176204_2_); diff --git a/patches/minecraft/net/minecraft/block/state/BlockPistonStructureHelper.java.patch b/patches/minecraft/net/minecraft/block/state/BlockPistonStructureHelper.java.patch deleted file mode 100644 index aaff29d17..000000000 --- a/patches/minecraft/net/minecraft/block/state/BlockPistonStructureHelper.java.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/block/state/BlockPistonStructureHelper.java -+++ ../src-work/minecraft/net/minecraft/block/state/BlockPistonStructureHelper.java -@@ -80,7 +80,7 @@ - { - Block block = this.field_177261_a.func_180495_p(p_177251_1_).func_177230_c(); - -- if (block.func_149688_o() == Material.field_151579_a) -+ if (block.isAir(field_177261_a, p_177251_1_)) - { - return true; - } -@@ -111,7 +111,7 @@ - BlockPos blockpos1 = p_177251_1_.func_177967_a(this.field_177257_d.func_176734_d(), i); - block = this.field_177261_a.func_180495_p(blockpos1).func_177230_c(); - -- if (block.func_149688_o() == Material.field_151579_a || !BlockPistonBase.func_180696_a(block, this.field_177261_a, blockpos1, this.field_177257_d, false) || blockpos1.equals(this.field_177259_b)) -+ if (block.isAir(field_177261_a, blockpos1)|| !BlockPistonBase.func_180696_a(block, this.field_177261_a, blockpos1, this.field_177257_d, false) || blockpos1.equals(this.field_177259_b)) - { - break; - } -@@ -159,7 +159,7 @@ - - block = this.field_177261_a.func_180495_p(blockpos2).func_177230_c(); - -- if (block.func_149688_o() == Material.field_151579_a) -+ if (block.isAir(field_177261_a, blockpos2)) - { - return true; - } diff --git a/patches/minecraft/net/minecraft/client/LoadingScreenRenderer.java.patch b/patches/minecraft/net/minecraft/client/LoadingScreenRenderer.java.patch deleted file mode 100644 index 9cbf23085..000000000 --- a/patches/minecraft/net/minecraft/client/LoadingScreenRenderer.java.patch +++ /dev/null @@ -1,26 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/LoadingScreenRenderer.java -+++ ../src-work/minecraft/net/minecraft/client/LoadingScreenRenderer.java -@@ -139,6 +139,10 @@ - GlStateManager.func_179086_m(16640); - } - -+ try -+ { -+ if (!net.minecraftforge.fml.client.FMLClientHandler.instance().handleLoadingScreen(scaledresolution)) //FML Don't render while FML's pre-screen is rendering -+ { - Tessellator tessellator = Tessellator.func_178181_a(); - WorldRenderer worldrenderer = tessellator.func_178180_c(); - this.field_73725_b.func_110434_K().func_110577_a(Gui.field_110325_k); -@@ -177,6 +181,12 @@ - GlStateManager.func_179120_a(770, 771, 1, 0); - this.field_73725_b.field_71466_p.func_175063_a(this.field_73726_c, (float)((l - this.field_73725_b.field_71466_p.func_78256_a(this.field_73726_c)) / 2), (float)(i1 / 2 - 4 - 16), 16777215); - this.field_73725_b.field_71466_p.func_175063_a(this.field_73727_a, (float)((l - this.field_73725_b.field_71466_p.func_78256_a(this.field_73727_a)) / 2), (float)(i1 / 2 - 4 + 8), 16777215); -+ } -+ } -+ catch (java.io.IOException e) -+ { -+ com.google.common.base.Throwables.propagate(e); -+ } //FML End - this.field_146588_g.func_147609_e(); - - if (OpenGlHelper.func_148822_b()) diff --git a/patches/minecraft/net/minecraft/client/Minecraft.java.patch b/patches/minecraft/net/minecraft/client/Minecraft.java.patch deleted file mode 100644 index 28fcaf824..000000000 --- a/patches/minecraft/net/minecraft/client/Minecraft.java.patch +++ /dev/null @@ -1,476 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/Minecraft.java -+++ ../src-work/minecraft/net/minecraft/client/Minecraft.java -@@ -296,7 +296,6 @@ - this.field_152355_az = (new YggdrasilAuthenticationService(p_i45547_1_.field_178745_a.field_178751_c, UUID.randomUUID().toString())).createMinecraftSessionService(); - this.field_71449_j = p_i45547_1_.field_178745_a.field_178752_a; - field_147123_G.info("Setting user: " + this.field_71449_j.func_111285_a()); -- field_147123_G.info("(Session ID is " + this.field_71449_j.func_111286_b() + ")"); - this.field_71459_aj = p_i45547_1_.field_178741_d.field_178756_a; - this.field_71443_c = p_i45547_1_.field_178743_b.field_178764_a > 0 ? p_i45547_1_.field_178743_b.field_178764_a : 1; - this.field_71440_d = p_i45547_1_.field_178743_b.field_178762_b > 0 ? p_i45547_1_.field_178743_b.field_178762_b : 1; -@@ -411,10 +410,10 @@ - this.field_110451_am = new SimpleReloadableResourceManager(this.field_110452_an); - this.field_135017_as = new LanguageManager(this.field_110452_an, this.field_71474_y.field_74363_ab); - this.field_110451_am.func_110542_a(this.field_135017_as); -- this.func_110436_a(); -+ net.minecraftforge.fml.client.FMLClientHandler.instance().beginMinecraftLoading(this, this.field_110449_ao, this.field_110451_am); - this.field_71446_o = new TextureManager(this.field_110451_am); - this.field_110451_am.func_110542_a(this.field_71446_o); -- this.func_180510_a(this.field_71446_o); -+ net.minecraftforge.fml.client.SplashProgress.drawVanillaScreen(this.field_71446_o); - this.func_175595_al(); - this.field_152350_aA = new SkinManager(this.field_71446_o, new File(this.field_110446_Y, "skins"), this.field_152355_az); - this.field_71469_aa = new AnvilSaveConverter(new File(this.field_71412_D, "saves")); -@@ -450,6 +449,8 @@ - } - }); - this.field_71417_B = new MouseHelper(); -+ net.minecraftforge.fml.common.ProgressManager.ProgressBar bar= net.minecraftforge.fml.common.ProgressManager.push("Rendering Setup", 5, true); -+ bar.step("GL Setup"); - this.func_71361_d("Pre startup"); - GlStateManager.func_179098_w(); - GlStateManager.func_179103_j(7425); -@@ -463,17 +464,21 @@ - GlStateManager.func_179096_D(); - GlStateManager.func_179128_n(5888); - this.func_71361_d("Startup"); -- this.field_147128_au = new TextureMap("textures"); -+ bar.step("Loading Texture Map"); -+ this.field_147128_au = new TextureMap("textures",true); - this.field_147128_au.func_147633_a(this.field_71474_y.field_151442_I); - this.field_71446_o.func_110580_a(TextureMap.field_110575_b, this.field_147128_au); - this.field_71446_o.func_110577_a(TextureMap.field_110575_b); - this.field_147128_au.func_174937_a(false, this.field_71474_y.field_151442_I > 0); -+ bar.step("Loading Model Manager"); - this.field_175617_aL = new ModelManager(this.field_147128_au); - this.field_110451_am.func_110542_a(this.field_175617_aL); -+ bar.step("Loading Item Renderer"); - this.field_175621_X = new RenderItem(this.field_71446_o, this.field_175617_aL); - this.field_175616_W = new RenderManager(this.field_71446_o, this.field_175621_X); - this.field_175620_Y = new ItemRenderer(this); - this.field_110451_am.func_110542_a(this.field_175621_X); -+ bar.step("Loading Entity Renderer"); - this.field_71460_t = new EntityRenderer(this, this.field_110451_am); - this.field_110451_am.func_110542_a(this.field_71460_t); - this.field_175618_aM = new BlockRendererDispatcher(this.field_175617_aL.func_174954_c(), this.field_71474_y); -@@ -483,22 +488,25 @@ - this.field_71458_u = new GuiAchievement(this); - GlStateManager.func_179083_b(0, 0, this.field_71443_c, this.field_71440_d); - this.field_71452_i = new EffectRenderer(this.field_71441_e, this.field_71446_o); -+ net.minecraftforge.fml.common.ProgressManager.pop(bar); -+ net.minecraftforge.fml.client.FMLClientHandler.instance().finishMinecraftLoading(); - this.func_71361_d("Post startup"); -- this.field_71456_v = new GuiIngame(this); -+ this.field_71456_v = new net.minecraftforge.client.GuiIngameForge(this); - - if (this.field_71475_ae != null) - { -- this.func_147108_a(new GuiConnecting(new GuiMainMenu(), this, this.field_71475_ae, this.field_71477_af)); -+ net.minecraftforge.fml.client.FMLClientHandler.instance().connectToServerAtStartup(this.field_71475_ae, this.field_71477_af); - } - else - { - this.func_147108_a(new GuiMainMenu()); - } - -- this.field_71446_o.func_147645_c(this.field_152354_ay); -+ net.minecraftforge.fml.client.SplashProgress.clearVanillaResources(field_71446_o, field_152354_ay); - this.field_152354_ay = null; - this.field_71461_s = new LoadingScreenRenderer(this); - -+ net.minecraftforge.fml.client.FMLClientHandler.instance().onInitializationComplete(); - if (this.field_71474_y.field_74353_u && !this.field_71431_Q) - { - this.func_71352_k(); -@@ -682,21 +690,23 @@ - File file2 = new File(file1, "crash-" + (new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss")).format(new Date()) + "-client.txt"); - Bootstrap.func_179870_a(p_71377_1_.func_71502_e()); - -+ int retVal; - if (p_71377_1_.func_71497_f() != null) - { - Bootstrap.func_179870_a("#@!@# Game crashed! Crash report saved to: #@!@# " + p_71377_1_.func_71497_f()); -- System.exit(-1); -+ retVal = -1; - } - else if (p_71377_1_.func_147149_a(file2)) - { - Bootstrap.func_179870_a("#@!@# Game crashed! Crash report saved to: #@!@# " + file2.getAbsolutePath()); -- System.exit(-1); -+ retVal = -1; - } - else - { - Bootstrap.func_179870_a("#@?@# Game crashed! Crash report could not be saved. #@?@#"); -- System.exit(-2); -+ retVal = -2; - } -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().handleExit(retVal); - } - - public boolean func_152349_b() -@@ -888,11 +898,6 @@ - - public void func_147108_a(GuiScreen p_147108_1_) - { -- if (this.field_71462_r != null) -- { -- this.field_71462_r.func_146281_b(); -- } -- - if (p_147108_1_ == null && this.field_71441_e == null) - { - p_147108_1_ = new GuiMainMenu(); -@@ -902,6 +907,17 @@ - p_147108_1_ = new GuiGameOver(); - } - -+ GuiScreen old = this.field_71462_r; -+ net.minecraftforge.client.event.GuiOpenEvent event = new net.minecraftforge.client.event.GuiOpenEvent(p_147108_1_); -+ -+ if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) return; -+ -+ p_147108_1_ = event.gui; -+ if (old != null && p_147108_1_ != old) -+ { -+ old.func_146281_b(); -+ } -+ - if (p_147108_1_ instanceof GuiMainMenu) - { - this.field_71474_y.field_74330_P = false; -@@ -1000,7 +1016,7 @@ - { - while (!this.field_152351_aB.isEmpty()) - { -- ((FutureTask)this.field_152351_aB.poll()).run(); -+ net.minecraftforge.fml.common.FMLCommonHandler.callFuture(((FutureTask)this.field_152351_aB.poll())); - } - } - -@@ -1035,9 +1051,11 @@ - - if (!this.field_71454_w) - { -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().onRenderTickStart(this.field_71428_T.field_74281_c); - this.field_71424_I.func_76318_c("gameRenderer"); - this.field_71460_t.func_78480_b(this.field_71428_T.field_74281_c); - this.field_71424_I.func_76319_b(); -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().onRenderTickEnd(this.field_71428_T.field_74281_c); - } - - this.field_71424_I.func_76319_b(); -@@ -1383,7 +1401,7 @@ - - if (this.field_71441_e.func_180495_p(blockpos).func_177230_c().func_149688_o() != Material.field_151579_a && this.field_71442_b.func_180512_c(blockpos, this.field_71476_x.field_178784_b)) - { -- this.field_71452_i.func_180532_a(blockpos, this.field_71476_x.field_178784_b); -+ this.field_71452_i.addBlockHitEffects(blockpos, this.field_71476_x); - this.field_71439_g.func_71038_i(); - } - } -@@ -1463,15 +1481,19 @@ - case 2: - BlockPos blockpos = this.field_71476_x.func_178782_a(); - -- if (this.field_71441_e.func_180495_p(blockpos).func_177230_c().func_149688_o() != Material.field_151579_a) -+ if (!this.field_71441_e.func_175623_d(blockpos)) - { - int i = itemstack != null ? itemstack.field_77994_a : 0; - -+ -+ boolean result = !net.minecraftforge.event.ForgeEventFactory.onPlayerInteract(field_71439_g, net.minecraftforge.event.entity.player.PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK, this.field_71441_e, blockpos, this.field_71476_x.field_178784_b).isCanceled(); -+ if (result) { //Forge: Kept separate to simplify patch - if (this.field_71442_b.func_178890_a(this.field_71439_g, this.field_71441_e, itemstack, blockpos, this.field_71476_x.field_178784_b, this.field_71476_x.field_72307_f)) - { - flag = false; - this.field_71439_g.func_71038_i(); - } -+ } - - if (itemstack == null) - { -@@ -1494,7 +1516,8 @@ - { - ItemStack itemstack1 = this.field_71439_g.field_71071_by.func_70448_g(); - -- if (itemstack1 != null && this.field_71442_b.func_78769_a(this.field_71439_g, this.field_71441_e, itemstack1)) -+ boolean result = !net.minecraftforge.event.ForgeEventFactory.onPlayerInteract(field_71439_g, net.minecraftforge.event.entity.player.PlayerInteractEvent.Action.RIGHT_CLICK_AIR, field_71441_e, null, null).isCanceled(); -+ if (result && itemstack1 != null && this.field_71442_b.func_78769_a(this.field_71439_g, this.field_71441_e, itemstack1)) - { - this.field_71460_t.field_78516_c.func_78445_c(); - } -@@ -1592,6 +1615,8 @@ - --this.field_71467_ac; - } - -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().onPreClientTick(); -+ - this.field_71424_I.func_76320_a("gui"); - - if (!this.field_71445_n) -@@ -1690,6 +1715,8 @@ - - while (Mouse.next()) - { -+ if (net.minecraftforge.client.ForgeHooksClient.postMouseEvent()) continue; -+ - i = Mouse.getEventButton(); - KeyBinding.func_74510_a(i - 100, Mouse.getEventButtonState()); - -@@ -1745,6 +1772,7 @@ - this.field_71462_r.func_146274_d(); - } - } -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().fireMouseInput(); - } - - if (this.field_71429_W > 0) -@@ -1921,6 +1949,7 @@ - } - } - } -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().fireKeyInput(); - } - - for (i = 0; i < 9; ++i) -@@ -2121,12 +2150,15 @@ - this.field_71453_ak.func_74428_b(); - } - -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().onPostClientTick(); -+ - this.field_71424_I.func_76319_b(); - this.field_71423_H = func_71386_F(); - } - - public void func_71371_a(String p_71371_1_, String p_71371_2_, WorldSettings p_71371_3_) - { -+ net.minecraftforge.fml.client.FMLClientHandler.instance().startIntegratedServer(p_71371_1_, p_71371_2_, p_71371_3_); - this.func_71403_a((WorldClient)null); - System.gc(); - ISaveHandler isavehandler = this.field_71469_aa.func_75804_a(p_71371_1_, false); -@@ -2162,6 +2194,12 @@ - - while (!this.field_71437_Z.func_71200_ad()) - { -+ if (!net.minecraftforge.fml.common.StartupQuery.check()) -+ { -+ func_71403_a(null); -+ func_147108_a(null); -+ return; -+ } - String s2 = this.field_71437_Z.func_71195_b_(); - - if (s2 != null) -@@ -2187,8 +2225,14 @@ - SocketAddress socketaddress = this.field_71437_Z.func_147137_ag().func_151270_a(); - NetworkManager networkmanager = NetworkManager.func_150722_a(socketaddress); - networkmanager.func_150719_a(new NetHandlerLoginClient(networkmanager, this, (GuiScreen)null)); -- networkmanager.func_179290_a(new C00Handshake(47, socketaddress.toString(), 0, EnumConnectionState.LOGIN)); -- networkmanager.func_179290_a(new C00PacketLoginStart(this.func_110432_I().func_148256_e())); -+ networkmanager.func_179290_a(new C00Handshake(47, socketaddress.toString(), 0, EnumConnectionState.LOGIN, true)); -+ com.mojang.authlib.GameProfile gameProfile = this.func_110432_I().func_148256_e(); -+ if (!this.func_110432_I().hasCachedProperties()) -+ { -+ gameProfile = field_152355_az.fillProfileProperties(gameProfile, true); //Forge: Fill profile properties upon game load. Fixes MC-52974. -+ this.func_110432_I().setProperties(gameProfile.getProperties()); -+ } -+ networkmanager.func_179290_a(new C00PacketLoginStart(gameProfile)); - this.field_71453_ak = networkmanager; - } - -@@ -2199,6 +2243,8 @@ - - public void func_71353_a(WorldClient p_71353_1_, String p_71353_2_) - { -+ if (field_71441_e != null) net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.WorldEvent.Unload(field_71441_e)); -+ - if (p_71353_1_ == null) - { - NetHandlerPlayClient nethandlerplayclient = this.func_147114_u(); -@@ -2212,6 +2258,18 @@ - { - this.field_71437_Z.func_71263_m(); - this.field_71437_Z.func_175592_a(); -+ if (field_71461_s != null) -+ { -+ this.field_71461_s.func_73719_c(I18n.func_135052_a("forge.client.shutdown.internal")); -+ } -+ while (!field_71437_Z.func_71241_aa()) -+ { -+ try -+ { -+ Thread.sleep(10); -+ } -+ catch (InterruptedException ie) {} -+ } - } - - this.field_71437_Z = null; -@@ -2238,6 +2296,7 @@ - - this.func_71351_a((ServerData)null); - this.field_71455_al = false; -+ net.minecraftforge.fml.client.FMLClientHandler.instance().handleClientWorldClosing(this.field_71441_e); - } - - this.field_147127_av.func_147690_c(); -@@ -2342,134 +2401,11 @@ - if (this.field_71476_x != null) - { - boolean flag = this.field_71439_g.field_71075_bZ.field_75098_d; -- int i = 0; -- boolean flag1 = false; -- TileEntity tileentity = null; -- Object object; - -- if (this.field_71476_x.field_72313_a == MovingObjectPosition.MovingObjectType.BLOCK) -- { -- BlockPos blockpos = this.field_71476_x.func_178782_a(); -- Block block = this.field_71441_e.func_180495_p(blockpos).func_177230_c(); -- -- if (block.func_149688_o() == Material.field_151579_a) -- { -- return; -- } -- -- object = block.func_180665_b(this.field_71441_e, blockpos); -- -- if (object == null) -- { -- return; -- } -- -- if (flag && GuiScreen.func_146271_m()) -- { -- tileentity = this.field_71441_e.func_175625_s(blockpos); -- } -- -- Block block1 = object instanceof ItemBlock && !block.func_149648_K() ? Block.func_149634_a((Item)object) : block; -- i = block1.func_176222_j(this.field_71441_e, blockpos); -- flag1 = ((Item)object).func_77614_k(); -- } -- else -- { -- if (this.field_71476_x.field_72313_a != MovingObjectPosition.MovingObjectType.ENTITY || this.field_71476_x.field_72308_g == null || !flag) -- { -- return; -- } -- -- if (this.field_71476_x.field_72308_g instanceof EntityPainting) -- { -- object = Items.field_151159_an; -- } -- else if (this.field_71476_x.field_72308_g instanceof EntityLeashKnot) -- { -- object = Items.field_151058_ca; -- } -- else if (this.field_71476_x.field_72308_g instanceof EntityItemFrame) -- { -- EntityItemFrame entityitemframe = (EntityItemFrame)this.field_71476_x.field_72308_g; -- ItemStack itemstack = entityitemframe.func_82335_i(); -- -- if (itemstack == null) -- { -- object = Items.field_151160_bD; -- } -- else -- { -- object = itemstack.func_77973_b(); -- i = itemstack.func_77960_j(); -- flag1 = true; -- } -- } -- else if (this.field_71476_x.field_72308_g instanceof EntityMinecart) -- { -- EntityMinecart entityminecart = (EntityMinecart)this.field_71476_x.field_72308_g; -- -- switch (Minecraft.SwitchEnumMinecartType.field_178901_b[entityminecart.func_180456_s().ordinal()]) -- { -- case 1: -- object = Items.field_151109_aJ; -- break; -- case 2: -- object = Items.field_151108_aI; -- break; -- case 3: -- object = Items.field_151142_bV; -- break; -- case 4: -- object = Items.field_151140_bW; -- break; -- case 5: -- object = Items.field_151095_cc; -- break; -- default: -- object = Items.field_151143_au; -- } -- } -- else if (this.field_71476_x.field_72308_g instanceof EntityBoat) -- { -- object = Items.field_151124_az; -- } -- else if (this.field_71476_x.field_72308_g instanceof EntityArmorStand) -- { -- object = Items.field_179565_cj; -- } -- else -- { -- object = Items.field_151063_bx; -- i = EntityList.func_75619_a(this.field_71476_x.field_72308_g); -- flag1 = true; -- -- if (!EntityList.field_75627_a.containsKey(Integer.valueOf(i))) -- { -- return; -- } -- } -- } -- - InventoryPlayer inventoryplayer = this.field_71439_g.field_71071_by; - -- if (tileentity == null) -- { -- inventoryplayer.func_146030_a((Item)object, i, flag1, flag); -- } -- else -- { -- NBTTagCompound nbttagcompound1 = new NBTTagCompound(); -- tileentity.func_145841_b(nbttagcompound1); -- ItemStack itemstack1 = new ItemStack((Item)object, 1, i); -- itemstack1.func_77983_a("BlockEntityTag", nbttagcompound1); -- NBTTagCompound nbttagcompound = new NBTTagCompound(); -- NBTTagList nbttaglist = new NBTTagList(); -- nbttaglist.func_74742_a(new NBTTagString("(+NBT)")); -- nbttagcompound.func_74782_a("Lore", nbttaglist); -- itemstack1.func_77983_a("display", nbttagcompound); -- inventoryplayer.func_70299_a(inventoryplayer.field_70461_c, itemstack1); -- } -- -+ if (!net.minecraftforge.common.ForgeHooks.onPickBlock(this.field_71476_x, this.field_71439_g, this.field_71441_e)) return; -+ // We delete this code wholly instead of commenting it out, to make sure we detect changes in it between MC versions - if (flag) - { - int j = this.field_71439_g.field_71069_bz.field_75151_b.size() - 9 + inventoryplayer.field_70461_c; -@@ -2727,18 +2663,8 @@ - - public static int func_71369_N() - { -- for (int i = 16384; i > 0; i >>= 1) -- { -- GL11.glTexImage2D(GL11.GL_PROXY_TEXTURE_2D, 0, GL11.GL_RGBA, i, i, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, (ByteBuffer)null); -- int j = GL11.glGetTexLevelParameteri(GL11.GL_PROXY_TEXTURE_2D, 0, GL11.GL_TEXTURE_WIDTH); -- -- if (j != 0) -- { -- return i; -- } -- } -- -- return -1; -+ //Forge we redirect this to our code which caches the value before any splash screen stuff is done. -+ return net.minecraftforge.fml.client.SplashProgress.getMaxTextureSize(); - } - - public boolean func_70002_Q() diff --git a/patches/minecraft/net/minecraft/client/entity/EntityPlayerSP.java.patch b/patches/minecraft/net/minecraft/client/entity/EntityPlayerSP.java.patch deleted file mode 100644 index 4b546c294..000000000 --- a/patches/minecraft/net/minecraft/client/entity/EntityPlayerSP.java.patch +++ /dev/null @@ -1,80 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/entity/EntityPlayerSP.java -+++ ../src-work/minecraft/net/minecraft/client/entity/EntityPlayerSP.java -@@ -53,6 +53,9 @@ - import net.minecraft.world.World; - import net.minecraftforge.fml.relauncher.Side; - import net.minecraftforge.fml.relauncher.SideOnly; -+import net.minecraftforge.client.ForgeHooksClient; -+import net.minecraftforge.common.MinecraftForge; -+import net.minecraftforge.event.entity.PlaySoundAtEntityEvent; - - @SideOnly(Side.CLIENT) - public class EntityPlayerSP extends AbstractClientPlayer -@@ -342,6 +345,15 @@ - this.field_71159_c.field_71456_v.func_146158_b().func_146227_a(p_146105_1_); - } - -+ private boolean isHeadspaceFree(BlockPos pos, int height) -+ { -+ for (int y = 0; y < height; y++) -+ { -+ if (func_175162_d(pos.func_177982_a(0, y, 0))) return false; -+ } -+ return true; -+ } -+ - protected boolean func_145771_j(double p_145771_1_, double p_145771_3_, double p_145771_5_) - { - if (this.field_70145_X) -@@ -354,30 +366,34 @@ - double d3 = p_145771_1_ - (double)blockpos.func_177958_n(); - double d4 = p_145771_5_ - (double)blockpos.func_177952_p(); - -- if (!this.func_175162_d(blockpos)) -+ int entHeight = Math.max(Math.round(this.field_70131_O), 1); -+ -+ boolean inTranslucentBlock = this.isHeadspaceFree(blockpos, entHeight); -+ -+ if (inTranslucentBlock) - { - byte b0 = -1; - double d5 = 9999.0D; - -- if (this.func_175162_d(blockpos.func_177976_e()) && d3 < d5) -+ if (!this.isHeadspaceFree(blockpos.func_177976_e(), entHeight) && d3 < d5) - { - d5 = d3; - b0 = 0; - } - -- if (this.func_175162_d(blockpos.func_177974_f()) && 1.0D - d3 < d5) -+ if (!this.isHeadspaceFree(blockpos.func_177974_f(), entHeight) && 1.0D - d3 < d5) - { - d5 = 1.0D - d3; - b0 = 1; - } - -- if (this.func_175162_d(blockpos.func_177978_c()) && d4 < d5) -+ if (!this.isHeadspaceFree(blockpos.func_177978_c(), entHeight) && d4 < d5) - { - d5 = d4; - b0 = 4; - } - -- if (this.func_175162_d(blockpos.func_177968_d()) && 1.0D - d4 < d5) -+ if (!this.isHeadspaceFree(blockpos.func_177968_d(), entHeight) && 1.0D - d4 < d5) - { - d5 = 1.0D - d4; - b0 = 5; -@@ -445,6 +461,11 @@ - - public void func_85030_a(String p_85030_1_, float p_85030_2_, float p_85030_3_) - { -+ PlaySoundAtEntityEvent event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(this, p_85030_1_, p_85030_2_, p_85030_3_); -+ if (event.isCanceled() || event.name == null) return; -+ p_85030_1_ = event.name; -+ p_85030_2_ = event.newVolume; -+ p_85030_3_ = event.newPitch; - this.field_70170_p.func_72980_b(this.field_70165_t, this.field_70163_u, this.field_70161_v, p_85030_1_, p_85030_2_, p_85030_3_, false); - } - diff --git a/patches/minecraft/net/minecraft/client/gui/FontRenderer.java.patch b/patches/minecraft/net/minecraft/client/gui/FontRenderer.java.patch deleted file mode 100644 index 8f1d0c6ba..000000000 --- a/patches/minecraft/net/minecraft/client/gui/FontRenderer.java.patch +++ /dev/null @@ -1,155 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/gui/FontRenderer.java -+++ ../src-work/minecraft/net/minecraft/client/gui/FontRenderer.java -@@ -57,7 +57,7 @@ - this.field_111273_g = p_i1035_2_; - this.field_78298_i = p_i1035_3_; - this.field_78293_l = p_i1035_4_; -- p_i1035_3_.func_110577_a(this.field_111273_g); -+ bindTexture(this.field_111273_g); - - for (int i = 0; i < 32; ++i) - { -@@ -97,6 +97,7 @@ - public void func_110549_a(IResourceManager p_110549_1_) - { - this.func_111272_d(); -+ this.func_98306_d(); - } - - private void func_111272_d() -@@ -105,7 +106,7 @@ - - try - { -- bufferedimage = TextureUtil.func_177053_a(Minecraft.func_71410_x().func_110442_L().func_110536_a(this.field_111273_g).func_110527_b()); -+ bufferedimage = TextureUtil.func_177053_a(getResourceInputStream(this.field_111273_g)); - } - catch (IOException ioexception) - { -@@ -172,7 +173,7 @@ - - try - { -- inputstream = Minecraft.func_71410_x().func_110442_L().func_110536_a(new ResourceLocation("font/glyph_sizes.bin")).func_110527_b(); -+ inputstream = getResourceInputStream(new ResourceLocation("font/glyph_sizes.bin")); - inputstream.read(this.field_78287_e); - } - catch (IOException ioexception) -@@ -195,7 +196,7 @@ - float f = (float)(p_78266_1_ % 16 * 8); - float f1 = (float)(p_78266_1_ / 16 * 8); - float f2 = p_78266_2_ ? 1.0F : 0.0F; -- this.field_78298_i.func_110577_a(this.field_111273_g); -+ bindTexture(this.field_111273_g); - float f3 = (float)this.field_78286_d[p_78266_1_] - 0.01F; - GL11.glBegin(GL11.GL_TRIANGLE_STRIP); - GL11.glTexCoord2f(f / 128.0F, f1 / 128.0F); -@@ -222,7 +223,7 @@ - - private void func_78257_a(int p_78257_1_) - { -- this.field_78298_i.func_110577_a(this.func_111271_a(p_78257_1_)); -+ bindTexture(this.func_111271_a(p_78257_1_)); - } - - protected float func_78277_a(char p_78277_1_, boolean p_78277_2_) -@@ -269,7 +270,7 @@ - - public int func_175065_a(String p_175065_1_, float p_175065_2_, float p_175065_3_, int p_175065_4_, boolean p_175065_5_) - { -- GlStateManager.func_179141_d(); -+ enableAlpha(); - this.func_78265_b(); - int j; - -@@ -341,7 +342,7 @@ - - k = this.field_78285_g[j]; - this.field_78304_r = k; -- GlStateManager.func_179131_c((float)(k >> 16) / 255.0F, (float)(k >> 8 & 255) / 255.0F, (float)(k & 255) / 255.0F, this.field_78305_q); -+ setColor((float)(k >> 16) / 255.0F, (float)(k >> 8 & 255) / 255.0F, (float)(k & 255) / 255.0F, this.field_78305_q); - } - else if (j == 16) - { -@@ -370,7 +371,7 @@ - this.field_78299_w = false; - this.field_78300_v = false; - this.field_78301_u = false; -- GlStateManager.func_179131_c(this.field_78291_n, this.field_78292_o, this.field_78306_p, this.field_78305_q); -+ setColor(this.field_78291_n, this.field_78292_o, this.field_78306_p, this.field_78305_q); - } - - ++i; -@@ -390,7 +391,7 @@ - j = k; - } - -- float f1 = this.field_78293_l ? 0.5F : 1.0F; -+ float f1 = func_78263_a(c0) / 32f; - boolean flag1 = (c0 == 0 || j == -1 || this.field_78293_l) && p_78255_2_; - - if (flag1) -@@ -429,6 +430,15 @@ - ++f; - } - -+ doDraw(f); -+ } -+ } -+ } -+ -+ protected void doDraw(float f) -+ { -+ { -+ { - Tessellator tessellator; - WorldRenderer worldrenderer; - -@@ -504,7 +514,7 @@ - this.field_78292_o = (float)(p_180455_4_ >> 8 & 255) / 255.0F; - this.field_78306_p = (float)(p_180455_4_ & 255) / 255.0F; - this.field_78305_q = (float)(p_180455_4_ >> 24 & 255) / 255.0F; -- GlStateManager.func_179131_c(this.field_78291_n, this.field_78292_o, this.field_78306_p, this.field_78305_q); -+ setColor(this.field_78291_n, this.field_78292_o, this.field_78306_p, this.field_78305_q); - this.field_78295_j = p_180455_2_; - this.field_78296_k = p_180455_3_; - this.func_78255_a(p_180455_1_, p_180455_5_); -@@ -583,11 +593,6 @@ - int j = this.field_78287_e[p_78263_1_] >>> 4; - int k = this.field_78287_e[p_78263_1_] & 15; - -- if (k > 7) -- { -- k = 15; -- j = 0; -- } - - ++k; - return (k - j) / 2 + 1; -@@ -842,6 +847,26 @@ - return this.field_78294_m; - } - -+ protected void setColor(float r, float g, float b, float a) -+ { -+ GlStateManager.func_179131_c(r,g,b,a); -+ } -+ -+ protected void enableAlpha() -+ { -+ GlStateManager.func_179141_d(); -+ } -+ -+ protected void bindTexture(ResourceLocation location) -+ { -+ field_78298_i.func_110577_a(location); -+ } -+ -+ protected InputStream getResourceInputStream(ResourceLocation location) throws IOException -+ { -+ return Minecraft.func_71410_x().func_110442_L().func_110536_a(location).func_110527_b(); -+ } -+ - public int func_175064_b(char p_175064_1_) - { - return this.field_78285_g["0123456789abcdef".indexOf(p_175064_1_)]; diff --git a/patches/minecraft/net/minecraft/client/gui/GuiCreateWorld.java.patch b/patches/minecraft/net/minecraft/client/gui/GuiCreateWorld.java.patch deleted file mode 100644 index dbe280e82..000000000 --- a/patches/minecraft/net/minecraft/client/gui/GuiCreateWorld.java.patch +++ /dev/null @@ -1,36 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/gui/GuiCreateWorld.java -+++ ../src-work/minecraft/net/minecraft/client/gui/GuiCreateWorld.java -@@ -213,6 +213,8 @@ - } - } - -+ WorldType.field_77139_a[this.field_146331_K].onGUICreateWorldPress(); -+ - WorldSettings.GameType gametype = WorldSettings.GameType.func_77142_a(this.field_146342_r); - WorldSettings worldsettings = new WorldSettings(i, gametype, this.field_146341_s, this.field_146337_w, WorldType.field_77139_a[this.field_146331_K]); - worldsettings.func_82750_a(this.field_146334_a); -@@ -320,14 +322,7 @@ - } - else if (p_146284_1_.field_146127_k == 8) - { -- if (WorldType.field_77139_a[this.field_146331_K] == WorldType.field_77138_c) -- { -- this.field_146297_k.func_147108_a(new GuiCreateFlatWorld(this, this.field_146334_a)); -- } -- else -- { -- this.field_146297_k.func_147108_a(new GuiCustomizeWorldScreen(this, this.field_146334_a)); -- } -+ WorldType.field_77139_a[this.field_146331_K].onCustomizeButton(field_146297_k, this); - } - } - } -@@ -379,7 +374,7 @@ - this.field_146326_C.field_146125_m = this.field_146344_y; - this.field_146320_D.field_146125_m = this.field_146344_y; - this.field_146321_E.field_146125_m = this.field_146344_y; -- this.field_146322_F.field_146125_m = this.field_146344_y && (WorldType.field_77139_a[this.field_146331_K] == WorldType.field_77138_c || WorldType.field_77139_a[this.field_146331_K] == WorldType.field_180271_f); -+ this.field_146322_F.field_146125_m = this.field_146344_y && WorldType.field_77139_a[this.field_146331_K].isCustomizable(); - } - - this.func_146319_h(); diff --git a/patches/minecraft/net/minecraft/client/gui/GuiIngameMenu.java.patch b/patches/minecraft/net/minecraft/client/gui/GuiIngameMenu.java.patch deleted file mode 100644 index aeca562a4..000000000 --- a/patches/minecraft/net/minecraft/client/gui/GuiIngameMenu.java.patch +++ /dev/null @@ -1,33 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/gui/GuiIngameMenu.java -+++ ../src-work/minecraft/net/minecraft/client/gui/GuiIngameMenu.java -@@ -30,8 +30,9 @@ - - this.field_146292_n.add(new GuiButton(4, this.field_146294_l / 2 - 100, this.field_146295_m / 4 + 24 + b0, I18n.func_135052_a("menu.returnToGame", new Object[0]))); - this.field_146292_n.add(new GuiButton(0, this.field_146294_l / 2 - 100, this.field_146295_m / 4 + 96 + b0, 98, 20, I18n.func_135052_a("menu.options", new Object[0]))); -+ this.field_146292_n.add(new GuiButton(12, this.field_146294_l / 2 + 2, this.field_146295_m / 4 + 96 + b0, 98, 20, I18n.func_135052_a("fml.menu.modoptions"))); - GuiButton guibutton; -- this.field_146292_n.add(guibutton = new GuiButton(7, this.field_146294_l / 2 + 2, this.field_146295_m / 4 + 96 + b0, 98, 20, I18n.func_135052_a("menu.shareToLan", new Object[0]))); -+ this.field_146292_n.add(guibutton = new GuiButton(7, this.field_146294_l / 2 - 100, this.field_146295_m / 4 + 72 + b0, 200, 20, I18n.func_135052_a("menu.shareToLan", new Object[0]))); - this.field_146292_n.add(new GuiButton(5, this.field_146294_l / 2 - 100, this.field_146295_m / 4 + 48 + b0, 98, 20, I18n.func_135052_a("gui.achievements", new Object[0]))); - this.field_146292_n.add(new GuiButton(6, this.field_146294_l / 2 + 2, this.field_146295_m / 4 + 48 + b0, 98, 20, I18n.func_135052_a("gui.stats", new Object[0]))); - guibutton.field_146124_l = this.field_146297_k.func_71356_B() && !this.field_146297_k.func_71401_C().func_71344_c(); -@@ -58,13 +59,19 @@ - this.field_146297_k.func_71381_h(); - break; - case 5: -+ if (this.field_146297_k.field_71439_g != null) - this.field_146297_k.func_147108_a(new GuiAchievements(this, this.field_146297_k.field_71439_g.func_146107_m())); - break; - case 6: -+ if (this.field_146297_k.field_71439_g != null) - this.field_146297_k.func_147108_a(new GuiStats(this, this.field_146297_k.field_71439_g.func_146107_m())); - break; - case 7: - this.field_146297_k.func_147108_a(new GuiShareToLan(this)); -+ break; -+ case 12: -+ net.minecraftforge.fml.client.FMLClientHandler.instance().showInGameModOptions(this); -+ break; - } - } - diff --git a/patches/minecraft/net/minecraft/client/gui/GuiMainMenu.java.patch b/patches/minecraft/net/minecraft/client/gui/GuiMainMenu.java.patch deleted file mode 100644 index 5100ea6a2..000000000 --- a/patches/minecraft/net/minecraft/client/gui/GuiMainMenu.java.patch +++ /dev/null @@ -1,44 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/gui/GuiMainMenu.java -+++ ../src-work/minecraft/net/minecraft/client/gui/GuiMainMenu.java -@@ -198,6 +198,11 @@ - this.field_146292_n.add(new GuiButton(1, this.field_146294_l / 2 - 100, p_73969_1_, I18n.func_135052_a("menu.singleplayer", new Object[0]))); - this.field_146292_n.add(new GuiButton(2, this.field_146294_l / 2 - 100, p_73969_1_ + p_73969_2_ * 1, I18n.func_135052_a("menu.multiplayer", new Object[0]))); - this.field_146292_n.add(this.field_175372_K = new GuiButton(14, this.field_146294_l / 2 - 100, p_73969_1_ + p_73969_2_ * 2, I18n.func_135052_a("menu.online", new Object[0]))); -+ GuiButton fmlModButton = new GuiButton(6, this.field_146294_l / 2 - 100, p_73969_1_ + p_73969_2_ * 2, I18n.func_135052_a("fml.menu.mods")); -+ fmlModButton.field_146128_h = this.field_146294_l / 2 + 2; -+ field_175372_K.field_146120_f = 98; -+ fmlModButton.field_146120_f = 98; -+ this.field_146292_n.add(fmlModButton); - } - - private void func_73972_b(int p_73972_1_, int p_73972_2_) -@@ -245,6 +250,11 @@ - this.field_146297_k.func_71400_g(); - } - -+ if (p_146284_1_.field_146127_k == 6) -+ { -+ this.field_146297_k.func_147108_a(new net.minecraftforge.fml.client.GuiModList(this)); -+ } -+ - if (p_146284_1_.field_146127_k == 11) - { - this.field_146297_k.func_71371_a("Demo_World", "Demo_World", DemoWorldServer.field_73071_a); -@@ -492,7 +502,16 @@ - s = s + " Demo"; - } - -- this.func_73731_b(this.field_146289_q, s, 2, this.field_146295_m - 10, -1); -+ java.util.List brandings = com.google.common.collect.Lists.reverse(net.minecraftforge.fml.common.FMLCommonHandler.instance().getBrandings(true)); -+ for (int i = 0; i < brandings.size(); i++) -+ { -+ String brd = brandings.get(i); -+ if (!com.google.common.base.Strings.isNullOrEmpty(brd)) -+ { -+ this.func_73731_b(this.field_146289_q, brd, 2, this.field_146295_m - ( 10 + i * (this.field_146289_q.field_78288_b + 1)), 16777215); -+ } -+ } -+ net.minecraftforge.client.ForgeHooksClient.renderMainMenu(this, this.field_146289_q, this.field_146294_l, this.field_146295_m); - String s1 = "Copyright Mojang AB. Do not distribute!"; - this.func_73731_b(this.field_146289_q, s1, this.field_146294_l - this.field_146289_q.func_78256_a(s1) - 2, this.field_146295_m - 10, -1); - diff --git a/patches/minecraft/net/minecraft/client/gui/GuiMultiplayer.java.patch b/patches/minecraft/net/minecraft/client/gui/GuiMultiplayer.java.patch deleted file mode 100644 index b3e441a5e..000000000 --- a/patches/minecraft/net/minecraft/client/gui/GuiMultiplayer.java.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/gui/GuiMultiplayer.java -+++ ../src-work/minecraft/net/minecraft/client/gui/GuiMultiplayer.java -@@ -41,6 +41,7 @@ - public GuiMultiplayer(GuiScreen p_i1040_1_) - { - this.field_146798_g = p_i1040_1_; -+ net.minecraftforge.fml.client.FMLClientHandler.instance().setupServerList(); - } - - public void func_73866_w_() -@@ -373,7 +374,7 @@ - - private void func_146791_a(ServerData p_146791_1_) - { -- this.field_146297_k.func_147108_a(new GuiConnecting(this, this.field_146297_k, p_146791_1_)); -+ net.minecraftforge.fml.client.FMLClientHandler.instance().connectToServer(this, p_146791_1_); - } - - public void func_146790_a(int p_146790_1_) diff --git a/patches/minecraft/net/minecraft/client/gui/GuiOverlayDebug.java.patch b/patches/minecraft/net/minecraft/client/gui/GuiOverlayDebug.java.patch deleted file mode 100644 index dc555d651..000000000 --- a/patches/minecraft/net/minecraft/client/gui/GuiOverlayDebug.java.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/gui/GuiOverlayDebug.java -+++ ../src-work/minecraft/net/minecraft/client/gui/GuiOverlayDebug.java -@@ -170,6 +170,9 @@ - long l = j - k; - ArrayList arraylist = Lists.newArrayList(new String[] {String.format("Java: %s %dbit", new Object[]{System.getProperty("java.version"), Integer.valueOf(this.field_175242_a.func_147111_S() ? 64 : 32)}), String.format("Mem: % 2d%% %03d/%03dMB", new Object[]{Long.valueOf(l * 100L / i), Long.valueOf(func_175240_a(l)), Long.valueOf(func_175240_a(i))}), String.format("Allocated: % 2d%% %03dMB", new Object[]{Long.valueOf(j * 100L / i), Long.valueOf(func_175240_a(j))}), "", String.format("Display: %dx%d (%s)", new Object[]{Integer.valueOf(Display.getWidth()), Integer.valueOf(Display.getHeight()), GL11.glGetString(GL11.GL_VENDOR)}), GL11.glGetString(GL11.GL_RENDERER), GL11.glGetString(GL11.GL_VERSION)}); - -+ arraylist.add(""); -+ arraylist.addAll(net.minecraftforge.fml.common.FMLCommonHandler.instance().getBrandings(false)); -+ - if (this.func_175236_d()) - { - return arraylist; diff --git a/patches/minecraft/net/minecraft/client/gui/GuiScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/GuiScreen.java.patch deleted file mode 100644 index 7ebfe23e2..000000000 --- a/patches/minecraft/net/minecraft/client/gui/GuiScreen.java.patch +++ /dev/null @@ -1,113 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/gui/GuiScreen.java -+++ ../src-work/minecraft/net/minecraft/client/gui/GuiScreen.java -@@ -37,6 +37,9 @@ - import net.minecraft.util.ChatComponentTranslation; - import net.minecraft.util.EnumChatFormatting; - import net.minecraft.util.IChatComponent; -+import net.minecraftforge.client.event.GuiScreenEvent.ActionPerformedEvent; -+import net.minecraftforge.client.event.GuiScreenEvent.InitGuiEvent; -+import net.minecraftforge.common.MinecraftForge; - import net.minecraftforge.fml.relauncher.Side; - import net.minecraftforge.fml.relauncher.SideOnly; - import org.apache.commons.lang3.StringUtils; -@@ -146,7 +149,8 @@ - } - } - -- this.func_146283_a(list, p_146285_2_, p_146285_3_); -+ FontRenderer font = p_146285_1_.func_77973_b().getFontRenderer(p_146285_1_); -+ this.drawHoveringText(list, p_146285_2_, p_146285_3_, (font == null ? field_146289_q : font)); - } - - protected void func_146279_a(String p_146279_1_, int p_146279_2_, int p_146279_3_) -@@ -156,6 +160,11 @@ - - protected void func_146283_a(List p_146283_1_, int p_146283_2_, int p_146283_3_) - { -+ drawHoveringText(p_146283_1_, p_146283_2_, p_146283_3_, field_146289_q); -+ } -+ -+ protected void drawHoveringText(List p_146283_1_, int p_146283_2_, int p_146283_3_, FontRenderer font) -+ { - if (!p_146283_1_.isEmpty()) - { - GlStateManager.func_179101_C(); -@@ -168,7 +177,7 @@ - while (iterator.hasNext()) - { - String s = (String)iterator.next(); -- int l = this.field_146289_q.func_78256_a(s); -+ int l = font.func_78256_a(s); - - if (l > k) - { -@@ -213,7 +222,7 @@ - for (int i2 = 0; i2 < p_146283_1_.size(); ++i2) - { - String s1 = (String)p_146283_1_.get(i2); -- this.field_146289_q.func_175063_a(s1, (float)j2, (float)k2, -1); -+ font.func_175063_a(s1, j2, k2, -1); - - if (i2 == 0) - { -@@ -441,6 +450,7 @@ - this.field_146297_k.field_71456_v.func_146158_b().func_146239_a(p_175281_1_); - } - -+ if (net.minecraftforge.client.ClientCommandHandler.instance.func_71556_a(field_146297_k.field_71439_g, p_175281_1_) != 0) return; - this.field_146297_k.field_71439_g.func_71165_d(p_175281_1_); - } - -@@ -454,9 +464,14 @@ - - if (guibutton.func_146116_c(this.field_146297_k, p_73864_1_, p_73864_2_)) - { -- this.field_146290_a = guibutton; -- guibutton.func_146113_a(this.field_146297_k.func_147118_V()); -- this.func_146284_a(guibutton); -+ ActionPerformedEvent.Pre event = new ActionPerformedEvent.Pre(this, guibutton, this.field_146292_n); -+ if (MinecraftForge.EVENT_BUS.post(event)) -+ break; -+ this.field_146290_a = event.button; -+ event.button.func_146113_a(this.field_146297_k.func_147118_V()); -+ this.func_146284_a(event.button); -+ if (this.equals(this.field_146297_k.field_71462_r)) -+ MinecraftForge.EVENT_BUS.post(new ActionPerformedEvent.Post(this, event.button, this.field_146292_n)); - } - } - } -@@ -482,8 +497,12 @@ - this.field_146289_q = p_146280_1_.field_71466_p; - this.field_146294_l = p_146280_2_; - this.field_146295_m = p_146280_3_; -- this.field_146292_n.clear(); -- this.func_73866_w_(); -+ if (!MinecraftForge.EVENT_BUS.post(new InitGuiEvent.Pre(this, this.field_146292_n))) -+ { -+ this.field_146292_n.clear(); -+ this.func_73866_w_(); -+ } -+ MinecraftForge.EVENT_BUS.post(new InitGuiEvent.Post(this, this.field_146292_n)); - } - - public void func_73866_w_() {} -@@ -494,7 +513,9 @@ - { - while (Mouse.next()) - { -+ if (MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.MouseInputEvent.Pre(this))) continue; - this.func_146274_d(); -+ if (this.equals(this.field_146297_k.field_71462_r)) MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.MouseInputEvent.Post(this)); - } - } - -@@ -502,7 +523,9 @@ - { - while (Keyboard.next()) - { -+ if (MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.KeyboardInputEvent.Pre(this))) continue; - this.func_146282_l(); -+ if (this.equals(this.field_146297_k.field_71462_r)) MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.KeyboardInputEvent.Post(this)); - } - } - } diff --git a/patches/minecraft/net/minecraft/client/gui/GuiSleepMP.java.patch b/patches/minecraft/net/minecraft/client/gui/GuiSleepMP.java.patch deleted file mode 100644 index 972c744d6..000000000 --- a/patches/minecraft/net/minecraft/client/gui/GuiSleepMP.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/gui/GuiSleepMP.java -+++ ../src-work/minecraft/net/minecraft/client/gui/GuiSleepMP.java -@@ -34,7 +34,7 @@ - - if (!s.isEmpty()) - { -- this.field_146297_k.field_71439_g.func_71165_d(s); -+ this.func_175275_f(s); // Forge: fix vanilla not adding messages to the sent list while sleeping - } - - this.field_146415_a.func_146180_a(""); diff --git a/patches/minecraft/net/minecraft/client/gui/GuiSlot.java.patch b/patches/minecraft/net/minecraft/client/gui/GuiSlot.java.patch deleted file mode 100644 index 3850da1c0..000000000 --- a/patches/minecraft/net/minecraft/client/gui/GuiSlot.java.patch +++ /dev/null @@ -1,40 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/gui/GuiSlot.java -+++ ../src-work/minecraft/net/minecraft/client/gui/GuiSlot.java -@@ -185,16 +185,7 @@ - GlStateManager.func_179106_n(); - Tessellator tessellator = Tessellator.func_178181_a(); - WorldRenderer worldrenderer = tessellator.func_178180_c(); -- this.field_148161_k.func_110434_K().func_110577_a(Gui.field_110325_k); -- GlStateManager.func_179131_c(1.0F, 1.0F, 1.0F, 1.0F); -- float f1 = 32.0F; -- worldrenderer.func_178970_b(); -- worldrenderer.func_178991_c(2105376); -- worldrenderer.func_178985_a((double)this.field_148152_e, (double)this.field_148154_c, 0.0D, (double)((float)this.field_148152_e / f1), (double)((float)(this.field_148154_c + (int)this.field_148169_q) / f1)); -- worldrenderer.func_178985_a((double)this.field_148151_d, (double)this.field_148154_c, 0.0D, (double)((float)this.field_148151_d / f1), (double)((float)(this.field_148154_c + (int)this.field_148169_q) / f1)); -- worldrenderer.func_178985_a((double)this.field_148151_d, (double)this.field_148153_b, 0.0D, (double)((float)this.field_148151_d / f1), (double)((float)(this.field_148153_b + (int)this.field_148169_q) / f1)); -- worldrenderer.func_178985_a((double)this.field_148152_e, (double)this.field_148153_b, 0.0D, (double)((float)this.field_148152_e / f1), (double)((float)(this.field_148153_b + (int)this.field_148169_q) / f1)); -- tessellator.func_78381_a(); -+ this.drawContainerBackground(tessellator); - int i1 = this.field_148152_e + this.field_148155_a / 2 - this.func_148139_c() / 2 + 2; - int j1 = this.field_148153_b + 4 - (int)this.field_148169_q; - -@@ -456,4 +447,19 @@ - { - return this.field_148149_f; - } -+ -+ protected void drawContainerBackground(Tessellator tessellator) -+ { -+ WorldRenderer worldrenderer = tessellator.func_178180_c(); -+ this.field_148161_k.func_110434_K().func_110577_a(Gui.field_110325_k); -+ GlStateManager.func_179131_c(1.0F, 1.0F, 1.0F, 1.0F); -+ float f1 = 32.0F; -+ worldrenderer.func_178970_b(); -+ worldrenderer.func_178991_c(2105376); -+ worldrenderer.func_178985_a((double)this.field_148152_e, (double)this.field_148154_c, 0.0D, (double)((float)this.field_148152_e / f1), (double)((float)(this.field_148154_c + (int)this.field_148169_q) / f1)); -+ worldrenderer.func_178985_a((double)this.field_148151_d, (double)this.field_148154_c, 0.0D, (double)((float)this.field_148151_d / f1), (double)((float)(this.field_148154_c + (int)this.field_148169_q) / f1)); -+ worldrenderer.func_178985_a((double)this.field_148151_d, (double)this.field_148153_b, 0.0D, (double)((float)this.field_148151_d / f1), (double)((float)(this.field_148153_b + (int)this.field_148169_q) / f1)); -+ worldrenderer.func_178985_a((double)this.field_148152_e, (double)this.field_148153_b, 0.0D, (double)((float)this.field_148152_e / f1), (double)((float)(this.field_148153_b + (int)this.field_148169_q) / f1)); -+ tessellator.func_78381_a(); -+ } - } diff --git a/patches/minecraft/net/minecraft/client/gui/ServerListEntryNormal.java.patch b/patches/minecraft/net/minecraft/client/gui/ServerListEntryNormal.java.patch deleted file mode 100644 index 90dfde34b..000000000 --- a/patches/minecraft/net/minecraft/client/gui/ServerListEntryNormal.java.patch +++ /dev/null @@ -1,23 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/gui/ServerListEntryNormal.java -+++ ../src-work/minecraft/net/minecraft/client/gui/ServerListEntryNormal.java -@@ -84,7 +84,7 @@ - boolean flag2 = this.field_148301_e.field_82821_f < 47; - boolean flag3 = flag1 || flag2; - this.field_148300_d.field_71466_p.func_78276_b(this.field_148301_e.field_78847_a, p_180790_2_ + 32 + 3, p_180790_3_ + 1, 16777215); -- List list = this.field_148300_d.field_71466_p.func_78271_c(this.field_148301_e.field_78843_d, p_180790_4_ - 32 - 2); -+ List list = this.field_148300_d.field_71466_p.func_78271_c(net.minecraftforge.fml.client.FMLClientHandler.instance().fixDescription(this.field_148301_e.field_78843_d), p_180790_4_ - 48 - 2); - - for (int l1 = 0; l1 < Math.min(list.size(), 2); ++l1) - { -@@ -178,6 +178,11 @@ - int k2 = p_180790_6_ - p_180790_2_; - int l2 = p_180790_7_ - p_180790_3_; - -+ String tooltip = net.minecraftforge.fml.client.FMLClientHandler.instance().enhanceServerListEntry(this, this.field_148301_e, p_180790_2_, p_180790_4_, p_180790_3_, k2, l2); -+ if (tooltip != null) -+ { -+ this.field_148303_c.func_146793_a(tooltip); -+ } else - if (k2 >= p_180790_4_ - 15 && k2 <= p_180790_4_ - 5 && l2 >= 0 && l2 <= 8) - { - this.field_148303_c.func_146793_a(s1); diff --git a/patches/minecraft/net/minecraft/client/gui/achievement/GuiAchievements.java.patch b/patches/minecraft/net/minecraft/client/gui/achievement/GuiAchievements.java.patch deleted file mode 100644 index fc49d0fd7..000000000 --- a/patches/minecraft/net/minecraft/client/gui/achievement/GuiAchievements.java.patch +++ /dev/null @@ -1,127 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/gui/achievement/GuiAchievements.java -+++ ../src-work/minecraft/net/minecraft/client/gui/achievement/GuiAchievements.java -@@ -24,6 +24,9 @@ - import net.minecraftforge.fml.relauncher.Side; - import net.minecraftforge.fml.relauncher.SideOnly; - import org.lwjgl.input.Mouse; -+import java.util.LinkedList; -+import java.util.List; -+import net.minecraftforge.common.AchievementPage; - - @SideOnly(Side.CLIENT) - public class GuiAchievements extends GuiScreen implements IProgressMeter -@@ -50,6 +53,10 @@ - private boolean field_146558_F = true; - private static final String __OBFID = "CL_00000722"; - -+ private int currentPage = -1; -+ private GuiButton button; -+ private LinkedList minecraftAchievements = new LinkedList(); -+ - public GuiAchievements(GuiScreen p_i45026_1_, StatFileWriter p_i45026_2_) - { - this.field_146562_a = p_i45026_1_; -@@ -58,6 +65,14 @@ - short short2 = 141; - this.field_146569_s = this.field_146567_u = this.field_146565_w = (double)(AchievementList.field_76004_f.field_75993_a * 24 - short1 / 2 - 12); - this.field_146568_t = this.field_146566_v = this.field_146573_x = (double)(AchievementList.field_76004_f.field_75991_b * 24 - short2 / 2); -+ minecraftAchievements.clear(); -+ for (Object achievement : AchievementList.field_76007_e) -+ { -+ if (!AchievementPage.isAchievementInPages((Achievement)achievement)) -+ { -+ minecraftAchievements.add((Achievement)achievement); -+ } -+ } - } - - public void func_73866_w_() -@@ -65,6 +80,7 @@ - this.field_146297_k.func_147114_u().func_147297_a(new C16PacketClientStatus(C16PacketClientStatus.EnumState.REQUEST_STATS)); - this.field_146292_n.clear(); - this.field_146292_n.add(new GuiOptionButton(1, this.field_146294_l / 2 + 24, this.field_146295_m / 2 + 74, 80, 20, I18n.func_135052_a("gui.done", new Object[0]))); -+ this.field_146292_n.add(button = new GuiButton(2, (field_146294_l - field_146555_f) / 2 + 24, field_146295_m / 2 + 74, 125, 20, AchievementPage.getTitle(currentPage))); - } - - protected void func_146284_a(GuiButton p_146284_1_) throws IOException -@@ -75,6 +91,16 @@ - { - this.field_146297_k.func_147108_a(this.field_146562_a); - } -+ -+ if (p_146284_1_.field_146127_k == 2) -+ { -+ currentPage++; -+ if (currentPage >= AchievementPage.getAchievementPages().size()) -+ { -+ currentPage = -1; -+ } -+ this.button.field_146126_j = AchievementPage.getTitle(currentPage); -+ } - } - } - -@@ -260,7 +286,9 @@ - GlStateManager.func_179143_c(518); - GlStateManager.func_179094_E(); - GlStateManager.func_179109_b((float)k1, (float)l1, -200.0F); -- GlStateManager.func_179152_a(1.0F / this.field_146570_r, 1.0F / this.field_146570_r, 0.0F); -+ // FIXES models rendering weirdly in the acheivements pane -+ // see https://github.com/MinecraftForge/MinecraftForge/commit/1b7ce7592caafb760ec93066184182ae0711e793#commitcomment-10512284 -+ GlStateManager.func_179152_a(1.0F / this.field_146570_r, 1.0F / this.field_146570_r, 1.0F); - GlStateManager.func_179098_w(); - GlStateManager.func_179140_f(); - GlStateManager.func_179091_B(); -@@ -341,11 +369,12 @@ - int i4; - int l4; - -- for (i3 = 0; i3 < AchievementList.field_76007_e.size(); ++i3) -+ List achievementList = (currentPage == -1 ? minecraftAchievements : AchievementPage.getAchievementPage(currentPage).getAchievements()); -+ for (i3 = 0; i3 < achievementList.size(); ++i3) - { -- Achievement achievement1 = (Achievement)AchievementList.field_76007_e.get(i3); -+ Achievement achievement1 = achievementList.get(i3); - -- if (achievement1.field_75992_c != null) -+ if (achievement1.field_75992_c != null && achievementList.contains(achievement1.field_75992_c)) - { - j3 = achievement1.field_75993_a * 24 - k + 11; - k3 = achievement1.field_75991_b * 24 - l + 11; -@@ -401,9 +430,9 @@ - int i5; - int j5; - -- for (k3 = 0; k3 < AchievementList.field_76007_e.size(); ++k3) -+ for (k3 = 0; k3 < achievementList.size(); ++k3) - { -- Achievement achievement2 = (Achievement)AchievementList.field_76007_e.get(k3); -+ Achievement achievement2 = (Achievement)achievementList.get(k3); - l4 = achievement2.field_75993_a * 24 - k; - i5 = achievement2.field_75991_b * 24 - l; - -@@ -445,6 +474,7 @@ - - this.field_146297_k.func_110434_K().func_110577_a(field_146561_C); - -+ GlStateManager.func_179147_l(); // Forge: Specifically enable blend because it is needed here. And we fix Generic RenderItem's leakage of it. - if (achievement2.func_75984_f()) - { - this.func_73729_b(l4 - 2, i5 - 2, 26, 202, 26, 26); -@@ -453,6 +483,7 @@ - { - this.func_73729_b(l4 - 2, i5 - 2, 0, 202, 26, 26); - } -+ GlStateManager.func_179084_k(); //Forge: Cleanup states we set. - - if (!this.field_146556_E.func_77442_b(achievement2)) - { -@@ -461,7 +492,7 @@ - this.field_146296_j.func_175039_a(false); - } - -- GlStateManager.func_179145_e(); -+ GlStateManager.func_179140_f(); //Forge: Make sure Lighting is disabled. Fixes MC-33065 - GlStateManager.func_179089_o(); - this.field_146296_j.func_180450_b(achievement2.field_75990_d, l4 + 3, i5 + 3); - GlStateManager.func_179112_b(770, 771); diff --git a/patches/minecraft/net/minecraft/client/gui/achievement/GuiStats.java.patch b/patches/minecraft/net/minecraft/client/gui/achievement/GuiStats.java.patch deleted file mode 100644 index da29b12c2..000000000 --- a/patches/minecraft/net/minecraft/client/gui/achievement/GuiStats.java.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/gui/achievement/GuiStats.java -+++ ../src-work/minecraft/net/minecraft/client/gui/achievement/GuiStats.java -@@ -769,6 +769,7 @@ - super(p_i45510_2_, GuiStats.this.field_146294_l, GuiStats.this.field_146295_m, 32, GuiStats.this.field_146295_m - 64, GuiStats.this.field_146289_q.field_78288_b * 4); - this.func_148130_a(false); - Iterator iterator = EntityList.field_75627_a.values().iterator(); -+ iterator = com.google.common.collect.Iterators.concat(iterator, net.minecraftforge.fml.common.registry.EntityRegistry.getEggs().values().iterator()); - - while (iterator.hasNext()) - { -@@ -806,7 +807,7 @@ - protected void func_180791_a(int p_180791_1_, int p_180791_2_, int p_180791_3_, int p_180791_4_, int p_180791_5_, int p_180791_6_) - { - EntityList.EntityEggInfo entityegginfo = (EntityList.EntityEggInfo)this.field_148222_l.get(p_180791_1_); -- String s = I18n.func_135052_a("entity." + EntityList.func_75617_a(entityegginfo.field_75613_a) + ".name", new Object[0]); -+ String s = I18n.func_135052_a("entity." + entityegginfo.name + ".name", new Object[0]); - int k1 = GuiStats.this.field_146546_t.func_77444_a(entityegginfo.field_151512_d); - int l1 = GuiStats.this.field_146546_t.func_77444_a(entityegginfo.field_151513_e); - String s1 = I18n.func_135052_a("stat.entityKills", new Object[] {Integer.valueOf(k1), s}); diff --git a/patches/minecraft/net/minecraft/client/gui/inventory/GuiContainer.java.patch b/patches/minecraft/net/minecraft/client/gui/inventory/GuiContainer.java.patch deleted file mode 100644 index d04dc9c57..000000000 --- a/patches/minecraft/net/minecraft/client/gui/inventory/GuiContainer.java.patch +++ /dev/null @@ -1,65 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/gui/inventory/GuiContainer.java -+++ ../src-work/minecraft/net/minecraft/client/gui/inventory/GuiContainer.java -@@ -5,6 +5,7 @@ - import java.util.Iterator; - import java.util.Set; - import net.minecraft.client.Minecraft; -+import net.minecraft.client.gui.FontRenderer; - import net.minecraft.client.gui.GuiScreen; - import net.minecraft.client.renderer.GlStateManager; - import net.minecraft.client.renderer.OpenGlHelper; -@@ -178,8 +179,11 @@ - GlStateManager.func_179109_b(0.0F, 0.0F, 32.0F); - this.field_73735_i = 200.0F; - this.field_146296_j.field_77023_b = 200.0F; -+ FontRenderer font = null; -+ if (p_146982_1_ != null) font = p_146982_1_.func_77973_b().getFontRenderer(p_146982_1_); -+ if (font == null) font = field_146289_q; - this.field_146296_j.func_180450_b(p_146982_1_, p_146982_2_, p_146982_3_); -- this.field_146296_j.func_180453_a(this.field_146289_q, p_146982_1_, p_146982_2_, p_146982_3_ - (this.field_147012_x == null ? 0 : 8), p_146982_4_); -+ this.field_146296_j.func_180453_a(font, p_146982_1_, p_146982_2_, p_146982_3_ - (this.field_147012_x == null ? 0 : 8), p_146982_4_); - this.field_73735_i = 0.0F; - this.field_146296_j.field_77023_b = 0.0F; - } -@@ -240,13 +244,12 @@ - - if (itemstack == null) - { -- String s1 = p_146977_1_.func_178171_c(); -+ TextureAtlasSprite textureatlassprite = p_146977_1_.getBackgroundSprite(); - -- if (s1 != null) -+ if (textureatlassprite != null) - { -- TextureAtlasSprite textureatlassprite = this.field_146297_k.func_147117_R().func_110572_b(s1); - GlStateManager.func_179140_f(); -- this.field_146297_k.func_110434_K().func_110577_a(TextureMap.field_110575_b); -+ this.field_146297_k.func_110434_K().func_110577_a(p_146977_1_.getBackgroundLocation()); - this.func_175175_a(i, j, textureatlassprite, 16, 16); - GlStateManager.func_179145_e(); - flag1 = true; -@@ -465,6 +468,7 @@ - - protected void func_146286_b(int p_146286_1_, int p_146286_2_, int p_146286_3_) - { -+ super.func_146286_b(p_146286_1_, p_146286_2_, p_146286_3_); //Forge, Call parent to release buttons - Slot slot = this.func_146975_c(p_146286_1_, p_146286_2_); - int l = this.field_147003_i; - int i1 = this.field_147009_r; -@@ -698,4 +702,16 @@ - this.field_146297_k.field_71439_g.func_71053_j(); - } - } -+ -+ /* ======================================== FORGE START =====================================*/ -+ -+ /** -+ * Returns the slot that is currently displayed under the mouse. -+ */ -+ public Slot getSlotUnderMouse() -+ { -+ return this.field_147006_u; -+ } -+ -+ /* ======================================== FORGE END =====================================*/ - } diff --git a/patches/minecraft/net/minecraft/client/gui/inventory/GuiContainerCreative.java.patch b/patches/minecraft/net/minecraft/client/gui/inventory/GuiContainerCreative.java.patch deleted file mode 100644 index b91737a77..000000000 --- a/patches/minecraft/net/minecraft/client/gui/inventory/GuiContainerCreative.java.patch +++ /dev/null @@ -1,267 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/gui/inventory/GuiContainerCreative.java -+++ ../src-work/minecraft/net/minecraft/client/gui/inventory/GuiContainerCreative.java -@@ -49,6 +49,8 @@ - private boolean field_147057_D; - private CreativeCrafting field_147059_E; - private static final String __OBFID = "CL_00000752"; -+ private static int tabPage = 0; -+ private int maxPages = 0; - - public GuiContainerCreative(EntityPlayer p_i1088_1_) - { -@@ -187,7 +189,7 @@ - return; - } - -- if (itemstack1 != null && itemstack2 != null && itemstack1.func_77969_a(itemstack2)) -+ if (itemstack1 != null && itemstack2 != null && itemstack1.func_77969_a(itemstack2) && ItemStack.func_77970_a(itemstack1, itemstack2)) //Forge: Bugfix, Compare NBT data, allow for deletion of enchanted books, MC-12770 - { - if (p_146984_3_ == 0) - { -@@ -262,6 +264,13 @@ - this.func_147050_b(CreativeTabs.field_78032_a[i]); - this.field_147059_E = new CreativeCrafting(this.field_146297_k); - this.field_146297_k.field_71439_g.field_71069_bz.func_75132_a(this.field_147059_E); -+ int tabCount = CreativeTabs.field_78032_a.length; -+ if (tabCount > 12) -+ { -+ field_146292_n.add(new GuiButton(101, field_147003_i, field_147009_r - 50, 20, 20, "<")); -+ field_146292_n.add(new GuiButton(102, field_147003_i + field_146999_f - 20, field_147009_r - 50, 20, 20, ">")); -+ maxPages = ((tabCount - 12) / 10) + 1; -+ } - } - else - { -@@ -283,7 +292,7 @@ - - protected void func_73869_a(char p_73869_1_, int p_73869_2_) throws IOException - { -- if (field_147058_w != CreativeTabs.field_78027_g.func_78021_a()) -+ if (!CreativeTabs.field_78032_a[field_147058_w].hasSearchBar()) - { - if (GameSettings.func_100015_a(this.field_146297_k.field_71474_y.field_74310_D)) - { -@@ -320,6 +329,15 @@ - { - GuiContainerCreative.ContainerCreative containercreative = (GuiContainerCreative.ContainerCreative)this.field_147002_h; - containercreative.field_148330_a.clear(); -+ -+ CreativeTabs tab = CreativeTabs.field_78032_a[field_147058_w]; -+ if (tab.hasSearchBar() && tab != CreativeTabs.field_78027_g) -+ { -+ tab.func_78018_a(containercreative.field_148330_a); -+ updateFilteredItems(containercreative); -+ return; -+ } -+ - Iterator iterator = Item.field_150901_e.iterator(); - - while (iterator.hasNext()) -@@ -331,10 +349,17 @@ - item.func_150895_a(item, (CreativeTabs)null, containercreative.field_148330_a); - } - } -+ updateFilteredItems(containercreative); -+ } - -+ //split from above for custom search tabs -+ private void updateFilteredItems(GuiContainerCreative.ContainerCreative containercreative) -+ { -+ Iterator iterator; - Enchantment[] aenchantment = Enchantment.field_77331_b; - int j = aenchantment.length; - -+ if (CreativeTabs.field_78032_a[field_147058_w] != CreativeTabs.field_78027_g) j = 0; //Forge: Don't add enchants to custom tabs. - for (int i = 0; i < j; ++i) - { - Enchantment enchantment = aenchantment[i]; -@@ -385,7 +410,7 @@ - { - CreativeTabs creativetabs = CreativeTabs.field_78032_a[field_147058_w]; - -- if (creativetabs.func_78019_g()) -+ if (creativetabs != null && creativetabs.func_78019_g()) - { - GlStateManager.func_179084_k(); - this.field_146289_q.func_78276_b(I18n.func_135052_a(creativetabs.func_78024_c(), new Object[0]), 8, 6, 4210752); -@@ -428,7 +453,7 @@ - { - CreativeTabs creativetabs = acreativetabs[k1]; - -- if (this.func_147049_a(creativetabs, l, i1)) -+ if (creativetabs != null && this.func_147049_a(creativetabs, l, i1)) - { - this.func_147050_b(creativetabs); - return; -@@ -441,11 +466,13 @@ - - private boolean func_147055_p() - { -+ if (CreativeTabs.field_78032_a[field_147058_w] == null) return false; - return field_147058_w != CreativeTabs.field_78036_m.func_78021_a() && CreativeTabs.field_78032_a[field_147058_w].func_78017_i() && ((GuiContainerCreative.ContainerCreative)this.field_147002_h).func_148328_e(); - } - - private void func_147050_b(CreativeTabs p_147050_1_) - { -+ if (p_147050_1_ == null) return; - int i = field_147058_w; - field_147058_w = p_147050_1_.func_78021_a(); - GuiContainerCreative.ContainerCreative containercreative = (GuiContainerCreative.ContainerCreative)this.field_147002_h; -@@ -514,12 +541,14 @@ - - if (this.field_147062_A != null) - { -- if (p_147050_1_ == CreativeTabs.field_78027_g) -+ if (p_147050_1_.hasSearchBar()) - { - this.field_147062_A.func_146189_e(true); - this.field_147062_A.func_146205_d(false); - this.field_147062_A.func_146195_b(true); - this.field_147062_A.func_146180_a(""); -+ this.field_147062_A.field_146218_h = p_147050_1_.getSearchbarWidth(); -+ this.field_147062_A.field_146209_f = this.field_147003_i + (82 /*default left*/ + 89 /*default width*/) - this.field_147062_A.field_146218_h; - this.func_147053_i(); - } - else -@@ -590,23 +619,45 @@ - - super.func_73863_a(p_73863_1_, p_73863_2_, p_73863_3_); - CreativeTabs[] acreativetabs = CreativeTabs.field_78032_a; -- int i2 = acreativetabs.length; -+ int start = tabPage * 10; -+ int i2 = Math.min(acreativetabs.length, ((tabPage + 1) * 10) + 2); -+ if (tabPage != 0) start += 2; -+ boolean rendered = false; - -- for (int j2 = 0; j2 < i2; ++j2) -+ for (int j2 = start; j2 < i2; ++j2) - { - CreativeTabs creativetabs = acreativetabs[j2]; - -+ if (creativetabs == null) continue; - if (this.func_147052_b(creativetabs, p_73863_1_, p_73863_2_)) - { -+ rendered = true; - break; - } - } - -+ if (!rendered && func_147052_b(CreativeTabs.field_78027_g, p_73863_1_, p_73863_2_)) -+ { -+ func_147052_b(CreativeTabs.field_78036_m, p_73863_1_, p_73863_2_); -+ } -+ - if (this.field_147064_C != null && field_147058_w == CreativeTabs.field_78036_m.func_78021_a() && this.func_146978_c(this.field_147064_C.field_75223_e, this.field_147064_C.field_75221_f, 16, 16, p_73863_1_, p_73863_2_)) - { - this.func_146279_a(I18n.func_135052_a("inventory.binSlot", new Object[0]), p_73863_1_, p_73863_2_); - } - -+ if (maxPages != 0) -+ { -+ String page = String.format("%d / %d", tabPage + 1, maxPages + 1); -+ int width = field_146289_q.func_78256_a(page); -+ GlStateManager.func_179140_f(); -+ this.field_73735_i = 300.0F; -+ field_146296_j.field_77023_b = 300.0F; -+ field_146289_q.func_78276_b(page, field_147003_i + (field_146999_f / 2) - (width / 2), field_147009_r - 44, -1); -+ this.field_73735_i = 0.0F; -+ field_146296_j.field_77023_b = 0.0F; -+ } -+ - GlStateManager.func_179131_c(1.0F, 1.0F, 1.0F, 1.0F); - GlStateManager.func_179140_f(); - } -@@ -675,17 +726,36 @@ - int k = acreativetabs.length; - int l; - -- for (l = 0; l < k; ++l) -+ int start = tabPage * 10; -+ k = Math.min(acreativetabs.length, ((tabPage + 1) * 10 + 2)); -+ if (tabPage != 0) start += 2; -+ -+ for (l = start; l < k; ++l) - { - CreativeTabs creativetabs1 = acreativetabs[l]; - this.field_146297_k.func_110434_K().func_110577_a(field_147061_u); - -+ if (creativetabs1 == null) continue; - if (creativetabs1.func_78021_a() != field_147058_w) - { - this.func_147051_a(creativetabs1); - } - } - -+ if (tabPage != 0) -+ { -+ if (creativetabs != CreativeTabs.field_78027_g) -+ { -+ this.field_146297_k.func_110434_K().func_110577_a(field_147061_u); -+ func_147051_a(CreativeTabs.field_78027_g); -+ } -+ if (creativetabs != CreativeTabs.field_78036_m) -+ { -+ this.field_146297_k.func_110434_K().func_110577_a(field_147061_u); -+ func_147051_a(CreativeTabs.field_78036_m); -+ } -+ } -+ - this.field_146297_k.func_110434_K().func_110577_a(new ResourceLocation("textures/gui/container/creative_inventory/tab_" + creativetabs.func_78015_f())); - this.func_73729_b(this.field_147003_i, this.field_147009_r, 0, 0, this.field_146999_f, this.field_147000_g); - this.field_147062_A.func_146194_f(); -@@ -700,6 +770,14 @@ - this.func_73729_b(i1, k + (int)((float)(l - k - 17) * this.field_147067_x), 232 + (this.func_147055_p() ? 0 : 12), 0, 12, 15); - } - -+ if (creativetabs == null || creativetabs.getTabPage() != tabPage) -+ { -+ if (creativetabs != CreativeTabs.field_78027_g && creativetabs != CreativeTabs.field_78036_m) -+ { -+ return; -+ } -+ } -+ - this.func_147051_a(creativetabs); - - if (creativetabs == CreativeTabs.field_78036_m) -@@ -710,6 +788,15 @@ - - protected boolean func_147049_a(CreativeTabs p_147049_1_, int p_147049_2_, int p_147049_3_) - { -+ if (p_147049_1_.getTabPage() != tabPage) -+ { -+ if (p_147049_1_ != CreativeTabs.field_78027_g && -+ p_147049_1_ != CreativeTabs.field_78036_m) -+ { -+ return false; -+ } -+ } -+ - int k = p_147049_1_.func_78020_k(); - int l = 28 * k; - byte b0 = 0; -@@ -810,6 +897,8 @@ - } - - GlStateManager.func_179140_f(); -+ GlStateManager.func_179124_c(1F, 1F, 1F); //Forge: Reset color in case Items change it. -+ GlStateManager.func_179147_l(); //Forge: Make sure blend is enabled else tabs show a white border. - this.func_73729_b(l, i1, j, k, 28, b0); - this.field_73735_i = 100.0F; - this.field_146296_j.field_77023_b = 100.0F; -@@ -836,6 +925,15 @@ - { - this.field_146297_k.func_147108_a(new GuiStats(this, this.field_146297_k.field_71439_g.func_146107_m())); - } -+ -+ if (p_146284_1_.field_146127_k == 101) -+ { -+ tabPage = Math.max(tabPage - 1, 0); -+ } -+ else if (p_146284_1_.field_146127_k == 102) -+ { -+ tabPage = Math.min(tabPage + 1, maxPages); -+ } - } - - public int func_147056_g() diff --git a/patches/minecraft/net/minecraft/client/multiplayer/GuiConnecting.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/GuiConnecting.java.patch deleted file mode 100644 index 05ba7abc5..000000000 --- a/patches/minecraft/net/minecraft/client/multiplayer/GuiConnecting.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/multiplayer/GuiConnecting.java -+++ ../src-work/minecraft/net/minecraft/client/multiplayer/GuiConnecting.java -@@ -69,7 +69,7 @@ - inetaddress = InetAddress.getByName(p_146367_1_); - GuiConnecting.this.field_146371_g = NetworkManager.func_150726_a(inetaddress, p_146367_2_); - GuiConnecting.this.field_146371_g.func_150719_a(new NetHandlerLoginClient(GuiConnecting.this.field_146371_g, GuiConnecting.this.field_146297_k, GuiConnecting.this.field_146374_i)); -- GuiConnecting.this.field_146371_g.func_179290_a(new C00Handshake(47, p_146367_1_, p_146367_2_, EnumConnectionState.LOGIN)); -+ GuiConnecting.this.field_146371_g.func_179290_a(new C00Handshake(47, p_146367_1_, p_146367_2_, EnumConnectionState.LOGIN, true)); - GuiConnecting.this.field_146371_g.func_179290_a(new C00PacketLoginStart(GuiConnecting.this.field_146297_k.func_110432_I().func_148256_e())); - } - catch (UnknownHostException unknownhostexception) diff --git a/patches/minecraft/net/minecraft/client/multiplayer/PlayerControllerMP.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/PlayerControllerMP.java.patch deleted file mode 100644 index d57d6ad63..000000000 --- a/patches/minecraft/net/minecraft/client/multiplayer/PlayerControllerMP.java.patch +++ /dev/null @@ -1,69 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/multiplayer/PlayerControllerMP.java -+++ ../src-work/minecraft/net/minecraft/client/multiplayer/PlayerControllerMP.java -@@ -113,6 +113,12 @@ - } - } - -+ ItemStack stack = field_78776_a.field_71439_g.func_71045_bC(); -+ if (stack != null && stack.func_77973_b() != null && stack.func_77973_b().onBlockStartBreak(stack, p_178888_1_, field_78776_a.field_71439_g)) -+ { -+ return false; -+ } -+ - if (this.field_78779_k.func_77145_d() && this.field_78776_a.field_71439_g.func_70694_bm() != null && this.field_78776_a.field_71439_g.func_70694_bm().func_77973_b() instanceof ItemSword) - { - return false; -@@ -130,7 +136,7 @@ - else - { - worldclient.func_175718_b(2001, p_178888_1_, Block.func_176210_f(iblockstate)); -- boolean flag = worldclient.func_175698_g(p_178888_1_); -+ boolean flag = block1.removedByPlayer(worldclient, p_178888_1_, field_78776_a.field_71439_g, false); - - if (flag) - { -@@ -360,11 +366,19 @@ - { - if (this.field_78779_k != WorldSettings.GameType.SPECTATOR) - { -+ -+ if (p_178890_3_ != null && -+ p_178890_3_.func_77973_b() != null && -+ p_178890_3_.func_77973_b().onItemUseFirst(p_178890_3_, p_178890_1_, p_178890_2_, p_178890_4_, p_178890_5_, f, f1, f2)) -+ { -+ return true; -+ } -+ - IBlockState iblockstate = p_178890_2_.func_180495_p(p_178890_4_); - -- if ((!p_178890_1_.func_70093_af() || p_178890_1_.func_70694_bm() == null) && iblockstate.func_177230_c().func_180639_a(p_178890_2_, p_178890_4_, iblockstate, p_178890_1_, p_178890_5_, f, f1, f2)) -+ if ((!p_178890_1_.func_70093_af() || p_178890_1_.func_70694_bm() == null || p_178890_1_.func_70694_bm().func_77973_b().doesSneakBypassUse(p_178890_2_, p_178890_4_, p_178890_1_))) - { -- flag = true; -+ flag = iblockstate.func_177230_c().func_180639_a(p_178890_2_, p_178890_4_, iblockstate, p_178890_1_, p_178890_5_, f, f1, f2); - } - - if (!flag && p_178890_3_ != null && p_178890_3_.func_77973_b() instanceof ItemBlock) -@@ -397,7 +411,9 @@ - } - else - { -- return p_178890_3_.func_179546_a(p_178890_1_, p_178890_2_, p_178890_4_, p_178890_5_, f, f1, f2); -+ if (!p_178890_3_.func_179546_a(p_178890_1_, p_178890_2_, p_178890_4_, p_178890_5_, f, f1, f2)) return false; -+ if (p_178890_3_.field_77994_a <= 0) net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(p_178890_1_, p_178890_3_); -+ return true; - } - } - else -@@ -428,9 +444,10 @@ - { - p_78769_1_.field_71071_by.field_70462_a[p_78769_1_.field_71071_by.field_70461_c] = itemstack1; - -- if (itemstack1.field_77994_a == 0) -+ if (itemstack1.field_77994_a <= 0) - { - p_78769_1_.field_71071_by.field_70462_a[p_78769_1_.field_71071_by.field_70461_c] = null; -+ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(p_78769_1_, itemstack1); - } - - return true; diff --git a/patches/minecraft/net/minecraft/client/multiplayer/WorldClient.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/WorldClient.java.patch deleted file mode 100644 index 3418ef76c..000000000 --- a/patches/minecraft/net/minecraft/client/multiplayer/WorldClient.java.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/multiplayer/WorldClient.java -+++ ../src-work/minecraft/net/minecraft/client/multiplayer/WorldClient.java -@@ -54,12 +54,13 @@ - super(new SaveHandlerMP(), new WorldInfo(p_i45063_2_, "MpServer"), WorldProvider.func_76570_a(p_i45063_3_), p_i45063_5_, true); - this.field_73035_a = p_i45063_1_; - this.func_72912_H().func_176144_a(p_i45063_4_); -- this.func_175652_B(new BlockPos(8, 64, 8)); - this.field_73011_w.func_76558_a(this); -+ this.func_175652_B(new BlockPos(8, 64, 8)); //Forge: Moved below registerWorld to prevent NPE in our redirect. - this.field_73020_y = this.func_72970_h(); - this.field_72988_C = new SaveDataMemoryStorage(); - this.func_72966_v(); - this.func_72947_a(); -+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.WorldEvent.Load(this)); - } - - public void func_72835_b() diff --git a/patches/minecraft/net/minecraft/client/network/NetHandlerHandshakeMemory.java.patch b/patches/minecraft/net/minecraft/client/network/NetHandlerHandshakeMemory.java.patch deleted file mode 100644 index 1b37230bf..000000000 --- a/patches/minecraft/net/minecraft/client/network/NetHandlerHandshakeMemory.java.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/network/NetHandlerHandshakeMemory.java -+++ ../src-work/minecraft/net/minecraft/client/network/NetHandlerHandshakeMemory.java -@@ -24,6 +24,7 @@ - - public void func_147383_a(C00Handshake p_147383_1_) - { -+ if (!net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerHandshake(p_147383_1_, this.field_147384_b)) return; - this.field_147384_b.func_150723_a(p_147383_1_.func_149594_c()); - this.field_147384_b.func_150719_a(new NetHandlerLoginServer(this.field_147385_a, this.field_147384_b)); - } diff --git a/patches/minecraft/net/minecraft/client/network/NetHandlerLoginClient.java.patch b/patches/minecraft/net/minecraft/client/network/NetHandlerLoginClient.java.patch deleted file mode 100644 index 0b265296c..000000000 --- a/patches/minecraft/net/minecraft/client/network/NetHandlerLoginClient.java.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/network/NetHandlerLoginClient.java -+++ ../src-work/minecraft/net/minecraft/client/network/NetHandlerLoginClient.java -@@ -92,7 +92,10 @@ - { - this.field_175091_e = p_147390_1_.func_179730_a(); - this.field_147393_d.func_150723_a(EnumConnectionState.PLAY); -- this.field_147393_d.func_150719_a(new NetHandlerPlayClient(this.field_147394_b, this.field_147395_c, this.field_147393_d, this.field_175091_e)); -+ net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.fmlClientHandshake(this.field_147393_d); -+ NetHandlerPlayClient nhpc = new NetHandlerPlayClient(this.field_147394_b, this.field_147395_c, this.field_147393_d, this.field_175091_e); -+ this.field_147393_d.func_150719_a(nhpc); -+ net.minecraftforge.fml.client.FMLClientHandler.instance().setPlayClient(nhpc); - } - - public void func_147231_a(IChatComponent p_147231_1_) diff --git a/patches/minecraft/net/minecraft/client/network/NetHandlerPlayClient.java.patch b/patches/minecraft/net/minecraft/client/network/NetHandlerPlayClient.java.patch deleted file mode 100644 index 5da95b592..000000000 --- a/patches/minecraft/net/minecraft/client/network/NetHandlerPlayClient.java.patch +++ /dev/null @@ -1,72 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/network/NetHandlerPlayClient.java -+++ ../src-work/minecraft/net/minecraft/client/network/NetHandlerPlayClient.java -@@ -247,7 +247,7 @@ - { - PacketThreadUtil.func_180031_a(p_147282_1_, this, this.field_147299_f); - this.field_147299_f.field_71442_b = new PlayerControllerMP(this.field_147299_f, this); -- this.field_147300_g = new WorldClient(this, new WorldSettings(0L, p_147282_1_.func_149198_e(), false, p_147282_1_.func_149195_d(), p_147282_1_.func_149196_i()), p_147282_1_.func_149194_f(), p_147282_1_.func_149192_g(), this.field_147299_f.field_71424_I); -+ this.field_147300_g = new WorldClient(this, new WorldSettings(0L, p_147282_1_.func_149198_e(), false, p_147282_1_.func_149195_d(), p_147282_1_.func_149196_i()), net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.get(func_147298_b()).getOverrideDimension(p_147282_1_), p_147282_1_.func_149192_g(), this.field_147299_f.field_71424_I); - this.field_147299_f.field_71474_y.field_74318_M = p_147282_1_.func_149192_g(); - this.field_147299_f.func_71403_a(this.field_147300_g); - this.field_147299_f.field_71439_g.field_71093_bK = p_147282_1_.func_149194_f(); -@@ -410,7 +410,8 @@ - public void func_147286_a(S11PacketSpawnExperienceOrb p_147286_1_) - { - PacketThreadUtil.func_180031_a(p_147286_1_, this, this.field_147299_f); -- EntityXPOrb entityxporb = new EntityXPOrb(this.field_147300_g, (double)p_147286_1_.func_148984_d(), (double)p_147286_1_.func_148983_e(), (double)p_147286_1_.func_148982_f(), p_147286_1_.func_148986_g()); -+ EntityXPOrb entityxporb = new EntityXPOrb(this.field_147300_g, (double)p_147286_1_.func_148984_d() / 32.0D, (double)p_147286_1_.func_148983_e() / 32.0D, (double)p_147286_1_.func_148982_f() / 32.0D, p_147286_1_.func_148986_g()); -+ // FORGE: BugFix MC-12013 Wrong XP orb clientside spawn position - entityxporb.field_70118_ct = p_147286_1_.func_148984_d(); - entityxporb.field_70117_cu = p_147286_1_.func_148983_e(); - entityxporb.field_70116_cv = p_147286_1_.func_148982_f(); -@@ -754,14 +755,16 @@ - public void func_147251_a(S02PacketChat p_147251_1_) - { - PacketThreadUtil.func_180031_a(p_147251_1_, this, this.field_147299_f); -+ net.minecraft.util.IChatComponent message = net.minecraftforge.event.ForgeEventFactory.onClientChat(p_147251_1_.func_179841_c(), p_147251_1_.func_148915_c()); -+ if (message == null) return; - - if (p_147251_1_.func_179841_c() == 2) - { -- this.field_147299_f.field_71456_v.func_175188_a(p_147251_1_.func_148915_c(), false); -+ this.field_147299_f.field_71456_v.func_175188_a(message, false); - } - else - { -- this.field_147299_f.field_71456_v.func_146158_b().func_146227_a(p_147251_1_.func_148915_c()); -+ this.field_147299_f.field_71456_v.func_146158_b().func_146227_a(message); - } - } - -@@ -812,6 +815,11 @@ - float f = (float)(p_147281_1_.func_149028_l() * 360) / 256.0F; - float f1 = (float)(p_147281_1_.func_149030_m() * 360) / 256.0F; - EntityLivingBase entitylivingbase = (EntityLivingBase)EntityList.func_75616_a(p_147281_1_.func_149025_e(), this.field_147299_f.field_71441_e); -+ if (entitylivingbase == null) -+ { -+ net.minecraftforge.fml.common.FMLLog.info("Server attempted to spawn an unknown entity using ID: {0} at ({1}, {2}, {3}) Skipping!", p_147281_1_.func_149025_e(), d0, d1, d2); -+ return; -+ } - entitylivingbase.field_70118_ct = p_147281_1_.func_149023_f(); - entitylivingbase.field_70117_cu = p_147281_1_.func_149034_g(); - entitylivingbase.field_70116_cv = p_147281_1_.func_149029_h(); -@@ -1137,6 +1145,10 @@ - { - tileentity.func_145839_a(p_147273_1_.func_148857_g()); - } -+ else -+ { -+ tileentity.onDataPacket(field_147302_e, p_147273_1_); -+ } - } - } - -@@ -1346,7 +1358,7 @@ - - if (entity instanceof EntityLivingBase) - { -- PotionEffect potioneffect = new PotionEffect(p_147260_1_.func_149427_e(), p_147260_1_.func_180755_e(), p_147260_1_.func_149428_f(), false, p_147260_1_.func_179707_f()); -+ PotionEffect potioneffect = new PotionEffect(p_147260_1_.func_149427_e() & 0xff, p_147260_1_.func_180755_e(), p_147260_1_.func_149428_f(), false, p_147260_1_.func_179707_f()); - potioneffect.func_100012_b(p_147260_1_.func_149429_c()); - ((EntityLivingBase)entity).func_70690_d(potioneffect); - } diff --git a/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.java.patch deleted file mode 100644 index 657aa973d..000000000 --- a/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.java.patch +++ /dev/null @@ -1,176 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/renderer/EntityRenderer.java -+++ ../src-work/minecraft/net/minecraft/client/renderer/EntityRenderer.java -@@ -403,7 +403,7 @@ - - if (d3 < d2 || d2 == 0.0D) - { -- if (entity1 == entity.field_70154_o) -+ if (entity1 == entity.field_70154_o && !entity.canRiderInteract()) - { - if (d2 == 0.0D) - { -@@ -556,14 +556,8 @@ - { - BlockPos blockpos = new BlockPos(entity); - IBlockState iblockstate = this.field_78531_r.field_71441_e.func_180495_p(blockpos); -- Block block = iblockstate.func_177230_c(); -+ net.minecraftforge.client.ForgeHooksClient.orientBedCamera(this.field_78531_r.field_71441_e, blockpos, iblockstate, entity); - -- if (block == Blocks.field_150324_C) -- { -- int j = ((EnumFacing)iblockstate.func_177229_b(BlockBed.field_176387_N)).func_176736_b(); -- GlStateManager.func_179114_b((float)(j * 90), 0.0F, 1.0F, 0.0F); -- } -- - GlStateManager.func_179114_b(entity.field_70126_B + (entity.field_70177_z - entity.field_70126_B) * p_78467_1_ + 180.0F, 0.0F, -1.0F, 0.0F); - GlStateManager.func_179114_b(entity.field_70127_C + (entity.field_70125_A - entity.field_70127_C) * p_78467_1_, -1.0F, 0.0F, 0.0F); - } -@@ -630,17 +624,20 @@ - - if (!this.field_78531_r.field_71474_y.field_74325_U) - { -- GlStateManager.func_179114_b(entity.field_70127_C + (entity.field_70125_A - entity.field_70127_C) * p_78467_1_, 1.0F, 0.0F, 0.0F); -- -+ float yaw = entity.field_70126_B + (entity.field_70177_z - entity.field_70126_B) * p_78467_1_ + 180.0F; -+ float pitch = entity.field_70127_C + (entity.field_70125_A - entity.field_70127_C) * p_78467_1_; -+ float roll = 0.0F; - if (entity instanceof EntityAnimal) - { - EntityAnimal entityanimal = (EntityAnimal)entity; -- GlStateManager.func_179114_b(entityanimal.field_70758_at + (entityanimal.field_70759_as - entityanimal.field_70758_at) * p_78467_1_ + 180.0F, 0.0F, 1.0F, 0.0F); -+ yaw = entityanimal.field_70758_at + (entityanimal.field_70759_as - entityanimal.field_70758_at) * p_78467_1_ + 180.0F; - } -- else -- { -- GlStateManager.func_179114_b(entity.field_70126_B + (entity.field_70177_z - entity.field_70126_B) * p_78467_1_ + 180.0F, 0.0F, 1.0F, 0.0F); -- } -+ Block block = ActiveRenderInfo.func_180786_a(this.field_78531_r.field_71441_e, entity, p_78467_1_); -+ net.minecraftforge.client.event.EntityViewRenderEvent.CameraSetup event = new net.minecraftforge.client.event.EntityViewRenderEvent.CameraSetup(this, entity, block, p_78467_1_, yaw, pitch, roll); -+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event); -+ GlStateManager.func_179114_b(event.roll, 0.0F, 0.0F, 1.0F); -+ GlStateManager.func_179114_b(event.pitch, 1.0F, 0.0F, 0.0F); -+ GlStateManager.func_179114_b(event.yaw, 0.0F, 1.0F, 0.0F); - } - - GlStateManager.func_179109_b(0.0F, -f1, 0.0F); -@@ -1081,7 +1078,7 @@ - - try - { -- this.field_78531_r.field_71462_r.func_73863_a(l, i1, p_78480_1_); -+ net.minecraftforge.client.ForgeHooksClient.drawScreen(this.field_78531_r.field_71462_r, l, i1, p_78480_1_); - } - catch (Throwable throwable) - { -@@ -1145,7 +1142,7 @@ - - if (this.field_78531_r.field_71442_b.func_178889_l() == WorldSettings.GameType.SPECTATOR) - { -- flag = block.func_149716_u() && this.field_78531_r.field_71441_e.func_175625_s(blockpos) instanceof IInventory; -+ flag = block.hasTileEntity(this.field_78531_r.field_71441_e.func_180495_p(blockpos)) && this.field_78531_r.field_71441_e.func_175625_s(blockpos) instanceof IInventory; - } - else - { -@@ -1296,7 +1293,9 @@ - GlStateManager.func_179094_E(); - RenderHelper.func_74519_b(); - this.field_78531_r.field_71424_I.func_76318_c("entities"); -+ net.minecraftforge.client.ForgeHooksClient.setRenderPass(0); - renderglobal.func_180446_a(entity, frustum, p_175068_2_); -+ net.minecraftforge.client.ForgeHooksClient.setRenderPass(0); - RenderHelper.func_74518_a(); - this.func_175072_h(); - GlStateManager.func_179128_n(5888); -@@ -1308,6 +1307,7 @@ - entityplayer = (EntityPlayer)entity; - GlStateManager.func_179118_c(); - this.field_78531_r.field_71424_I.func_76318_c("outline"); -+ if (!net.minecraftforge.client.ForgeHooksClient.onDrawBlockHighlight(renderglobal, entityplayer, field_78531_r.field_71476_x, 0, entityplayer.func_70694_bm(), p_175068_2_)) - renderglobal.func_72731_b(entityplayer, this.field_78531_r.field_71476_x, 0, p_175068_2_); - GlStateManager.func_179141_d(); - } -@@ -1321,6 +1321,7 @@ - entityplayer = (EntityPlayer)entity; - GlStateManager.func_179118_c(); - this.field_78531_r.field_71424_I.func_76318_c("outline"); -+ if (!net.minecraftforge.client.ForgeHooksClient.onDrawBlockHighlight(renderglobal, entityplayer, field_78531_r.field_71476_x, 0, entityplayer.func_70694_bm(), p_175068_2_)) - renderglobal.func_72731_b(entityplayer, this.field_78531_r.field_71476_x, 0, p_175068_2_); - GlStateManager.func_179141_d(); - } -@@ -1373,6 +1374,16 @@ - renderglobal.func_174977_a(EnumWorldBlockLayer.TRANSLUCENT, (double)p_175068_2_, p_175068_1_, entity); - } - -+ if (!this.field_175078_W) //Only render if render pass 0 happens as well. -+ { -+ RenderHelper.func_74519_b(); -+ this.field_78531_r.field_71424_I.func_76318_c("entities"); -+ net.minecraftforge.client.ForgeHooksClient.setRenderPass(1); -+ renderglobal.func_180446_a(entity, frustum, p_175068_2_); -+ net.minecraftforge.client.ForgeHooksClient.setRenderPass(-1); -+ RenderHelper.func_74518_a(); -+ } -+ - GlStateManager.func_179103_j(7424); - GlStateManager.func_179132_a(true); - GlStateManager.func_179089_o(); -@@ -1385,8 +1396,12 @@ - this.func_180437_a(renderglobal, p_175068_2_, p_175068_1_); - } - -+ this.field_78531_r.field_71424_I.func_76318_c("forge_render_last"); -+ net.minecraftforge.client.ForgeHooksClient.dispatchRenderLast(renderglobal, p_175068_2_); -+ - this.field_78531_r.field_71424_I.func_76318_c("hand"); - -+ if (!net.minecraftforge.client.ForgeHooksClient.renderFirstPersonHand(renderglobal, p_175068_2_, p_175068_1_)) - if (this.field_175074_C) - { - GlStateManager.func_179086_m(256); -@@ -1498,6 +1513,13 @@ - - protected void func_78474_d(float p_78474_1_) - { -+ net.minecraftforge.client.IRenderHandler renderer = this.field_78531_r.field_71441_e.field_73011_w.getWeatherRenderer(); -+ if (renderer != null) -+ { -+ renderer.render(p_78474_1_, this.field_78531_r.field_71441_e, field_78531_r); -+ return; -+ } -+ - float f1 = this.field_78531_r.field_71441_e.func_72867_j(p_78474_1_); - - if (f1 > 0.0F) -@@ -1835,6 +1857,13 @@ - this.field_175081_S = f8; - } - -+ net.minecraftforge.client.event.EntityViewRenderEvent.FogColors event = new net.minecraftforge.client.event.EntityViewRenderEvent.FogColors(this, entity, block, p_78466_1_, this.field_175080_Q, this.field_175082_R, this.field_175081_S); -+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event); -+ -+ this.field_175080_Q = event.red; -+ this.field_175082_R = event.green; -+ this.field_175081_S = event.blue; -+ - GlStateManager.func_179082_a(this.field_175080_Q, this.field_175082_R, this.field_175081_S, 0.0F); - } - -@@ -1854,6 +1883,10 @@ - Block block = ActiveRenderInfo.func_180786_a(this.field_78531_r.field_71441_e, entity, p_78468_2_); - float f1; - -+ float hook = net.minecraftforge.client.ForgeHooksClient.getFogDensity(this, entity, block, p_78468_2_, 0.1F); -+ if (hook >= 0) -+ GlStateManager.func_179095_a(hook); -+ else - if (entity instanceof EntityLivingBase && ((EntityLivingBase)entity).func_70644_a(Potion.field_76440_q)) - { - f1 = 5.0F; -@@ -1931,6 +1964,7 @@ - GlStateManager.func_179102_b(f1 * 0.05F); - GlStateManager.func_179153_c(Math.min(f1, 192.0F) * 0.5F); - } -+ net.minecraftforge.client.ForgeHooksClient.onFogRender(this, entity, block, p_78468_2_, p_78468_1_, f1); - } - - GlStateManager.func_179142_g(); diff --git a/patches/minecraft/net/minecraft/client/renderer/ItemRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/ItemRenderer.java.patch deleted file mode 100644 index ec9dc303d..000000000 --- a/patches/minecraft/net/minecraft/client/renderer/ItemRenderer.java.patch +++ /dev/null @@ -1,65 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/renderer/ItemRenderer.java -+++ ../src-work/minecraft/net/minecraft/client/renderer/ItemRenderer.java -@@ -308,7 +308,7 @@ - - if (this.field_78453_b != null) - { -- if (this.field_78453_b.func_77973_b() == Items.field_151098_aY) -+ if (this.field_78453_b.func_77973_b() instanceof net.minecraft.item.ItemMap) - { - this.func_178097_a(entityplayersp, f3, f1, f2); - } -@@ -359,7 +359,8 @@ - - if (this.field_78455_a.field_71439_g.func_70094_T()) - { -- IBlockState iblockstate = this.field_78455_a.field_71441_e.func_180495_p(new BlockPos(this.field_78455_a.field_71439_g)); -+ BlockPos blockpos = new BlockPos(this.field_78455_a.field_71439_g); -+ IBlockState iblockstate = this.field_78455_a.field_71441_e.func_180495_p(blockpos); - EntityPlayerSP entityplayersp = this.field_78455_a.field_71439_g; - - for (int i = 0; i < 8; ++i) -@@ -367,7 +368,7 @@ - double d0 = entityplayersp.field_70165_t + (double)(((float)((i >> 0) % 2) - 0.5F) * entityplayersp.field_70130_N * 0.8F); - double d1 = entityplayersp.field_70163_u + (double)(((float)((i >> 1) % 2) - 0.5F) * 0.1F); - double d2 = entityplayersp.field_70161_v + (double)(((float)((i >> 2) % 2) - 0.5F) * entityplayersp.field_70130_N * 0.8F); -- BlockPos blockpos = new BlockPos(d0, d1 + (double)entityplayersp.func_70047_e(), d2); -+ blockpos = new BlockPos(d0, d1 + (double)entityplayersp.func_70047_e(), d2); - IBlockState iblockstate1 = this.field_78455_a.field_71441_e.func_180495_p(blockpos); - - if (iblockstate1.func_177230_c().func_176214_u()) -@@ -378,6 +379,7 @@ - - if (iblockstate.func_177230_c().func_149645_b() != -1) - { -+ if (!net.minecraftforge.event.ForgeEventFactory.renderBlockOverlay(field_78455_a.field_71439_g, p_78447_1_, net.minecraftforge.client.event.RenderBlockOverlayEvent.OverlayType.BLOCK, iblockstate, blockpos)) - this.func_178108_a(p_78447_1_, this.field_78455_a.func_175602_ab().func_175023_a().func_178122_a(iblockstate)); - } - } -@@ -386,11 +388,13 @@ - { - if (this.field_78455_a.field_71439_g.func_70055_a(Material.field_151586_h)) - { -+ if (!net.minecraftforge.event.ForgeEventFactory.renderWaterOverlay(field_78455_a.field_71439_g, p_78447_1_)) - this.func_78448_c(p_78447_1_); - } - - if (this.field_78455_a.field_71439_g.func_70027_ad()) - { -+ if (!net.minecraftforge.event.ForgeEventFactory.renderFireOverlay(field_78455_a.field_71439_g, p_78447_1_)) - this.func_78442_d(p_78447_1_); - } - } -@@ -507,6 +511,12 @@ - { - if (!this.field_78453_b.func_179549_c(itemstack)) - { -+ if (!this.field_78453_b.func_77973_b().shouldCauseReequipAnimation(this.field_78453_b, itemstack, field_78450_g != entityplayersp.field_71071_by.field_70461_c)) -+ { -+ this.field_78453_b = itemstack; -+ this.field_78450_g = entityplayersp.field_71071_by.field_70461_c; -+ return; -+ } - flag = true; - } - } diff --git a/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.java.patch b/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.java.patch deleted file mode 100644 index e7f5b1855..000000000 --- a/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.java.patch +++ /dev/null @@ -1,134 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/renderer/RenderGlobal.java -+++ ../src-work/minecraft/net/minecraft/client/renderer/RenderGlobal.java -@@ -517,8 +517,10 @@ - - public void func_180446_a(Entity p_180446_1_, ICamera p_180446_2_, float p_180446_3_) - { -+ int pass = net.minecraftforge.client.MinecraftForgeClient.getRenderPass(); - if (this.field_72740_G > 0) - { -+ if (pass > 0) return; - --this.field_72740_G; - } - else -@@ -529,9 +531,12 @@ - this.field_72769_h.field_72984_F.func_76320_a("prepare"); - TileEntityRendererDispatcher.field_147556_a.func_178470_a(this.field_72769_h, this.field_72777_q.func_110434_K(), this.field_72777_q.field_71466_p, this.field_72777_q.func_175606_aa(), p_180446_3_); - this.field_175010_j.func_180597_a(this.field_72769_h, this.field_72777_q.field_71466_p, this.field_72777_q.func_175606_aa(), this.field_72777_q.field_147125_j, this.field_72777_q.field_71474_y, p_180446_3_); -+ if (pass == 0) // no indentation to shrink patch -+ { - this.field_72748_H = 0; - this.field_72749_I = 0; - this.field_72750_J = 0; -+ } - Entity entity1 = this.field_72777_q.func_175606_aa(); - double d3 = entity1.field_70142_S + (entity1.field_70165_t - entity1.field_70142_S) * (double)p_180446_3_; - double d4 = entity1.field_70137_T + (entity1.field_70163_u - entity1.field_70137_T) * (double)p_180446_3_; -@@ -543,13 +548,17 @@ - this.field_72777_q.field_71460_t.func_180436_i(); - this.field_72769_h.field_72984_F.func_76318_c("global"); - List list = this.field_72769_h.func_72910_y(); -+ if (pass == 0) // no indentation to shrink patch -+ { - this.field_72748_H = list.size(); -+ } - int i; - Entity entity2; - - for (i = 0; i < this.field_72769_h.field_73007_j.size(); ++i) - { - entity2 = (Entity)this.field_72769_h.field_73007_j.get(i); -+ if (!entity2.shouldRenderInPass(pass)) continue; - ++this.field_72749_I; - - if (entity2.func_145770_h(d0, d1, d2)) -@@ -571,6 +580,7 @@ - for (i = 0; i < list.size(); ++i) - { - entity2 = (Entity)list.get(i); -+ if (!entity2.shouldRenderInPass(pass)) continue; - boolean flag = this.field_72777_q.func_175606_aa() instanceof EntityLivingBase && ((EntityLivingBase)this.field_72777_q.func_175606_aa()).func_70608_bn(); - boolean flag1 = entity2.func_145770_h(d0, d1, d2) && (entity2.field_70158_ak || p_180446_2_.func_78546_a(entity2.func_174813_aQ()) || entity2.field_70153_n == this.field_72777_q.field_71439_g) && entity2 instanceof EntityPlayer; - -@@ -605,6 +615,7 @@ - while (iterator2.hasNext()) - { - Entity entity3 = (Entity)iterator2.next(); -+ if (!entity3.shouldRenderInPass(pass)) continue; - boolean flag2 = this.field_175010_j.func_178635_a(entity3, p_180446_2_, d0, d1, d2) || entity3.field_70153_n == this.field_72777_q.field_71439_g; - - if (flag2) -@@ -640,6 +651,7 @@ - while (iterator1.hasNext()) - { - tileentity = (TileEntity)iterator1.next(); -+ if (!tileentity.shouldRenderInPass(pass) || !p_180446_2_.func_78546_a(tileentity.getRenderBoundingBox())) continue; - TileEntityRendererDispatcher.field_147556_a.func_180546_a(tileentity, p_180446_3_, -1); - } - } -@@ -671,7 +683,7 @@ - - Block block = this.field_72769_h.func_180495_p(blockpos).func_177230_c(); - -- if (tileentity != null && (block instanceof BlockChest || block instanceof BlockEnderChest || block instanceof BlockSign || block instanceof BlockSkull)) -+ if (tileentity != null && tileentity.shouldRenderInPass(pass) && tileentity.canRenderBreaking() && p_180446_2_.func_78546_a(tileentity.getRenderBoundingBox())) - { - TileEntityRendererDispatcher.field_147556_a.func_180546_a(tileentity, p_180446_3_, destroyblockprogress.func_73106_e()); - } -@@ -1151,6 +1163,12 @@ - - public void func_174976_a(float p_174976_1_, int p_174976_2_) - { -+ net.minecraftforge.client.IRenderHandler renderer = this.field_72769_h.field_73011_w.getSkyRenderer(); -+ if (renderer != null) -+ { -+ renderer.render(p_174976_1_, field_72769_h, field_72777_q); -+ return; -+ } - if (this.field_72777_q.field_71441_e.field_73011_w.func_177502_q() == 1) - { - this.func_180448_r(); -@@ -1381,6 +1399,12 @@ - - public void func_180447_b(float p_180447_1_, int p_180447_2_) - { -+ net.minecraftforge.client.IRenderHandler renderer = this.field_72777_q.field_71441_e.field_73011_w.getCloudRenderer(); -+ if (renderer != null) -+ { -+ renderer.render(p_180447_1_, this.field_72777_q.field_71441_e, field_72777_q); -+ return; -+ } - if (this.field_72777_q.field_71441_e.field_73011_w.func_76569_d()) - { - if (this.field_72777_q.field_71474_y.field_74347_j) -@@ -1805,8 +1829,11 @@ - double d4 = (double)blockpos.func_177956_o() - d1; - double d5 = (double)blockpos.func_177952_p() - d2; - Block block = this.field_72769_h.func_180495_p(blockpos).func_177230_c(); -+ TileEntity te = this.field_72769_h.func_175625_s(blockpos); -+ boolean hasBreak = block instanceof BlockChest || block instanceof BlockEnderChest || block instanceof BlockSign || block instanceof BlockSkull; -+ if (!hasBreak) hasBreak = te != null && te.canRenderBreaking(); - -- if (!(block instanceof BlockChest) && !(block instanceof BlockEnderChest) && !(block instanceof BlockSign) && !(block instanceof BlockSkull)) -+ if (!hasBreak) - { - if (d3 * d3 + d4 * d4 + d5 * d5 > 1024.0D) - { -@@ -1949,13 +1976,16 @@ - if (p_174961_1_ != null) - { - ItemRecord itemrecord = ItemRecord.func_150926_b(p_174961_1_); -+ ResourceLocation resource = null; - - if (itemrecord != null) - { - this.field_72777_q.field_71456_v.func_73833_a(itemrecord.func_150927_i()); -+ resource = itemrecord.getRecordResource(p_174961_1_); - } - -- PositionedSoundRecord positionedsoundrecord = PositionedSoundRecord.func_147675_a(new ResourceLocation(p_174961_1_), (float)p_174961_2_.func_177958_n(), (float)p_174961_2_.func_177956_o(), (float)p_174961_2_.func_177952_p()); -+ if (resource == null) resource = new ResourceLocation(p_174961_1_); -+ PositionedSoundRecord positionedsoundrecord = PositionedSoundRecord.func_147675_a(resource, (float)p_174961_2_.func_177958_n(), (float)p_174961_2_.func_177956_o(), (float)p_174961_2_.func_177952_p()); - this.field_147593_P.put(p_174961_2_, positionedsoundrecord); - this.field_72777_q.func_147118_V().func_147682_a(positionedsoundrecord); - } diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.java.patch deleted file mode 100644 index a015f515f..000000000 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.java.patch +++ /dev/null @@ -1,82 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.java -+++ ../src-work/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.java -@@ -22,7 +22,12 @@ - - public BakedQuad func_178414_a(Vector3f p_178414_1_, Vector3f p_178414_2_, BlockPartFace p_178414_3_, TextureAtlasSprite p_178414_4_, EnumFacing p_178414_5_, ModelRotation p_178414_6_, BlockPartRotation p_178414_7_, boolean p_178414_8_, boolean p_178414_9_) - { -- int[] aint = this.func_178405_a(p_178414_3_, p_178414_4_, p_178414_5_, this.func_178403_a(p_178414_1_, p_178414_2_), p_178414_6_, p_178414_7_, p_178414_8_, p_178414_9_); -+ return makeBakedQuad(p_178414_1_, p_178414_2_, p_178414_3_, p_178414_4_, p_178414_5_, (net.minecraftforge.client.model.ITransformation)p_178414_6_, p_178414_7_, p_178414_8_, p_178414_9_); -+ } -+ -+ public BakedQuad makeBakedQuad(Vector3f p_178414_1_, Vector3f p_178414_2_, BlockPartFace p_178414_3_, TextureAtlasSprite p_178414_4_, EnumFacing p_178414_5_, net.minecraftforge.client.model.ITransformation p_178414_6_, BlockPartRotation p_178414_7_, boolean p_178414_8_, boolean p_178414_9_) -+ { -+ int[] aint = this.makeQuadVertexData(p_178414_3_, p_178414_4_, p_178414_5_, this.func_178403_a(p_178414_1_, p_178414_2_), p_178414_6_, p_178414_7_, p_178414_8_, p_178414_9_); - EnumFacing enumfacing1 = func_178410_a(aint); - - if (p_178414_8_) -@@ -35,16 +40,22 @@ - this.func_178408_a(aint, enumfacing1); - } - -+ net.minecraftforge.client.ForgeHooksClient.fillNormal(aint, enumfacing1); - return new BakedQuad(aint, p_178414_3_.field_178245_c, enumfacing1); - } - - private int[] func_178405_a(BlockPartFace p_178405_1_, TextureAtlasSprite p_178405_2_, EnumFacing p_178405_3_, float[] p_178405_4_, ModelRotation p_178405_5_, BlockPartRotation p_178405_6_, boolean p_178405_7_, boolean p_178405_8_) - { -+ return makeQuadVertexData(p_178405_1_, p_178405_2_, p_178405_3_, p_178405_4_, (net.minecraftforge.client.model.ITransformation)p_178405_5_, p_178405_6_, p_178405_7_, p_178405_8_); -+ } -+ -+ private int[] makeQuadVertexData(BlockPartFace p_178405_1_, TextureAtlasSprite p_178405_2_, EnumFacing p_178405_3_, float[] p_178405_4_, net.minecraftforge.client.model.ITransformation p_178405_5_, BlockPartRotation p_178405_6_, boolean p_178405_7_, boolean p_178405_8_) -+ { - int[] aint = new int[28]; - - for (int i = 0; i < 4; ++i) - { -- this.func_178402_a(aint, i, p_178405_3_, p_178405_1_, p_178405_4_, p_178405_2_, p_178405_5_, p_178405_6_, p_178405_7_, p_178405_8_); -+ this.fillVertexData(aint, i, p_178405_3_, p_178405_1_, p_178405_4_, p_178405_2_, p_178405_5_, p_178405_6_, p_178405_7_, p_178405_8_); - } - - return aint; -@@ -90,12 +101,17 @@ - - private void func_178402_a(int[] p_178402_1_, int p_178402_2_, EnumFacing p_178402_3_, BlockPartFace p_178402_4_, float[] p_178402_5_, TextureAtlasSprite p_178402_6_, ModelRotation p_178402_7_, BlockPartRotation p_178402_8_, boolean p_178402_9_, boolean p_178402_10_) - { -- EnumFacing enumfacing1 = p_178402_7_.func_177523_a(p_178402_3_); -+ fillVertexData(p_178402_1_, p_178402_2_, p_178402_3_, p_178402_4_, p_178402_5_, p_178402_6_, (net.minecraftforge.client.model.ITransformation)p_178402_7_, p_178402_8_, p_178402_9_, p_178402_10_); -+ } -+ -+ private void fillVertexData(int[] p_178402_1_, int p_178402_2_, EnumFacing p_178402_3_, BlockPartFace p_178402_4_, float[] p_178402_5_, TextureAtlasSprite p_178402_6_, net.minecraftforge.client.model.ITransformation p_178402_7_, BlockPartRotation p_178402_8_, boolean p_178402_9_, boolean p_178402_10_) -+ { -+ EnumFacing enumfacing1 = p_178402_7_.rotate(p_178402_3_); - int j = p_178402_10_ ? this.func_178413_a(enumfacing1) : -1; - EnumFaceDirection.VertexInformation vertexinformation = EnumFaceDirection.func_179027_a(p_178402_3_).func_179025_a(p_178402_2_); - Vector3d vector3d = new Vector3d((double)p_178402_5_[vertexinformation.field_179184_a], (double)p_178402_5_[vertexinformation.field_179182_b], (double)p_178402_5_[vertexinformation.field_179183_c]); - this.func_178407_a(vector3d, p_178402_8_); -- int k = this.func_178415_a(vector3d, p_178402_3_, p_178402_2_, p_178402_7_, p_178402_9_); -+ int k = this.rotateVertex(vector3d, p_178402_3_, p_178402_2_, p_178402_7_, p_178402_9_); - this.func_178404_a(p_178402_1_, k, p_178402_2_, vector3d, j, p_178402_6_, p_178402_4_.field_178243_e); - } - -@@ -156,14 +172,19 @@ - - public int func_178415_a(Vector3d p_178415_1_, EnumFacing p_178415_2_, int p_178415_3_, ModelRotation p_178415_4_, boolean p_178415_5_) - { -+ return rotateVertex(p_178415_1_, p_178415_2_, p_178415_3_, (net.minecraftforge.client.model.ITransformation)p_178415_4_, p_178415_5_); -+ } -+ -+ public int rotateVertex(Vector3d p_178415_1_, EnumFacing p_178415_2_, int p_178415_3_, net.minecraftforge.client.model.ITransformation p_178415_4_, boolean p_178415_5_) -+ { - if (p_178415_4_ == ModelRotation.X0_Y0) - { - return p_178415_3_; - } - else - { -- this.func_178406_a(p_178415_1_, new Vector3d(0.5D, 0.5D, 0.5D), p_178415_4_.func_177525_a(), new Vector3d(1.0D, 1.0D, 1.0D)); -- return p_178415_4_.func_177520_a(p_178415_2_, p_178415_3_); -+ net.minecraftforge.client.ForgeHooksClient.transform(p_178415_1_, p_178415_4_.getMatrix()); -+ return p_178415_4_.rotate(p_178415_2_, p_178415_3_); - } - } - diff --git a/patches/minecraft/net/minecraft/client/renderer/block/statemap/StateMap.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/statemap/StateMap.java.patch deleted file mode 100644 index 27c36fd69..000000000 --- a/patches/minecraft/net/minecraft/client/renderer/block/statemap/StateMap.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/renderer/block/statemap/StateMap.java -+++ ../src-work/minecraft/net/minecraft/client/renderer/block/statemap/StateMap.java -@@ -40,7 +40,7 @@ - } - else - { -- s = this.field_178142_a.func_177702_a((Comparable)linkedhashmap.remove(this.field_178142_a)); -+ s = String.format("%s:%s", ((ResourceLocation)Block.field_149771_c.func_177774_c(p_178132_1_.func_177230_c())).func_110624_b(), this.field_178142_a.func_177702_a((Comparable)linkedhashmap.remove(this.field_178142_a))); - } - - if (this.field_178141_c != null) diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/RenderItem.java.patch b/patches/minecraft/net/minecraft/client/renderer/entity/RenderItem.java.patch deleted file mode 100644 index 220d22619..000000000 --- a/patches/minecraft/net/minecraft/client/renderer/entity/RenderItem.java.patch +++ /dev/null @@ -1,128 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/renderer/entity/RenderItem.java -+++ ../src-work/minecraft/net/minecraft/client/renderer/entity/RenderItem.java -@@ -83,7 +83,7 @@ - public RenderItem(TextureManager p_i46165_1_, ModelManager p_i46165_2_) - { - this.field_175057_n = p_i46165_1_; -- this.field_175059_m = new ItemModelMesher(p_i46165_2_); -+ this.field_175059_m = new net.minecraftforge.client.ItemModelMesherForge(p_i46165_2_); - this.func_175041_b(); - } - -@@ -222,7 +222,7 @@ - BakedQuad bakedquad; - int j; - -- for (Iterator iterator = p_175032_2_.iterator(); iterator.hasNext(); this.func_175033_a(p_175032_1_, bakedquad, j)) -+ for (Iterator iterator = p_175032_2_.iterator(); iterator.hasNext(); net.minecraftforge.client.model.pipeline.LightUtil.renderQuadColor(p_175032_1_, bakedquad, j)) - { - bakedquad = (BakedQuad)iterator.next(); - j = p_175032_3_; -@@ -302,6 +302,10 @@ - modelresourcelocation = new ModelResourceLocation("bow_pulling_0", "inventory"); - } - } -+ else -+ { -+ modelresourcelocation = item.getModel(p_175049_1_, entityplayer, entityplayer.func_71052_bv()); -+ } - - if (modelresourcelocation != null) - { -@@ -314,6 +318,11 @@ - - protected void func_175034_a(ItemTransformVec3f p_175034_1_) - { -+ applyVanillaTransform(p_175034_1_); -+ } -+ -+ public static void applyVanillaTransform(ItemTransformVec3f p_175034_1_) -+ { - if (p_175034_1_ != ItemTransformVec3f.field_178366_a) - { - GlStateManager.func_179109_b(p_175034_1_.field_178365_c.x + field_175055_b, p_175034_1_.field_178365_c.y + field_175056_c, p_175034_1_.field_178365_c.z + field_175053_d); -@@ -335,23 +344,7 @@ - GlStateManager.func_179120_a(770, 771, 1, 0); - GlStateManager.func_179094_E(); - -- switch (RenderItem.SwitchTransformType.field_178640_a[p_175040_3_.ordinal()]) -- { -- case 1: -- default: -- break; -- case 2: -- this.func_175034_a(p_175040_2_.func_177552_f().field_178355_b); -- break; -- case 3: -- this.func_175034_a(p_175040_2_.func_177552_f().field_178356_c); -- break; -- case 4: -- this.func_175034_a(p_175040_2_.func_177552_f().field_178353_d); -- break; -- case 5: -- this.func_175034_a(p_175040_2_.func_177552_f().field_178354_e); -- } -+ p_175040_2_ = net.minecraftforge.client.ForgeHooksClient.handleCameraTransforms(p_175040_2_, p_175040_3_); - - this.func_180454_a(p_175040_1_, p_175040_2_); - GlStateManager.func_179121_F(); -@@ -374,7 +367,7 @@ - GlStateManager.func_179112_b(770, 771); - GlStateManager.func_179131_c(1.0F, 1.0F, 1.0F, 1.0F); - this.func_180452_a(p_175042_2_, p_175042_3_, ibakedmodel.func_177556_c()); -- this.func_175034_a(ibakedmodel.func_177552_f().field_178354_e); -+ ibakedmodel = net.minecraftforge.client.ForgeHooksClient.handleCameraTransforms(ibakedmodel, ItemCameraTransforms.TransformType.GUI); - this.func_180454_a(p_175042_1_, ibakedmodel); - GlStateManager.func_179118_c(); - GlStateManager.func_179101_C(); -@@ -485,10 +478,11 @@ - GlStateManager.func_179126_j(); - } - -- if (p_180453_2_.func_77951_h()) -+ if (p_180453_2_.func_77973_b().showDurabilityBar(p_180453_2_)) - { -- int j1 = (int)Math.round(13.0D - (double)p_180453_2_.func_77952_i() * 13.0D / (double)p_180453_2_.func_77958_k()); -- int k = (int)Math.round(255.0D - (double)p_180453_2_.func_77952_i() * 255.0D / (double)p_180453_2_.func_77958_k()); -+ double health = p_180453_2_.func_77973_b().getDurabilityForDisplay(p_180453_2_); -+ int j1 = (int)Math.round(13.0D - health * 13.0D); -+ int k = (int)Math.round(255.0D - health * 255.0D); - GlStateManager.func_179140_f(); - GlStateManager.func_179097_i(); - GlStateManager.func_179090_x(); -@@ -501,7 +495,7 @@ - this.func_175044_a(worldrenderer, p_180453_3_ + 2, p_180453_4_ + 13, 13, 2, 0); - this.func_175044_a(worldrenderer, p_180453_3_ + 2, p_180453_4_ + 13, 12, 1, i1); - this.func_175044_a(worldrenderer, p_180453_3_ + 2, p_180453_4_ + 13, j1, 1, l); -- GlStateManager.func_179147_l(); -+ //GlStateManager.enableBlend(); // Forge: Disable Bled because it screws with a lot of things down the line. - GlStateManager.func_179141_d(); - GlStateManager.func_179098_w(); - GlStateManager.func_179145_e(); -@@ -1072,12 +1066,26 @@ - this.func_175029_a(Blocks.field_150420_aW, BlockHugeMushroom.EnumType.ALL_INSIDE.func_176896_a(), "brown_mushroom_block"); - this.func_175029_a(Blocks.field_150419_aX, BlockHugeMushroom.EnumType.ALL_INSIDE.func_176896_a(), "red_mushroom_block"); - this.func_175031_a(Blocks.field_150380_bt, "dragon_egg"); -+ net.minecraftforge.client.model.ModelLoader.onRegisterItems(this.field_175059_m); - } - - public void func_110549_a(IResourceManager p_110549_1_) - { - this.field_175059_m.func_178085_b(); - } -+ /*==================================== FORGE START ===========================================* / -+ private static RenderItem instance; -+ /** -+ * Returns a single lazy loaded instance of RenderItem, for use in mods who -+ * don't care about the interaction of other objects on the current state of the RenderItem they are using. -+ * @return A global instance of RenderItem -+ * / -+ public static RenderItem getInstance() -+ { -+ if (instance == null) instance = new RenderItem(); -+ return instance; -+ } -+ /*==================================== FORGE END =============================================*/ - - @SideOnly(Side.CLIENT) - diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/RenderManager.java.patch b/patches/minecraft/net/minecraft/client/renderer/entity/RenderManager.java.patch deleted file mode 100644 index 7b9014d93..000000000 --- a/patches/minecraft/net/minecraft/client/renderer/entity/RenderManager.java.patch +++ /dev/null @@ -1,25 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/renderer/entity/RenderManager.java -+++ ../src-work/minecraft/net/minecraft/client/renderer/entity/RenderManager.java -@@ -193,6 +193,10 @@ - this.field_178636_l.put("default", this.field_178637_m); - this.field_178636_l.put("slim", new RenderPlayer(this, true)); - } -+ -+ public Map getSkinMap() { -+ return (Map) java.util.Collections.unmodifiableMap(field_178636_l); -+ } - - public void func_178628_a(double p_178628_1_, double p_178628_3_, double p_178628_5_) - { -@@ -241,9 +245,9 @@ - IBlockState iblockstate = p_180597_1_.func_180495_p(new BlockPos(p_180597_3_)); - Block block = iblockstate.func_177230_c(); - -- if (block == Blocks.field_150324_C) -+ if (block.isBed(p_180597_1_, new BlockPos(p_180597_3_), (EntityLivingBase)p_180597_3_)) - { -- int i = ((EnumFacing)iblockstate.func_177229_b(BlockBed.field_176387_N)).func_176736_b(); -+ int i = block.getBedDirection(p_180597_1_, new BlockPos(p_180597_3_)).func_176736_b(); - this.field_78735_i = (float)(i * 90 + 180); - this.field_78732_j = 0.0F; - } diff --git a/patches/minecraft/net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.java.patch deleted file mode 100644 index 3b547aafd..000000000 --- a/patches/minecraft/net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.java.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.java -+++ ../src-work/minecraft/net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.java -@@ -79,6 +79,7 @@ - { - TileEntityRendererDispatcher.field_147556_a.func_147549_a(this.field_147718_c, 0.0D, 0.0D, 0.0D, 0.0F); - } -+ else if (block != Blocks.field_150486_ae) net.minecraftforge.client.ForgeHooksClient.renderTileItem(p_179022_1_.func_77973_b(), p_179022_1_.func_77960_j()); - else - { - TileEntityRendererDispatcher.field_147556_a.func_147549_a(this.field_147717_b, 0.0D, 0.0D, 0.0D, 0.0F); diff --git a/patches/minecraft/net/minecraft/client/resources/AbstractResourcePack.java.patch b/patches/minecraft/net/minecraft/client/resources/AbstractResourcePack.java.patch deleted file mode 100644 index feee903f7..000000000 --- a/patches/minecraft/net/minecraft/client/resources/AbstractResourcePack.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/resources/AbstractResourcePack.java -+++ ../src-work/minecraft/net/minecraft/client/resources/AbstractResourcePack.java -@@ -58,7 +58,7 @@ - - protected void func_110594_c(String p_110594_1_) - { -- field_110598_a.warn("ResourcePack: ignored non-lowercase namespace: %s in %s", new Object[] {p_110594_1_, this.field_110597_b}); -+ field_110598_a.warn("ResourcePack: ignored non-lowercase namespace: {} in {}", new Object[] {p_110594_1_, this.field_110597_b}); - } - - public IMetadataSection func_135058_a(IMetadataSerializer p_135058_1_, String p_135058_2_) throws IOException diff --git a/patches/minecraft/net/minecraft/client/resources/model/ModelBakery.java.patch b/patches/minecraft/net/minecraft/client/resources/model/ModelBakery.java.patch deleted file mode 100644 index f8e796861..000000000 --- a/patches/minecraft/net/minecraft/client/resources/model/ModelBakery.java.patch +++ /dev/null @@ -1,103 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/resources/model/ModelBakery.java -+++ ../src-work/minecraft/net/minecraft/client/resources/model/ModelBakery.java -@@ -123,7 +123,7 @@ - } - catch (Exception exception) - { -- field_177603_c.warn("Unable to load variant: " + modelresourcelocation.func_177518_c() + " from " + modelresourcelocation); -+ field_177603_c.warn("Unable to load variant: " + modelresourcelocation.func_177518_c() + " from " + modelresourcelocation, exception); - } - } - catch (Exception exception1) -@@ -172,6 +172,7 @@ - } - } - } -+ catch (FileNotFoundException e) {} - catch (IOException ioexception) - { - throw new RuntimeException("Encountered an exception when loading model definition of model " + resourcelocation1.toString(), ioexception); -@@ -318,6 +319,7 @@ - - protected void func_177592_e() - { -+ this.field_177613_u.clear(); //FML clear this to prevent double ups. - this.field_177613_u.put(Item.func_150898_a(Blocks.field_150348_b), Lists.newArrayList(new String[] {"stone", "granite", "granite_smooth", "diorite", "diorite_smooth", "andesite", "andesite_smooth"})); - this.field_177613_u.put(Item.func_150898_a(Blocks.field_150346_d), Lists.newArrayList(new String[] {"dirt", "coarse_dirt", "podzol"})); - this.field_177613_u.put(Item.func_150898_a(Blocks.field_150344_f), Lists.newArrayList(new String[] {"oak_planks", "spruce_planks", "birch_planks", "jungle_planks", "acacia_planks", "dark_oak_planks"})); -@@ -360,6 +362,10 @@ - this.field_177613_u.put(Item.func_150898_a(Blocks.field_180390_bo), Lists.newArrayList(new String[] {"oak_fence_gate"})); - this.field_177613_u.put(Item.func_150898_a(Blocks.field_180407_aO), Lists.newArrayList(new String[] {"oak_fence"})); - this.field_177613_u.put(Items.field_179570_aq, Lists.newArrayList(new String[] {"oak_door"})); -+ for (Entry, Set> e : customVariantNames.entrySet()) -+ { -+ this.field_177613_u.put(e.getKey().get(), Lists.newArrayList(e.getValue().iterator())); -+ } - } - - protected List func_177596_a(Item p_177596_1_) -@@ -494,6 +500,11 @@ - - private IBakedModel func_177578_a(ModelBlock p_177578_1_, ModelRotation p_177578_2_, boolean p_177578_3_) - { -+ return bakeModel(p_177578_1_, (net.minecraftforge.client.model.ITransformation)p_177578_2_, p_177578_3_); -+ } -+ -+ protected IBakedModel bakeModel(ModelBlock p_177578_1_, net.minecraftforge.client.model.ITransformation p_177578_2_, boolean p_177578_3_) -+ { - TextureAtlasSprite textureatlassprite = (TextureAtlasSprite)this.field_177599_g.get(new ResourceLocation(p_177578_1_.func_178308_c("particle"))); - SimpleBakedModel.Builder builder = (new SimpleBakedModel.Builder(p_177578_1_)).func_177646_a(textureatlassprite); - Iterator iterator = p_177578_1_.func_178298_a().iterator(); -@@ -509,13 +520,13 @@ - BlockPartFace blockpartface = (BlockPartFace)blockpart.field_178240_c.get(enumfacing); - TextureAtlasSprite textureatlassprite1 = (TextureAtlasSprite)this.field_177599_g.get(new ResourceLocation(p_177578_1_.func_178308_c(blockpartface.field_178242_d))); - -- if (blockpartface.field_178244_b == null) -+ if (blockpartface.field_178244_b == null || !net.minecraftforge.client.model.TRSRTransformation.isInteger(p_177578_2_.getMatrix())) - { -- builder.func_177648_a(this.func_177589_a(blockpart, blockpartface, textureatlassprite1, enumfacing, p_177578_2_, p_177578_3_)); -+ builder.func_177648_a(this.makeBakedQuad(blockpart, blockpartface, textureatlassprite1, enumfacing, p_177578_2_, p_177578_3_)); - } - else - { -- builder.func_177650_a(p_177578_2_.func_177523_a(blockpartface.field_178244_b), this.func_177589_a(blockpart, blockpartface, textureatlassprite1, enumfacing, p_177578_2_, p_177578_3_)); -+ builder.func_177650_a(p_177578_2_.rotate(blockpartface.field_178244_b), this.makeBakedQuad(blockpart, blockpartface, textureatlassprite1, enumfacing, p_177578_2_, p_177578_3_)); - } - } - } -@@ -525,9 +536,14 @@ - - private BakedQuad func_177589_a(BlockPart p_177589_1_, BlockPartFace p_177589_2_, TextureAtlasSprite p_177589_3_, EnumFacing p_177589_4_, ModelRotation p_177589_5_, boolean p_177589_6_) - { -- return this.field_177607_l.func_178414_a(p_177589_1_.field_178241_a, p_177589_1_.field_178239_b, p_177589_2_, p_177589_3_, p_177589_4_, p_177589_5_, p_177589_1_.field_178237_d, p_177589_6_, p_177589_1_.field_178238_e); -+ return makeBakedQuad(p_177589_1_, p_177589_2_, p_177589_3_, p_177589_4_, (net.minecraftforge.client.model.ITransformation)p_177589_5_, p_177589_6_); - } - -+ protected BakedQuad makeBakedQuad(BlockPart p_177589_1_, BlockPartFace p_177589_2_, TextureAtlasSprite p_177589_3_, EnumFacing p_177589_4_, net.minecraftforge.client.model.ITransformation p_177589_5_, boolean p_177589_6_) -+ { -+ return this.field_177607_l.makeBakedQuad(p_177589_1_.field_178241_a, p_177589_1_.field_178239_b, p_177589_2_, p_177589_3_, p_177589_4_, p_177589_5_, p_177589_1_.field_178237_d, p_177589_6_, p_177589_1_.field_178238_e); -+ } -+ - private void func_177597_h() - { - this.func_177574_i(); -@@ -809,4 +825,19 @@ - field_177617_q.field_178317_b = "class generation marker"; - field_177616_r.field_178317_b = "block entity marker"; - } -+ -+ /*********************************************************** -+ * FML Start -+ ***********************************************************/ -+ private static Map, Set> customVariantNames = Maps.newHashMap(); -+ public static void addVariantName(Item item, String... names) -+ { -+ if (customVariantNames.containsKey(item.delegate)) -+ customVariantNames.get(item.delegate).addAll(Lists.newArrayList(names)); -+ else -+ customVariantNames.put(item.delegate, Sets.newHashSet(names)); -+ } -+ /*********************************************************** -+ * FML End -+ ***********************************************************/ - } diff --git a/patches/minecraft/net/minecraft/client/resources/model/ModelManager.java.patch b/patches/minecraft/net/minecraft/client/resources/model/ModelManager.java.patch deleted file mode 100644 index ec981fa49..000000000 --- a/patches/minecraft/net/minecraft/client/resources/model/ModelManager.java.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/client/resources/model/ModelManager.java -+++ ../src-work/minecraft/net/minecraft/client/resources/model/ModelManager.java -@@ -25,9 +25,10 @@ - - public void func_110549_a(IResourceManager p_110549_1_) - { -- ModelBakery modelbakery = new ModelBakery(p_110549_1_, this.field_174956_b, this.field_174957_c); -+ ModelBakery modelbakery = new net.minecraftforge.client.model.ModelLoader(p_110549_1_, this.field_174956_b, this.field_174957_c); - this.field_174958_a = modelbakery.func_177570_a(); - this.field_174955_d = (IBakedModel)this.field_174958_a.func_82594_a(ModelBakery.field_177604_a); -+ net.minecraftforge.client.ForgeHooksClient.onModelBake(this, this.field_174958_a, modelbakery); - this.field_174957_c.func_178124_c(); - } - diff --git a/patches/minecraft/net/minecraft/command/CommandEnchant.java.patch b/patches/minecraft/net/minecraft/command/CommandEnchant.java.patch deleted file mode 100644 index caaea209c..000000000 --- a/patches/minecraft/net/minecraft/command/CommandEnchant.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/command/CommandEnchant.java -+++ ../src-work/minecraft/net/minecraft/command/CommandEnchant.java -@@ -95,7 +95,7 @@ - { - Enchantment enchantment2 = Enchantment.func_180306_c(short1); - -- if (!enchantment2.func_77326_a(enchantment1)) -+ if (!enchantment2.func_77326_a(enchantment1) || !enchantment1.func_77326_a(enchantment2)) //Forge BugFix: Let Both enchantments veto being together - { - throw new CommandException("commands.enchant.cantCombine", new Object[] {enchantment1.func_77316_c(j), enchantment2.func_77316_c(nbttaglist.func_150305_b(k).func_74765_d("lvl"))}); - } diff --git a/patches/minecraft/net/minecraft/command/CommandFill.java.patch b/patches/minecraft/net/minecraft/command/CommandFill.java.patch deleted file mode 100644 index 9a592ec08..000000000 --- a/patches/minecraft/net/minecraft/command/CommandFill.java.patch +++ /dev/null @@ -1,28 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/command/CommandFill.java -+++ ../src-work/minecraft/net/minecraft/command/CommandFill.java -@@ -52,6 +52,7 @@ - { - i = func_175764_a(p_71515_2_[7], 0, 15); - } -+ IBlockState state = block.func_176203_a(i); - - BlockPos blockpos2 = new BlockPos(Math.min(blockpos.func_177958_n(), blockpos1.func_177958_n()), Math.min(blockpos.func_177956_o(), blockpos1.func_177956_o()), Math.min(blockpos.func_177952_p(), blockpos1.func_177952_p())); - BlockPos blockpos3 = new BlockPos(Math.max(blockpos.func_177958_n(), blockpos1.func_177958_n()), Math.max(blockpos.func_177956_o(), blockpos1.func_177956_o()), Math.max(blockpos.func_177952_p(), blockpos1.func_177952_p())); -@@ -79,7 +80,7 @@ - NBTTagCompound nbttagcompound = new NBTTagCompound(); - boolean flag = false; - -- if (p_71515_2_.length >= 10 && block.func_149716_u()) -+ if (p_71515_2_.length >= 10 && block.hasTileEntity(state)) - { - String s = func_147178_a(p_71515_1_, p_71515_2_, 9).func_150260_c(); - -@@ -121,7 +122,7 @@ - continue; - } - } -- else if (p_71515_2_[8].equals("replace") && !block.func_149716_u()) -+ else if (p_71515_2_[8].equals("replace") && !block.hasTileEntity(state)) - { - if (p_71515_2_.length > 9) - { diff --git a/patches/minecraft/net/minecraft/command/server/CommandSetBlock.java.patch b/patches/minecraft/net/minecraft/command/server/CommandSetBlock.java.patch deleted file mode 100644 index 8ef370f35..000000000 --- a/patches/minecraft/net/minecraft/command/server/CommandSetBlock.java.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/command/server/CommandSetBlock.java -+++ ../src-work/minecraft/net/minecraft/command/server/CommandSetBlock.java -@@ -54,6 +54,8 @@ - i = func_175764_a(p_71515_2_[4], 0, 15); - } - -+ IBlockState state = block.func_176203_a(i); -+ - World world = p_71515_1_.func_130014_f_(); - - if (!world.func_175667_e(blockpos)) -@@ -65,7 +67,7 @@ - NBTTagCompound nbttagcompound = new NBTTagCompound(); - boolean flag = false; - -- if (p_71515_2_.length >= 7 && block.func_149716_u()) -+ if (p_71515_2_.length >= 7 && block.hasTileEntity(state)) - { - String s = func_147178_a(p_71515_1_, p_71515_2_, 6).func_150260_c(); - diff --git a/patches/minecraft/net/minecraft/crash/CrashReportCategory.java.patch b/patches/minecraft/net/minecraft/crash/CrashReportCategory.java.patch deleted file mode 100644 index 9deb81cc3..000000000 --- a/patches/minecraft/net/minecraft/crash/CrashReportCategory.java.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/crash/CrashReportCategory.java -+++ ../src-work/minecraft/net/minecraft/crash/CrashReportCategory.java -@@ -128,8 +128,11 @@ - } - else - { -- this.field_85075_d = new StackTraceElement[astacktraceelement.length - 3 - p_85073_1_]; -- System.arraycopy(astacktraceelement, 3 + p_85073_1_, this.field_85075_d, 0, this.field_85075_d.length); -+ int len = astacktraceelement.length - 3 - p_85073_1_; -+ // Really Mojang, Still, god damn... -+ if (len <= 0) len = astacktraceelement.length; -+ this.field_85075_d = new StackTraceElement[len]; -+ System.arraycopy(astacktraceelement, astacktraceelement.length - len, this.field_85075_d, 0, this.field_85075_d.length); - return this.field_85075_d.length; - } - } diff --git a/patches/minecraft/net/minecraft/entity/EntityHanging.java.patch b/patches/minecraft/net/minecraft/entity/EntityHanging.java.patch deleted file mode 100644 index 1544b50a8..000000000 --- a/patches/minecraft/net/minecraft/entity/EntityHanging.java.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/entity/EntityHanging.java -+++ ../src-work/minecraft/net/minecraft/entity/EntityHanging.java -@@ -124,6 +124,9 @@ - { - BlockPos blockpos1 = blockpos.func_177967_a(enumfacing, k).func_177981_b(l); - Block block = this.field_70170_p.func_180495_p(blockpos1).func_177230_c(); -+ -+ if ( block.isSideSolid( this.field_70170_p, blockpos1, this.field_174860_b )) -+ continue; - - if (!block.func_149688_o().func_76220_a() && !BlockRedstoneDiode.func_149909_d(block)) - { diff --git a/patches/minecraft/net/minecraft/entity/EntityLiving.java.patch b/patches/minecraft/net/minecraft/entity/EntityLiving.java.patch deleted file mode 100644 index 5a09c3725..000000000 --- a/patches/minecraft/net/minecraft/entity/EntityLiving.java.patch +++ /dev/null @@ -1,41 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/entity/EntityLiving.java -+++ ../src-work/minecraft/net/minecraft/entity/EntityLiving.java -@@ -124,6 +124,7 @@ - public void func_70624_b(EntityLivingBase p_70624_1_) - { - this.field_70696_bz = p_70624_1_; -+ net.minecraftforge.common.ForgeHooks.onLivingSetAttackTarget(this, p_70624_1_); - } - - public boolean func_70686_a(Class p_70686_1_) -@@ -507,10 +508,22 @@ - - protected void func_70623_bb() - { -+ net.minecraftforge.fml.common.eventhandler.Event.Result result = null; - if (this.field_82179_bU) - { - this.field_70708_bq = 0; - } -+ else if ((this.field_70708_bq & 0x1F) == 0x1F && (result = net.minecraftforge.event.ForgeEventFactory.canEntityDespawn(this)) != net.minecraftforge.fml.common.eventhandler.Event.Result.DEFAULT) -+ { -+ if (result == net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) -+ { -+ this.field_70708_bq = 0; -+ } -+ else -+ { -+ this.func_70106_y(); -+ } -+ } - else - { - EntityPlayer entityplayer = this.field_70170_p.func_72890_a(this, -1.0D); -@@ -628,7 +641,6 @@ - return this.field_70170_p.func_72917_a(this.func_174813_aQ(), this) && this.field_70170_p.func_72945_a(this, this.func_174813_aQ()).isEmpty() && !this.field_70170_p.func_72953_d(this.func_174813_aQ()); - } - -- @SideOnly(Side.CLIENT) - public float func_70603_bj() - { - return 1.0F; diff --git a/patches/minecraft/net/minecraft/entity/EntityLivingBase.java.patch b/patches/minecraft/net/minecraft/entity/EntityLivingBase.java.patch deleted file mode 100644 index 95ebf1e2d..000000000 --- a/patches/minecraft/net/minecraft/entity/EntityLivingBase.java.patch +++ /dev/null @@ -1,212 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/entity/EntityLivingBase.java -+++ ../src-work/minecraft/net/minecraft/entity/EntityLivingBase.java -@@ -233,7 +233,7 @@ - } - } - -- if (!this.field_70170_p.field_72995_K && this.func_70115_ae() && this.field_70154_o instanceof EntityLivingBase) -+ if (!this.field_70170_p.field_72995_K && this.func_70115_ae() && this.field_70154_o != null && field_70154_o.shouldDismountInWater(this)) - { - this.func_70078_a((Entity)null); - } -@@ -316,7 +316,7 @@ - if (!this.field_70170_p.field_72995_K && (this.field_70718_bc > 0 || this.func_70684_aJ()) && this.func_146066_aG() && this.field_70170_p.func_82736_K().func_82766_b("doMobLoot")) - { - i = this.func_70693_a(this.field_70717_bb); -- -+ i = net.minecraftforge.event.ForgeEventFactory.getExperienceDrop(this, this.field_70717_bb, i); - while (i > 0) - { - int j = EntityXPOrb.func_70527_a(i); -@@ -377,6 +377,7 @@ - { - this.field_70755_b = p_70604_1_; - this.field_70756_c = this.field_70173_aa; -+ net.minecraftforge.common.ForgeHooks.onLivingSetAttackTarget(this, p_70604_1_); - } - - public EntityLivingBase func_110144_aD() -@@ -672,7 +673,6 @@ - return this.func_70668_bt() == EnumCreatureAttribute.UNDEAD; - } - -- @SideOnly(Side.CLIENT) - public void func_70618_n(int p_70618_1_) - { - this.field_70713_bf.remove(Integer.valueOf(p_70618_1_)); -@@ -721,6 +721,8 @@ - - public void func_70691_i(float p_70691_1_) - { -+ p_70691_1_ = net.minecraftforge.event.ForgeEventFactory.onLivingHeal(this, p_70691_1_); -+ if (p_70691_1_ <= 0) return; - float f1 = this.func_110143_aJ(); - - if (f1 > 0.0F) -@@ -741,6 +743,7 @@ - - public boolean func_70097_a(DamageSource p_70097_1_, float p_70097_2_) - { -+ if (!net.minecraftforge.common.ForgeHooks.onLivingAttack(this, p_70097_1_, p_70097_2_)) return false; - if (this.func_180431_b(p_70097_1_)) - { - return false; -@@ -806,9 +809,9 @@ - this.field_70718_bc = 100; - this.field_70717_bb = (EntityPlayer)entity; - } -- else if (entity instanceof EntityWolf) -+ else if (entity instanceof net.minecraft.entity.passive.EntityTameable) - { -- EntityWolf entitywolf = (EntityWolf)entity; -+ net.minecraft.entity.passive.EntityTameable entitywolf = (net.minecraft.entity.passive.EntityTameable)entity; - - if (entitywolf.func_70909_n()) - { -@@ -894,6 +897,7 @@ - - public void func_70645_a(DamageSource p_70645_1_) - { -+ if (net.minecraftforge.common.ForgeHooks.onLivingDeath(this, p_70645_1_)) return; - Entity entity = p_70645_1_.func_76346_g(); - EntityLivingBase entitylivingbase = this.func_94060_bK(); - -@@ -919,6 +923,9 @@ - i = EnchantmentHelper.func_77519_f((EntityLivingBase)entity); - } - -+ captureDrops = true; -+ capturedDrops.clear(); -+ - if (this.func_146066_aG() && this.field_70170_p.func_82736_K().func_82766_b("doMobLoot")) - { - this.func_70628_a(this.field_70718_bc > 0, i); -@@ -929,6 +936,16 @@ - this.func_82164_bB(); - } - } -+ -+ captureDrops = false; -+ -+ if (!net.minecraftforge.common.ForgeHooks.onLivingDrops(this, p_70645_1_, capturedDrops, i, field_70718_bc > 0)) -+ { -+ for (EntityItem item : capturedDrops) -+ { -+ field_70170_p.func_72838_d(item); -+ } -+ } - } - - this.field_70170_p.func_72960_a(this, (byte)3); -@@ -977,7 +994,7 @@ - int j = MathHelper.func_76128_c(this.func_174813_aQ().field_72338_b); - int k = MathHelper.func_76128_c(this.field_70161_v); - Block block = this.field_70170_p.func_180495_p(new BlockPos(i, j, k)).func_177230_c(); -- return (block == Blocks.field_150468_ap || block == Blocks.field_150395_bd) && (!(this instanceof EntityPlayer) || !((EntityPlayer)this).func_175149_v()); -+ return net.minecraftforge.common.ForgeHooks.isLivingOnLadder(block, field_70170_p, new BlockPos(i, j, k), this); - } - - public boolean func_70089_S() -@@ -987,6 +1004,9 @@ - - public void func_180430_e(float p_180430_1_, float p_180430_2_) - { -+ float[] ret = net.minecraftforge.common.ForgeHooks.onLivingFall(this, p_180430_1_, p_180430_2_); -+ if (ret == null) return; -+ p_180430_1_ = ret[0]; p_180430_2_ = ret[1]; - super.func_180430_e(p_180430_1_, p_180430_2_); - PotionEffect potioneffect = this.func_70660_b(Potion.field_76430_j); - float f2 = potioneffect != null ? (float)(potioneffect.func_76458_c() + 1) : 0.0F; -@@ -1105,6 +1125,8 @@ - { - if (!this.func_180431_b(p_70665_1_)) - { -+ p_70665_2_ = net.minecraftforge.common.ForgeHooks.onLivingHurt(this, p_70665_1_, p_70665_2_); -+ if (p_70665_2_ <= 0) return; - p_70665_2_ = this.func_70655_b(p_70665_1_, p_70665_2_); - p_70665_2_ = this.func_70672_c(p_70665_1_, p_70665_2_); - float f1 = p_70665_2_; -@@ -1153,6 +1175,11 @@ - - public void func_71038_i() - { -+ ItemStack stack = this.func_70694_bm(); -+ if (stack != null && stack.func_77973_b() != null) -+ { -+ if (stack.func_77973_b().onEntitySwing(this, stack)) return; -+ } - if (!this.field_82175_bq || this.field_110158_av >= this.func_82166_i() / 2 || this.field_110158_av < 0) - { - this.field_110158_av = -1; -@@ -1294,6 +1321,7 @@ - - public void func_110145_l(Entity p_110145_1_) - { -+ if(!net.minecraftforge.event.ForgeEventFactory.canMountEntity(this, p_110145_1_, false)){ return; } - double d0 = p_110145_1_.field_70165_t; - double d1 = p_110145_1_.func_174813_aQ().field_72338_b + (double)p_110145_1_.field_70131_O; - double d2 = p_110145_1_.field_70161_v; -@@ -1359,6 +1387,7 @@ - } - - this.field_70160_al = true; -+ net.minecraftforge.common.ForgeHooks.onLivingJump(this); - } - - protected void func_70629_bd() -@@ -1545,6 +1574,7 @@ - - public void func_70071_h_() - { -+ if (net.minecraftforge.common.ForgeHooks.onLivingUpdate(this)) return; - super.func_70071_h_(); - - if (!this.field_70170_p.field_72995_K) -@@ -1828,6 +1858,7 @@ - - public void func_70078_a(Entity p_70078_1_) - { -+ if(!net.minecraftforge.event.ForgeEventFactory.canMountEntity(this, p_70078_1_, true)){ return; } - if (this.field_70154_o != null && p_70078_1_ == null) - { - if (!this.field_70170_p.field_72995_K) -@@ -2000,4 +2031,39 @@ - { - this.field_70752_e = true; - } -+ -+ /*** -+ * Removes all potion effects that have curativeItem as a curative item for its effect -+ * @param curativeItem The itemstack we are using to cure potion effects -+ */ -+ public void curePotionEffects(ItemStack curativeItem) -+ { -+ Iterator potionKey = field_70713_bf.keySet().iterator(); -+ if (field_70170_p.field_72995_K) return; -+ -+ while (potionKey.hasNext()) -+ { -+ Integer key = potionKey.next(); -+ PotionEffect effect = (PotionEffect)field_70713_bf.get(key); -+ -+ if (effect.isCurativeItem(curativeItem)) -+ { -+ potionKey.remove(); -+ func_70688_c(effect); -+ this.field_70752_e = true; -+ } -+ } -+ } -+ -+ /** -+ * Returns true if the entity's rider (EntityPlayer) should face forward when mounted. -+ * currently only used in vanilla code by pigs. -+ * -+ * @param player The player who is riding the entity. -+ * @return If the player should orient the same direction as this entity. -+ */ -+ public boolean shouldRiderFaceForward(EntityPlayer player) -+ { -+ return this instanceof net.minecraft.entity.passive.EntityPig; -+ } - } diff --git a/patches/minecraft/net/minecraft/entity/EntityTrackerEntry.java.patch b/patches/minecraft/net/minecraft/entity/EntityTrackerEntry.java.patch deleted file mode 100644 index 6f346c7e8..000000000 --- a/patches/minecraft/net/minecraft/entity/EntityTrackerEntry.java.patch +++ /dev/null @@ -1,42 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/entity/EntityTrackerEntry.java -+++ ../src-work/minecraft/net/minecraft/entity/EntityTrackerEntry.java -@@ -388,6 +388,14 @@ - this.field_73138_k = this.field_73132_a.field_70181_x; - this.field_73135_l = this.field_73132_a.field_70179_y; - -+ int posX = MathHelper.func_76128_c(this.field_73132_a.field_70165_t * 32.0D); -+ int posY = MathHelper.func_76128_c(this.field_73132_a.field_70163_u * 32.0D); -+ int posZ = MathHelper.func_76128_c(this.field_73132_a.field_70161_v * 32.0D); -+ if (posX != this.field_73128_d || posY != this.field_73129_e || posZ != this.field_73126_f) -+ { -+ net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.makeEntitySpawnAdjustment(this.field_73132_a, p_73117_1_, this.field_73128_d, this.field_73129_e, this.field_73126_f); -+ } -+ - if (this.field_73143_t && !(packet instanceof S0FPacketSpawnMob)) - { - p_73117_1_.field_71135_a.func_147359_a(new S12PacketEntityVelocity(this.field_73132_a.func_145782_y(), this.field_73132_a.field_70159_w, this.field_73132_a.field_70181_x, this.field_73132_a.field_70179_y)); -@@ -437,12 +445,14 @@ - p_73117_1_.field_71135_a.func_147359_a(new S1DPacketEntityEffect(this.field_73132_a.func_145782_y(), potioneffect)); - } - } -+ net.minecraftforge.event.ForgeEventFactory.onStartEntityTracking(field_73132_a, p_73117_1_); - } - } - else if (this.field_73134_o.contains(p_73117_1_)) - { - this.field_73134_o.remove(p_73117_1_); - p_73117_1_.func_152339_d(this.field_73132_a); -+ net.minecraftforge.event.ForgeEventFactory.onStopEntityTracking(field_73132_a, p_73117_1_); - } - } - } -@@ -474,6 +484,9 @@ - field_151262_p.warn("Fetching addPacket for removed entity"); - } - -+ Packet pkt = net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.getEntitySpawningPacket(this.field_73132_a); -+ if (pkt != null) return pkt; -+ - if (this.field_73132_a instanceof EntityItem) - { - return new S0EPacketSpawnObject(this.field_73132_a, 2, 1); diff --git a/patches/minecraft/net/minecraft/entity/boss/EntityDragon.java.patch b/patches/minecraft/net/minecraft/entity/boss/EntityDragon.java.patch deleted file mode 100644 index 8f01432d9..000000000 --- a/patches/minecraft/net/minecraft/entity/boss/EntityDragon.java.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/entity/boss/EntityDragon.java -+++ ../src-work/minecraft/net/minecraft/entity/boss/EntityDragon.java -@@ -486,9 +486,9 @@ - { - Block block = this.field_70170_p.func_180495_p(new BlockPos(k1, l1, i2)).func_177230_c(); - -- if (block.func_149688_o() != Material.field_151579_a) -+ if (!block.isAir(field_70170_p, new BlockPos(k1, l1, i2))) - { -- if (block != Blocks.field_180401_cv && block != Blocks.field_150343_Z && block != Blocks.field_150377_bs && block != Blocks.field_150357_h && block != Blocks.field_150483_bI && this.field_70170_p.func_82736_K().func_82766_b("mobGriefing")) -+ if (block.canEntityDestroy(field_70170_p, new BlockPos(k1, l1, i2), this) && this.field_70170_p.func_82736_K().func_82766_b("mobGriefing")) - { - flag1 = this.field_70170_p.func_175698_g(new BlockPos(k1, l1, i2)) || flag1; - } diff --git a/patches/minecraft/net/minecraft/entity/boss/EntityWither.java.patch b/patches/minecraft/net/minecraft/entity/boss/EntityWither.java.patch deleted file mode 100644 index e683f35dc..000000000 --- a/patches/minecraft/net/minecraft/entity/boss/EntityWither.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/entity/boss/EntityWither.java -+++ ../src-work/minecraft/net/minecraft/entity/boss/EntityWither.java -@@ -351,7 +351,7 @@ - int l = j1 + i2; - Block block = this.field_70170_p.func_180495_p(new BlockPos(j2, k, l)).func_177230_c(); - -- if (block.func_149688_o() != Material.field_151579_a && block != Blocks.field_150357_h && block != Blocks.field_150384_bq && block != Blocks.field_150378_br && block != Blocks.field_150483_bI && block != Blocks.field_180401_cv) -+ if (!block.isAir(field_70170_p, new BlockPos(j2, k, l)) && block.canEntityDestroy(field_70170_p, new BlockPos(j2, k, l), this)) - { - flag = this.field_70170_p.func_175655_b(new BlockPos(j2, k, l), true) || flag; - } diff --git a/patches/minecraft/net/minecraft/entity/item/EntityEnderPearl.java.patch b/patches/minecraft/net/minecraft/entity/item/EntityEnderPearl.java.patch deleted file mode 100644 index c12ef4d21..000000000 --- a/patches/minecraft/net/minecraft/entity/item/EntityEnderPearl.java.patch +++ /dev/null @@ -1,25 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/entity/item/EntityEnderPearl.java -+++ ../src-work/minecraft/net/minecraft/entity/item/EntityEnderPearl.java -@@ -50,6 +50,9 @@ - - if (entityplayermp.field_71135_a.func_147362_b().func_150724_d() && entityplayermp.field_70170_p == this.field_70170_p && !entityplayermp.func_70608_bn()) - { -+ net.minecraftforge.event.entity.living.EnderTeleportEvent event = new net.minecraftforge.event.entity.living.EnderTeleportEvent(entityplayermp, this.field_70165_t, this.field_70163_u, this.field_70161_v, 5.0F); -+ if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) -+ { // Don't indent to lower patch size - if (this.field_70146_Z.nextFloat() < 0.05F && this.field_70170_p.func_82736_K().func_82766_b("doMobSpawning")) - { - EntityEndermite entityendermite = new EntityEndermite(this.field_70170_p); -@@ -63,9 +66,10 @@ - entitylivingbase.func_70078_a((Entity)null); - } - -- entitylivingbase.func_70634_a(this.field_70165_t, this.field_70163_u, this.field_70161_v); -+ entitylivingbase.func_70634_a(event.targetX, event.targetY, event.targetZ); - entitylivingbase.field_70143_R = 0.0F; -- entitylivingbase.func_70097_a(DamageSource.field_76379_h, 5.0F); -+ entitylivingbase.func_70097_a(DamageSource.field_76379_h, event.attackDamage); -+ } - } - } - diff --git a/patches/minecraft/net/minecraft/entity/item/EntityItem.java.patch b/patches/minecraft/net/minecraft/entity/item/EntityItem.java.patch deleted file mode 100644 index 62ed8fc50..000000000 --- a/patches/minecraft/net/minecraft/entity/item/EntityItem.java.patch +++ /dev/null @@ -1,94 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/entity/item/EntityItem.java -+++ ../src-work/minecraft/net/minecraft/entity/item/EntityItem.java -@@ -31,6 +31,11 @@ - public float field_70290_d; - private static final String __OBFID = "CL_00001669"; - -+ /** -+ * The maximum age of this EntityItem. The item is expired once this is reached. -+ */ -+ public int lifespan = 6000; -+ - public EntityItem(World p_i1709_1_, double p_i1709_2_, double p_i1709_4_, double p_i1709_6_) - { - super(p_i1709_1_); -@@ -48,6 +53,7 @@ - { - this(p_i1710_1_, p_i1710_2_, p_i1710_4_, p_i1710_6_); - this.func_92058_a(p_i1710_8_); -+ this.lifespan = (p_i1710_8_.func_77973_b() == null ? 6000 : p_i1710_8_.func_77973_b().getEntityLifespan(p_i1710_8_, p_i1710_1_)); - } - - protected boolean func_70041_e_() -@@ -71,6 +77,8 @@ - - public void func_70071_h_() - { -+ ItemStack stack = this.func_70096_w().func_82710_f(10); -+ if (stack != null && stack.func_77973_b() != null && stack.func_77973_b().onEntityItemUpdate(this)) return; - if (this.func_92059_d() == null) - { - this.func_70106_y(); -@@ -131,8 +139,16 @@ - - this.func_70072_I(); - -- if (!this.field_70170_p.field_72995_K && this.field_70292_b >= 6000) -+ ItemStack item = func_70096_w().func_82710_f(10); -+ -+ if (!this.field_70170_p.field_72995_K && this.field_70292_b >= lifespan) - { -+ int hook = net.minecraftforge.event.ForgeEventFactory.onItemExpire(this, item); -+ if (hook < 0) this.func_70106_y(); -+ else this.lifespan += hook; -+ } -+ if (item != null && item.field_77994_a <= 0) -+ { - this.func_70106_y(); - } - } -@@ -276,6 +292,7 @@ - p_70014_1_.func_74777_a("Health", (short)((byte)this.field_70291_e)); - p_70014_1_.func_74777_a("Age", (short)this.field_70292_b); - p_70014_1_.func_74777_a("PickupDelay", (short)this.field_145804_b); -+ p_70014_1_.func_74768_a("Lifespan", lifespan); - - if (this.func_145800_j() != null) - { -@@ -316,20 +333,23 @@ - NBTTagCompound nbttagcompound1 = p_70037_1_.func_74775_l("Item"); - this.func_92058_a(ItemStack.func_77949_a(nbttagcompound1)); - -- if (this.func_92059_d() == null) -- { -- this.func_70106_y(); -- } -+ ItemStack item = func_70096_w().func_82710_f(10); -+ if (item == null || item.field_77994_a <= 0) this.func_70106_y(); -+ if (p_70037_1_.func_74764_b("Lifespan")) lifespan = p_70037_1_.func_74762_e("Lifespan"); - } - - public void func_70100_b_(EntityPlayer p_70100_1_) - { - if (!this.field_70170_p.field_72995_K) - { -+ if (this.field_145804_b > 0) return; - ItemStack itemstack = this.func_92059_d(); - int i = itemstack.field_77994_a; - -- if (this.field_145804_b == 0 && (this.field_145802_g == null || 6000 - this.field_70292_b <= 200 || this.field_145802_g.equals(p_70100_1_.func_70005_c_())) && p_70100_1_.field_71071_by.func_70441_a(itemstack)) -+ int hook = net.minecraftforge.event.ForgeEventFactory.onItemPickup(this, p_70100_1_, itemstack); -+ if (hook < 0) return; -+ -+ if (this.field_145804_b <= 0 && (this.field_145802_g == null || lifespan - this.field_70292_b <= 200 || this.field_145802_g.equals(p_70100_1_.func_70005_c_())) && (hook == 1 || i <= 0 || p_70100_1_.field_71071_by.func_70441_a(itemstack))) - { - if (itemstack.func_77973_b() == Item.func_150898_a(Blocks.field_150364_r)) - { -@@ -366,6 +386,7 @@ - } - } - -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerItemPickupEvent(p_70100_1_, this); - if (!this.func_174814_R()) - { - this.field_70170_p.func_72956_a(p_70100_1_, "random.pop", 0.2F, ((this.field_70146_Z.nextFloat() - this.field_70146_Z.nextFloat()) * 0.7F + 1.0F) * 2.0F); diff --git a/patches/minecraft/net/minecraft/entity/item/EntityItemFrame.java.patch b/patches/minecraft/net/minecraft/entity/item/EntityItemFrame.java.patch deleted file mode 100644 index 3ff9ebe83..000000000 --- a/patches/minecraft/net/minecraft/entity/item/EntityItemFrame.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/entity/item/EntityItemFrame.java -+++ ../src-work/minecraft/net/minecraft/entity/item/EntityItemFrame.java -@@ -123,7 +123,7 @@ - { - if (p_110131_1_ != null) - { -- if (p_110131_1_.func_77973_b() == Items.field_151098_aY) -+ if (p_110131_1_.func_77973_b() instanceof net.minecraft.item.ItemMap) - { - MapData mapdata = ((ItemMap)p_110131_1_.func_77973_b()).func_77873_a(p_110131_1_, this.field_70170_p); - mapdata.field_76203_h.remove("frame-" + this.func_145782_y()); diff --git a/patches/minecraft/net/minecraft/entity/item/EntityXPOrb.java.patch b/patches/minecraft/net/minecraft/entity/item/EntityXPOrb.java.patch deleted file mode 100644 index 6ce41fa89..000000000 --- a/patches/minecraft/net/minecraft/entity/item/EntityXPOrb.java.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/entity/item/EntityXPOrb.java -+++ ../src-work/minecraft/net/minecraft/entity/item/EntityXPOrb.java -@@ -198,6 +198,7 @@ - { - if (this.field_70532_c == 0 && p_70100_1_.field_71090_bL == 0) - { -+ if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.player.PlayerPickupXpEvent(p_70100_1_, this))) return; - p_70100_1_.field_71090_bL = 2; - this.field_70170_p.func_72956_a(p_70100_1_, "random.orb", 0.1F, 0.5F * ((this.field_70146_Z.nextFloat() - this.field_70146_Z.nextFloat()) * 0.7F + 1.8F)); - p_70100_1_.func_71001_a(this, 1); diff --git a/patches/minecraft/net/minecraft/entity/monster/EntitySlime.java.patch b/patches/minecraft/net/minecraft/entity/monster/EntitySlime.java.patch deleted file mode 100644 index 45e3d5eec..000000000 --- a/patches/minecraft/net/minecraft/entity/monster/EntitySlime.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/entity/monster/EntitySlime.java -+++ ../src-work/minecraft/net/minecraft/entity/monster/EntitySlime.java -@@ -271,7 +271,7 @@ - { - Chunk chunk = this.field_70170_p.func_175726_f(new BlockPos(MathHelper.func_76128_c(this.field_70165_t), 0, MathHelper.func_76128_c(this.field_70161_v))); - -- if (this.field_70170_p.func_72912_H().func_76067_t() == WorldType.field_77138_c && this.field_70146_Z.nextInt(4) != 1) -+ if (this.field_70170_p.func_72912_H().func_76067_t().handleSlimeSpawnReduction(field_70146_Z, field_70170_p)) - { - return false; - } diff --git a/patches/minecraft/net/minecraft/entity/monster/EntityZombie.java.patch b/patches/minecraft/net/minecraft/entity/monster/EntityZombie.java.patch deleted file mode 100644 index 0ac7da22d..000000000 --- a/patches/minecraft/net/minecraft/entity/monster/EntityZombie.java.patch +++ /dev/null @@ -1,60 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/entity/monster/EntityZombie.java -+++ ../src-work/minecraft/net/minecraft/entity/monster/EntityZombie.java -@@ -89,7 +89,7 @@ - this.func_110148_a(SharedMonsterAttributes.field_111265_b).func_111128_a(35.0D); - this.func_110148_a(SharedMonsterAttributes.field_111263_d).func_111128_a(0.23000000417232513D); - this.func_110148_a(SharedMonsterAttributes.field_111264_e).func_111128_a(3.0D); -- this.func_110140_aT().func_111150_b(field_110186_bp).func_111128_a(this.field_70146_Z.nextDouble() * 0.10000000149011612D); -+ this.func_110140_aT().func_111150_b(field_110186_bp).func_111128_a(this.field_70146_Z.nextDouble() * net.minecraftforge.common.ForgeModContainer.zombieSummonBaseChance); - } - - protected void func_70088_a() -@@ -231,12 +231,25 @@ - entitylivingbase = (EntityLivingBase)p_70097_1_.func_76346_g(); - } - -- if (entitylivingbase != null && this.field_70170_p.func_175659_aa() == EnumDifficulty.HARD && (double)this.field_70146_Z.nextFloat() < this.func_110148_a(field_110186_bp).func_111126_e()) -+ int i = MathHelper.func_76128_c(this.field_70165_t); -+ int j = MathHelper.func_76128_c(this.field_70163_u); -+ int k = MathHelper.func_76128_c(this.field_70161_v); -+ -+ net.minecraftforge.event.entity.living.ZombieEvent.SummonAidEvent summonAid = net.minecraftforge.event.ForgeEventFactory.fireZombieSummonAid(this, field_70170_p, i, j, k, entitylivingbase, this.func_110148_a(field_110186_bp).func_111126_e()); -+ if (summonAid.getResult() == net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) return true; -+ -+ if (summonAid.getResult() == net.minecraftforge.fml.common.eventhandler.Event.Result.ALLOW || -+ entitylivingbase != null && this.field_70170_p.func_175659_aa() == EnumDifficulty.HARD && (double)this.field_70146_Z.nextFloat() < this.func_110148_a(field_110186_bp).func_111126_e()) - { -- int i = MathHelper.func_76128_c(this.field_70165_t); -- int j = MathHelper.func_76128_c(this.field_70163_u); -- int k = MathHelper.func_76128_c(this.field_70161_v); -- EntityZombie entityzombie = new EntityZombie(this.field_70170_p); -+ EntityZombie entityzombie; -+ if (summonAid.customSummonedAid != null && summonAid.getResult() == net.minecraftforge.fml.common.eventhandler.Event.Result.ALLOW) -+ { -+ entityzombie = summonAid.customSummonedAid; -+ } -+ else -+ { -+ entityzombie = new EntityZombie(this.field_70170_p); -+ } - - for (int l = 0; l < 50; ++l) - { -@@ -251,7 +264,7 @@ - if (!this.field_70170_p.func_175636_b((double)i1, (double)j1, (double)k1, 7.0D) && this.field_70170_p.func_72917_a(entityzombie.func_174813_aQ(), entityzombie) && this.field_70170_p.func_72945_a(entityzombie, entityzombie.func_174813_aQ()).isEmpty() && !this.field_70170_p.func_72953_d(entityzombie.func_174813_aQ())) - { - this.field_70170_p.func_72838_d(entityzombie); -- entityzombie.func_70624_b(entitylivingbase); -+ if (entitylivingbase != null) entityzombie.func_70624_b(entitylivingbase); - entityzombie.func_180482_a(this.field_70170_p.func_175649_E(new BlockPos(entityzombie)), (IEntityLivingData)null); - this.func_110148_a(field_110186_bp).func_111121_a(new AttributeModifier("Zombie reinforcement caller charge", -0.05000000074505806D, 0)); - entityzombie.func_110148_a(field_110186_bp).func_111121_a(new AttributeModifier("Zombie reinforcement callee charge", -0.05000000074505806D, 0)); -@@ -458,7 +471,7 @@ - - if (p_180482_2_1 == null) - { -- p_180482_2_1 = new EntityZombie.GroupData(this.field_70170_p.field_73012_v.nextFloat() < 0.05F, this.field_70170_p.field_73012_v.nextFloat() < 0.05F, null); -+ p_180482_2_1 = new EntityZombie.GroupData(this.field_70170_p.field_73012_v.nextFloat() < net.minecraftforge.common.ForgeModContainer.zombieBabyChance, this.field_70170_p.field_73012_v.nextFloat() < 0.05F, null); - } - - if (p_180482_2_1 instanceof EntityZombie.GroupData) diff --git a/patches/minecraft/net/minecraft/entity/passive/EntityMooshroom.java.patch b/patches/minecraft/net/minecraft/entity/passive/EntityMooshroom.java.patch deleted file mode 100644 index 9d9d51edf..000000000 --- a/patches/minecraft/net/minecraft/entity/passive/EntityMooshroom.java.patch +++ /dev/null @@ -1,62 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/entity/passive/EntityMooshroom.java -+++ ../src-work/minecraft/net/minecraft/entity/passive/EntityMooshroom.java -@@ -9,7 +9,7 @@ - import net.minecraft.util.EnumParticleTypes; - import net.minecraft.world.World; - --public class EntityMooshroom extends EntityCow -+public class EntityMooshroom extends EntityCow implements net.minecraftforge.common.IShearable - { - private static final String __OBFID = "CL_00001645"; - -@@ -20,6 +20,7 @@ - this.field_175506_bl = Blocks.field_150391_bh; - } - -+ @SuppressWarnings("unused") - public boolean func_70085_c(EntityPlayer p_70085_1_) - { - ItemStack itemstack = p_70085_1_.field_71071_by.func_70448_g(); -@@ -39,7 +40,7 @@ - } - } - -- if (itemstack != null && itemstack.func_77973_b() == Items.field_151097_aZ && this.func_70874_b() >= 0) -+ if (false && itemstack != null && itemstack.func_77973_b() == Items.field_151097_aZ && this.func_70874_b() >= 0) //Forge Disable, Moved to onSheared - { - this.func_70106_y(); - this.field_70170_p.func_175688_a(EnumParticleTypes.EXPLOSION_LARGE, this.field_70165_t, this.field_70163_u + (double)(this.field_70131_O / 2.0F), this.field_70161_v, 0.0D, 0.0D, 0.0D, new int[0]); -@@ -79,4 +80,33 @@ - { - return new EntityMooshroom(this.field_70170_p); - } -+ -+ @Override public boolean isShearable(ItemStack item, net.minecraft.world.IBlockAccess world, net.minecraft.util.BlockPos pos){ return func_70874_b() >= 0; } -+ @Override -+ public java.util.List onSheared(ItemStack item, net.minecraft.world.IBlockAccess world, net.minecraft.util.BlockPos pos, int fortune) -+ { -+ this.func_70106_y(); -+ this.field_70170_p.func_175688_a(EnumParticleTypes.EXPLOSION_LARGE, this.field_70165_t, this.field_70163_u + (double)(this.field_70131_O / 2.0F), this.field_70161_v, 0.0D, 0.0D, 0.0D, new int[0]); -+ -+ EntityCow entitycow = new EntityCow(this.field_70170_p); -+ entitycow.func_70012_b(this.field_70165_t, this.field_70163_u, this.field_70161_v, this.field_70177_z, this.field_70125_A); -+ entitycow.func_70606_j(this.func_110143_aJ()); -+ entitycow.field_70761_aq = this.field_70761_aq; -+ -+ if (this.func_145818_k_()) -+ { -+ entitycow.func_96094_a(this.func_95999_t()); -+ } -+ -+ this.field_70170_p.func_72838_d(entitycow); -+ -+ java.util.List ret = new java.util.ArrayList(); -+ for (int i = 0; i < 5; ++i) -+ { -+ ret.add(new ItemStack(Blocks.field_150337_Q)); -+ } -+ -+ this.func_85030_a("mob.sheep.shear", 1.0F, 1.0F); -+ return ret; -+ } - } diff --git a/patches/minecraft/net/minecraft/entity/passive/EntityOcelot.java.patch b/patches/minecraft/net/minecraft/entity/passive/EntityOcelot.java.patch deleted file mode 100644 index 6219ce05b..000000000 --- a/patches/minecraft/net/minecraft/entity/passive/EntityOcelot.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/entity/passive/EntityOcelot.java -+++ ../src-work/minecraft/net/minecraft/entity/passive/EntityOcelot.java -@@ -276,7 +276,7 @@ - - Block block = this.field_70170_p.func_180495_p(blockpos.func_177977_b()).func_177230_c(); - -- if (block == Blocks.field_150349_c || block.func_149688_o() == Material.field_151584_j) -+ if (block == Blocks.field_150349_c || block.isLeaves(field_70170_p, blockpos.func_177977_b())) - { - return true; - } diff --git a/patches/minecraft/net/minecraft/entity/passive/EntityVillager.java.patch b/patches/minecraft/net/minecraft/entity/passive/EntityVillager.java.patch deleted file mode 100644 index ed6df82c6..000000000 --- a/patches/minecraft/net/minecraft/entity/passive/EntityVillager.java.patch +++ /dev/null @@ -1,44 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/entity/passive/EntityVillager.java -+++ ../src-work/minecraft/net/minecraft/entity/passive/EntityVillager.java -@@ -83,6 +83,7 @@ - private boolean field_82190_bM; - private boolean field_175564_by; - private InventoryBasic field_175560_bz; -+ @Deprecated //Use VillagerRegistry - private static final EntityVillager.ITradeList[][][][] field_175561_bA = new EntityVillager.ITradeList[][][][] {{{{new EntityVillager.EmeraldForItems(Items.field_151015_O, new EntityVillager.PriceInfo(18, 22)), new EntityVillager.EmeraldForItems(Items.field_151174_bG, new EntityVillager.PriceInfo(15, 19)), new EntityVillager.EmeraldForItems(Items.field_151172_bF, new EntityVillager.PriceInfo(15, 19)), new EntityVillager.ListItemForEmeralds(Items.field_151025_P, new EntityVillager.PriceInfo(-4, -2))}, {new EntityVillager.EmeraldForItems(Item.func_150898_a(Blocks.field_150423_aK), new EntityVillager.PriceInfo(8, 13)), new EntityVillager.ListItemForEmeralds(Items.field_151158_bO, new EntityVillager.PriceInfo(-3, -2))}, {new EntityVillager.EmeraldForItems(Item.func_150898_a(Blocks.field_150440_ba), new EntityVillager.PriceInfo(7, 12)), new EntityVillager.ListItemForEmeralds(Items.field_151034_e, new EntityVillager.PriceInfo(-5, -7))}, {new EntityVillager.ListItemForEmeralds(Items.field_151106_aX, new EntityVillager.PriceInfo(-6, -10)), new EntityVillager.ListItemForEmeralds(Items.field_151105_aU, new EntityVillager.PriceInfo(1, 1))}}, {{new EntityVillager.EmeraldForItems(Items.field_151007_F, new EntityVillager.PriceInfo(15, 20)), new EntityVillager.EmeraldForItems(Items.field_151044_h, new EntityVillager.PriceInfo(16, 24)), new EntityVillager.ItemAndEmeraldToItem(Items.field_151115_aP, new EntityVillager.PriceInfo(6, 6), Items.field_179566_aV, new EntityVillager.PriceInfo(6, 6))}, {new EntityVillager.ListEnchantedItemForEmeralds(Items.field_151112_aM, new EntityVillager.PriceInfo(7, 8))}}, {{new EntityVillager.EmeraldForItems(Item.func_150898_a(Blocks.field_150325_L), new EntityVillager.PriceInfo(16, 22)), new EntityVillager.ListItemForEmeralds(Items.field_151097_aZ, new EntityVillager.PriceInfo(3, 4))}, {new EntityVillager.ListItemForEmeralds(new ItemStack(Item.func_150898_a(Blocks.field_150325_L), 1, 0), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.func_150898_a(Blocks.field_150325_L), 1, 1), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.func_150898_a(Blocks.field_150325_L), 1, 2), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.func_150898_a(Blocks.field_150325_L), 1, 3), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.func_150898_a(Blocks.field_150325_L), 1, 4), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.func_150898_a(Blocks.field_150325_L), 1, 5), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.func_150898_a(Blocks.field_150325_L), 1, 6), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.func_150898_a(Blocks.field_150325_L), 1, 7), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.func_150898_a(Blocks.field_150325_L), 1, 8), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.func_150898_a(Blocks.field_150325_L), 1, 9), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.func_150898_a(Blocks.field_150325_L), 1, 10), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.func_150898_a(Blocks.field_150325_L), 1, 11), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.func_150898_a(Blocks.field_150325_L), 1, 12), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.func_150898_a(Blocks.field_150325_L), 1, 13), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.func_150898_a(Blocks.field_150325_L), 1, 14), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.func_150898_a(Blocks.field_150325_L), 1, 15), new EntityVillager.PriceInfo(1, 2))}}, {{new EntityVillager.EmeraldForItems(Items.field_151007_F, new EntityVillager.PriceInfo(15, 20)), new EntityVillager.ListItemForEmeralds(Items.field_151032_g, new EntityVillager.PriceInfo(-12, -8))}, {new EntityVillager.ListItemForEmeralds(Items.field_151031_f, new EntityVillager.PriceInfo(2, 3)), new EntityVillager.ItemAndEmeraldToItem(Item.func_150898_a(Blocks.field_150351_n), new EntityVillager.PriceInfo(10, 10), Items.field_151145_ak, new EntityVillager.PriceInfo(6, 10))}}}, {{{new EntityVillager.EmeraldForItems(Items.field_151121_aF, new EntityVillager.PriceInfo(24, 36)), new EntityVillager.ListEnchantedBookForEmeralds()}, {new EntityVillager.EmeraldForItems(Items.field_151122_aG, new EntityVillager.PriceInfo(8, 10)), new EntityVillager.ListItemForEmeralds(Items.field_151111_aL, new EntityVillager.PriceInfo(10, 12)), new EntityVillager.ListItemForEmeralds(Item.func_150898_a(Blocks.field_150342_X), new EntityVillager.PriceInfo(3, 4))}, {new EntityVillager.EmeraldForItems(Items.field_151164_bB, new EntityVillager.PriceInfo(2, 2)), new EntityVillager.ListItemForEmeralds(Items.field_151113_aN, new EntityVillager.PriceInfo(10, 12)), new EntityVillager.ListItemForEmeralds(Item.func_150898_a(Blocks.field_150359_w), new EntityVillager.PriceInfo(-5, -3))}, {new EntityVillager.ListEnchantedBookForEmeralds()}, {new EntityVillager.ListEnchantedBookForEmeralds()}, {new EntityVillager.ListItemForEmeralds(Items.field_151057_cb, new EntityVillager.PriceInfo(20, 22))}}}, {{{new EntityVillager.EmeraldForItems(Items.field_151078_bh, new EntityVillager.PriceInfo(36, 40)), new EntityVillager.EmeraldForItems(Items.field_151043_k, new EntityVillager.PriceInfo(8, 10))}, {new EntityVillager.ListItemForEmeralds(Items.field_151137_ax, new EntityVillager.PriceInfo(-4, -1)), new EntityVillager.ListItemForEmeralds(new ItemStack(Items.field_151100_aR, 1, EnumDyeColor.BLUE.func_176767_b()), new EntityVillager.PriceInfo(-2, -1))}, {new EntityVillager.ListItemForEmeralds(Items.field_151061_bv, new EntityVillager.PriceInfo(7, 11)), new EntityVillager.ListItemForEmeralds(Item.func_150898_a(Blocks.field_150426_aN), new EntityVillager.PriceInfo(-3, -1))}, {new EntityVillager.ListItemForEmeralds(Items.field_151062_by, new EntityVillager.PriceInfo(3, 11))}}}, {{{new EntityVillager.EmeraldForItems(Items.field_151044_h, new EntityVillager.PriceInfo(16, 24)), new EntityVillager.ListItemForEmeralds(Items.field_151028_Y, new EntityVillager.PriceInfo(4, 6))}, {new EntityVillager.EmeraldForItems(Items.field_151042_j, new EntityVillager.PriceInfo(7, 9)), new EntityVillager.ListItemForEmeralds(Items.field_151030_Z, new EntityVillager.PriceInfo(10, 14))}, {new EntityVillager.EmeraldForItems(Items.field_151045_i, new EntityVillager.PriceInfo(3, 4)), new EntityVillager.ListEnchantedItemForEmeralds(Items.field_151163_ad, new EntityVillager.PriceInfo(16, 19))}, {new EntityVillager.ListItemForEmeralds(Items.field_151029_X, new EntityVillager.PriceInfo(5, 7)), new EntityVillager.ListItemForEmeralds(Items.field_151022_W, new EntityVillager.PriceInfo(9, 11)), new EntityVillager.ListItemForEmeralds(Items.field_151020_U, new EntityVillager.PriceInfo(5, 7)), new EntityVillager.ListItemForEmeralds(Items.field_151023_V, new EntityVillager.PriceInfo(11, 15))}}, {{new EntityVillager.EmeraldForItems(Items.field_151044_h, new EntityVillager.PriceInfo(16, 24)), new EntityVillager.ListItemForEmeralds(Items.field_151036_c, new EntityVillager.PriceInfo(6, 8))}, {new EntityVillager.EmeraldForItems(Items.field_151042_j, new EntityVillager.PriceInfo(7, 9)), new EntityVillager.ListEnchantedItemForEmeralds(Items.field_151040_l, new EntityVillager.PriceInfo(9, 10))}, {new EntityVillager.EmeraldForItems(Items.field_151045_i, new EntityVillager.PriceInfo(3, 4)), new EntityVillager.ListEnchantedItemForEmeralds(Items.field_151048_u, new EntityVillager.PriceInfo(12, 15)), new EntityVillager.ListEnchantedItemForEmeralds(Items.field_151056_x, new EntityVillager.PriceInfo(9, 12))}}, {{new EntityVillager.EmeraldForItems(Items.field_151044_h, new EntityVillager.PriceInfo(16, 24)), new EntityVillager.ListEnchantedItemForEmeralds(Items.field_151037_a, new EntityVillager.PriceInfo(5, 7))}, {new EntityVillager.EmeraldForItems(Items.field_151042_j, new EntityVillager.PriceInfo(7, 9)), new EntityVillager.ListEnchantedItemForEmeralds(Items.field_151035_b, new EntityVillager.PriceInfo(9, 11))}, {new EntityVillager.EmeraldForItems(Items.field_151045_i, new EntityVillager.PriceInfo(3, 4)), new EntityVillager.ListEnchantedItemForEmeralds(Items.field_151046_w, new EntityVillager.PriceInfo(12, 15))}}}, {{{new EntityVillager.EmeraldForItems(Items.field_151147_al, new EntityVillager.PriceInfo(14, 18)), new EntityVillager.EmeraldForItems(Items.field_151076_bf, new EntityVillager.PriceInfo(14, 18))}, {new EntityVillager.EmeraldForItems(Items.field_151044_h, new EntityVillager.PriceInfo(16, 24)), new EntityVillager.ListItemForEmeralds(Items.field_151157_am, new EntityVillager.PriceInfo(-7, -5)), new EntityVillager.ListItemForEmeralds(Items.field_151077_bg, new EntityVillager.PriceInfo(-8, -6))}}, {{new EntityVillager.EmeraldForItems(Items.field_151116_aA, new EntityVillager.PriceInfo(9, 12)), new EntityVillager.ListItemForEmeralds(Items.field_151026_S, new EntityVillager.PriceInfo(2, 4))}, {new EntityVillager.ListEnchantedItemForEmeralds(Items.field_151027_R, new EntityVillager.PriceInfo(7, 12))}, {new EntityVillager.ListItemForEmeralds(Items.field_151141_av, new EntityVillager.PriceInfo(8, 10))}}}}; - private static final String __OBFID = "CL_00001707"; - -@@ -228,7 +229,7 @@ - ItemStack itemstack = p_70085_1_.field_71071_by.func_70448_g(); - boolean flag = itemstack != null && itemstack.func_77973_b() == Items.field_151063_bx; - -- if (!flag && this.func_70089_S() && !this.func_70940_q() && !this.func_70631_g_()) -+ if (!flag && this.func_70089_S() && !this.func_70940_q() && !this.func_70631_g_() && !p_70085_1_.func_70093_af()) - { - if (!this.field_70170_p.field_72995_K && (this.field_70963_i == null || this.field_70963_i.size() > 0)) - { -@@ -540,6 +541,7 @@ - - private void func_175554_cu() - { -+ //TODO: Hook into VillagerRegistry - EntityVillager.ITradeList[][][] aitradelist = field_175561_bA[this.func_70946_n()]; - - if (this.field_175563_bv != 0 && this.field_175562_bw != 0) -@@ -648,6 +650,7 @@ - } - } - -+ //TODO: Hook into VillagerRegistry to get name - if (s1 != null) - { - ChatComponentTranslation chatcomponenttranslation = new ChatComponentTranslation("entity.Villager." + s1, new Object[0]); -@@ -710,7 +713,7 @@ - public IEntityLivingData func_180482_a(DifficultyInstance p_180482_1_, IEntityLivingData p_180482_2_) - { - p_180482_2_ = super.func_180482_a(p_180482_1_, p_180482_2_); -- this.func_70938_b(this.field_70170_p.field_73012_v.nextInt(5)); -+ net.minecraftforge.fml.common.registry.VillagerRegistry.setRandomProfession(this, this.field_70170_p.field_73012_v); - this.func_175552_ct(); - return p_180482_2_; - } diff --git a/patches/minecraft/net/minecraft/entity/player/EntityPlayer.java.patch b/patches/minecraft/net/minecraft/entity/player/EntityPlayer.java.patch deleted file mode 100644 index 610e37013..000000000 --- a/patches/minecraft/net/minecraft/entity/player/EntityPlayer.java.patch +++ /dev/null @@ -1,637 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/entity/player/EntityPlayer.java -+++ ../src-work/minecraft/net/minecraft/entity/player/EntityPlayer.java -@@ -77,9 +77,23 @@ - import net.minecraft.world.WorldSettings; - import net.minecraftforge.fml.relauncher.Side; - import net.minecraftforge.fml.relauncher.SideOnly; -+import net.minecraftforge.common.ISpecialArmor.ArmorProperties; -+import net.minecraftforge.common.MinecraftForge; -+import net.minecraftforge.event.ForgeEventFactory; -+import net.minecraftforge.event.entity.living.LivingHurtEvent; -+import net.minecraftforge.event.entity.player.AttackEntityEvent; -+import net.minecraftforge.event.entity.player.EntityInteractEvent; -+import net.minecraftforge.event.entity.player.PlayerDestroyItemEvent; -+import net.minecraftforge.event.entity.player.PlayerDropsEvent; -+import net.minecraftforge.event.entity.player.PlayerFlyableFallEvent; -+import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent; - - public abstract class EntityPlayer extends EntityLivingBase - { -+ public static final String PERSISTED_NBT_TAG = "PlayerPersisted"; -+ private java.util.HashMap spawnChunkMap = new java.util.HashMap(); -+ private java.util.HashMap spawnForcedMap = new java.util.HashMap(); -+ - public InventoryPlayer field_71071_by = new InventoryPlayer(this); - private InventoryEnderChest field_71078_a = new InventoryEnderChest(); - public Container field_71069_bz; -@@ -118,6 +132,7 @@ - private final GameProfile field_146106_i; - private boolean field_175153_bG = false; - public EntityFishHook field_71104_cf; -+ public float eyeHeight = this.getDefaultEyeHeight(); - private static final String __OBFID = "CL_00001711"; - - public EntityPlayer(World p_i45324_1_, GameProfile p_i45324_2_) -@@ -176,7 +191,8 @@ - { - if (this.field_71074_e != null) - { -- this.field_71074_e.func_77974_b(this.field_70170_p, this, this.field_71072_f); -+ if (!net.minecraftforge.event.ForgeEventFactory.onUseItemStop(this, field_71074_e, this.field_71072_f)) -+ this.field_71074_e.func_77974_b(this.field_70170_p, this, this.field_71072_f); - } - - this.func_71041_bz(); -@@ -200,6 +216,7 @@ - - public void func_70071_h_() - { -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().onPlayerPreTick(this); - this.field_70145_X = this.func_175149_v(); - - if (this.func_175149_v()) -@@ -213,6 +230,14 @@ - - if (itemstack == this.field_71074_e) - { -+ field_71072_f = net.minecraftforge.event.ForgeEventFactory.onItemUseTick(this, field_71074_e, field_71072_f); -+ if (field_71072_f <= 0) -+ { -+ this.func_71036_o(); -+ } -+ else -+ { // Forge Keep unindented to lower patch -+ field_71074_e.func_77973_b().onUsingTick(field_71074_e, this, field_71072_f); //Forge Added - if (this.field_71072_f <= 25 && this.field_71072_f % 4 == 0) - { - this.func_71010_c(itemstack, 5); -@@ -222,6 +247,7 @@ - { - this.func_71036_o(); - } -+ } - } - else - { -@@ -267,7 +293,7 @@ - - super.func_70071_h_(); - -- if (!this.field_70170_p.field_72995_K && this.field_71070_bA != null && !this.field_71070_bA.func_75145_c(this)) -+ if (!this.field_70170_p.field_72995_K && this.field_71070_bA != null && !net.minecraftforge.common.ForgeHooks.canInteractWith(this, this.field_71070_bA)) - { - this.func_71053_j(); - this.field_71070_bA = this.field_71069_bz; -@@ -344,6 +370,7 @@ - { - this.func_70107_b(d3, this.field_70163_u, d4); - } -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().onPlayerPostTick(this); - } - - public int func_82145_z() -@@ -413,11 +440,13 @@ - int i = this.field_71074_e.field_77994_a; - ItemStack itemstack = this.field_71074_e.func_77950_b(this.field_70170_p, this); - -+ itemstack = net.minecraftforge.event.ForgeEventFactory.onItemUseFinish(this, field_71074_e, field_71072_f, itemstack); -+ - if (itemstack != this.field_71074_e || itemstack != null && itemstack.field_77994_a != i) - { - this.field_71071_by.field_70462_a[this.field_71071_by.field_70461_c] = itemstack; - -- if (itemstack.field_77994_a == 0) -+ if (itemstack != null && itemstack.field_77994_a == 0) - { - this.field_71071_by.field_70462_a[this.field_71071_by.field_70461_c] = null; - } -@@ -477,11 +506,11 @@ - this.field_71109_bG = 0.0F; - this.func_71015_k(this.field_70165_t - d0, this.field_70163_u - d1, this.field_70161_v - d2); - -- if (this.field_70154_o instanceof EntityPig) -+ if (this.field_70154_o instanceof EntityLivingBase && ((EntityLivingBase)field_70154_o).shouldRiderFaceForward(this)) - { - this.field_70125_A = f1; - this.field_70177_z = f; -- this.field_70761_aq = ((EntityPig)this.field_70154_o).field_70761_aq; -+ this.field_70761_aq = ((EntityLivingBase)this.field_70154_o).field_70761_aq; - } - } - } -@@ -611,11 +640,15 @@ - - public void func_70645_a(DamageSource p_70645_1_) - { -+ if (net.minecraftforge.common.ForgeHooks.onLivingDeath(this, p_70645_1_)) return; - super.func_70645_a(p_70645_1_); - this.func_70105_a(0.2F, 0.2F); - this.func_70107_b(this.field_70165_t, this.field_70163_u, this.field_70161_v); - this.field_70181_x = 0.10000000149011612D; - -+ captureDrops = true; -+ capturedDrops.clear(); -+ - if (this.func_70005_c_().equals("Notch")) - { - this.func_146097_a(new ItemStack(Items.field_151034_e, 1), true, false); -@@ -626,6 +659,9 @@ - this.field_71071_by.func_70436_m(); - } - -+ captureDrops = false; -+ if (!field_70170_p.field_72995_K) net.minecraftforge.event.ForgeEventFactory.onPlayerDrops(this, p_70645_1_, capturedDrops, field_70718_bc > 0); -+ - if (p_70645_1_ != null) - { - this.field_70159_w = (double)(-MathHelper.func_76134_b((this.field_70739_aP + this.field_70177_z) * (float)Math.PI / 180.0F) * 0.1F); -@@ -714,12 +750,25 @@ - - public EntityItem func_71040_bB(boolean p_71040_1_) - { -- return this.func_146097_a(this.field_71071_by.func_70298_a(this.field_71071_by.field_70461_c, p_71040_1_ && this.field_71071_by.func_70448_g() != null ? this.field_71071_by.func_70448_g().field_77994_a : 1), false, true); -+ ItemStack stack = field_71071_by.func_70448_g(); -+ -+ if (stack == null) -+ { -+ return null; -+ } -+ -+ if (stack.func_77973_b().onDroppedByPlayer(stack, this)) -+ { -+ int count = p_71040_1_ && this.field_71071_by.func_70448_g() != null ? this.field_71071_by.func_70448_g().field_77994_a : 1; -+ return net.minecraftforge.common.ForgeHooks.onPlayerTossEvent(this, field_71071_by.func_70298_a(field_71071_by.field_70461_c, count), true); -+ } -+ -+ return null; - } - - public EntityItem func_71019_a(ItemStack p_71019_1_, boolean p_71019_2_) - { -- return this.func_146097_a(p_71019_1_, false, false); -+ return net.minecraftforge.common.ForgeHooks.onPlayerTossEvent(this, p_71019_1_, false); - } - - public EntityItem func_146097_a(ItemStack p_146097_1_, boolean p_146097_2_, boolean p_146097_3_) -@@ -780,13 +829,25 @@ - - public void func_71012_a(EntityItem p_71012_1_) - { -+ if (captureDrops) -+ { -+ capturedDrops.add(p_71012_1_); -+ return; -+ } - this.field_70170_p.func_72838_d(p_71012_1_); - } - -+ @Deprecated //Use location sensitive version below - public float func_180471_a(Block p_180471_1_) - { -- float f = this.field_71071_by.func_146023_a(p_180471_1_); -+ return getBreakSpeed(p_180471_1_.func_176223_P(), new BlockPos(0, -1, 0)); -+ } - -+ public float getBreakSpeed(IBlockState state, BlockPos pos) -+ { -+ ItemStack stack = field_71071_by.func_70448_g(); -+ float f = (stack == null ? 1.0F : stack.func_77973_b().getDigSpeed(stack, state)); -+ - if (f > 1.0F) - { - int i = EnchantmentHelper.func_77509_b(this); -@@ -836,12 +897,13 @@ - f /= 5.0F; - } - -- return f; -+ f = net.minecraftforge.event.ForgeEventFactory.getBreakSpeed(this, state, f, pos); -+ return (f < 0 ? 0 : f); - } - - public boolean func_146099_a(Block p_146099_1_) - { -- return this.field_71071_by.func_146025_b(p_146099_1_); -+ return net.minecraftforge.event.ForgeEventFactory.doPlayerHarvestCheck(this, p_146099_1_, this.field_71071_by.func_146025_b(p_146099_1_)); - } - - public void func_70037_a(NBTTagCompound p_70037_1_) -@@ -877,6 +939,16 @@ - this.field_82248_d = p_70037_1_.func_74767_n("SpawnForced"); - } - -+ NBTTagList spawnlist = null; -+ spawnlist = p_70037_1_.func_150295_c("Spawns", 10); -+ for (int i = 0; i < spawnlist.func_74745_c(); i++) -+ { -+ NBTTagCompound spawndata = (NBTTagCompound)spawnlist.func_150305_b(i); -+ int spawndim = spawndata.func_74762_e("Dim"); -+ this.spawnChunkMap.put(spawndim, new BlockPos(spawndata.func_74762_e("SpawnX"), spawndata.func_74762_e("SpawnY"), spawndata.func_74762_e("SpawnZ"))); -+ this.spawnForcedMap.put(spawndim, spawndata.func_74767_n("SpawnForced")); -+ } -+ - this.field_71100_bB.func_75112_a(p_70037_1_); - this.field_71075_bZ.func_75095_b(p_70037_1_); - -@@ -908,6 +980,23 @@ - p_70014_1_.func_74757_a("SpawnForced", this.field_82248_d); - } - -+ NBTTagList spawnlist = new NBTTagList(); -+ for (java.util.Map.Entry entry : this.spawnChunkMap.entrySet()) -+ { -+ BlockPos spawn = entry.getValue(); -+ if (spawn == null) continue; -+ Boolean forced = spawnForcedMap.get(entry.getKey()); -+ if (forced == null) forced = false; -+ NBTTagCompound spawndata = new NBTTagCompound(); -+ spawndata.func_74768_a("Dim", entry.getKey()); -+ spawndata.func_74768_a("SpawnX", spawn.func_177958_n()); -+ spawndata.func_74768_a("SpawnY", spawn.func_177956_o()); -+ spawndata.func_74768_a("SpawnZ", spawn.func_177952_p()); -+ spawndata.func_74757_a("SpawnForced", forced); -+ spawnlist.func_74742_a(spawndata); -+ } -+ p_70014_1_.func_74782_a("Spawns", spawnlist); -+ - this.field_71100_bB.func_75117_b(p_70014_1_); - this.field_71075_bZ.func_75091_a(p_70014_1_); - p_70014_1_.func_74782_a("EnderItems", this.field_71078_a.func_70487_g()); -@@ -921,6 +1010,7 @@ - - public boolean func_70097_a(DamageSource p_70097_1_, float p_70097_2_) - { -+ if (!net.minecraftforge.common.ForgeHooks.onLivingAttack(this, p_70097_1_, p_70097_2_)) return false; - if (this.func_180431_b(p_70097_1_)) - { - return false; -@@ -1021,12 +1111,15 @@ - { - if (!this.func_180431_b(p_70665_1_)) - { -+ p_70665_2_ = net.minecraftforge.common.ForgeHooks.onLivingHurt(this, p_70665_1_, p_70665_2_); -+ if (p_70665_2_ <= 0) return; - if (!p_70665_1_.func_76363_c() && this.func_70632_aY() && p_70665_2_ > 0.0F) - { - p_70665_2_ = (1.0F + p_70665_2_) * 0.5F; - } - -- p_70665_2_ = this.func_70655_b(p_70665_1_, p_70665_2_); -+ p_70665_2_ = net.minecraftforge.common.ISpecialArmor.ArmorProperties.applyArmor(this, field_71071_by.field_70460_b, p_70665_1_, p_70665_2_); -+ if (p_70665_2_ <= 0) return; - p_70665_2_ = this.func_70672_c(p_70665_1_, p_70665_2_); - float f1 = p_70665_2_; - p_70665_2_ = Math.max(p_70665_2_ - this.func_110139_bj(), 0.0F); -@@ -1074,6 +1167,7 @@ - } - else - { -+ if (!net.minecraftforge.event.ForgeEventFactory.canInteractWith(this, p_70998_1_)) return false; - ItemStack itemstack = this.func_71045_bC(); - ItemStack itemstack1 = itemstack != null ? itemstack.func_77946_l() : null; - -@@ -1125,7 +1219,9 @@ - - public void func_71028_bD() - { -+ ItemStack orig = func_71045_bC(); - this.field_71071_by.func_70299_a(this.field_71071_by.field_70461_c, (ItemStack)null); -+ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(this, orig); - } - - public double func_70033_W() -@@ -1135,6 +1231,7 @@ - - public void func_71059_n(Entity p_71059_1_) - { -+ if (!net.minecraftforge.common.ForgeHooks.onPlayerAttackTarget(this, p_71059_1_)) return; - if (p_71059_1_.func_70075_an()) - { - if (!p_71059_1_.func_85031_j(this)) -@@ -1305,6 +1402,8 @@ - - public EntityPlayer.EnumStatus func_180469_a(BlockPos p_180469_1_) - { -+ EntityPlayer.EnumStatus ret = net.minecraftforge.event.ForgeEventFactory.onPlayerSleepInBed(this, p_180469_1_); -+ if (ret != null) return ret; - if (!this.field_70170_p.field_72995_K) - { - if (this.func_70608_bn() || !this.func_70089_S()) -@@ -1346,7 +1445,7 @@ - - if (this.field_70170_p.func_175667_e(p_180469_1_)) - { -- EnumFacing enumfacing = (EnumFacing)this.field_70170_p.func_180495_p(p_180469_1_).func_177229_b(BlockDirectional.field_176387_N); -+ EnumFacing enumfacing = this.field_70170_p.func_180495_p(p_180469_1_).func_177230_c().getBedDirection(field_70170_p, p_180469_1_); - float f = 0.5F; - float f1 = 0.5F; - -@@ -1409,13 +1508,14 @@ - - public void func_70999_a(boolean p_70999_1_, boolean p_70999_2_, boolean p_70999_3_) - { -+ net.minecraftforge.event.ForgeEventFactory.onPlayerWakeup(this, p_70999_1_, p_70999_2_, p_70999_3_); - this.func_70105_a(0.6F, 1.8F); - IBlockState iblockstate = this.field_70170_p.func_180495_p(this.field_71081_bT); - -- if (this.field_71081_bT != null && iblockstate.func_177230_c() == Blocks.field_150324_C) -+ if (this.field_71081_bT != null && iblockstate.func_177230_c().isBed(field_70170_p, field_71081_bT, this)) - { -- this.field_70170_p.func_180501_a(this.field_71081_bT, iblockstate.func_177226_a(BlockBed.field_176471_b, Boolean.valueOf(false)), 4); -- BlockPos blockpos = BlockBed.func_176468_a(this.field_70170_p, this.field_71081_bT, 0); -+ iblockstate.func_177230_c().setBedOccupied(field_70170_p, field_71081_bT, this, false); -+ BlockPos blockpos = iblockstate.func_177230_c().getBedSpawnPosition(field_70170_p, field_71081_bT, this); - - if (blockpos == null) - { -@@ -1442,12 +1542,12 @@ - - private boolean func_175143_p() - { -- return this.field_70170_p.func_180495_p(this.field_71081_bT).func_177230_c() == Blocks.field_150324_C; -+ return this.field_70170_p.func_180495_p(this.field_71081_bT).func_177230_c().isBed(field_70170_p, field_71081_bT, this); - } - - public static BlockPos func_180467_a(World p_180467_0_, BlockPos p_180467_1_, boolean p_180467_2_) - { -- if (p_180467_0_.func_180495_p(p_180467_1_).func_177230_c() != Blocks.field_150324_C) -+ if (!p_180467_0_.func_180495_p(p_180467_1_).func_177230_c().isBed(p_180467_0_, p_180467_1_, null)) - { - if (!p_180467_2_) - { -@@ -1464,7 +1564,7 @@ - } - else - { -- return BlockBed.func_176468_a(p_180467_0_, p_180467_1_, 0); -+ return p_180467_0_.func_180495_p(p_180467_1_).func_177230_c().getBedSpawnPosition(p_180467_0_, p_180467_1_, null); - } - } - -@@ -1473,7 +1573,7 @@ - { - if (this.field_71081_bT != null) - { -- EnumFacing enumfacing = (EnumFacing)this.field_70170_p.func_180495_p(this.field_71081_bT).func_177229_b(BlockDirectional.field_176387_N); -+ EnumFacing enumfacing = this.field_70170_p.func_180495_p(this.field_71081_bT).func_177230_c().getBedDirection(field_70170_p, field_71081_bT); - - switch (EntityPlayer.SwitchEnumFacing.field_179420_a[enumfacing.ordinal()]) - { -@@ -1511,16 +1611,23 @@ - - public BlockPos func_180470_cg() - { -- return this.field_71077_c; -+ return getBedLocation(this.field_71093_bK); - } - -+ @Deprecated - public boolean func_82245_bX() - { -- return this.field_82248_d; -+ return isSpawnForced(this.field_71093_bK); - } - - public void func_180473_a(BlockPos p_180473_1_, boolean p_180473_2_) - { -+ if(net.minecraftforge.event.ForgeEventFactory.onPlayerSpawnSet(this, p_180473_1_, p_180473_2_)) return; -+ if (this.field_71093_bK != 0) -+ { -+ setSpawnChunk(p_180473_1_, p_180473_2_, this.field_71093_bK); -+ return; -+ } - if (p_180473_1_ != null) - { - this.field_71077_c = p_180473_1_; -@@ -1702,6 +1809,10 @@ - - super.func_180430_e(p_180430_1_, p_180430_2_); - } -+ else -+ { -+ net.minecraftforge.event.ForgeEventFactory.onPlayerFall(this, p_180430_1_, p_180430_2_); -+ } - } - - protected void func_71061_d_() -@@ -1725,6 +1836,7 @@ - } - - EntityList.EntityEggInfo entityegginfo = (EntityList.EntityEggInfo)EntityList.field_75627_a.get(Integer.valueOf(EntityList.func_75619_a(p_70074_1_))); -+ if (entityegginfo == null) entityegginfo = net.minecraftforge.fml.common.registry.EntityRegistry.getEggs().get(EntityList.func_75621_b(p_70074_1_)); - - if (entityegginfo != null) - { -@@ -1837,6 +1949,8 @@ - { - if (p_71008_1_ != this.field_71074_e) - { -+ p_71008_2_ = net.minecraftforge.event.ForgeEventFactory.onItemUseStart(this, p_71008_1_, p_71008_2_); -+ if (p_71008_2_ <= 0) return; - this.field_71074_e = p_71008_1_; - this.field_71072_f = p_71008_2_; - -@@ -1906,6 +2020,10 @@ - this.field_71106_cc = p_71049_1_.field_71106_cc; - this.func_85040_s(p_71049_1_.func_71037_bA()); - this.field_82152_aq = p_71049_1_.field_82152_aq; -+ //Copy and re-init ExtendedProperties when switching dimensions. -+ this.extendedProperties = p_71049_1_.extendedProperties; -+ for (net.minecraftforge.common.IExtendedEntityProperties p : this.extendedProperties.values()) -+ p.init(this, this.field_70170_p); - } - else if (this.field_70170_p.func_82736_K().func_82766_b("keepInventory")) - { -@@ -1918,6 +2036,18 @@ - - this.field_71078_a = p_71049_1_.field_71078_a; - this.func_70096_w().func_75692_b(10, Byte.valueOf(p_71049_1_.func_70096_w().func_75683_a(10))); -+ -+ this.spawnChunkMap = p_71049_1_.spawnChunkMap; -+ this.spawnForcedMap = p_71049_1_.spawnForcedMap; -+ -+ //Copy over a section of the Entity Data from the old player. -+ //Allows mods to specify data that persists after players respawn. -+ NBTTagCompound old = p_71049_1_.getEntityData(); -+ if (old.func_74764_b(PERSISTED_NBT_TAG)) -+ { -+ getEntityData().func_74782_a(PERSISTED_NBT_TAG, old.func_74775_l(PERSISTED_NBT_TAG)); -+ } -+ net.minecraftforge.event.ForgeEventFactory.onPlayerClone(this, p_71049_1_, !p_71049_2_); - } - - protected boolean func_70041_e_() -@@ -1951,7 +2081,14 @@ - - public void func_70062_b(int p_70062_1_, ItemStack p_70062_2_) - { -- this.field_71071_by.field_70460_b[p_70062_1_] = p_70062_2_; -+ if (p_70062_1_ == 0) //Forge: Fix issue in Player where it doen't take into account selected item -+ { -+ this.field_71071_by.field_70462_a[this.field_71071_by.field_70461_c] = p_70062_2_; -+ } -+ else -+ { -+ this.field_71071_by.field_70460_b[p_70062_1_ - 1] = p_70062_2_; -+ } - } - - @SideOnly(Side.CLIENT) -@@ -1996,7 +2133,10 @@ - - public IChatComponent func_145748_c_() - { -- ChatComponentText chatcomponenttext = new ChatComponentText(ScorePlayerTeam.func_96667_a(this.func_96124_cp(), this.func_70005_c_())); -+ ChatComponentText chatcomponenttext = new ChatComponentText(""); -+ if (!prefixes.isEmpty()) for (net.minecraft.util.IChatComponent prefix : prefixes) chatcomponenttext.func_150257_a(prefix); -+ chatcomponenttext.func_150257_a(new ChatComponentText(ScorePlayerTeam.func_96667_a(this.func_96124_cp(), this.getDisplayNameString()))); -+ if (!suffixes.isEmpty()) for (net.minecraft.util.IChatComponent suffix : suffixes) chatcomponenttext.func_150257_a(suffix); - chatcomponenttext.func_150256_b().func_150241_a(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/msg " + this.func_70005_c_() + " ")); - chatcomponenttext.func_150256_b().func_150209_a(this.func_174823_aP()); - chatcomponenttext.func_150256_b().func_179989_a(this.func_70005_c_()); -@@ -2005,7 +2145,7 @@ - - public float func_70047_e() - { -- float f = 1.62F; -+ float f = eyeHeight; - - if (this.func_70608_bn()) - { -@@ -2139,6 +2279,136 @@ - this.field_175153_bG = p_175150_1_; - } - -+ /** -+ * Opens a GUI with this player, uses FML's IGuiHandler system. -+ * Allows for extension by modders. -+ * -+ * @param mod The mod trying to open a GUI -+ * @param modGuiId GUI ID -+ * @param world Current World -+ * @param x Passed directly to IGuiHandler, data meaningless Typically world X position -+ * @param y Passed directly to IGuiHandler, data meaningless Typically world Y position -+ * @param z Passed directly to IGuiHandler, data meaningless Typically world Z position -+ */ -+ public void openGui(Object mod, int modGuiId, World world, int x, int y, int z) -+ { -+ net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.openGui(this, mod, modGuiId, world, x, y, z); -+ } -+ -+ -+ /* ======================================== FORGE START =====================================*/ -+ /** -+ * A dimension aware version of getBedLocation. -+ * @param dimension The dimension to get the bed spawn for -+ * @return The player specific spawn location for the dimension. May be null. -+ */ -+ public BlockPos getBedLocation(int dimension) -+ { -+ return dimension == 0 ? field_71077_c : spawnChunkMap.get(dimension); -+ } -+ -+ /** -+ * A dimension aware version of isSpawnForced. -+ * Noramally isSpawnForced is used to determine if the respawn system should check for a bed or not. -+ * This just extends that to be dimension aware. -+ * @param dimension The dimension to get whether to check for a bed before spawning for -+ * @return The player specific spawn location for the dimension. May be null. -+ */ -+ public boolean isSpawnForced(int dimension) -+ { -+ if (dimension == 0) return this.field_82248_d; -+ Boolean forced = this.spawnForcedMap.get(dimension); -+ return forced == null ? false : forced; -+ } -+ -+ /** -+ * A dimension aware version of setSpawnChunk. -+ * This functions identically, but allows you to specify which dimension to affect, rather than affecting the player's current dimension. -+ * @param pos The spawn point to set as the player-specific spawn point for the dimension -+ * @param forced Whether or not the respawn code should check for a bed at this location (true means it won't check for a bed) -+ * @param dimension Which dimension to apply the player-specific respawn point to -+ */ -+ public void setSpawnChunk(BlockPos pos, boolean forced, int dimension) -+ { -+ if (dimension == 0) -+ { -+ if (pos != null) -+ { -+ field_71077_c = pos; -+ field_82248_d = forced; -+ } -+ else -+ { -+ field_71077_c = null; -+ field_82248_d = false; -+ } -+ return; -+ } -+ -+ if (pos != null) -+ { -+ spawnChunkMap.put(dimension, pos); -+ spawnForcedMap.put(dimension, forced); -+ } -+ else -+ { -+ spawnChunkMap.remove(dimension); -+ spawnForcedMap.remove(dimension); -+ } -+ } -+ -+ private String displayname; -+ -+ /** -+ * Returns the default eye height of the player -+ * @return player default eye height -+ */ -+ public float getDefaultEyeHeight() -+ { -+ return 1.62F; -+ } -+ -+ /** -+ * Get the currently computed display name, cached for efficiency. -+ * @return the current display name -+ */ -+ public String getDisplayNameString() -+ { -+ if(this.displayname == null) -+ { -+ this.displayname = ForgeEventFactory.getPlayerDisplayName(this, this.func_70005_c_()); -+ } -+ return this.displayname; -+ } -+ -+ /** -+ * Force the displayed name to refresh -+ */ -+ public void refreshDisplayName() -+ { -+ this.displayname = ForgeEventFactory.getPlayerDisplayName(this, this.func_70005_c_()); -+ } -+ -+ private final java.util.Collection prefixes = new java.util.LinkedList(); -+ private final java.util.Collection suffixes = new java.util.LinkedList(); -+ -+ /** -+ * Add a prefix to the player's username in chat -+ * @param prefix The prefix -+ */ -+ public void addPrefix(net.minecraft.util.IChatComponent prefix) { prefixes.add(prefix); } -+ -+ /** -+ * Add a suffix to the player's username in chat -+ * @param suffix The suffix -+ */ -+ public void addSuffix(net.minecraft.util.IChatComponent suffix) { suffixes.add(suffix); } -+ -+ public java.util.Collection getPrefixes() { return this.prefixes; } -+ public java.util.Collection getSuffixes() { return this.suffixes; } -+ -+ /* ======================================== FORGE END =====================================*/ -+ - public static enum EnumChatVisibility - { - FULL(0, "options.chat.visibility.full"), diff --git a/patches/minecraft/net/minecraft/entity/player/EntityPlayerMP.java.patch b/patches/minecraft/net/minecraft/entity/player/EntityPlayerMP.java.patch deleted file mode 100644 index 7d6d0b6c8..000000000 --- a/patches/minecraft/net/minecraft/entity/player/EntityPlayerMP.java.patch +++ /dev/null @@ -1,92 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/entity/player/EntityPlayerMP.java -+++ ../src-work/minecraft/net/minecraft/entity/player/EntityPlayerMP.java -@@ -127,14 +127,15 @@ - public boolean field_71136_j; - private static final String __OBFID = "CL_00001440"; - -+ @SuppressWarnings("unused") - public EntityPlayerMP(MinecraftServer p_i45285_1_, WorldServer p_i45285_2_, GameProfile p_i45285_3_, ItemInWorldManager p_i45285_4_) - { - super(p_i45285_2_, p_i45285_3_); - p_i45285_4_.field_73090_b = this; - this.field_71134_c = p_i45285_4_; -- BlockPos blockpos = p_i45285_2_.func_175694_M(); -+ BlockPos blockpos = p_i45285_2_.field_73011_w.getRandomizedSpawnPoint(); - -- if (!p_i45285_2_.field_73011_w.func_177495_o() && p_i45285_2_.func_72912_H().func_76077_q() != WorldSettings.GameType.ADVENTURE) -+ if (false && !p_i45285_2_.field_73011_w.func_177495_o() && p_i45285_2_.func_72912_H().func_76077_q() != WorldSettings.GameType.ADVENTURE) - { - int i = Math.max(5, p_i45285_1_.func_82357_ak() - 6); - int j = MathHelper.func_76128_c(p_i45285_2_.func_175723_af().func_177729_b((double)blockpos.func_177958_n(), (double)blockpos.func_177952_p())); -@@ -227,7 +228,7 @@ - - this.field_71070_bA.func_75142_b(); - -- if (!this.field_70170_p.field_72995_K && !this.field_71070_bA.func_75145_c(this)) -+ if (!this.field_70170_p.field_72995_K && !net.minecraftforge.common.ForgeHooks.canInteractWith(this, this.field_71070_bA)) - { - this.func_71053_j(); - this.field_71070_bA = this.field_71069_bz; -@@ -269,7 +270,8 @@ - if (chunk.func_150802_k()) - { - arraylist.add(chunk); -- arraylist1.addAll(((WorldServer)this.field_70170_p).func_147486_a(chunkcoordintpair.field_77276_a * 16, 0, chunkcoordintpair.field_77275_b * 16, chunkcoordintpair.field_77276_a * 16 + 16, 256, chunkcoordintpair.field_77275_b * 16 + 16)); -+ arraylist1.addAll(((WorldServer)this.field_70170_p).func_147486_a(chunkcoordintpair.field_77276_a * 16, 0, chunkcoordintpair.field_77275_b * 16, chunkcoordintpair.field_77276_a * 16 + 15, 256, chunkcoordintpair.field_77275_b * 16 + 15)); -+ //BugFix: 16 makes it load an extra chunk, which isn't associated with a player, which makes it not unload unless a player walks near it. - iterator1.remove(); - } - } -@@ -305,6 +307,7 @@ - { - chunk = (Chunk)iterator2.next(); - this.func_71121_q().func_73039_n().func_85172_a(this, chunk); -+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.ChunkWatchEvent.Watch(chunk.func_76632_l(), this)); - } - } - } -@@ -440,6 +443,7 @@ - - public void func_70645_a(DamageSource p_70645_1_) - { -+ if (net.minecraftforge.common.ForgeHooks.onLivingDeath(this, p_70645_1_)) return; - if (this.field_70170_p.func_82736_K().func_82766_b("showDeathMessages")) - { - Team team = this.func_96124_cp(); -@@ -463,7 +467,20 @@ - - if (!this.field_70170_p.func_82736_K().func_82766_b("keepInventory")) - { -+ captureDrops = true; -+ capturedDrops.clear(); -+ - this.field_71071_by.func_70436_m(); -+ -+ captureDrops = false; -+ net.minecraftforge.event.entity.player.PlayerDropsEvent event = new net.minecraftforge.event.entity.player.PlayerDropsEvent(this, p_70645_1_, capturedDrops, field_70718_bc > 0); -+ if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) -+ { -+ for (net.minecraft.entity.item.EntityItem item : capturedDrops) -+ { -+ func_71012_a(item); -+ } -+ } - } - - Collection collection = this.field_70170_p.func_96441_U().func_96520_a(IScoreObjectiveCriteria.field_96642_c); -@@ -481,6 +498,7 @@ - if (entitylivingbase != null) - { - EntityList.EntityEggInfo entityegginfo = (EntityList.EntityEggInfo)EntityList.field_75627_a.get(Integer.valueOf(EntityList.func_75619_a(entitylivingbase))); -+ if (entityegginfo == null) entityegginfo = net.minecraftforge.fml.common.registry.EntityRegistry.getEggs().get(EntityList.func_75621_b(entitylivingbase)); - - if (entityegginfo != null) - { -@@ -849,6 +867,7 @@ - { - if (p_71064_1_ != null) - { -+ if (p_71064_1_.func_75967_d() && net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.player.AchievementEvent(this, (net.minecraft.stats.Achievement) p_71064_1_))) return; - this.field_147103_bO.func_150871_b(this, p_71064_1_, p_71064_2_); - Iterator iterator = this.func_96123_co().func_96520_a(p_71064_1_.func_150952_k()).iterator(); - diff --git a/patches/minecraft/net/minecraft/entity/player/InventoryPlayer.java.patch b/patches/minecraft/net/minecraft/entity/player/InventoryPlayer.java.patch deleted file mode 100644 index 49675d1be..000000000 --- a/patches/minecraft/net/minecraft/entity/player/InventoryPlayer.java.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/entity/player/InventoryPlayer.java -+++ ../src-work/minecraft/net/minecraft/entity/player/InventoryPlayer.java -@@ -319,6 +319,14 @@ - this.field_70462_a[i].func_77945_a(this.field_70458_d.field_70170_p, this.field_70458_d, i, this.field_70461_c == i); - } - } -+ -+ for (int i = 0; i < field_70460_b.length; i++) -+ { -+ if (field_70460_b[i] != null) -+ { -+ field_70460_b[i].func_77973_b().onArmorTick(field_70458_d.field_70170_p, field_70458_d, field_70460_b[i]); -+ } -+ } - } - - public boolean func_146026_a(Item p_146026_1_) diff --git a/patches/minecraft/net/minecraft/init/Bootstrap.java.patch b/patches/minecraft/net/minecraft/init/Bootstrap.java.patch deleted file mode 100644 index 68b643c96..000000000 --- a/patches/minecraft/net/minecraft/init/Bootstrap.java.patch +++ /dev/null @@ -1,35 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/init/Bootstrap.java -+++ ../src-work/minecraft/net/minecraft/init/Bootstrap.java -@@ -67,6 +67,7 @@ - return field_151355_a; - } - -+ @SuppressWarnings("unused") - static void func_151353_a() - { - BlockDispenser.field_149943_a.func_82595_a(Items.field_151032_g, new BehaviorProjectileDispense() -@@ -144,7 +145,7 @@ - double d0 = p_82487_1_.func_82615_a() + (double)enumfacing.func_82601_c(); - double d1 = (double)((float)p_82487_1_.func_180699_d().func_177956_o() + 0.2F); - double d2 = p_82487_1_.func_82616_c() + (double)enumfacing.func_82599_e(); -- Entity entity = ItemMonsterPlacer.func_77840_a(p_82487_1_.func_82618_k(), p_82487_2_.func_77960_j(), d0, d1, d2); -+ Entity entity = ItemMonsterPlacer.spawnCreature(p_82487_1_.func_82618_k(), ItemMonsterPlacer.getEntityName(p_82487_2_), d0, d1, d2); - - if (entity instanceof EntityLivingBase && p_82487_2_.func_82837_s()) - { -@@ -509,6 +510,7 @@ - } - } - }); -+ if (false){ //Forge: Removed, Fixes MC-75630 - Exploit with signs and command blocks - BlockDispenser.field_149943_a.func_82595_a(Item.func_150898_a(Blocks.field_150483_bI), new BehaviorDefaultDispenseItem() - { - private static final String __OBFID = "CL_00002276"; -@@ -535,6 +537,7 @@ - protected void func_82485_a(IBlockSource p_82485_1_) {} - protected void func_82489_a(IBlockSource p_82489_1_, EnumFacing p_82489_2_) {} - }); -+ } - } - - public static void func_151354_b() diff --git a/patches/minecraft/net/minecraft/inventory/Container.java.patch b/patches/minecraft/net/minecraft/inventory/Container.java.patch deleted file mode 100644 index 0b289ff59..000000000 --- a/patches/minecraft/net/minecraft/inventory/Container.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/inventory/Container.java -+++ ../src-work/minecraft/net/minecraft/inventory/Container.java -@@ -624,7 +624,7 @@ - slot = (Slot)this.field_75151_b.get(k); - itemstack1 = slot.func_75211_c(); - -- if (itemstack1 == null) -+ if (itemstack1 == null && slot.func_75214_a(p_75135_1_)) // Forge: Make sure to respect isItemValid in the slot. - { - slot.func_75215_d(p_75135_1_.func_77946_l()); - slot.func_75218_e(); diff --git a/patches/minecraft/net/minecraft/inventory/ContainerBeacon.java.patch b/patches/minecraft/net/minecraft/inventory/ContainerBeacon.java.patch deleted file mode 100644 index 8f34fa6a9..000000000 --- a/patches/minecraft/net/minecraft/inventory/ContainerBeacon.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/inventory/ContainerBeacon.java -+++ ../src-work/minecraft/net/minecraft/inventory/ContainerBeacon.java -@@ -132,7 +132,7 @@ - - public boolean func_75214_a(ItemStack p_75214_1_) - { -- return p_75214_1_ == null ? false : p_75214_1_.func_77973_b() == Items.field_151166_bC || p_75214_1_.func_77973_b() == Items.field_151045_i || p_75214_1_.func_77973_b() == Items.field_151043_k || p_75214_1_.func_77973_b() == Items.field_151042_j; -+ return p_75214_1_ == null ? false : p_75214_1_.func_77973_b().isBeaconPayment(p_75214_1_); - } - - public int func_75219_a() diff --git a/patches/minecraft/net/minecraft/inventory/ContainerBrewingStand.java.patch b/patches/minecraft/net/minecraft/inventory/ContainerBrewingStand.java.patch deleted file mode 100644 index e281d7c01..000000000 --- a/patches/minecraft/net/minecraft/inventory/ContainerBrewingStand.java.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/inventory/ContainerBrewingStand.java -+++ ../src-work/minecraft/net/minecraft/inventory/ContainerBrewingStand.java -@@ -158,7 +158,7 @@ - - public boolean func_75214_a(ItemStack p_75214_1_) - { -- return p_75214_1_ != null ? p_75214_1_.func_77973_b().func_150892_m(p_75214_1_) : false; -+ return net.minecraftforge.common.brewing.BrewingRecipeRegistry.isValidIngredient(p_75214_1_); - } - - public int func_75219_a() -@@ -190,7 +190,7 @@ - - public void func_82870_a(EntityPlayer p_82870_1_, ItemStack p_82870_2_) - { -- if (p_82870_2_.func_77973_b() == Items.field_151068_bn && p_82870_2_.func_77960_j() > 0) -+ if (p_82870_2_.func_77973_b() instanceof net.minecraft.item.ItemPotion && p_82870_2_.func_77960_j() > 0) - { - this.field_75244_a.func_71029_a(AchievementList.field_76001_A); - } -@@ -200,7 +200,7 @@ - - public static boolean func_75243_a_(ItemStack p_75243_0_) - { -- return p_75243_0_ != null && (p_75243_0_.func_77973_b() == Items.field_151068_bn || p_75243_0_.func_77973_b() == Items.field_151069_bo); -+ return net.minecraftforge.common.brewing.BrewingRecipeRegistry.isValidInput(p_75243_0_); - } - } - } diff --git a/patches/minecraft/net/minecraft/inventory/ContainerPlayer.java.patch b/patches/minecraft/net/minecraft/inventory/ContainerPlayer.java.patch deleted file mode 100644 index 2637c44fd..000000000 --- a/patches/minecraft/net/minecraft/inventory/ContainerPlayer.java.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/inventory/ContainerPlayer.java -+++ ../src-work/minecraft/net/minecraft/inventory/ContainerPlayer.java -@@ -47,7 +47,8 @@ - } - public boolean func_75214_a(ItemStack p_75214_1_) - { -- return p_75214_1_ == null ? false : (p_75214_1_.func_77973_b() instanceof ItemArmor ? ((ItemArmor)p_75214_1_.func_77973_b()).field_77881_a == k : (p_75214_1_.func_77973_b() != Item.func_150898_a(Blocks.field_150423_aK) && p_75214_1_.func_77973_b() != Items.field_151144_bL ? false : k == 0)); -+ if (p_75214_1_ == null) return false; -+ return p_75214_1_.func_77973_b().isValidArmor(p_75214_1_, k, field_82862_h); - } - @SideOnly(Side.CLIENT) - public String func_178171_c() diff --git a/patches/minecraft/net/minecraft/inventory/ContainerRepair.java.patch b/patches/minecraft/net/minecraft/inventory/ContainerRepair.java.patch deleted file mode 100644 index fb6952611..000000000 --- a/patches/minecraft/net/minecraft/inventory/ContainerRepair.java.patch +++ /dev/null @@ -1,47 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/inventory/ContainerRepair.java -+++ ../src-work/minecraft/net/minecraft/inventory/ContainerRepair.java -@@ -73,6 +73,8 @@ - p_82870_1_.func_82242_a(-ContainerRepair.this.field_82854_e); - } - -+ float breakChance = net.minecraftforge.common.ForgeHooks.onAnvilRepair(p_82870_1_, p_82870_2_, ContainerRepair.this.field_82853_g.func_70301_a(0), ContainerRepair.this.field_82853_g.func_70301_a(1)); -+ - ContainerRepair.this.field_82853_g.func_70299_a(0, (ItemStack)null); - - if (ContainerRepair.this.field_82856_l > 0) -@@ -97,7 +99,7 @@ - ContainerRepair.this.field_82854_e = 0; - IBlockState iblockstate = p_i45807_2_.func_180495_p(p_i45807_3_); - -- if (!p_82870_1_.field_71075_bZ.field_75098_d && !p_i45807_2_.field_72995_K && iblockstate.func_177230_c() == Blocks.field_150467_bQ && p_82870_1_.func_70681_au().nextFloat() < 0.12F) -+ if (!p_82870_1_.field_71075_bZ.field_75098_d && !p_i45807_2_.field_72995_K && iblockstate.func_177230_c() == Blocks.field_150467_bQ && p_82870_1_.func_70681_au().nextFloat() < breakChance) - { - int k = ((Integer)iblockstate.func_177229_b(BlockAnvil.field_176505_b)).intValue(); - ++k; -@@ -177,6 +179,7 @@ - - if (itemstack2 != null) - { -+ if (!net.minecraftforge.common.ForgeHooks.onAnvilChange(this, itemstack, itemstack2, field_82852_f, field_82857_m, i2)) return; - flag7 = itemstack2.func_77973_b() == Items.field_151134_bR && Items.field_151134_bR.func_92110_g(itemstack2).func_74745_c() > 0; - int k; - int l; -@@ -271,7 +274,8 @@ - { - int l1 = ((Integer)iterator.next()).intValue(); - -- if (l1 != l && !enchantment.func_77326_a(Enchantment.func_180306_c(l1))) -+ Enchantment e2 = Enchantment.func_180306_c(l1); -+ if (l1 != l && !(enchantment.func_77326_a(e2) && e2.func_77326_a(enchantment))) //Forge BugFix: Let Both enchantments veto being together - { - flag8 = false; - ++i; -@@ -322,6 +326,8 @@ - } - } - -+ if (flag7 && !itemstack1.func_77973_b().isBookEnchantable(itemstack1, itemstack2)) itemstack1 = null; -+ - if (StringUtils.isBlank(this.field_82857_m)) - { - if (itemstack.func_82837_s()) diff --git a/patches/minecraft/net/minecraft/item/ItemArmor.java.patch b/patches/minecraft/net/minecraft/item/ItemArmor.java.patch deleted file mode 100644 index 15adcb5a1..000000000 --- a/patches/minecraft/net/minecraft/item/ItemArmor.java.patch +++ /dev/null @@ -1,47 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/item/ItemArmor.java -+++ ../src-work/minecraft/net/minecraft/item/ItemArmor.java -@@ -38,7 +38,7 @@ - if (list.size() > 0) - { - EntityLivingBase entitylivingbase = (EntityLivingBase)list.get(0); -- int l = entitylivingbase instanceof EntityPlayer ? 1 : 0; -+ int l = 0;// Forge: We fix the indexes. Mojang Stop hard coding this! - int i1 = EntityLiving.func_82159_b(p_82487_2_); - ItemStack itemstack1 = p_82487_2_.func_77946_l(); - itemstack1.field_77994_a = 1; -@@ -192,7 +192,7 @@ - - if (itemstack1 == null) - { -- p_77659_3_.func_70062_b(i, p_77659_1_.func_77946_l()); -+ p_77659_3_.func_70062_b(i + 1, p_77659_1_.func_77946_l()); //Forge: Vanilla bug fix associated with fixed setCurrentItemOrArmor indexs for players. - p_77659_1_.field_77994_a = 0; - } - -@@ -213,6 +213,9 @@ - - private static final String __OBFID = "CL_00001768"; - -+ //Added by forge for custom Armor materials. -+ public Item customCraftingMaterial = null; -+ - private ArmorMaterial(String p_i45789_3_, int p_i45789_4_, int[] p_i45789_5_, int p_i45789_6_) - { - this.field_179243_f = p_i45789_3_; -@@ -238,7 +241,15 @@ - - public Item func_151685_b() - { -- return this == LEATHER ? Items.field_151116_aA : (this == CHAIN ? Items.field_151042_j : (this == GOLD ? Items.field_151043_k : (this == IRON ? Items.field_151042_j : (this == DIAMOND ? Items.field_151045_i : null)))); -+ switch (this) -+ { -+ case LEATHER: return Items.field_151116_aA; -+ case CHAIN: return Items.field_151042_j; -+ case GOLD: return Items.field_151043_k; -+ case IRON: return Items.field_151042_j; -+ case DIAMOND: return Items.field_151045_i; -+ default: return customCraftingMaterial; -+ } - } - - @SideOnly(Side.CLIENT) diff --git a/patches/minecraft/net/minecraft/item/ItemBlock.java.patch b/patches/minecraft/net/minecraft/item/ItemBlock.java.patch deleted file mode 100644 index 26420ad34..000000000 --- a/patches/minecraft/net/minecraft/item/ItemBlock.java.patch +++ /dev/null @@ -1,72 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/item/ItemBlock.java -+++ ../src-work/minecraft/net/minecraft/item/ItemBlock.java -@@ -63,16 +63,8 @@ - int i = this.func_77647_b(p_180614_1_.func_77960_j()); - IBlockState iblockstate1 = this.field_150939_a.func_180642_a(p_180614_3_, p_180614_4_, p_180614_5_, p_180614_6_, p_180614_7_, p_180614_8_, i, p_180614_2_); - -- if (p_180614_3_.func_180501_a(p_180614_4_, iblockstate1, 3)) -+ if (placeBlockAt(p_180614_1_, p_180614_2_, p_180614_3_, p_180614_4_, p_180614_5_, p_180614_6_, p_180614_7_, p_180614_8_, iblockstate1)) - { -- iblockstate1 = p_180614_3_.func_180495_p(p_180614_4_); -- -- if (iblockstate1.func_177230_c() == this.field_150939_a) -- { -- func_179224_a(p_180614_3_, p_180614_4_, p_180614_1_); -- this.field_150939_a.func_180633_a(p_180614_3_, p_180614_4_, iblockstate1, p_180614_2_, p_180614_1_); -- } -- - p_180614_3_.func_72908_a((double)((float)p_180614_4_.func_177958_n() + 0.5F), (double)((float)p_180614_4_.func_177956_o() + 0.5F), (double)((float)p_180614_4_.func_177952_p() + 0.5F), this.field_150939_a.field_149762_H.func_150496_b(), (this.field_150939_a.field_149762_H.func_150497_c() + 1.0F) / 2.0F, this.field_150939_a.field_149762_H.func_150494_d() * 0.8F); - --p_180614_1_.field_77994_a; - } -@@ -85,14 +77,24 @@ - } - } - -+ @Deprecated //Use player sensitive version - public static boolean func_179224_a(World p_179224_0_, BlockPos p_179224_1_, ItemStack p_179224_2_) - { -+ return setTileEntityNBT(p_179224_0_, p_179224_1_, p_179224_2_, null); -+ } -+ public static boolean setTileEntityNBT(World p_179224_0_, BlockPos p_179224_1_, ItemStack p_179224_2_, EntityPlayer player) -+ { - if (p_179224_2_.func_77942_o() && p_179224_2_.func_77978_p().func_150297_b("BlockEntityTag", 10)) - { - TileEntity tileentity = p_179224_0_.func_175625_s(p_179224_1_); - - if (tileentity != null) - { -+ //Forge: Fixes MC-75630 - Exploit with signs and command blocks -+ final net.minecraft.server.MinecraftServer server = net.minecraft.server.MinecraftServer.func_71276_C(); -+ if (!p_179224_0_.field_72995_K && tileentity.restrictNBTCopy() && -+ (server == null || !server.func_71203_ab().func_152596_g(player.func_146103_bH()))) -+ return false; - NBTTagCompound nbttagcompound = new NBTTagCompound(); - NBTTagCompound nbttagcompound1 = (NBTTagCompound)nbttagcompound.func_74737_b(); - tileentity.func_145841_b(nbttagcompound); -@@ -157,4 +159,26 @@ - { - return this.field_150939_a; - } -+ -+ /** -+ * Called to actually place the block, after the location is determined -+ * and all permission checks have been made. -+ * -+ * @param stack The item stack that was used to place the block. This can be changed inside the method. -+ * @param player The player who is placing the block. Can be null if the block is not being placed by a player. -+ * @param side The side the player (or machine) right-clicked on. -+ */ -+ public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, IBlockState newState) -+ { -+ if (!world.func_180501_a(pos, newState, 3)) return false; -+ -+ IBlockState state = world.func_180495_p(pos); -+ if (state.func_177230_c() == this.field_150939_a) -+ { -+ setTileEntityNBT(world, pos, stack, player); -+ this.field_150939_a.func_180633_a(world, pos, state, player, stack); -+ } -+ -+ return true; -+ } - } diff --git a/patches/minecraft/net/minecraft/item/ItemBow.java.patch b/patches/minecraft/net/minecraft/item/ItemBow.java.patch deleted file mode 100644 index 44892d370..000000000 --- a/patches/minecraft/net/minecraft/item/ItemBow.java.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/item/ItemBow.java -+++ ../src-work/minecraft/net/minecraft/item/ItemBow.java -@@ -23,11 +23,15 @@ - - public void func_77615_a(ItemStack p_77615_1_, World p_77615_2_, EntityPlayer p_77615_3_, int p_77615_4_) - { -+ int j = this.func_77626_a(p_77615_1_) - p_77615_4_; -+ net.minecraftforge.event.entity.player.ArrowLooseEvent event = new net.minecraftforge.event.entity.player.ArrowLooseEvent(p_77615_3_, p_77615_1_, j); -+ if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) return; -+ j = event.charge; -+ - boolean flag = p_77615_3_.field_71075_bZ.field_75098_d || EnchantmentHelper.func_77506_a(Enchantment.field_77342_w.field_77352_x, p_77615_1_) > 0; - - if (flag || p_77615_3_.field_71071_by.func_146028_b(Items.field_151032_g)) - { -- int j = this.func_77626_a(p_77615_1_) - p_77615_4_; - float f = (float)j / 20.0F; - f = (f * f + f * 2.0F) / 3.0F; - -@@ -105,6 +109,9 @@ - - public ItemStack func_77659_a(ItemStack p_77659_1_, World p_77659_2_, EntityPlayer p_77659_3_) - { -+ net.minecraftforge.event.entity.player.ArrowNockEvent event = new net.minecraftforge.event.entity.player.ArrowNockEvent(p_77659_3_, p_77659_1_); -+ if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) return event.result; -+ - if (p_77659_3_.field_71075_bZ.field_75098_d || p_77659_3_.field_71071_by.func_146028_b(Items.field_151032_g)) - { - p_77659_3_.func_71008_a(p_77659_1_, this.func_77626_a(p_77659_1_)); diff --git a/patches/minecraft/net/minecraft/item/ItemBucketMilk.java.patch b/patches/minecraft/net/minecraft/item/ItemBucketMilk.java.patch deleted file mode 100644 index 4fa7c76aa..000000000 --- a/patches/minecraft/net/minecraft/item/ItemBucketMilk.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/item/ItemBucketMilk.java -+++ ../src-work/minecraft/net/minecraft/item/ItemBucketMilk.java -@@ -25,7 +25,7 @@ - - if (!p_77654_2_.field_72995_K) - { -- p_77654_3_.func_70674_bp(); -+ p_77654_3_.curePotionEffects(p_77654_1_); - } - - p_77654_3_.func_71029_a(StatList.field_75929_E[Item.func_150891_b(this)]); diff --git a/patches/minecraft/net/minecraft/item/ItemDye.java.patch b/patches/minecraft/net/minecraft/item/ItemDye.java.patch deleted file mode 100644 index 68f1abec6..000000000 --- a/patches/minecraft/net/minecraft/item/ItemDye.java.patch +++ /dev/null @@ -1,56 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/item/ItemDye.java -+++ ../src-work/minecraft/net/minecraft/item/ItemDye.java -@@ -48,7 +48,7 @@ - - if (enumdyecolor == EnumDyeColor.WHITE) - { -- if (func_179234_a(p_180614_1_, p_180614_3_, p_180614_4_)) -+ if (applyBonemeal(p_180614_1_, p_180614_3_, p_180614_4_, p_180614_2_)) - { - if (!p_180614_3_.field_72995_K) - { -@@ -98,8 +98,18 @@ - - public static boolean func_179234_a(ItemStack p_179234_0_, World p_179234_1_, BlockPos p_179234_2_) - { -+ if (p_179234_1_ instanceof net.minecraft.world.WorldServer) -+ return applyBonemeal(p_179234_0_, p_179234_1_, p_179234_2_, net.minecraftforge.common.util.FakePlayerFactory.getMinecraft((net.minecraft.world.WorldServer)p_179234_1_)); -+ return false; -+ } -+ -+ public static boolean applyBonemeal(ItemStack p_179234_0_, World p_179234_1_, BlockPos p_179234_2_, EntityPlayer player) -+ { - IBlockState iblockstate = p_179234_1_.func_180495_p(p_179234_2_); - -+ int hook = net.minecraftforge.event.ForgeEventFactory.onApplyBonemeal(player, p_179234_1_, p_179234_2_, iblockstate, p_179234_0_); -+ if (hook != 0) return hook > 0; -+ - if (iblockstate.func_177230_c() instanceof IGrowable) - { - IGrowable igrowable = (IGrowable)iblockstate.func_177230_c(); -@@ -133,7 +143,7 @@ - - Block block = p_180617_0_.func_180495_p(p_180617_1_).func_177230_c(); - -- if (block.func_149688_o() != Material.field_151579_a) -+ if (block.isAir(p_180617_0_, p_180617_1_)) - { - block.func_180654_a(p_180617_0_, p_180617_1_); - -@@ -145,6 +155,16 @@ - p_180617_0_.func_175688_a(EnumParticleTypes.VILLAGER_HAPPY, (double)((float)p_180617_1_.func_177958_n() + field_77697_d.nextFloat()), (double)p_180617_1_.func_177956_o() + (double)field_77697_d.nextFloat() * block.func_149669_A(), (double)((float)p_180617_1_.func_177952_p() + field_77697_d.nextFloat()), d0, d1, d2, new int[0]); - } - } -+ else -+ { -+ for (int i1 = 0; i1 < p_180617_2_; ++i1) -+ { -+ double d0 = field_77697_d.nextGaussian() * 0.02D; -+ double d1 = field_77697_d.nextGaussian() * 0.02D; -+ double d2 = field_77697_d.nextGaussian() * 0.02D; -+ p_180617_0_.func_175688_a(EnumParticleTypes.VILLAGER_HAPPY, (double)((float)p_180617_1_.func_177958_n() + field_77697_d.nextFloat()), (double)p_180617_1_.func_177956_o() + (double)field_77697_d.nextFloat() * 1.0f, (double)((float)p_180617_1_.func_177952_p() + field_77697_d.nextFloat()), d0, d1, d2, new int[0]); -+ } -+ } - } - - public boolean func_111207_a(ItemStack p_111207_1_, EntityPlayer p_111207_2_, EntityLivingBase p_111207_3_) diff --git a/patches/minecraft/net/minecraft/item/ItemEmptyMap.java.patch b/patches/minecraft/net/minecraft/item/ItemEmptyMap.java.patch deleted file mode 100644 index dce46dfd0..000000000 --- a/patches/minecraft/net/minecraft/item/ItemEmptyMap.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/item/ItemEmptyMap.java -+++ ../src-work/minecraft/net/minecraft/item/ItemEmptyMap.java -@@ -24,7 +24,7 @@ - p_77659_2_.func_72823_a(s, mapdata); - mapdata.field_76197_d = 0; - mapdata.func_176054_a(p_77659_3_.field_70165_t, p_77659_3_.field_70161_v, mapdata.field_76197_d); -- mapdata.field_76200_c = (byte)p_77659_2_.field_73011_w.func_177502_q(); -+ mapdata.field_76200_c = p_77659_2_.field_73011_w.func_177502_q(); - mapdata.func_76185_a(); - --p_77659_1_.field_77994_a; - diff --git a/patches/minecraft/net/minecraft/item/ItemFlintAndSteel.java.patch b/patches/minecraft/net/minecraft/item/ItemFlintAndSteel.java.patch deleted file mode 100644 index cf8ab0013..000000000 --- a/patches/minecraft/net/minecraft/item/ItemFlintAndSteel.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/item/ItemFlintAndSteel.java -+++ ../src-work/minecraft/net/minecraft/item/ItemFlintAndSteel.java -@@ -29,7 +29,7 @@ - } - else - { -- if (p_180614_3_.func_180495_p(p_180614_4_).func_177230_c().func_149688_o() == Material.field_151579_a) -+ if (p_180614_3_.func_175623_d(p_180614_4_)) - { - p_180614_3_.func_72908_a((double)p_180614_4_.func_177958_n() + 0.5D, (double)p_180614_4_.func_177956_o() + 0.5D, (double)p_180614_4_.func_177952_p() + 0.5D, "fire.ignite", 1.0F, field_77697_d.nextFloat() * 0.4F + 0.8F); - p_180614_3_.func_175656_a(p_180614_4_, Blocks.field_150480_ab.func_176223_P()); diff --git a/patches/minecraft/net/minecraft/item/ItemHoe.java.patch b/patches/minecraft/net/minecraft/item/ItemHoe.java.patch deleted file mode 100644 index 3d3e201ef..000000000 --- a/patches/minecraft/net/minecraft/item/ItemHoe.java.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/item/ItemHoe.java -+++ ../src-work/minecraft/net/minecraft/item/ItemHoe.java -@@ -34,10 +34,13 @@ - } - else - { -+ int hook = net.minecraftforge.event.ForgeEventFactory.onHoeUse(p_180614_1_, p_180614_2_, p_180614_3_, p_180614_4_); -+ if (hook != 0) return hook > 0; -+ - IBlockState iblockstate = p_180614_3_.func_180495_p(p_180614_4_); - Block block = iblockstate.func_177230_c(); - -- if (p_180614_5_ != EnumFacing.DOWN && p_180614_3_.func_180495_p(p_180614_4_.func_177984_a()).func_177230_c().func_149688_o() == Material.field_151579_a) -+ if (p_180614_5_ != EnumFacing.DOWN && p_180614_3_.func_175623_d(p_180614_4_.func_177984_a())) - { - if (block == Blocks.field_150349_c) - { diff --git a/patches/minecraft/net/minecraft/item/ItemMap.java.patch b/patches/minecraft/net/minecraft/item/ItemMap.java.patch deleted file mode 100644 index 9201f5bba..000000000 --- a/patches/minecraft/net/minecraft/item/ItemMap.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/item/ItemMap.java -+++ ../src-work/minecraft/net/minecraft/item/ItemMap.java -@@ -58,7 +58,7 @@ - mapdata = new MapData(s); - mapdata.field_76197_d = 3; - mapdata.func_176054_a((double)p_77873_2_.func_72912_H().func_76079_c(), (double)p_77873_2_.func_72912_H().func_76074_e(), mapdata.field_76197_d); -- mapdata.field_76200_c = (byte)p_77873_2_.field_73011_w.func_177502_q(); -+ mapdata.field_76200_c = p_77873_2_.field_73011_w.func_177502_q(); - mapdata.func_76185_a(); - p_77873_2_.func_72823_a(s, mapdata); - } diff --git a/patches/minecraft/net/minecraft/item/ItemMonsterPlacer.java.patch b/patches/minecraft/net/minecraft/item/ItemMonsterPlacer.java.patch deleted file mode 100644 index 700d90d00..000000000 --- a/patches/minecraft/net/minecraft/item/ItemMonsterPlacer.java.patch +++ /dev/null @@ -1,107 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/item/ItemMonsterPlacer.java -+++ ../src-work/minecraft/net/minecraft/item/ItemMonsterPlacer.java -@@ -39,7 +39,7 @@ - public String func_77653_i(ItemStack p_77653_1_) - { - String s = ("" + StatCollector.func_74838_a(this.func_77658_a() + ".name")).trim(); -- String s1 = EntityList.func_75617_a(p_77653_1_.func_77960_j()); -+ String s1 = ItemMonsterPlacer.getEntityName(p_77653_1_); - - if (s1 != null) - { -@@ -52,7 +52,7 @@ - @SideOnly(Side.CLIENT) - public int func_82790_a(ItemStack p_82790_1_, int p_82790_2_) - { -- EntityList.EntityEggInfo entityegginfo = (EntityList.EntityEggInfo)EntityList.field_75627_a.get(Integer.valueOf(p_82790_1_.func_77960_j())); -+ EntityList.EntityEggInfo entityegginfo = ItemMonsterPlacer.getEggInfo(p_82790_1_); - return entityegginfo != null ? (p_82790_2_ == 0 ? entityegginfo.field_75611_b : entityegginfo.field_75612_c) : 16777215; - } - -@@ -77,7 +77,7 @@ - if (tileentity instanceof TileEntityMobSpawner) - { - MobSpawnerBaseLogic mobspawnerbaselogic = ((TileEntityMobSpawner)tileentity).func_145881_a(); -- mobspawnerbaselogic.func_98272_a(EntityList.func_75617_a(p_180614_1_.func_77960_j())); -+ mobspawnerbaselogic.func_98272_a(ItemMonsterPlacer.getEntityName(p_180614_1_)); - tileentity.func_70296_d(); - p_180614_3_.func_175689_h(p_180614_4_); - -@@ -98,7 +98,7 @@ - d0 = 0.5D; - } - -- Entity entity = func_77840_a(p_180614_3_, p_180614_1_.func_77960_j(), (double)p_180614_4_.func_177958_n() + 0.5D, (double)p_180614_4_.func_177956_o() + d0, (double)p_180614_4_.func_177952_p() + 0.5D); -+ Entity entity = spawnCreature(p_180614_3_, ItemMonsterPlacer.getEntityName(p_180614_1_), (double)p_180614_4_.func_177958_n() + 0.5D, (double)p_180614_4_.func_177956_o() + d0, (double)p_180614_4_.func_177952_p() + 0.5D); - - if (entity != null) - { -@@ -149,7 +149,7 @@ - - if (p_77659_2_.func_180495_p(blockpos).func_177230_c() instanceof BlockLiquid) - { -- Entity entity = func_77840_a(p_77659_2_, p_77659_1_.func_77960_j(), (double)blockpos.func_177958_n() + 0.5D, (double)blockpos.func_177956_o() + 0.5D, (double)blockpos.func_177952_p() + 0.5D); -+ Entity entity = spawnCreature(p_77659_2_, ItemMonsterPlacer.getEntityName(p_77659_1_), (double)blockpos.func_177958_n() + 0.5D, (double)blockpos.func_177956_o() + 0.5D, (double)blockpos.func_177952_p() + 0.5D); - - if (entity != null) - { -@@ -173,19 +173,29 @@ - } - } - -+ @Deprecated // Use string version below. - public static Entity func_77840_a(World p_77840_0_, int p_77840_1_, double p_77840_2_, double p_77840_4_, double p_77840_6_) - { - if (!EntityList.field_75627_a.containsKey(Integer.valueOf(p_77840_1_))) - { - return null; - } -+ return spawnCreature(p_77840_0_, EntityList.func_75617_a(p_77840_1_), p_77840_2_, p_77840_4_, p_77840_6_); -+ } -+ -+ public static Entity spawnCreature(World p_77840_0_, String name, double p_77840_2_, double p_77840_4_, double p_77840_6_) -+ { -+ if (!EntityList.field_75625_b.containsKey(name)) -+ { -+ return null; -+ } - else - { - Entity entity = null; - - for (int j = 0; j < 1; ++j) - { -- entity = EntityList.func_75616_a(p_77840_1_, p_77840_0_); -+ entity = EntityList.func_75620_a(name, p_77840_0_); - - if (entity instanceof EntityLivingBase) - { -@@ -213,5 +223,28 @@ - EntityList.EntityEggInfo entityegginfo = (EntityList.EntityEggInfo)iterator.next(); - p_150895_3_.add(new ItemStack(p_150895_1_, 1, entityegginfo.field_75613_a)); - } -+ -+ for (String name : net.minecraftforge.fml.common.registry.EntityRegistry.getEggs().keySet()) -+ { -+ ItemStack stack = new ItemStack(p_150895_1_); -+ net.minecraft.nbt.NBTTagCompound nbt = new net.minecraft.nbt.NBTTagCompound(); -+ nbt.func_74778_a("entity_name", name); -+ stack.func_77982_d(nbt); -+ p_150895_3_.add(stack); -+ } - } -+ -+ public static String getEntityName(ItemStack stack) -+ { -+ if (stack.func_77942_o() && stack.func_77978_p().func_150297_b("entity_name", 8)) -+ return stack.func_77978_p().func_74779_i("entity_name"); -+ return EntityList.func_75617_a(stack.func_77960_j()); -+ } -+ -+ private static EntityList.EntityEggInfo getEggInfo(ItemStack stack) -+ { -+ if (stack.func_77942_o() && stack.func_77978_p().func_150297_b("entity_name", 8)) -+ return net.minecraftforge.fml.common.registry.EntityRegistry.getEggs().get(stack.func_77978_p().func_74779_i("entity_name")); -+ return (EntityList.EntityEggInfo)EntityList.field_75627_a.get(stack.func_77960_j()); -+ } - } diff --git a/patches/minecraft/net/minecraft/item/ItemReed.java.patch b/patches/minecraft/net/minecraft/item/ItemReed.java.patch deleted file mode 100644 index 9d6bcb61a..000000000 --- a/patches/minecraft/net/minecraft/item/ItemReed.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/item/ItemReed.java -+++ ../src-work/minecraft/net/minecraft/item/ItemReed.java -@@ -54,7 +54,7 @@ - - if (iblockstate1.func_177230_c() == this.field_150935_a) - { -- ItemBlock.func_179224_a(p_180614_3_, p_180614_4_, p_180614_1_); -+ ItemBlock.setTileEntityNBT(p_180614_3_, p_180614_4_, p_180614_1_, p_180614_2_); - iblockstate1.func_177230_c().func_180633_a(p_180614_3_, p_180614_4_, iblockstate1, p_180614_2_, p_180614_1_); - } - diff --git a/patches/minecraft/net/minecraft/item/ItemSeeds.java.patch b/patches/minecraft/net/minecraft/item/ItemSeeds.java.patch deleted file mode 100644 index eef2fbf14..000000000 --- a/patches/minecraft/net/minecraft/item/ItemSeeds.java.patch +++ /dev/null @@ -1,37 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/item/ItemSeeds.java -+++ ../src-work/minecraft/net/minecraft/item/ItemSeeds.java -@@ -7,7 +7,7 @@ - import net.minecraft.util.EnumFacing; - import net.minecraft.world.World; - --public class ItemSeeds extends Item -+public class ItemSeeds extends Item implements net.minecraftforge.common.IPlantable - { - private Block field_150925_a; - private Block field_77838_b; -@@ -30,7 +30,7 @@ - { - return false; - } -- else if (p_180614_3_.func_180495_p(p_180614_4_).func_177230_c() == this.field_77838_b && p_180614_3_.func_175623_d(p_180614_4_.func_177984_a())) -+ else if (p_180614_3_.func_180495_p(p_180614_4_).func_177230_c().canSustainPlant(p_180614_3_, p_180614_4_, EnumFacing.UP, this) && p_180614_3_.func_175623_d(p_180614_4_.func_177984_a())) - { - p_180614_3_.func_175656_a(p_180614_4_.func_177984_a(), this.field_150925_a.func_176223_P()); - --p_180614_1_.field_77994_a; -@@ -41,4 +41,16 @@ - return false; - } - } -+ -+ @Override -+ public net.minecraftforge.common.EnumPlantType getPlantType(net.minecraft.world.IBlockAccess world, BlockPos pos) -+ { -+ return this.field_150925_a == net.minecraft.init.Blocks.field_150388_bm ? net.minecraftforge.common.EnumPlantType.Nether : net.minecraftforge.common.EnumPlantType.Crop; -+ } -+ -+ @Override -+ public net.minecraft.block.state.IBlockState getPlant(net.minecraft.world.IBlockAccess world, BlockPos pos) -+ { -+ return this.field_150925_a.func_176223_P(); -+ } - } diff --git a/patches/minecraft/net/minecraft/item/ItemShears.java.patch b/patches/minecraft/net/minecraft/item/ItemShears.java.patch deleted file mode 100644 index a4053e0c8..000000000 --- a/patches/minecraft/net/minecraft/item/ItemShears.java.patch +++ /dev/null @@ -1,89 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/item/ItemShears.java -+++ ../src-work/minecraft/net/minecraft/item/ItemShears.java -@@ -21,13 +21,12 @@ - - public boolean func_179218_a(ItemStack p_179218_1_, World p_179218_2_, Block p_179218_3_, BlockPos p_179218_4_, EntityLivingBase p_179218_5_) - { -- if (p_179218_3_.func_149688_o() != Material.field_151584_j && p_179218_3_ != Blocks.field_150321_G && p_179218_3_ != Blocks.field_150329_H && p_179218_3_ != Blocks.field_150395_bd && p_179218_3_ != Blocks.field_150473_bD && p_179218_3_ != Blocks.field_150325_L) -+ if (p_179218_3_.func_149688_o() != Material.field_151584_j && p_179218_3_ != Blocks.field_150321_G && p_179218_3_ != Blocks.field_150329_H && p_179218_3_ != Blocks.field_150395_bd && p_179218_3_ != Blocks.field_150473_bD && p_179218_3_ != Blocks.field_150325_L && !(p_179218_3_ instanceof net.minecraftforge.common.IShearable)) - { - return super.func_179218_a(p_179218_1_, p_179218_2_, p_179218_3_, p_179218_4_, p_179218_5_); - } - else - { -- p_179218_1_.func_77972_a(1, p_179218_5_); - return true; - } - } -@@ -41,4 +40,71 @@ - { - return p_150893_2_ != Blocks.field_150321_G && p_150893_2_.func_149688_o() != Material.field_151584_j ? (p_150893_2_ == Blocks.field_150325_L ? 5.0F : super.func_150893_a(p_150893_1_, p_150893_2_)) : 15.0F; - } -+ -+ -+ @Override -+ public boolean func_111207_a(ItemStack itemstack, net.minecraft.entity.player.EntityPlayer player, EntityLivingBase entity) -+ { -+ if (entity.field_70170_p.field_72995_K) -+ { -+ return false; -+ } -+ if (entity instanceof net.minecraftforge.common.IShearable) -+ { -+ net.minecraftforge.common.IShearable target = (net.minecraftforge.common.IShearable)entity; -+ BlockPos pos = new BlockPos(entity.field_70165_t, entity.field_70163_u, entity.field_70161_v); -+ if (target.isShearable(itemstack, entity.field_70170_p, pos)) -+ { -+ java.util.List drops = target.onSheared(itemstack, entity.field_70170_p, pos, -+ net.minecraft.enchantment.EnchantmentHelper.func_77506_a(net.minecraft.enchantment.Enchantment.field_77346_s.field_77352_x, itemstack)); -+ -+ java.util.Random rand = new java.util.Random(); -+ for(ItemStack stack : drops) -+ { -+ net.minecraft.entity.item.EntityItem ent = entity.func_70099_a(stack, 1.0F); -+ ent.field_70181_x += rand.nextFloat() * 0.05F; -+ ent.field_70159_w += (rand.nextFloat() - rand.nextFloat()) * 0.1F; -+ ent.field_70179_y += (rand.nextFloat() - rand.nextFloat()) * 0.1F; -+ } -+ itemstack.func_77972_a(1, entity); -+ } -+ return true; -+ } -+ return false; -+ } -+ -+ @Override -+ public boolean onBlockStartBreak(ItemStack itemstack, BlockPos pos, net.minecraft.entity.player.EntityPlayer player) -+ { -+ if (player.field_70170_p.field_72995_K || player.field_71075_bZ.field_75098_d) -+ { -+ return false; -+ } -+ Block block = player.field_70170_p.func_180495_p(pos).func_177230_c(); -+ if (block instanceof net.minecraftforge.common.IShearable) -+ { -+ net.minecraftforge.common.IShearable target = (net.minecraftforge.common.IShearable)block; -+ if (target.isShearable(itemstack, player.field_70170_p, pos)) -+ { -+ java.util.List drops = target.onSheared(itemstack, player.field_70170_p, pos, -+ net.minecraft.enchantment.EnchantmentHelper.func_77506_a(net.minecraft.enchantment.Enchantment.field_77346_s.field_77352_x, itemstack)); -+ java.util.Random rand = new java.util.Random(); -+ -+ for(ItemStack stack : drops) -+ { -+ float f = 0.7F; -+ double d = (double)(rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D; -+ double d1 = (double)(rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D; -+ double d2 = (double)(rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D; -+ net.minecraft.entity.item.EntityItem entityitem = new net.minecraft.entity.item.EntityItem(player.field_70170_p, (double)pos.func_177958_n() + d, (double)pos.func_177956_o() + d1, (double)pos.func_177952_p() + d2, stack); -+ entityitem.func_174869_p(); -+ player.field_70170_p.func_72838_d(entityitem); -+ } -+ -+ itemstack.func_77972_a(1, player); -+ player.func_71064_a(net.minecraft.stats.StatList.field_75934_C[Block.func_149682_b(block)], 1); -+ } -+ } -+ return false; -+ } - } diff --git a/patches/minecraft/net/minecraft/item/ItemSign.java.patch b/patches/minecraft/net/minecraft/item/ItemSign.java.patch deleted file mode 100644 index bede8d8d9..000000000 --- a/patches/minecraft/net/minecraft/item/ItemSign.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/item/ItemSign.java -+++ ../src-work/minecraft/net/minecraft/item/ItemSign.java -@@ -63,7 +63,7 @@ - --p_180614_1_.field_77994_a; - TileEntity tileentity = p_180614_3_.func_175625_s(p_180614_4_); - -- if (tileentity instanceof TileEntitySign && !ItemBlock.func_179224_a(p_180614_3_, p_180614_4_, p_180614_1_)) -+ if (tileentity instanceof TileEntitySign && !ItemBlock.setTileEntityNBT(p_180614_3_, p_180614_4_, p_180614_1_, p_180614_2_)) - { - p_180614_2_.func_175141_a((TileEntitySign)tileentity); - } diff --git a/patches/minecraft/net/minecraft/item/ItemSkull.java.patch b/patches/minecraft/net/minecraft/item/ItemSkull.java.patch deleted file mode 100644 index 83067a198..000000000 --- a/patches/minecraft/net/minecraft/item/ItemSkull.java.patch +++ /dev/null @@ -1,31 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/item/ItemSkull.java -+++ ../src-work/minecraft/net/minecraft/item/ItemSkull.java -@@ -35,6 +35,11 @@ - - public boolean func_180614_a(ItemStack p_180614_1_, EntityPlayer p_180614_2_, World p_180614_3_, BlockPos p_180614_4_, EnumFacing p_180614_5_, float p_180614_6_, float p_180614_7_, float p_180614_8_) - { -+ if (p_180614_3_.func_180495_p(p_180614_4_).func_177230_c().func_176200_f(p_180614_3_, p_180614_4_) && p_180614_5_ != EnumFacing.DOWN) -+ { -+ p_180614_5_ = EnumFacing.UP; -+ p_180614_4_ = p_180614_4_.func_177977_b(); -+ } - if (p_180614_5_ == EnumFacing.DOWN) - { - return false; -@@ -47,7 +52,7 @@ - - if (!flag) - { -- if (!p_180614_3_.func_180495_p(p_180614_4_).func_177230_c().func_149688_o().func_76220_a()) -+ if (!p_180614_3_.func_180495_p(p_180614_4_).func_177230_c().func_149688_o().func_76220_a() && !p_180614_3_.isSideSolid(p_180614_4_, p_180614_5_, true)) - { - return false; - } -@@ -67,6 +72,7 @@ - { - if (!p_180614_3_.field_72995_K) - { -+ if (!Blocks.field_150465_bP.func_176198_a(p_180614_3_, p_180614_4_, p_180614_5_)) return false; - p_180614_3_.func_180501_a(p_180614_4_, Blocks.field_150465_bP.func_176223_P().func_177226_a(BlockSkull.field_176418_a, p_180614_5_), 3); - int i = 0; - diff --git a/patches/minecraft/net/minecraft/item/ItemSnow.java.patch b/patches/minecraft/net/minecraft/item/ItemSnow.java.patch deleted file mode 100644 index 15b264e65..000000000 --- a/patches/minecraft/net/minecraft/item/ItemSnow.java.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/item/ItemSnow.java -+++ ../src-work/minecraft/net/minecraft/item/ItemSnow.java -@@ -66,4 +66,10 @@ - { - return p_77647_1_; - } -+ -+ public boolean func_179222_a(World world, BlockPos pos, EnumFacing side, EntityPlayer player, ItemStack stack) -+ { -+ IBlockState state = world.func_180495_p(pos); -+ return (state.func_177230_c() != net.minecraft.init.Blocks.field_150431_aC || ((Integer)state.func_177229_b(BlockSnow.field_176315_a)) > 7) ? super.func_179222_a(world, pos, side, player, stack) : true; -+ } - } diff --git a/patches/minecraft/net/minecraft/item/ItemStack.java.patch b/patches/minecraft/net/minecraft/item/ItemStack.java.patch deleted file mode 100644 index 6a62baf61..000000000 --- a/patches/minecraft/net/minecraft/item/ItemStack.java.patch +++ /dev/null @@ -1,149 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/item/ItemStack.java -+++ ../src-work/minecraft/net/minecraft/item/ItemStack.java -@@ -52,6 +52,7 @@ - private boolean field_179551_k; - private static final String __OBFID = "CL_00000043"; - -+ private net.minecraftforge.fml.common.registry.RegistryDelegate delegate; - public ItemStack(Block p_i1876_1_) - { - this(p_i1876_1_, 1); -@@ -83,7 +84,7 @@ - this.field_179553_i = false; - this.field_179550_j = null; - this.field_179551_k = false; -- this.field_151002_e = p_i1881_1_; -+ this.func_150996_a(p_i1881_1_); - this.field_77994_a = p_i1881_2_; - this.field_77991_e = p_i1881_3_; - -@@ -123,11 +124,12 @@ - - public Item func_77973_b() - { -- return this.field_151002_e; -+ return this.delegate != null ? this.delegate.get() : null; - } - - public boolean func_179546_a(EntityPlayer p_179546_1_, World p_179546_2_, BlockPos p_179546_3_, EnumFacing p_179546_4_, float p_179546_5_, float p_179546_6_, float p_179546_7_) - { -+ if (!p_179546_2_.field_72995_K) return net.minecraftforge.common.ForgeHooks.onPlaceItemIntoWorld(this, p_179546_1_, p_179546_2_, p_179546_3_, p_179546_4_, p_179546_5_, p_179546_6_, p_179546_7_); - boolean flag = this.func_77973_b().func_180614_a(this, p_179546_1_, p_179546_2_, p_179546_3_, p_179546_4_, p_179546_5_, p_179546_6_, p_179546_7_); - - if (flag) -@@ -172,11 +174,11 @@ - { - if (p_77963_1_.func_150297_b("id", 8)) - { -- this.field_151002_e = Item.func_111206_d(p_77963_1_.func_74779_i("id")); -+ this.func_150996_a(Item.func_111206_d(p_77963_1_.func_74779_i("id"))); - } - else - { -- this.field_151002_e = Item.func_150899_d(p_77963_1_.func_74765_d("id")); -+ this.func_150996_a(Item.func_150899_d(p_77963_1_.func_74765_d("id"))); - } - - this.field_77994_a = p_77963_1_.func_74771_c("Count"); -@@ -200,7 +202,7 @@ - - public int func_77976_d() - { -- return this.func_77973_b().func_77639_j(); -+ return this.func_77973_b().getItemStackLimit(this); - } - - public boolean func_77985_e() -@@ -210,7 +212,7 @@ - - public boolean func_77984_f() - { -- return this.field_151002_e == null ? false : (this.field_151002_e.func_77612_l() <= 0 ? false : !this.func_77942_o() || !this.func_77978_p().func_74767_n("Unbreakable")); -+ return this.field_151002_e == null ? false : (this.field_151002_e.getMaxDamage(this) <= 0 ? false : !this.func_77942_o() || !this.func_77978_p().func_74767_n("Unbreakable")); - } - - public boolean func_77981_g() -@@ -220,32 +222,27 @@ - - public boolean func_77951_h() - { -- return this.func_77984_f() && this.field_77991_e > 0; -+ return this.func_77984_f() && func_77973_b().isDamaged(this); - } - - public int func_77952_i() - { -- return this.field_77991_e; -+ return func_77973_b().getDamage(this); - } - - public int func_77960_j() - { -- return this.field_77991_e; -+ return func_77973_b().getMetadata(this); - } - - public void func_77964_b(int p_77964_1_) - { -- this.field_77991_e = p_77964_1_; -- -- if (this.field_77991_e < 0) -- { -- this.field_77991_e = 0; -- } -+ func_77973_b().setDamage(this, p_77964_1_); - } - - public int func_77958_k() - { -- return this.field_151002_e.func_77612_l(); -+ return this.field_151002_e.getMaxDamage(this); - } - - public boolean func_96631_a(int p_96631_1_, Random p_96631_2_) -@@ -277,8 +274,8 @@ - } - } - -- this.field_77991_e += p_96631_1_; -- return this.field_77991_e > this.func_77958_k(); -+ func_77964_b(func_77952_i() + p_96631_1_); //Redirect through Item's callback if applicable. -+ return func_77952_i() > func_77958_k(); - } - } - -@@ -337,7 +334,7 @@ - - public boolean func_150998_b(Block p_150998_1_) - { -- return this.field_151002_e.func_150897_b(p_150998_1_); -+ return func_77973_b().canHarvestBlock(p_150998_1_, this); - } - - public boolean func_111282_a(EntityPlayer p_111282_1_, EntityLivingBase p_111282_2_) -@@ -752,6 +749,8 @@ - } - } - -+ net.minecraftforge.event.ForgeEventFactory.onItemTooltip(this, p_82840_1_, arraylist, p_82840_2_); -+ - return arraylist; - } - -@@ -862,7 +861,7 @@ - } - else - { -- object = this.func_77973_b().func_111205_h(); -+ object = this.func_77973_b().getAttributeModifiers(this); - } - - return (Multimap)object; -@@ -870,6 +869,7 @@ - - public void func_150996_a(Item p_150996_1_) - { -+ this.delegate = p_150996_1_ != null ? p_150996_1_.delegate : null; - this.field_151002_e = p_150996_1_; - } - diff --git a/patches/minecraft/net/minecraft/item/ItemSword.java.patch b/patches/minecraft/net/minecraft/item/ItemSword.java.patch deleted file mode 100644 index b89d19f90..000000000 --- a/patches/minecraft/net/minecraft/item/ItemSword.java.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/item/ItemSword.java -+++ ../src-work/minecraft/net/minecraft/item/ItemSword.java -@@ -102,7 +102,9 @@ - - public boolean func_82789_a(ItemStack p_82789_1_, ItemStack p_82789_2_) - { -- return this.field_150933_b.func_150995_f() == p_82789_2_.func_77973_b() ? true : super.func_82789_a(p_82789_1_, p_82789_2_); -+ ItemStack mat = this.field_150933_b.getRepairItemStack(); -+ if (mat != null && net.minecraftforge.oredict.OreDictionary.itemMatches(mat, p_82789_2_, false)) return true; -+ return super.func_82789_a(p_82789_1_, p_82789_2_); - } - - public Multimap func_111205_h() diff --git a/patches/minecraft/net/minecraft/item/crafting/FurnaceRecipes.java.patch b/patches/minecraft/net/minecraft/item/crafting/FurnaceRecipes.java.patch deleted file mode 100644 index e717399ed..000000000 --- a/patches/minecraft/net/minecraft/item/crafting/FurnaceRecipes.java.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/item/crafting/FurnaceRecipes.java -+++ ../src-work/minecraft/net/minecraft/item/crafting/FurnaceRecipes.java -@@ -78,6 +78,7 @@ - - public void func_151394_a(ItemStack p_151394_1_, ItemStack p_151394_2_, float p_151394_3_) - { -+ if (func_151395_a(p_151394_1_) != null) { net.minecraftforge.fml.common.FMLLog.info("Ignored smelting recipe with conflicting input: " + p_151394_1_ + " = " + p_151394_2_); return; } - this.field_77604_b.put(p_151394_1_, p_151394_2_); - this.field_77605_c.put(p_151394_2_, Float.valueOf(p_151394_3_)); - } -@@ -113,6 +114,9 @@ - - public float func_151398_b(ItemStack p_151398_1_) - { -+ float ret = p_151398_1_.func_77973_b().getSmeltingExperience(p_151398_1_); -+ if (ret != -1) return ret; -+ - Iterator iterator = this.field_77605_c.entrySet().iterator(); - Entry entry; - diff --git a/patches/minecraft/net/minecraft/item/crafting/RecipeRepairItem.java.patch b/patches/minecraft/net/minecraft/item/crafting/RecipeRepairItem.java.patch deleted file mode 100644 index e45703adc..000000000 --- a/patches/minecraft/net/minecraft/item/crafting/RecipeRepairItem.java.patch +++ /dev/null @@ -1,42 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/item/crafting/RecipeRepairItem.java -+++ ../src-work/minecraft/net/minecraft/item/crafting/RecipeRepairItem.java -@@ -27,7 +27,7 @@ - { - ItemStack itemstack1 = (ItemStack)arraylist.get(0); - -- if (itemstack.func_77973_b() != itemstack1.func_77973_b() || itemstack1.field_77994_a != 1 || itemstack.field_77994_a != 1 || !itemstack1.func_77973_b().func_77645_m()) -+ if (itemstack.func_77973_b() != itemstack1.func_77973_b() || itemstack1.field_77994_a != 1 || itemstack.field_77994_a != 1 || !itemstack1.func_77973_b().isRepairable()) - { - return false; - } -@@ -55,7 +55,7 @@ - { - ItemStack itemstack1 = (ItemStack)arraylist.get(0); - -- if (itemstack.func_77973_b() != itemstack1.func_77973_b() || itemstack1.field_77994_a != 1 || itemstack.field_77994_a != 1 || !itemstack1.func_77973_b().func_77645_m()) -+ if (itemstack.func_77973_b() != itemstack1.func_77973_b() || itemstack1.field_77994_a != 1 || itemstack.field_77994_a != 1 || !itemstack1.func_77973_b().isRepairable()) - { - return null; - } -@@ -68,7 +68,7 @@ - ItemStack itemstack2 = (ItemStack)arraylist.get(0); - itemstack = (ItemStack)arraylist.get(1); - -- if (itemstack2.func_77973_b() == itemstack.func_77973_b() && itemstack2.field_77994_a == 1 && itemstack.field_77994_a == 1 && itemstack2.func_77973_b().func_77645_m()) -+ if (itemstack2.func_77973_b() == itemstack.func_77973_b() && itemstack2.field_77994_a == 1 && itemstack.field_77994_a == 1 && itemstack2.func_77973_b().isRepairable()) - { - Item item = itemstack2.func_77973_b(); - int j = item.func_77612_l() - itemstack2.func_77952_i(); -@@ -105,11 +105,7 @@ - for (int i = 0; i < aitemstack.length; ++i) - { - ItemStack itemstack = p_179532_1_.func_70301_a(i); -- -- if (itemstack != null && itemstack.func_77973_b().func_77634_r()) -- { -- aitemstack[i] = new ItemStack(itemstack.func_77973_b().func_77668_q()); -- } -+ aitemstack[i] = net.minecraftforge.common.ForgeHooks.getContainerItem(itemstack); - } - - return aitemstack; diff --git a/patches/minecraft/net/minecraft/nbt/NBTTagByteArray.java.patch b/patches/minecraft/net/minecraft/nbt/NBTTagByteArray.java.patch deleted file mode 100644 index ead6ffc34..000000000 --- a/patches/minecraft/net/minecraft/nbt/NBTTagByteArray.java.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/nbt/NBTTagByteArray.java -+++ ../src-work/minecraft/net/minecraft/nbt/NBTTagByteArray.java -@@ -25,6 +25,7 @@ - - void func_152446_a(DataInput p_152446_1_, int p_152446_2_, NBTSizeTracker p_152446_3_) throws IOException - { -+ p_152446_3_.func_152450_a(32); //Forge: Count the length as well - int j = p_152446_1_.readInt(); - p_152446_3_.func_152450_a((long)(8 * j)); - this.field_74754_a = new byte[j]; diff --git a/patches/minecraft/net/minecraft/nbt/NBTTagCompound.java.patch b/patches/minecraft/net/minecraft/nbt/NBTTagCompound.java.patch deleted file mode 100644 index 236610d98..000000000 --- a/patches/minecraft/net/minecraft/nbt/NBTTagCompound.java.patch +++ /dev/null @@ -1,27 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/nbt/NBTTagCompound.java -+++ ../src-work/minecraft/net/minecraft/nbt/NBTTagCompound.java -@@ -48,7 +48,7 @@ - while ((b0 = func_152447_a(p_152446_1_, p_152446_3_)) != 0) - { - String s = func_152448_b(p_152446_1_, p_152446_3_); -- p_152446_3_.func_152450_a((long)(16 * s.length())); -+ NBTSizeTracker.readUTF(p_152446_3_, s); // Forge: Correctly read String length including header. - NBTBase nbtbase = func_152449_a(b0, s, p_152446_1_, p_152446_2_ + 1, p_152446_3_); - this.field_74784_a.put(s, nbtbase); - } -@@ -396,6 +396,7 @@ - - private static byte func_152447_a(DataInput p_152447_0_, NBTSizeTracker p_152447_1_) throws IOException - { -+ p_152447_1_.func_152450_a(8); - return p_152447_0_.readByte(); - } - -@@ -406,6 +407,7 @@ - - static NBTBase func_152449_a(byte p_152449_0_, String p_152449_1_, DataInput p_152449_2_, int p_152449_3_, NBTSizeTracker p_152449_4_) - { -+ p_152449_4_.func_152450_a(32); //Forge: 4 extra bytes for the object allocation. - NBTBase nbtbase = NBTBase.func_150284_a(p_152449_0_); - - try diff --git a/patches/minecraft/net/minecraft/nbt/NBTTagIntArray.java.patch b/patches/minecraft/net/minecraft/nbt/NBTTagIntArray.java.patch deleted file mode 100644 index 40a4b4cb7..000000000 --- a/patches/minecraft/net/minecraft/nbt/NBTTagIntArray.java.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/nbt/NBTTagIntArray.java -+++ ../src-work/minecraft/net/minecraft/nbt/NBTTagIntArray.java -@@ -29,6 +29,7 @@ - - void func_152446_a(DataInput p_152446_1_, int p_152446_2_, NBTSizeTracker p_152446_3_) throws IOException - { -+ p_152446_3_.func_152450_a(32); //Forge: Count the length as well - int j = p_152446_1_.readInt(); - p_152446_3_.func_152450_a((long)(32 * j)); - this.field_74749_a = new int[j]; diff --git a/patches/minecraft/net/minecraft/nbt/NBTTagList.java.patch b/patches/minecraft/net/minecraft/nbt/NBTTagList.java.patch deleted file mode 100644 index 1cafa5e36..000000000 --- a/patches/minecraft/net/minecraft/nbt/NBTTagList.java.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/nbt/NBTTagList.java -+++ ../src-work/minecraft/net/minecraft/nbt/NBTTagList.java -@@ -46,11 +46,13 @@ - { - p_152446_3_.func_152450_a(8L); - this.field_74746_b = p_152446_1_.readByte(); -+ p_152446_3_.func_152450_a(32); //Forge: Count the length as well - int j = p_152446_1_.readInt(); - this.field_74747_a = Lists.newArrayList(); - - for (int k = 0; k < j; ++k) - { -+ p_152446_3_.func_152450_a(32); //Forge: 4 extra bytes for the object allocation. - NBTBase nbtbase = NBTBase.func_150284_a(this.field_74746_b); - nbtbase.func_152446_a(p_152446_1_, p_152446_2_ + 1, p_152446_3_); - this.field_74747_a.add(nbtbase); diff --git a/patches/minecraft/net/minecraft/nbt/NBTTagString.java.patch b/patches/minecraft/net/minecraft/nbt/NBTTagString.java.patch deleted file mode 100644 index 56efede98..000000000 --- a/patches/minecraft/net/minecraft/nbt/NBTTagString.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/nbt/NBTTagString.java -+++ ../src-work/minecraft/net/minecraft/nbt/NBTTagString.java -@@ -32,7 +32,7 @@ - void func_152446_a(DataInput p_152446_1_, int p_152446_2_, NBTSizeTracker p_152446_3_) throws IOException - { - this.field_74751_a = p_152446_1_.readUTF(); -- p_152446_3_.func_152450_a((long)(16 * this.field_74751_a.length())); -+ NBTSizeTracker.readUTF(p_152446_3_, field_74751_a); // Forge: Correctly read String length including header. - } - - public byte func_74732_a() diff --git a/patches/minecraft/net/minecraft/network/NetHandlerPlayServer.java.patch b/patches/minecraft/net/minecraft/network/NetHandlerPlayServer.java.patch deleted file mode 100644 index da6530665..000000000 --- a/patches/minecraft/net/minecraft/network/NetHandlerPlayServer.java.patch +++ /dev/null @@ -1,166 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/network/NetHandlerPlayServer.java -+++ ../src-work/minecraft/net/minecraft/network/NetHandlerPlayServer.java -@@ -93,6 +93,14 @@ - import org.apache.logging.log4j.LogManager; - import org.apache.logging.log4j.Logger; - -+import net.minecraftforge.common.ForgeHooks; -+import net.minecraftforge.common.MinecraftForge; -+import net.minecraftforge.fml.common.eventhandler.Event; -+import net.minecraftforge.event.ForgeEventFactory; -+import net.minecraftforge.event.ServerChatEvent; -+import net.minecraftforge.event.entity.player.PlayerInteractEvent; -+import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action; -+ - public class NetHandlerPlayServer implements INetHandlerPlayServer, IUpdatePlayerListBox - { - private static final Logger field_147370_c = LogManager.getLogger(); -@@ -246,6 +254,8 @@ - this.field_147369_b.field_70154_o.func_70043_V(); - } - -+ if (!this.field_147380_r) return; //Fixes teleportation kick while riding entities -+ - this.field_147367_d.func_71203_ab().func_72358_d(this.field_147369_b); - - if (this.field_147369_b.field_70154_o != null) -@@ -324,9 +334,10 @@ - double d11 = d8 - this.field_147369_b.field_70165_t; - double d12 = d9 - this.field_147369_b.field_70163_u; - double d13 = d10 - this.field_147369_b.field_70161_v; -- double d14 = Math.min(Math.abs(d11), Math.abs(this.field_147369_b.field_70159_w)); -- double d15 = Math.min(Math.abs(d12), Math.abs(this.field_147369_b.field_70181_x)); -- double d16 = Math.min(Math.abs(d13), Math.abs(this.field_147369_b.field_70179_y)); -+ //BUGFIX: min -> max, grabs the highest distance -+ double d14 = Math.max(Math.abs(d11), Math.abs(this.field_147369_b.field_70159_w)); -+ double d15 = Math.max(Math.abs(d12), Math.abs(this.field_147369_b.field_70181_x)); -+ double d16 = Math.max(Math.abs(d13), Math.abs(this.field_147369_b.field_70179_y)); - double d17 = d14 * d14 + d15 * d15 + d16 * d16; - - if (d17 > 100.0D && (!this.field_147367_d.func_71264_H() || !this.field_147367_d.func_71214_G().equals(this.field_147369_b.func_70005_c_()))) -@@ -344,6 +355,8 @@ - this.field_147369_b.func_70664_aZ(); - } - -+ if (!this.field_147380_r) return; //Fixes "Moved Too Fast" kick when being teleported while moving -+ - this.field_147369_b.func_70091_d(d11, d12, d13); - this.field_147369_b.field_70122_E = p_147347_1_.func_149465_i(); - double d18 = d12; -@@ -365,6 +378,8 @@ - field_147370_c.warn(this.field_147369_b.func_70005_c_() + " moved wrongly!"); - } - -+ if (!this.field_147380_r) return; //Fixes "Moved Too Fast" kick when being teleported while moving -+ - this.field_147369_b.func_70080_a(d8, d9, d10, f1, f2); - this.field_147369_b.func_71000_j(this.field_147369_b.field_70165_t - d0, this.field_147369_b.field_70163_u - d1, this.field_147369_b.field_70161_v - d2); - -@@ -372,7 +387,7 @@ - { - boolean flag2 = worldserver.func_72945_a(this.field_147369_b, this.field_147369_b.func_174813_aQ().func_72331_e((double)f3, (double)f3, (double)f3)).isEmpty(); - -- if (flag && (flag1 || !flag2) && !this.field_147369_b.func_70608_bn()) -+ if (flag && (flag1 || !flag2) && !this.field_147369_b.func_70608_bn() && !this.field_147369_b.field_70145_X) - { - this.func_147364_a(this.field_147373_o, this.field_147382_p, this.field_147381_q, f1, f2); - return; -@@ -400,6 +415,8 @@ - this.field_147365_f = 0; - } - -+ if (!this.field_147380_r) return; //Fixes "Moved Too Fast" kick when being teleported while moving -+ - this.field_147369_b.field_70122_E = p_147347_1_.func_149465_i(); - this.field_147367_d.func_71203_ab().func_72358_d(this.field_147369_b); - this.field_147369_b.func_71122_b(this.field_147369_b.field_70163_u - d7, p_147347_1_.func_149465_i()); -@@ -489,7 +506,10 @@ - double d2 = this.field_147369_b.field_70161_v - ((double)blockpos.func_177952_p() + 0.5D); - double d3 = d0 * d0 + d1 * d1 + d2 * d2; - -- if (d3 > 36.0D) -+ double dist = field_147369_b.field_71134_c.getBlockReachDistance() + 1; -+ dist *= dist; -+ -+ if (d3 > dist) - { - return; - } -@@ -540,6 +560,7 @@ - WorldServer worldserver = this.field_147367_d.func_71218_a(this.field_147369_b.field_71093_bK); - ItemStack itemstack = this.field_147369_b.field_71071_by.func_70448_g(); - boolean flag = false; -+ boolean placeResult = true; - BlockPos blockpos = p_147346_1_.func_179724_a(); - EnumFacing enumfacing = EnumFacing.func_82600_a(p_147346_1_.func_149568_f()); - this.field_147369_b.func_143004_u(); -@@ -551,7 +572,11 @@ - return; - } - -+ PlayerInteractEvent event = ForgeEventFactory.onPlayerInteract(field_147369_b, PlayerInteractEvent.Action.RIGHT_CLICK_AIR, worldserver, new BlockPos(0, 0, 0), null); -+ if (event.useItem != Event.Result.DENY) -+ { - this.field_147369_b.field_71134_c.func_73085_a(this.field_147369_b, worldserver, itemstack); -+ } - } - else if (blockpos.func_177956_o() >= this.field_147367_d.func_71207_Z() - 1 && (enumfacing == EnumFacing.UP || blockpos.func_177956_o() >= this.field_147367_d.func_71207_Z())) - { -@@ -562,9 +587,12 @@ - } - else - { -- if (this.field_147380_r && this.field_147369_b.func_70092_e((double)blockpos.func_177958_n() + 0.5D, (double)blockpos.func_177956_o() + 0.5D, (double)blockpos.func_177952_p() + 0.5D) < 64.0D && !this.field_147367_d.func_175579_a(worldserver, blockpos, this.field_147369_b) && worldserver.func_175723_af().func_177746_a(blockpos)) -+ double dist = field_147369_b.field_71134_c.getBlockReachDistance() + 1; -+ dist *= dist; -+ if (this.field_147380_r && this.field_147369_b.func_70092_e((double)blockpos.func_177958_n() + 0.5D, (double)blockpos.func_177956_o() + 0.5D, (double)blockpos.func_177952_p() + 0.5D) < dist && !this.field_147367_d.func_175579_a(worldserver, blockpos, this.field_147369_b) && worldserver.func_175723_af().func_177746_a(blockpos)) - { -- this.field_147369_b.field_71134_c.func_180236_a(this.field_147369_b, worldserver, itemstack, blockpos, enumfacing, p_147346_1_.func_149573_h(), p_147346_1_.func_149569_i(), p_147346_1_.func_149575_j()); -+ // record block place result so we can update client itemstack size if place event was cancelled. -+ placeResult = this.field_147369_b.field_71134_c.func_180236_a(this.field_147369_b, worldserver, itemstack, blockpos, enumfacing, p_147346_1_.func_149573_h(), p_147346_1_.func_149569_i(), p_147346_1_.func_149575_j()); - } - - flag = true; -@@ -592,7 +620,7 @@ - this.field_147369_b.field_71070_bA.func_75142_b(); - this.field_147369_b.field_71137_h = false; - -- if (!ItemStack.func_77989_b(this.field_147369_b.field_71071_by.func_70448_g(), p_147346_1_.func_149574_g())) -+ if (!ItemStack.func_77989_b(this.field_147369_b.field_71071_by.func_70448_g(), p_147346_1_.func_149574_g()) || !placeResult) // force client itemstack update if place event was cancelled - { - this.func_147359_a(new S2FPacketSetSlot(this.field_147369_b.field_71070_bA.field_75152_c, slot.field_75222_d, this.field_147369_b.field_71071_by.func_70448_g())); - } -@@ -764,8 +792,10 @@ - } - else - { -- ChatComponentTranslation chatcomponenttranslation1 = new ChatComponentTranslation("chat.type.text", new Object[] {this.field_147369_b.func_145748_c_(), s}); -- this.field_147367_d.func_71203_ab().func_148544_a(chatcomponenttranslation1, false); -+ ChatComponentTranslation chatcomponenttranslation1 = new ChatComponentTranslation("chat.type.text", this.field_147369_b.func_145748_c_(), ForgeHooks.newChatWithLinks(s)); -+ IChatComponent chat = ForgeHooks.onServerChatEvent(this, s, chatcomponenttranslation1); -+ if (chat == null) return; -+ this.field_147367_d.func_71203_ab().func_148544_a(chat, false); - } - - this.field_147374_l += 20; -@@ -907,7 +937,7 @@ - return; - } - -- this.field_147369_b = this.field_147367_d.func_71203_ab().func_72368_a(this.field_147369_b, 0, false); -+ this.field_147369_b = this.field_147367_d.func_71203_ab().func_72368_a(this.field_147369_b, field_147369_b.field_71093_bK, false); - } - - break; -@@ -1080,7 +1110,10 @@ - return; - } - -- System.arraycopy(p_147343_1_.func_180768_b(), 0, tileentitysign.field_145915_a, 0, 4); -+ IChatComponent[] lines = p_147343_1_.func_180768_b(); //Forge: Prevent client from directly sending commands -+ for (int x = 0; x < tileentitysign.field_145915_a.length && x < lines.length; x++) -+ tileentitysign.field_145915_a[x] = new ChatComponentText(net.minecraft.util.EnumChatFormatting.func_110646_a(lines[x].func_150260_c())); -+ - tileentitysign.func_70296_d(); - worldserver.func_175689_h(blockpos); - } diff --git a/patches/minecraft/net/minecraft/network/handshake/client/C00Handshake.java.patch b/patches/minecraft/net/minecraft/network/handshake/client/C00Handshake.java.patch deleted file mode 100644 index 2e990c3ad..000000000 --- a/patches/minecraft/net/minecraft/network/handshake/client/C00Handshake.java.patch +++ /dev/null @@ -1,48 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/network/handshake/client/C00Handshake.java -+++ ../src-work/minecraft/net/minecraft/network/handshake/client/C00Handshake.java -@@ -16,6 +16,7 @@ - private int field_149599_c; - private EnumConnectionState field_149597_d; - private static final String __OBFID = "CL_00001372"; -+ private boolean hasFMLMarker = false; - - public C00Handshake() {} - -@@ -28,18 +29,26 @@ - this.field_149597_d = p_i45266_4_; - } - -+ public C00Handshake(int protocol, String address, int port, EnumConnectionState state, boolean addFMLMarker) -+ { -+ this(protocol, address, port, state); -+ this.hasFMLMarker = addFMLMarker; -+ } -+ - public void func_148837_a(PacketBuffer p_148837_1_) throws IOException - { - this.field_149600_a = p_148837_1_.func_150792_a(); - this.field_149598_b = p_148837_1_.func_150789_c(255); - this.field_149599_c = p_148837_1_.readUnsignedShort(); - this.field_149597_d = EnumConnectionState.func_150760_a(p_148837_1_.func_150792_a()); -+ this.hasFMLMarker = this.field_149598_b.contains("\0FML\0"); -+ this.field_149598_b = this.field_149598_b.split("\0")[0]; - } - - public void func_148840_b(PacketBuffer p_148840_1_) throws IOException - { - p_148840_1_.func_150787_b(this.field_149600_a); -- p_148840_1_.func_180714_a(this.field_149598_b); -+ p_148840_1_.func_180714_a(this.field_149598_b + "\0FML\0"); - p_148840_1_.writeShort(this.field_149599_c); - p_148840_1_.func_150787_b(this.field_149597_d.func_150759_c()); - } -@@ -63,4 +72,9 @@ - { - this.func_180770_a((INetHandlerHandshakeServer)p_148833_1_); - } -+ -+ public boolean hasFMLMarker() -+ { -+ return this.hasFMLMarker; -+ } - } diff --git a/patches/minecraft/net/minecraft/network/play/client/C17PacketCustomPayload.java.patch b/patches/minecraft/net/minecraft/network/play/client/C17PacketCustomPayload.java.patch deleted file mode 100644 index 1345ee125..000000000 --- a/patches/minecraft/net/minecraft/network/play/client/C17PacketCustomPayload.java.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/network/play/client/C17PacketCustomPayload.java -+++ ../src-work/minecraft/net/minecraft/network/play/client/C17PacketCustomPayload.java -@@ -47,7 +47,11 @@ - public void func_148840_b(PacketBuffer p_148840_1_) throws IOException - { - p_148840_1_.func_180714_a(this.field_149562_a); -+ synchronized(this.field_149561_c) { //This may be access multiple times, from multiple threads, lets be safe. -+ this.field_149561_c.markReaderIndex(); - p_148840_1_.writeBytes((ByteBuf)this.field_149561_c); -+ this.field_149561_c.resetReaderIndex(); -+ } - } - - public void func_148833_a(INetHandlerPlayServer p_148833_1_) diff --git a/patches/minecraft/net/minecraft/network/play/server/S3FPacketCustomPayload.java.patch b/patches/minecraft/net/minecraft/network/play/server/S3FPacketCustomPayload.java.patch deleted file mode 100644 index ae048b6b5..000000000 --- a/patches/minecraft/net/minecraft/network/play/server/S3FPacketCustomPayload.java.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/network/play/server/S3FPacketCustomPayload.java -+++ ../src-work/minecraft/net/minecraft/network/play/server/S3FPacketCustomPayload.java -@@ -46,7 +46,11 @@ - public void func_148840_b(PacketBuffer p_148840_1_) throws IOException - { - p_148840_1_.func_180714_a(this.field_149172_a); -+ synchronized(this.field_149171_b) { //This may be access multiple times, from multiple threads, lets be safe. -+ this.field_149171_b.markReaderIndex(); - p_148840_1_.writeBytes((ByteBuf)this.field_149171_b); -+ this.field_149171_b.resetReaderIndex(); -+ } - } - - public void func_180734_a(INetHandlerPlayClient p_180734_1_) diff --git a/patches/minecraft/net/minecraft/network/status/server/S00PacketServerInfo.java.patch b/patches/minecraft/net/minecraft/network/status/server/S00PacketServerInfo.java.patch deleted file mode 100644 index ffc613efe..000000000 --- a/patches/minecraft/net/minecraft/network/status/server/S00PacketServerInfo.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/network/status/server/S00PacketServerInfo.java -+++ ../src-work/minecraft/net/minecraft/network/status/server/S00PacketServerInfo.java -@@ -34,7 +34,7 @@ - - public void func_148840_b(PacketBuffer p_148840_1_) throws IOException - { -- p_148840_1_.func_180714_a(field_149297_a.toJson(this.field_149296_b)); -+ p_148840_1_.func_180714_a(this.field_149296_b.getJson()); - } - - public void func_148833_a(INetHandlerStatusClient p_148833_1_) diff --git a/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch b/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch deleted file mode 100644 index f75083699..000000000 --- a/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch +++ /dev/null @@ -1,306 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/server/MinecraftServer.java -+++ ../src-work/minecraft/net/minecraft/server/MinecraftServer.java -@@ -99,7 +99,7 @@ - @SideOnly(Side.SERVER) - private String field_71320_r; - private int field_71319_s = -1; -- public WorldServer[] field_71305_c; -+ public WorldServer[] field_71305_c = new WorldServer[0]; - private ServerConfigurationManager field_71318_t; - private boolean field_71317_u = true; - private boolean field_71316_v; -@@ -116,7 +116,8 @@ - private int field_71280_D; - private int field_143008_E = 0; - public final long[] field_71311_j = new long[100]; -- public long[][] field_71312_k; -+ //public long[][] timeOfLastDimensionTick; -+ public java.util.Hashtable worldTickTimes = new java.util.Hashtable(); - private KeyPair field_71292_I; - private String field_71293_J; - private String field_71294_K; -@@ -222,8 +223,6 @@ - { - this.func_71237_c(p_71247_1_); - this.func_71192_d("menu.loadingLevel"); -- this.field_71305_c = new WorldServer[3]; -- this.field_71312_k = new long[this.field_71305_c.length][100]; - ISaveHandler isavehandler = this.field_71310_m.func_75804_a(p_71247_1_, true); - this.func_175584_a(this.func_71270_I(), isavehandler); - WorldInfo worldinfo = isavehandler.func_75757_d(); -@@ -254,47 +253,21 @@ - worldsettings = new WorldSettings(worldinfo); - } - -- for (int j = 0; j < this.field_71305_c.length; ++j) -+ WorldServer overWorld = (WorldServer)(func_71242_L() ? new DemoWorldServer(this, isavehandler, worldinfo, 0, field_71304_b).func_175643_b() : new WorldServer(this, isavehandler, worldinfo, 0, field_71304_b).func_175643_b()); -+ overWorld.func_72963_a(worldsettings); -+ for (int dim : net.minecraftforge.common.DimensionManager.getStaticDimensionIDs()) - { -- byte b0 = 0; -+ WorldServer world = (dim == 0 ? overWorld : (WorldServer)new WorldServerMulti(this, isavehandler, dim, overWorld, field_71304_b).func_175643_b()); -+ world.func_72954_a(new WorldManager(this, world)); - -- if (j == 1) -- { -- b0 = -1; -- } -- -- if (j == 2) -- { -- b0 = 1; -- } -- -- if (j == 0) -- { -- if (this.func_71242_L()) -- { -- this.field_71305_c[j] = (WorldServer)(new DemoWorldServer(this, isavehandler, worldinfo, b0, this.field_71304_b)).func_175643_b(); -- } -- else -- { -- this.field_71305_c[j] = (WorldServer)(new WorldServer(this, isavehandler, worldinfo, b0, this.field_71304_b)).func_175643_b(); -- } -- -- this.field_71305_c[j].func_72963_a(worldsettings); -- } -- else -- { -- this.field_71305_c[j] = (WorldServer)(new WorldServerMulti(this, isavehandler, b0, this.field_71305_c[0], this.field_71304_b)).func_175643_b(); -- } -- -- this.field_71305_c[j].func_72954_a(new WorldManager(this, this.field_71305_c[j])); -- - if (!this.func_71264_H()) - { -- this.field_71305_c[j].func_72912_H().func_76060_a(this.func_71265_f()); -+ world.func_72912_H().func_76060_a(this.func_71265_f()); - } -+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.WorldEvent.Load(world)); - } - -- this.field_71318_t.func_72364_a(this.field_71305_c); -+ this.field_71318_t.func_72364_a(new WorldServer[]{ overWorld }); - this.func_147139_a(this.func_147135_j()); - this.func_71222_d(); - } -@@ -309,7 +282,7 @@ - this.func_71192_d("menu.generatingTerrain"); - byte b0 = 0; - field_147145_h.info("Preparing start region for level " + b0); -- WorldServer worldserver = this.field_71305_c[b0]; -+ WorldServer worldserver = net.minecraftforge.common.DimensionManager.getWorld(b0); - BlockPos blockpos = worldserver.func_175694_M(); - long j = func_130071_aq(); - -@@ -371,6 +344,7 @@ - if (!this.field_71290_O) - { - WorldServer[] aworldserver = this.field_71305_c; -+ if (aworldserver == null) return; //Forge: Just in case, NPE protection as it has been encountered. - int i = aworldserver.length; - - for (int j = 0; j < i; ++j) -@@ -399,7 +373,7 @@ - - public void func_71260_j() - { -- if (!this.field_71290_O) -+ if (!this.field_71290_O && net.minecraftforge.fml.common.Loader.instance().hasReachedState(net.minecraftforge.fml.common.LoaderState.SERVER_STARTED) && !field_71316_v) // make sure the save is valid and we don't save twice - { - field_147145_h.info("Stopping server"); - -@@ -423,8 +397,15 @@ - for (int i = 0; i < this.field_71305_c.length; ++i) - { - WorldServer worldserver = this.field_71305_c[i]; -+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.WorldEvent.Unload(worldserver)); - worldserver.func_73041_k(); - } -+ -+ WorldServer[] tmp = field_71305_c; -+ for (WorldServer world : tmp) -+ { -+ net.minecraftforge.common.DimensionManager.setWorld(world.field_73011_w.func_177502_q(), null); -+ } - } - - if (this.field_71307_n.func_76468_d()) -@@ -456,6 +437,7 @@ - { - if (this.func_71197_b()) - { -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerStarted(); - this.field_175591_ab = func_130071_aq(); - long i = 0L; - this.field_147147_p.func_151315_a(new ChatComponentText(this.field_71286_C)); -@@ -500,12 +482,20 @@ - Thread.sleep(Math.max(1L, 50L - i)); - this.field_71296_Q = true; - } -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerStopping(); -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().expectServerStopped(); // has to come before finalTick to avoid race conditions - } - else - { -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().expectServerStopped(); // has to come before finalTick to avoid race conditions - this.func_71228_a((CrashReport)null); - } - } -+ catch (net.minecraftforge.fml.common.StartupQuery.AbortedException e) -+ { -+ // ignore silently -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().expectServerStopped(); // has to come before finalTick to avoid race conditions -+ } - catch (Throwable throwable1) - { - field_147145_h.error("Encountered an unexpected exception", throwable1); -@@ -531,6 +521,7 @@ - field_147145_h.error("We were unable to save this crash report to disk."); - } - -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().expectServerStopped(); // has to come before finalTick to avoid race conditions - this.func_71228_a(crashreport); - } - finally -@@ -546,6 +537,8 @@ - } - finally - { -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerStopped(); -+ this.field_71316_v = true; - this.func_71240_o(); - } - } -@@ -591,6 +584,7 @@ - public void func_71217_p() - { - long i = System.nanoTime(); -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().onPreServerTick(); - ++this.field_71315_w; - - if (this.field_71295_T) -@@ -617,6 +611,7 @@ - - Collections.shuffle(Arrays.asList(agameprofile)); - this.field_147147_p.func_151318_b().func_151330_a(agameprofile); -+ this.field_147147_p.invalidateJson(); - } - - if (this.field_71315_w % 900 == 0) -@@ -644,6 +639,7 @@ - - this.field_71304_b.func_76319_b(); - this.field_71304_b.func_76319_b(); -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().onPostServerTick(); - } - - public void func_71190_q() -@@ -657,7 +653,7 @@ - { - try - { -- ((FutureTask)this.field_175589_i.poll()).run(); -+ net.minecraftforge.fml.common.FMLCommonHandler.callFuture(((FutureTask)this.field_175589_i.poll())); - } - catch (Throwable throwable2) - { -@@ -667,15 +663,18 @@ - } - - this.field_71304_b.func_76318_c("levels"); -+ net.minecraftforge.common.chunkio.ChunkIOExecutor.tick(); - int j; - -- for (j = 0; j < this.field_71305_c.length; ++j) -+ Integer[] ids = net.minecraftforge.common.DimensionManager.getIDs(this.field_71315_w % 200 == 0); -+ for (int x = 0; x < ids.length; x++) - { -+ int id = ids[x]; - long i = System.nanoTime(); - -- if (j == 0 || this.func_71255_r()) -+ if (id == 0 || this.func_71255_r()) - { -- WorldServer worldserver = this.field_71305_c[j]; -+ WorldServer worldserver = net.minecraftforge.common.DimensionManager.getWorld(id); - this.field_71304_b.func_76320_a(worldserver.func_72912_H().func_76065_j()); - - if (this.field_71315_w % 20 == 0) -@@ -686,6 +685,7 @@ - } - - this.field_71304_b.func_76320_a("tick"); -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().onPreWorldTick(worldserver); - CrashReport crashreport; - - try -@@ -710,6 +710,7 @@ - throw new ReportedException(crashreport); - } - -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().onPostWorldTick(worldserver); - this.field_71304_b.func_76319_b(); - this.field_71304_b.func_76320_a("tracker"); - worldserver.func_73039_n().func_72788_a(); -@@ -717,9 +718,11 @@ - this.field_71304_b.func_76319_b(); - } - -- this.field_71312_k[j][this.field_71315_w % 100] = System.nanoTime() - i; -+ worldTickTimes.get(id)[this.field_71315_w % 100] = System.nanoTime() - i; - } - -+ this.field_71304_b.func_76318_c("dim_unloading"); -+ net.minecraftforge.common.DimensionManager.unloadWorlds(worldTickTimes); - this.field_71304_b.func_76318_c("connection"); - this.func_147137_ag().func_151269_c(); - this.field_71304_b.func_76318_c("players"); -@@ -741,6 +744,7 @@ - - public void func_71256_s() - { -+ net.minecraftforge.fml.common.StartupQuery.reset(); - this.field_175590_aa = new Thread(this, "Server thread"); - this.field_175590_aa.start(); - } -@@ -757,7 +761,13 @@ - - public WorldServer func_71218_a(int p_71218_1_) - { -- return p_71218_1_ == -1 ? this.field_71305_c[1] : (p_71218_1_ == 1 ? this.field_71305_c[2] : this.field_71305_c[0]); -+ WorldServer ret = net.minecraftforge.common.DimensionManager.getWorld(p_71218_1_); -+ if (ret == null) -+ { -+ net.minecraftforge.common.DimensionManager.initDimension(p_71218_1_); -+ ret = net.minecraftforge.common.DimensionManager.getWorld(p_71218_1_); -+ } -+ return ret; - } - - public String func_71249_w() -@@ -787,7 +797,7 @@ - - public String getServerModName() - { -- return "vanilla"; -+ return net.minecraftforge.fml.common.FMLCommonHandler.instance().getModName(); - } - - public CrashReport func_71230_b(CrashReport p_71230_1_) -@@ -1008,6 +1018,7 @@ - - if (worldserver != null) - { -+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.WorldEvent.Unload(worldserver)); - worldserver.func_73041_k(); - } - } -@@ -1590,7 +1601,6 @@ - this.field_71319_s = p_71208_1_; - } - -- @SideOnly(Side.SERVER) - public boolean func_71241_aa() - { - return this.field_71316_v; diff --git a/patches/minecraft/net/minecraft/server/integrated/IntegratedServer.java.patch b/patches/minecraft/net/minecraft/server/integrated/IntegratedServer.java.patch deleted file mode 100644 index aeee11c96..000000000 --- a/patches/minecraft/net/minecraft/server/integrated/IntegratedServer.java.patch +++ /dev/null @@ -1,97 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/server/integrated/IntegratedServer.java -+++ ../src-work/minecraft/net/minecraft/server/integrated/IntegratedServer.java -@@ -74,8 +74,6 @@ - protected void func_71247_a(String p_71247_1_, String p_71247_2_, long p_71247_3_, WorldType p_71247_5_, String p_71247_6_) - { - this.func_71237_c(p_71247_1_); -- this.field_71305_c = new WorldServer[3]; -- this.field_71312_k = new long[this.field_71305_c.length][100]; - ISaveHandler isavehandler = this.func_71254_M().func_75804_a(p_71247_1_, true); - this.func_175584_a(this.func_71270_I(), isavehandler); - WorldInfo worldinfo = isavehandler.func_75757_d(); -@@ -88,45 +86,25 @@ - { - worldinfo.func_76062_a(p_71247_2_); - } -+ WorldServer overWorld = (func_71242_L() ? (WorldServer)(new DemoWorldServer(this, isavehandler, worldinfo, 0, this.field_71304_b)).func_175643_b() : -+ (WorldServer)(new WorldServer(this, isavehandler, worldinfo, 0, this.field_71304_b)).func_175643_b()); -+ overWorld.func_72963_a(this.field_71350_m); - -- for (int j = 0; j < this.field_71305_c.length; ++j) -+ for (int dim : net.minecraftforge.common.DimensionManager.getStaticDimensionIDs()) - { -- byte b0 = 0; - -- if (j == 1) -+ WorldServer world = (dim == 0 ? overWorld : (WorldServer)(new WorldServerMulti(this, isavehandler, dim, overWorld, this.field_71304_b)).func_175643_b()); -+ world.func_72954_a(new WorldManager(this, world)); -+ if (!this.func_71264_H()) - { -- b0 = -1; -+ world.func_72912_H().func_76060_a(func_71265_f()); - } -- -- if (j == 2) -- { -- b0 = 1; -- } -- -- if (j == 0) -- { -- if (this.func_71242_L()) -- { -- this.field_71305_c[j] = (WorldServer)(new DemoWorldServer(this, isavehandler, worldinfo, b0, this.field_71304_b)).func_175643_b(); -- } -- else -- { -- this.field_71305_c[j] = (WorldServer)(new WorldServer(this, isavehandler, worldinfo, b0, this.field_71304_b)).func_175643_b(); -- } -- -- this.field_71305_c[j].func_72963_a(this.field_71350_m); -- } -- else -- { -- this.field_71305_c[j] = (WorldServer)(new WorldServerMulti(this, isavehandler, b0, this.field_71305_c[0], this.field_71304_b)).func_175643_b(); -- } -- -- this.field_71305_c[j].func_72954_a(new WorldManager(this, this.field_71305_c[j])); -+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.WorldEvent.Load(world)); - } - -- this.func_71203_ab().func_72364_a(this.field_71305_c); -+ this.func_71203_ab().func_72364_a(new WorldServer[]{ overWorld }); - -- if (this.field_71305_c[0].func_72912_H().func_176130_y() == null) -+ if (overWorld.func_72912_H().func_176130_y() == null) - { - this.func_147139_a(this.field_71349_l.field_71474_y.field_74318_M); - } -@@ -144,9 +122,10 @@ - this.func_71245_h(true); - field_147148_h.info("Generating keypair"); - this.func_71253_a(CryptManager.func_75891_b()); -+ if (!net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerAboutToStart(this)) return false; - this.func_71247_a(this.func_71270_I(), this.func_71221_J(), this.field_71350_m.func_77160_d(), this.field_71350_m.func_77165_h(), this.field_71350_m.func_82749_j()); - this.func_71205_p(this.func_71214_G() + " - " + this.field_71305_c[0].func_72912_H().func_76065_j()); -- return true; -+ return net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerStarting(this); - } - - public void func_71217_p() -@@ -171,7 +150,7 @@ - { - try - { -- ((FutureTask)this.field_175589_i.poll()).run(); -+ net.minecraftforge.fml.common.FMLCommonHandler.callFuture(((FutureTask)this.field_175589_i.poll())); - } - catch (Throwable throwable) - { -@@ -232,6 +211,7 @@ - - public EnumDifficulty func_147135_j() - { -+ if (this.field_71349_l.field_71441_e == null) return this.field_71349_l.field_71474_y.field_74318_M; // Fix NPE just in case. - return this.field_71349_l.field_71441_e.func_72912_H().func_176130_y(); - } - diff --git a/patches/minecraft/net/minecraft/server/management/ItemInWorldManager.java.patch b/patches/minecraft/net/minecraft/server/management/ItemInWorldManager.java.patch deleted file mode 100644 index 2700fc458..000000000 --- a/patches/minecraft/net/minecraft/server/management/ItemInWorldManager.java.patch +++ /dev/null @@ -1,257 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/server/management/ItemInWorldManager.java -+++ ../src-work/minecraft/net/minecraft/server/management/ItemInWorldManager.java -@@ -22,6 +22,8 @@ - - public class ItemInWorldManager - { -+ /** Forge reach distance */ -+ private double blockReachDistance = 5.0d; - public World field_73092_a; - public EntityPlayerMP field_73090_b; - private WorldSettings.GameType field_73091_c; -@@ -137,6 +139,14 @@ - - public void func_180784_a(BlockPos p_180784_1_, EnumFacing p_180784_2_) - { -+ net.minecraftforge.event.entity.player.PlayerInteractEvent event = net.minecraftforge.event.ForgeEventFactory.onPlayerInteract(field_73090_b, -+ net.minecraftforge.event.entity.player.PlayerInteractEvent.Action.LEFT_CLICK_BLOCK, field_73092_a, p_180784_1_, p_180784_2_); -+ if (event.isCanceled()) -+ { -+ field_73090_b.field_71135_a.func_147359_a(new S23PacketBlockChange(field_73092_a, p_180784_1_)); -+ return; -+ } -+ - if (this.func_73083_d()) - { - if (!this.field_73092_a.func_175719_a((EntityPlayer)null, p_180784_1_, p_180784_2_)) -@@ -171,18 +181,35 @@ - } - } - -- this.field_73092_a.func_175719_a((EntityPlayer)null, p_180784_1_, p_180784_2_); -+ // - this.field_73089_e = this.field_73100_i; - float f = 1.0F; - -- if (block.func_149688_o() != Material.field_151579_a) -+ if (!block.isAir(field_73092_a, p_180784_1_)) - { -- block.func_180649_a(this.field_73092_a, p_180784_1_, this.field_73090_b); -+ if (event.useBlock != net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) -+ { -+ block.func_180649_a(this.field_73092_a, p_180784_1_, this.field_73090_b); -+ this.field_73092_a.func_175719_a((EntityPlayer)null, p_180784_1_, p_180784_2_); -+ } -+ else -+ { -+ field_73090_b.field_71135_a.func_147359_a(new S23PacketBlockChange(field_73092_a, p_180784_1_)); -+ } - f = block.func_180647_a(this.field_73090_b, this.field_73090_b.field_70170_p, p_180784_1_); - } - -- if (block.func_149688_o() != Material.field_151579_a && f >= 1.0F) -+ if (event.useItem == net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) - { -+ if (f >= 1.0F) -+ { -+ field_73090_b.field_71135_a.func_147359_a(new S23PacketBlockChange(field_73092_a, p_180784_1_)); -+ } -+ return; -+ } -+ -+ if (!block.isAir(field_73092_a, p_180784_1_) && f >= 1.0F) -+ { - this.func_180237_b(p_180784_1_); - } - else -@@ -203,7 +230,7 @@ - int i = this.field_73100_i - this.field_73089_e; - Block block = this.field_73092_a.func_180495_p(p_180785_1_).func_177230_c(); - -- if (block.func_149688_o() != Material.field_151579_a) -+ if (!block.isAir(field_73092_a, p_180785_1_)) - { - float f = block.func_180647_a(this.field_73090_b, this.field_73090_b.field_70170_p, p_180785_1_) * (float)(i + 1); - -@@ -232,9 +259,13 @@ - - private boolean func_180235_c(BlockPos p_180235_1_) - { -+ return removeBlock(p_180235_1_, false); -+ } -+ private boolean removeBlock(BlockPos p_180235_1_, boolean canHarvest) -+ { - IBlockState iblockstate = this.field_73092_a.func_180495_p(p_180235_1_); - iblockstate.func_177230_c().func_176208_a(this.field_73092_a, p_180235_1_, iblockstate, this.field_73090_b); -- boolean flag = this.field_73092_a.func_175698_g(p_180235_1_); -+ boolean flag = iblockstate.func_177230_c().removedByPlayer(field_73092_a, p_180235_1_, field_73090_b, canHarvest); - - if (flag) - { -@@ -246,7 +277,8 @@ - - public boolean func_180237_b(BlockPos p_180237_1_) - { -- if (this.field_73091_c.func_77145_d() && this.field_73090_b.func_70694_bm() != null && this.field_73090_b.func_70694_bm().func_77973_b() instanceof ItemSword) -+ int exp = net.minecraftforge.common.ForgeHooks.onBlockBreakEvent(field_73092_a, field_73091_c, field_73090_b, p_180237_1_); -+ if (exp == -1) - { - return false; - } -@@ -255,40 +287,21 @@ - IBlockState iblockstate = this.field_73092_a.func_180495_p(p_180237_1_); - TileEntity tileentity = this.field_73092_a.func_175625_s(p_180237_1_); - -- if (this.field_73091_c.func_82752_c()) -- { -- if (this.field_73091_c == WorldSettings.GameType.SPECTATOR) -- { -- return false; -- } -+ ItemStack stack = field_73090_b.func_71045_bC(); -+ if (stack != null && stack.func_77973_b().onBlockStartBreak(stack, p_180237_1_, field_73090_b)) return false; - -- if (!this.field_73090_b.func_175142_cm()) -- { -- ItemStack itemstack = this.field_73090_b.func_71045_bC(); -- -- if (itemstack == null) -- { -- return false; -- } -- -- if (!itemstack.func_179544_c(iblockstate.func_177230_c())) -- { -- return false; -- } -- } -- } -- - this.field_73092_a.func_180498_a(this.field_73090_b, 2001, p_180237_1_, Block.func_176210_f(iblockstate)); -- boolean flag1 = this.func_180235_c(p_180237_1_); -+ boolean flag1 = false; - - if (this.func_73083_d()) - { -+ flag1 = this.func_180235_c(p_180237_1_); - this.field_73090_b.field_71135_a.func_147359_a(new S23PacketBlockChange(this.field_73092_a, p_180237_1_)); - } - else - { - ItemStack itemstack1 = this.field_73090_b.func_71045_bC(); -- boolean flag = this.field_73090_b.func_146099_a(iblockstate.func_177230_c()); -+ boolean flag = iblockstate.func_177230_c().canHarvestBlock(field_73092_a, p_180237_1_, field_73090_b); - - if (itemstack1 != null) - { -@@ -300,12 +313,18 @@ - } - } - -+ flag1 = this.removeBlock(p_180237_1_, flag); - if (flag1 && flag) - { - iblockstate.func_177230_c().func_180657_a(this.field_73092_a, this.field_73090_b, p_180237_1_, iblockstate, tileentity); - } - } - -+ // Drop experiance -+ if (!this.func_73083_d() && flag1 && exp > 0) -+ { -+ iblockstate.func_177230_c().func_180637_b(field_73092_a, p_180237_1_, exp); -+ } - return flag1; - } - } -@@ -343,6 +362,7 @@ - if (itemstack1.field_77994_a == 0) - { - p_73085_1_.field_71071_by.field_70462_a[p_73085_1_.field_71071_by.field_70461_c] = null; -+ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(p_73085_1_, itemstack1); - } - - if (!p_73085_1_.func_71039_bw()) -@@ -387,33 +407,51 @@ - } - else - { -- if (!p_180236_1_.func_70093_af() || p_180236_1_.func_70694_bm() == null) -+ net.minecraftforge.event.entity.player.PlayerInteractEvent event = net.minecraftforge.event.ForgeEventFactory.onPlayerInteract(p_180236_1_, -+ net.minecraftforge.event.entity.player.PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK, p_180236_2_, p_180236_4_, p_180236_5_); -+ if (event.isCanceled()) - { -- IBlockState iblockstate = p_180236_2_.func_180495_p(p_180236_4_); -- -- if (iblockstate.func_177230_c().func_180639_a(p_180236_2_, p_180236_4_, iblockstate, p_180236_1_, p_180236_5_, p_180236_6_, p_180236_7_, p_180236_8_)) -- { -- return true; -- } -+ field_73090_b.field_71135_a.func_147359_a(new S23PacketBlockChange(field_73092_a, p_180236_4_)); -+ return false; - } - -- if (p_180236_3_ == null) -+ if (p_180236_3_ != null && p_180236_3_.func_77973_b().onItemUseFirst(p_180236_3_, p_180236_1_, p_180236_2_, p_180236_4_, p_180236_5_, p_180236_6_, p_180236_7_, p_180236_8_)) - { -- return false; -+ if (p_180236_3_.field_77994_a <= 0) net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(field_73090_b, p_180236_3_); -+ return true; - } -- else if (this.func_73083_d()) -+ -+ IBlockState iblockstate = p_180236_2_.func_180495_p(p_180236_4_); -+ boolean isAir = p_180236_2_.func_175623_d(p_180236_4_); -+ boolean useBlock = !p_180236_1_.func_70093_af() || p_180236_1_.func_70694_bm() == null; -+ if (!useBlock) useBlock = p_180236_1_.func_70694_bm().func_77973_b().doesSneakBypassUse(p_180236_2_, p_180236_4_, p_180236_1_); -+ boolean result = false; -+ -+ if (useBlock) - { -- int j = p_180236_3_.func_77960_j(); -- int i = p_180236_3_.field_77994_a; -- boolean flag = p_180236_3_.func_179546_a(p_180236_1_, p_180236_2_, p_180236_4_, p_180236_5_, p_180236_6_, p_180236_7_, p_180236_8_); -- p_180236_3_.func_77964_b(j); -- p_180236_3_.field_77994_a = i; -- return flag; -+ if (event.useBlock != net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) -+ { -+ result = iblockstate.func_177230_c().func_180639_a(p_180236_2_, p_180236_4_, iblockstate, p_180236_1_, p_180236_5_, p_180236_6_, p_180236_7_, p_180236_8_); -+ } -+ else -+ { -+ field_73090_b.field_71135_a.func_147359_a(new S23PacketBlockChange(field_73092_a, p_180236_4_)); -+ result = event.useItem != net.minecraftforge.fml.common.eventhandler.Event.Result.ALLOW; -+ } - } -- else -+ if (p_180236_3_ != null && !result && event.useItem != net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) - { -- return p_180236_3_.func_179546_a(p_180236_1_, p_180236_2_, p_180236_4_, p_180236_5_, p_180236_6_, p_180236_7_, p_180236_8_); -+ int meta = p_180236_3_.func_77960_j(); -+ int size = p_180236_3_.field_77994_a; -+ result = p_180236_3_.func_179546_a(p_180236_1_, p_180236_2_, p_180236_4_, p_180236_5_, p_180236_6_, p_180236_7_, p_180236_8_); -+ if (func_73083_d()) -+ { -+ p_180236_3_.func_77964_b(meta); -+ p_180236_3_.field_77994_a = size; -+ } -+ if (p_180236_3_.field_77994_a <= 0) net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(field_73090_b, p_180236_3_); - } -+ return result; - } - } - -@@ -421,4 +459,13 @@ - { - this.field_73092_a = p_73080_1_; - } -+ -+ public double getBlockReachDistance() -+ { -+ return blockReachDistance; -+ } -+ public void setBlockReachDistance(double distance) -+ { -+ blockReachDistance = distance; -+ } - } diff --git a/patches/minecraft/net/minecraft/server/management/PlayerManager.java.patch b/patches/minecraft/net/minecraft/server/management/PlayerManager.java.patch deleted file mode 100644 index ac63a05cb..000000000 --- a/patches/minecraft/net/minecraft/server/management/PlayerManager.java.patch +++ /dev/null @@ -1,224 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/server/management/PlayerManager.java -+++ ../src-work/minecraft/net/minecraft/server/management/PlayerManager.java -@@ -122,15 +122,24 @@ - int j = (int)p_72683_1_.field_70161_v >> 4; - p_72683_1_.field_71131_d = p_72683_1_.field_70165_t; - p_72683_1_.field_71132_e = p_72683_1_.field_70161_v; -+ // Load nearby chunks first -+ List chunkList = new ArrayList(); - - for (int k = i - this.field_72698_e; k <= i + this.field_72698_e; ++k) - { - for (int l = j - this.field_72698_e; l <= j + this.field_72698_e; ++l) - { -- this.func_72690_a(k, l, true).func_73255_a(p_72683_1_); -+ chunkList.add(new ChunkCoordIntPair(k, l)); - } - } - -+ java.util.Collections.sort(chunkList, new net.minecraftforge.common.util.ChunkCoordComparator(p_72683_1_)); -+ -+ for (ChunkCoordIntPair pair : chunkList) -+ { -+ this.func_72690_a(pair.field_77276_a, pair.field_77275_b, true).func_73255_a(p_72683_1_); -+ } -+ - this.field_72699_b.add(p_72683_1_); - this.func_72691_b(p_72683_1_); - } -@@ -232,6 +241,7 @@ - int i1 = this.field_72698_e; - int j1 = i - k; - int k1 = j - l; -+ List chunksToLoad = new ArrayList(); - - if (j1 != 0 || k1 != 0) - { -@@ -241,7 +251,7 @@ - { - if (!this.func_72684_a(l1, i2, k, l, i1)) - { -- this.func_72690_a(l1, i2, true).func_73255_a(p_72685_1_); -+ chunksToLoad.add(new ChunkCoordIntPair(l1, i2)); - } - - if (!this.func_72684_a(l1 - j1, i2 - k1, i, j, i1)) -@@ -259,6 +269,18 @@ - this.func_72691_b(p_72685_1_); - p_72685_1_.field_71131_d = p_72685_1_.field_70165_t; - p_72685_1_.field_71132_e = p_72685_1_.field_70161_v; -+ // send nearest chunks first -+ java.util.Collections.sort(chunksToLoad, new net.minecraftforge.common.util.ChunkCoordComparator(p_72685_1_)); -+ -+ for (ChunkCoordIntPair pair : chunksToLoad) -+ { -+ this.func_72690_a(pair.field_77276_a, pair.field_77275_b, true).func_73255_a(p_72685_1_); -+ } -+ -+ if (i1 > 1 || i1 < -1 || j1 > 1 || j1 < -1) -+ { -+ java.util.Collections.sort(p_72685_1_.field_71129_f, new net.minecraftforge.common.util.ChunkCoordComparator(p_72685_1_)); -+ } - } - } - } -@@ -334,12 +356,21 @@ - private int field_73262_e; - private int field_73260_f; - private long field_111198_g; -+ private final java.util.HashMap players = new java.util.HashMap(); -+ private boolean loaded = false; -+ private Runnable loadedRunnable = new Runnable() -+ { -+ public void run() -+ { -+ PlayerInstance.this.loaded = true; -+ } -+ }; - private static final String __OBFID = "CL_00001435"; - - public PlayerInstance(int p_i1518_2_, int p_i1518_3_) - { - this.field_73264_c = new ChunkCoordIntPair(p_i1518_2_, p_i1518_3_); -- PlayerManager.this.func_72688_a().field_73059_b.func_73158_c(p_i1518_2_, p_i1518_3_); -+ PlayerManager.this.func_72688_a().field_73059_b.loadChunk(p_i1518_2_, p_i1518_3_, this.loadedRunnable); - } - - public void func_73255_a(EntityPlayerMP p_73255_1_) -@@ -356,7 +387,24 @@ - } - - this.field_73263_b.add(p_73255_1_); -+ Runnable playerRunnable = null; -+ if (this.loaded) -+ { - p_73255_1_.field_71129_f.add(this.field_73264_c); -+ } -+ else -+ { -+ final EntityPlayerMP tmp = p_73255_1_; -+ playerRunnable = new Runnable() -+ { -+ public void run() -+ { -+ tmp.field_71129_f.add(PlayerInstance.this.field_73264_c); -+ } -+ }; -+ PlayerManager.this.func_72688_a().field_73059_b.loadChunk(this.field_73264_c.field_77276_a, this.field_73264_c.field_77275_b, playerRunnable); -+ } -+ this.players.put(p_73255_1_, playerRunnable); - } - } - -@@ -364,6 +412,24 @@ - { - if (this.field_73263_b.contains(p_73252_1_)) - { -+ // If we haven't loaded yet don't load the chunk just so we can clean it up -+ if (!this.loaded) -+ { -+ net.minecraftforge.common.chunkio.ChunkIOExecutor.dropQueuedChunkLoad(PlayerManager.this.func_72688_a(), this.field_73264_c.field_77276_a, this.field_73264_c.field_77275_b, this.players.get(p_73252_1_)); -+ this.field_73263_b.remove(p_73252_1_); -+ this.players.remove(p_73252_1_); -+ -+ if (this.field_73263_b.isEmpty()) -+ { -+ net.minecraftforge.common.chunkio.ChunkIOExecutor.dropQueuedChunkLoad(PlayerManager.this.func_72688_a(), this.field_73264_c.field_77276_a, this.field_73264_c.field_77275_b, this.loadedRunnable); -+ long i = (long) this.field_73264_c.field_77276_a + 2147483647L | (long) this.field_73264_c.field_77275_b + 2147483647L << 32; -+ PlayerManager.this.field_72700_c.func_76159_d(i); -+ PlayerManager.this.field_111193_e.remove(this); -+ } -+ -+ return; -+ } -+ - Chunk chunk = PlayerManager.this.field_72701_a.func_72964_e(this.field_73264_c.field_77276_a, this.field_73264_c.field_77275_b); - - if (chunk.func_150802_k()) -@@ -371,9 +437,12 @@ - p_73252_1_.field_71135_a.func_147359_a(new S21PacketChunkData(chunk, true, 0)); - } - -+ this.players.remove(p_73252_1_); - this.field_73263_b.remove(p_73252_1_); - p_73252_1_.field_71129_f.remove(this.field_73264_c); - -+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.ChunkWatchEvent.UnWatch(field_73264_c, p_73252_1_)); -+ - if (this.field_73263_b.isEmpty()) - { - long i = (long)this.field_73264_c.field_77276_a + 2147483647L | (long)this.field_73264_c.field_77275_b + 2147483647L << 32; -@@ -411,7 +480,7 @@ - - this.field_73260_f |= 1 << (p_151253_2_ >> 4); - -- if (this.field_73262_e < 64) -+ //Forge; Cache everything, so always run - { - short short1 = (short)(p_151253_1_ << 12 | p_151253_3_ << 8 | p_151253_2_); - -@@ -423,6 +492,10 @@ - } - } - -+ if (field_73262_e == field_151254_d.length) -+ { -+ field_151254_d = java.util.Arrays.copyOf(field_151254_d, field_151254_d.length << 1); -+ } - this.field_151254_d[this.field_73262_e++] = short1; - } - } -@@ -440,6 +513,7 @@ - } - } - -+ @SuppressWarnings("unused") - public void func_73254_a() - { - if (this.field_73262_e != 0) -@@ -456,7 +530,7 @@ - BlockPos blockpos = new BlockPos(i, j, k); - this.func_151251_a(new S23PacketBlockChange(PlayerManager.this.field_72701_a, blockpos)); - -- if (PlayerManager.this.field_72701_a.func_180495_p(blockpos).func_177230_c().func_149716_u()) -+ if (PlayerManager.this.field_72701_a.func_180495_p(blockpos).func_177230_c().hasTileEntity(PlayerManager.this.field_72701_a.func_180495_p(blockpos))) - { - this.func_151252_a(PlayerManager.this.field_72701_a.func_175625_s(blockpos)); - } -@@ -465,13 +539,14 @@ - { - int i1; - -- if (this.field_73262_e == 64) -+ if (this.field_73262_e >= net.minecraftforge.common.ForgeModContainer.clumpingThreshold) - { - i = this.field_73264_c.field_77276_a * 16; - j = this.field_73264_c.field_77275_b * 16; - this.func_151251_a(new S21PacketChunkData(PlayerManager.this.field_72701_a.func_72964_e(this.field_73264_c.field_77276_a, this.field_73264_c.field_77275_b), false, this.field_73260_f)); - -- for (k = 0; k < 16; ++k) -+ // Forge: Grabs ALL tile entities is costly on a modded server, only send needed ones -+ for (k = 0; false && k < 16; ++k) - { - if ((this.field_73260_f & 1 << k) != 0) - { -@@ -488,7 +563,10 @@ - else - { - this.func_151251_a(new S22PacketMultiBlockChange(this.field_73262_e, this.field_151254_d, PlayerManager.this.field_72701_a.func_72964_e(this.field_73264_c.field_77276_a, this.field_73264_c.field_77275_b))); -+ } - -+ { //Forge: Send only the tile entities that are updated, Adding this brace lets us keep the indent and the patch small -+ WorldServer world = PlayerManager.this.field_72701_a; - for (i = 0; i < this.field_73262_e; ++i) - { - j = (this.field_151254_d[i] >> 12 & 15) + this.field_73264_c.field_77276_a * 16; -@@ -496,7 +574,7 @@ - i1 = (this.field_151254_d[i] >> 8 & 15) + this.field_73264_c.field_77275_b * 16; - BlockPos blockpos1 = new BlockPos(j, k, i1); - -- if (PlayerManager.this.field_72701_a.func_180495_p(blockpos1).func_177230_c().func_149716_u()) -+ if (world.func_180495_p(blockpos1).func_177230_c().hasTileEntity(world.func_180495_p(blockpos1))) - { - this.func_151252_a(PlayerManager.this.field_72701_a.func_175625_s(blockpos1)); - } diff --git a/patches/minecraft/net/minecraft/server/management/ServerConfigurationManager.java.patch b/patches/minecraft/net/minecraft/server/management/ServerConfigurationManager.java.patch deleted file mode 100644 index 25704f821..000000000 --- a/patches/minecraft/net/minecraft/server/management/ServerConfigurationManager.java.patch +++ /dev/null @@ -1,223 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/server/management/ServerConfigurationManager.java -+++ ../src-work/minecraft/net/minecraft/server/management/ServerConfigurationManager.java -@@ -103,7 +103,7 @@ - this.field_72405_c = 8; - } - -- public void func_72355_a(NetworkManager p_72355_1_, EntityPlayerMP p_72355_2_) -+ public void func_72355_a(NetworkManager p_72355_1_, EntityPlayerMP p_72355_2_, NetHandlerPlayServer nethandlerplayserver) - { - GameProfile gameprofile = p_72355_2_.func_146103_bH(); - PlayerProfileCache playerprofilecache = this.field_72400_f.func_152358_ax(); -@@ -112,6 +112,17 @@ - playerprofilecache.func_152649_a(gameprofile); - NBTTagCompound nbttagcompound = this.func_72380_a(p_72355_2_); - p_72355_2_.func_70029_a(this.field_72400_f.func_71218_a(p_72355_2_.field_71093_bK)); -+ -+ World playerWorld = this.field_72400_f.func_71218_a(p_72355_2_.field_71093_bK); -+ if (playerWorld == null) -+ { -+ p_72355_2_.field_71093_bK=0; -+ playerWorld=this.field_72400_f.func_71218_a(0); -+ BlockPos spawnPoint = playerWorld.field_73011_w.getRandomizedSpawnPoint(); -+ p_72355_2_.func_70107_b(spawnPoint.func_177958_n(), spawnPoint.func_177956_o(), spawnPoint.func_177952_p()); -+ } -+ -+ p_72355_2_.func_70029_a(playerWorld); - p_72355_2_.field_71134_c.func_73080_a((WorldServer)p_72355_2_.field_70170_p); - String s1 = "local"; - -@@ -125,7 +136,7 @@ - WorldInfo worldinfo = worldserver.func_72912_H(); - BlockPos blockpos = worldserver.func_175694_M(); - this.func_72381_a(p_72355_2_, (EntityPlayerMP)null, worldserver); -- NetHandlerPlayServer nethandlerplayserver = new NetHandlerPlayServer(this.field_72400_f, p_72355_1_, p_72355_2_); -+ p_72355_2_.field_71135_a = nethandlerplayserver; - nethandlerplayserver.func_147359_a(new S01PacketJoinGame(p_72355_2_.func_145782_y(), p_72355_2_.field_71134_c.func_73081_b(), worldinfo.func_76093_s(), worldserver.field_73011_w.func_177502_q(), worldserver.func_175659_aa(), this.func_72352_l(), worldinfo.func_76067_t(), worldserver.func_82736_K().func_82766_b("reducedDebugInfo"))); - nethandlerplayserver.func_147359_a(new S3FPacketCustomPayload("MC|Brand", (new PacketBuffer(Unpooled.buffer())).func_180714_a(this.func_72365_p().getServerModName()))); - nethandlerplayserver.func_147359_a(new S41PacketServerDifficulty(worldinfo.func_176130_y(), worldinfo.func_176123_z())); -@@ -168,6 +179,7 @@ - - p_72355_2_.func_71116_b(); - -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerLoggedIn(p_72355_2_); - if (nbttagcompound != null && nbttagcompound.func_150297_b("Riding", 10)) - { - Entity entity = EntityList.func_75615_a(nbttagcompound.func_74775_l("Riding"), worldserver); -@@ -272,6 +284,7 @@ - p_72380_1_.func_70020_e(nbttagcompound); - nbttagcompound1 = nbttagcompound; - field_148546_d.debug("loading single player"); -+ net.minecraftforge.event.ForgeEventFactory.firePlayerLoadingEvent(p_72380_1_, this.field_72412_k, p_72380_1_.func_110124_au().toString()); - } - else - { -@@ -281,8 +294,23 @@ - return nbttagcompound1; - } - -+ public NBTTagCompound getPlayerNBT(EntityPlayerMP player) -+ { -+ // Hacky method to allow loading the NBT for a player prior to login -+ NBTTagCompound nbttagcompound = this.field_72400_f.field_71305_c[0].func_72912_H().func_76072_h(); -+ if (player.func_70005_c_().equals(this.field_72400_f.func_71214_G()) && nbttagcompound != null) -+ { -+ return nbttagcompound; -+ } -+ else -+ { -+ return ((net.minecraft.world.storage.SaveHandler)this.field_72412_k).getPlayerNBT(player); -+ } -+ } - protected void func_72391_b(EntityPlayerMP p_72391_1_) - { -+ if (p_72391_1_.field_71135_a == null) return; -+ - this.field_72412_k.func_75753_a(p_72391_1_); - StatisticsFile statisticsfile = (StatisticsFile)this.field_148547_k.get(p_72391_1_.func_110124_au()); - -@@ -298,6 +326,7 @@ - this.field_177454_f.put(p_72377_1_.func_110124_au(), p_72377_1_); - this.func_148540_a(new S38PacketPlayerListItem(S38PacketPlayerListItem.Action.ADD_PLAYER, new EntityPlayerMP[] {p_72377_1_})); - WorldServer worldserver = this.field_72400_f.func_71218_a(p_72377_1_.field_71093_bK); -+ net.minecraftforge.common.chunkio.ChunkIOExecutor.adjustPoolSize(this.func_72394_k()); - worldserver.func_72838_d(p_72377_1_); - this.func_72375_a(p_72377_1_, (WorldServer)null); - -@@ -315,6 +344,7 @@ - - public void func_72367_e(EntityPlayerMP p_72367_1_) - { -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerLoggedOut(p_72367_1_); - p_72367_1_.func_71029_a(StatList.field_75947_j); - this.func_72391_b(p_72367_1_); - WorldServer worldserver = p_72367_1_.func_71121_q(); -@@ -330,6 +360,7 @@ - this.field_72404_b.remove(p_72367_1_); - this.field_177454_f.remove(p_72367_1_.func_110124_au()); - this.field_148547_k.remove(p_72367_1_.func_110124_au()); -+ net.minecraftforge.common.chunkio.ChunkIOExecutor.adjustPoolSize(this.func_72394_k()); - this.func_148540_a(new S38PacketPlayerListItem(S38PacketPlayerListItem.Action.REMOVE_PLAYER, new EntityPlayerMP[] {p_72367_1_})); - } - -@@ -411,13 +442,23 @@ - - public EntityPlayerMP func_72368_a(EntityPlayerMP p_72368_1_, int p_72368_2_, boolean p_72368_3_) - { -+ World world = field_72400_f.func_71218_a(p_72368_2_); -+ if (world == null) -+ { -+ p_72368_2_ = 0; -+ } -+ else if (!world.field_73011_w.func_76567_e()) -+ { -+ p_72368_2_ = world.field_73011_w.getRespawnDimension(p_72368_1_); -+ } -+ - p_72368_1_.func_71121_q().func_73039_n().func_72787_a(p_72368_1_); - p_72368_1_.func_71121_q().func_73039_n().func_72790_b(p_72368_1_); - p_72368_1_.func_71121_q().func_73040_p().func_72695_c(p_72368_1_); - this.field_72404_b.remove(p_72368_1_); - this.field_72400_f.func_71218_a(p_72368_1_.field_71093_bK).func_72973_f(p_72368_1_); -- BlockPos blockpos = p_72368_1_.func_180470_cg(); -- boolean flag1 = p_72368_1_.func_82245_bX(); -+ BlockPos blockpos = p_72368_1_.getBedLocation(p_72368_2_); -+ boolean flag1 = p_72368_1_.isSpawnForced(p_72368_2_); - p_72368_1_.field_71093_bK = p_72368_2_; - Object object; - -@@ -433,6 +474,7 @@ - EntityPlayerMP entityplayermp1 = new EntityPlayerMP(this.field_72400_f, this.field_72400_f.func_71218_a(p_72368_1_.field_71093_bK), p_72368_1_.func_146103_bH(), (ItemInWorldManager)object); - entityplayermp1.field_71135_a = p_72368_1_.field_71135_a; - entityplayermp1.func_71049_a(p_72368_1_, p_72368_3_); -+ entityplayermp1.field_71093_bK = p_72368_2_; - entityplayermp1.func_145769_d(p_72368_1_.func_145782_y()); - entityplayermp1.func_174817_o(p_72368_1_); - WorldServer worldserver = this.field_72400_f.func_71218_a(p_72368_1_.field_71093_bK); -@@ -473,19 +515,25 @@ - this.field_177454_f.put(entityplayermp1.func_110124_au(), entityplayermp1); - entityplayermp1.func_71116_b(); - entityplayermp1.func_70606_j(entityplayermp1.func_110143_aJ()); -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerRespawnEvent(entityplayermp1); - return entityplayermp1; - } - - public void func_72356_a(EntityPlayerMP p_72356_1_, int p_72356_2_) - { -+ transferPlayerToDimension(p_72356_1_, p_72356_2_, field_72400_f.func_71218_a(p_72356_2_).func_85176_s()); -+ } -+ -+ public void transferPlayerToDimension(EntityPlayerMP p_72356_1_, int p_72356_2_, net.minecraft.world.Teleporter teleporter) -+ { - int j = p_72356_1_.field_71093_bK; - WorldServer worldserver = this.field_72400_f.func_71218_a(p_72356_1_.field_71093_bK); - p_72356_1_.field_71093_bK = p_72356_2_; - WorldServer worldserver1 = this.field_72400_f.func_71218_a(p_72356_1_.field_71093_bK); -- p_72356_1_.field_71135_a.func_147359_a(new S07PacketRespawn(p_72356_1_.field_71093_bK, p_72356_1_.field_70170_p.func_175659_aa(), p_72356_1_.field_70170_p.func_72912_H().func_76067_t(), p_72356_1_.field_71134_c.func_73081_b())); -+ p_72356_1_.field_71135_a.func_147359_a(new S07PacketRespawn(p_72356_1_.field_71093_bK, worldserver1.func_175659_aa(), worldserver1.func_72912_H().func_76067_t(), p_72356_1_.field_71134_c.func_73081_b())); // Forge: Use new dimensions information - worldserver.func_72973_f(p_72356_1_); - p_72356_1_.field_70128_L = false; -- this.func_82448_a(p_72356_1_, j, worldserver, worldserver1); -+ this.transferEntityToWorld(p_72356_1_, j, worldserver, worldserver1, teleporter); - this.func_72375_a(p_72356_1_, worldserver); - p_72356_1_.field_71135_a.func_147364_a(p_72356_1_.field_70165_t, p_72356_1_.field_70163_u, p_72356_1_.field_70161_v, p_72356_1_.field_70177_z, p_72356_1_.field_70125_A); - p_72356_1_.field_71134_c.func_73080_a(worldserver1); -@@ -498,17 +546,27 @@ - PotionEffect potioneffect = (PotionEffect)iterator.next(); - p_72356_1_.field_71135_a.func_147359_a(new S1DPacketEntityEffect(p_72356_1_.func_145782_y(), potioneffect)); - } -+ net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerChangedDimensionEvent(p_72356_1_, j, p_72356_2_); - } - - public void func_82448_a(Entity p_82448_1_, int p_82448_2_, WorldServer p_82448_3_, WorldServer p_82448_4_) - { -- double d0 = p_82448_1_.field_70165_t; -- double d1 = p_82448_1_.field_70161_v; -+ transferEntityToWorld(p_82448_1_, p_82448_2_, p_82448_3_, p_82448_4_, p_82448_4_.func_85176_s()); -+ } -+ -+ @SuppressWarnings("unused") -+ public void transferEntityToWorld(Entity p_82448_1_, int p_82448_2_, WorldServer p_82448_3_, WorldServer p_82448_4_, net.minecraft.world.Teleporter teleporter) -+ { -+ net.minecraft.world.WorldProvider pOld = p_82448_3_.field_73011_w; -+ net.minecraft.world.WorldProvider pNew = p_82448_4_.field_73011_w; -+ double moveFactor = pOld.getMovementFactor() / pNew.getMovementFactor(); -+ double d0 = p_82448_1_.field_70165_t * moveFactor; -+ double d1 = p_82448_1_.field_70161_v * moveFactor; - double d2 = 8.0D; - float f = p_82448_1_.field_70177_z; - p_82448_3_.field_72984_F.func_76320_a("moving"); - -- if (p_82448_1_.field_71093_bK == -1) -+ if (false && p_82448_1_.field_71093_bK == -1) //Forge Kill it but dont comment out so we can rename it. - { - d0 = MathHelper.func_151237_a(d0 / d2, p_82448_4_.func_175723_af().func_177726_b() + 16.0D, p_82448_4_.func_175723_af().func_177728_d() - 16.0D); - d1 = MathHelper.func_151237_a(d1 / d2, p_82448_4_.func_175723_af().func_177736_c() + 16.0D, p_82448_4_.func_175723_af().func_177733_e() - 16.0D); -@@ -519,7 +577,7 @@ - p_82448_3_.func_72866_a(p_82448_1_, false); - } - } -- else if (p_82448_1_.field_71093_bK == 0) -+ else if (false && p_82448_1_.field_71093_bK == 0) //Forge Kill it but dont comment out so we can rename it. - { - d0 = MathHelper.func_151237_a(d0 * d2, p_82448_4_.func_175723_af().func_177726_b() + 16.0D, p_82448_4_.func_175723_af().func_177728_d() - 16.0D); - d1 = MathHelper.func_151237_a(d1 * d2, p_82448_4_.func_175723_af().func_177736_c() + 16.0D, p_82448_4_.func_175723_af().func_177733_e() - 16.0D); -@@ -530,7 +588,8 @@ - p_82448_3_.func_72866_a(p_82448_1_, false); - } - } -- else -+ -+ if (p_82448_1_.field_71093_bK == 1) - { - BlockPos blockpos; - -@@ -565,7 +624,7 @@ - if (p_82448_1_.func_70089_S()) - { - p_82448_1_.func_70012_b(d0, p_82448_1_.field_70163_u, d1, p_82448_1_.field_70177_z, p_82448_1_.field_70125_A); -- p_82448_4_.func_85176_s().func_180266_a(p_82448_1_, f); -+ teleporter.func_180266_a(p_82448_1_, f); - p_82448_4_.func_72838_d(p_82448_1_); - p_82448_4_.func_72866_a(p_82448_1_, false); - } diff --git a/patches/minecraft/net/minecraft/server/network/NetHandlerLoginServer.java.patch b/patches/minecraft/net/minecraft/server/network/NetHandlerLoginServer.java.patch deleted file mode 100644 index b77bfc330..000000000 --- a/patches/minecraft/net/minecraft/server/network/NetHandlerLoginServer.java.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/server/network/NetHandlerLoginServer.java -+++ ../src-work/minecraft/net/minecraft/server/network/NetHandlerLoginServer.java -@@ -62,7 +62,7 @@ - this.func_147326_c(); - } - -- if (this.field_147336_h++ == 600) -+ if (this.field_147336_h++ == net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.LOGIN_TIMEOUT) - { - this.func_147322_a("Took too long to log in"); - } -@@ -113,7 +113,7 @@ - } - - this.field_147333_a.func_179290_a(new S02PacketLoginSuccess(this.field_147337_i)); -- this.field_147327_f.func_71203_ab().func_72355_a(this.field_147333_a, this.field_147327_f.func_71203_ab().func_148545_a(this.field_147337_i)); -+ net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.fmlServerHandshake(this.field_147327_f.func_71203_ab(), this.field_147333_a, this.field_147327_f.func_71203_ab().func_148545_a(this.field_147337_i)); - } - } - diff --git a/patches/minecraft/net/minecraft/tileentity/TileEntityBeacon.java.patch b/patches/minecraft/net/minecraft/tileentity/TileEntityBeacon.java.patch deleted file mode 100644 index 4796b71dc..000000000 --- a/patches/minecraft/net/minecraft/tileentity/TileEntityBeacon.java.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/tileentity/TileEntityBeacon.java -+++ ../src-work/minecraft/net/minecraft/tileentity/TileEntityBeacon.java -@@ -178,7 +178,7 @@ - { - Block block = this.field_145850_b.func_180495_p(new BlockPos(l1, k1, j1)).func_177230_c(); - -- if (block != Blocks.field_150475_bE && block != Blocks.field_150340_R && block != Blocks.field_150484_ah && block != Blocks.field_150339_S) -+ if (!block.isBeaconBase(this.field_145850_b, new BlockPos(l1, k1, j1), func_174877_v())) - { - flag1 = false; - break; -@@ -363,7 +363,7 @@ - - public boolean func_94041_b(int p_94041_1_, ItemStack p_94041_2_) - { -- return p_94041_2_.func_77973_b() == Items.field_151166_bC || p_94041_2_.func_77973_b() == Items.field_151045_i || p_94041_2_.func_77973_b() == Items.field_151043_k || p_94041_2_.func_77973_b() == Items.field_151042_j; -+ return p_94041_2_.func_77973_b() != null && p_94041_2_.func_77973_b().isBeaconPayment(p_94041_2_); - } - - public String func_174875_k() diff --git a/patches/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java.patch b/patches/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java.patch deleted file mode 100644 index 91343f16a..000000000 --- a/patches/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java.patch +++ /dev/null @@ -1,78 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java -+++ ../src-work/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java -@@ -104,7 +104,7 @@ - - private boolean func_145934_k() - { -- if (this.field_145945_j[3] != null && this.field_145945_j[3].field_77994_a > 0) -+ if (this.field_145945_j[3] != null && this.field_145945_j[3].field_77994_a > 0 && false) // Code moved to net.minecraftforge.common.brewing.VanillaBrewingRecipe - { - ItemStack itemstack = this.field_145945_j[3]; - -@@ -118,7 +118,7 @@ - - for (int i = 0; i < 3; ++i) - { -- if (this.field_145945_j[i] != null && this.field_145945_j[i].func_77973_b() == Items.field_151068_bn) -+ if (this.field_145945_j[i] != null && this.field_145945_j[i].func_77973_b() instanceof ItemPotion) - { - int j = this.field_145945_j[i].func_77960_j(); - int k = this.func_145936_c(j, itemstack); -@@ -145,19 +145,22 @@ - } - else - { -- return false; -+ return net.minecraftforge.common.brewing.BrewingRecipeRegistry.canBrew(field_145945_j, field_145945_j[3], field_145947_i); - } - } - - private void func_145940_l() - { -+ if (net.minecraftforge.event.ForgeEventFactory.onPotionAttemptBreaw(field_145945_j)) return; - if (this.func_145934_k()) - { -+ net.minecraftforge.common.brewing.BrewingRecipeRegistry.brewPotions(field_145945_j, field_145945_j[3], field_145947_i); - ItemStack itemstack = this.field_145945_j[3]; - -+ if (false) { // Code moved to net.minecraftforge.common.brewing.VanillaBrewingRecipe - for (int i = 0; i < 3; ++i) - { -- if (this.field_145945_j[i] != null && this.field_145945_j[i].func_77973_b() == Items.field_151068_bn) -+ if (this.field_145945_j[i] != null && this.field_145945_j[i].func_77973_b() instanceof ItemPotion) - { - int j = this.field_145945_j[i].func_77960_j(); - int k = this.func_145936_c(j, itemstack); -@@ -177,10 +180,11 @@ - } - } - } -+ } - -- if (itemstack.func_77973_b().func_77634_r()) -+ if (itemstack.func_77973_b().hasContainerItem(itemstack)) - { -- this.field_145945_j[3] = new ItemStack(itemstack.func_77973_b().func_77668_q()); -+ this.field_145945_j[3] = itemstack.func_77973_b().getContainerItem(itemstack); - } - else - { -@@ -191,6 +195,7 @@ - this.field_145945_j[3] = null; - } - } -+ net.minecraftforge.event.ForgeEventFactory.onPotionBrewed(field_145945_j); - } - } - -@@ -306,7 +311,9 @@ - - public boolean func_94041_b(int p_94041_1_, ItemStack p_94041_2_) - { -- return p_94041_1_ == 3 ? p_94041_2_.func_77973_b().func_150892_m(p_94041_2_) : p_94041_2_.func_77973_b() == Items.field_151068_bn || p_94041_2_.func_77973_b() == Items.field_151069_bo; -+ if (p_94041_1_ == 3 && net.minecraftforge.common.brewing.BrewingRecipeRegistry.isValidIngredient(p_94041_2_)) return true; -+ else if (p_94041_1_ != 3 && net.minecraftforge.common.brewing.BrewingRecipeRegistry.isValidInput(p_94041_2_)) return true; -+ return false; - } - - public boolean[] func_174902_m() diff --git a/patches/minecraft/net/minecraft/tileentity/TileEntityFurnace.java.patch b/patches/minecraft/net/minecraft/tileentity/TileEntityFurnace.java.patch deleted file mode 100644 index 7fd469917..000000000 --- a/patches/minecraft/net/minecraft/tileentity/TileEntityFurnace.java.patch +++ /dev/null @@ -1,51 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/tileentity/TileEntityFurnace.java -+++ ../src-work/minecraft/net/minecraft/tileentity/TileEntityFurnace.java -@@ -233,8 +233,7 @@ - - if (this.field_145957_n[1].field_77994_a == 0) - { -- Item item = this.field_145957_n[1].func_77973_b().func_77668_q(); -- this.field_145957_n[1] = item != null ? new ItemStack(item) : null; -+ this.field_145957_n[1] = field_145957_n[1].func_77973_b().getContainerItem(field_145957_n[1]); - } - } - } -@@ -285,7 +284,11 @@ - else - { - ItemStack itemstack = FurnaceRecipes.func_77602_a().func_151395_a(this.field_145957_n[0]); -- return itemstack == null ? false : (this.field_145957_n[2] == null ? true : (!this.field_145957_n[2].func_77969_a(itemstack) ? false : (this.field_145957_n[2].field_77994_a < this.func_70297_j_() && this.field_145957_n[2].field_77994_a < this.field_145957_n[2].func_77976_d() ? true : this.field_145957_n[2].field_77994_a < itemstack.func_77976_d()))); -+ if (itemstack == null) return false; -+ if (this.field_145957_n[2] == null) return true; -+ if (!this.field_145957_n[2].func_77969_a(itemstack)) return false; -+ int result = field_145957_n[2].field_77994_a + itemstack.field_77994_a; -+ return result <= func_70297_j_() && result <= this.field_145957_n[2].func_77976_d(); //Forge BugFix: Make it respect stack sizes properly. - } - } - -@@ -301,7 +304,7 @@ - } - else if (this.field_145957_n[2].func_77973_b() == itemstack.func_77973_b()) - { -- ++this.field_145957_n[2].field_77994_a; -+ this.field_145957_n[2].field_77994_a += itemstack.field_77994_a; // Forge BugFix: Results may have multiple items - } - - if (this.field_145957_n[0].func_77973_b() == Item.func_150898_a(Blocks.field_150360_v) && this.field_145957_n[0].func_77960_j() == 1 && this.field_145957_n[1] != null && this.field_145957_n[1].func_77973_b() == Items.field_151133_ar) -@@ -348,7 +351,15 @@ - } - } - -- return item instanceof ItemTool && ((ItemTool)item).func_77861_e().equals("WOOD") ? 200 : (item instanceof ItemSword && ((ItemSword)item).func_150932_j().equals("WOOD") ? 200 : (item instanceof ItemHoe && ((ItemHoe)item).func_77842_f().equals("WOOD") ? 200 : (item == Items.field_151055_y ? 100 : (item == Items.field_151044_h ? 1600 : (item == Items.field_151129_at ? 20000 : (item == Item.func_150898_a(Blocks.field_150345_g) ? 100 : (item == Items.field_151072_bj ? 2400 : 0))))))); -+ if (item instanceof ItemTool && ((ItemTool)item).func_77861_e().equals("WOOD")) return 200; -+ if (item instanceof ItemSword && ((ItemSword)item).func_150932_j().equals("WOOD")) return 200; -+ if (item instanceof ItemHoe && ((ItemHoe)item).func_77842_f().equals("WOOD")) return 200; -+ if (item == Items.field_151055_y) return 100; -+ if (item == Items.field_151044_h) return 1600; -+ if (item == Items.field_151129_at) return 20000; -+ if (item == Item.func_150898_a(Blocks.field_150345_g)) return 100; -+ if (item == Items.field_151072_bj) return 2400; -+ return net.minecraftforge.fml.common.registry.GameRegistry.getFuelValue(p_145952_0_); - } - } - diff --git a/patches/minecraft/net/minecraft/tileentity/TileEntityHopper.java.patch b/patches/minecraft/net/minecraft/tileentity/TileEntityHopper.java.patch deleted file mode 100644 index 2ed472779..000000000 --- a/patches/minecraft/net/minecraft/tileentity/TileEntityHopper.java.patch +++ /dev/null @@ -1,40 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/tileentity/TileEntityHopper.java -+++ ../src-work/minecraft/net/minecraft/tileentity/TileEntityHopper.java -@@ -523,17 +523,30 @@ - - if (itemstack1 == null) - { -- p_174916_0_.func_70299_a(p_174916_2_, p_174916_1_); -- p_174916_1_ = null; -+ //Forge: BUGFIX: Again, make things respect max stack sizes. -+ int max = Math.min(p_174916_1_.func_77976_d(), p_174916_0_.func_70297_j_()); -+ if (max >= p_174916_1_.field_77994_a) -+ { -+ p_174916_0_.func_70299_a(p_174916_2_, p_174916_1_); -+ p_174916_1_ = null; -+ } -+ else -+ { -+ p_174916_0_.func_70299_a(p_174916_2_, p_174916_1_.func_77979_a(max)); -+ } - flag = true; - } - else if (func_145894_a(itemstack1, p_174916_1_)) - { -- int j = p_174916_1_.func_77976_d() - itemstack1.field_77994_a; -- int k = Math.min(p_174916_1_.field_77994_a, j); -- p_174916_1_.field_77994_a -= k; -- itemstack1.field_77994_a += k; -- flag = k > 0; -+ //Forge: BUGFIX: Again, make things respect max stack sizes. -+ int max = Math.min(p_174916_1_.func_77976_d(), p_174916_0_.func_70297_j_()); -+ if (max > itemstack1.field_77994_a) -+ { -+ int size = Math.min(p_174916_1_.field_77994_a, max - itemstack1.field_77994_a); -+ p_174916_1_.field_77994_a -= size; -+ itemstack1.field_77994_a += size; -+ flag = size > 0; -+ } - } - - if (flag) diff --git a/patches/minecraft/net/minecraft/tileentity/TileEntityPiston.java.patch b/patches/minecraft/net/minecraft/tileentity/TileEntityPiston.java.patch deleted file mode 100644 index 4c1454b57..000000000 --- a/patches/minecraft/net/minecraft/tileentity/TileEntityPiston.java.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/tileentity/TileEntityPiston.java -+++ ../src-work/minecraft/net/minecraft/tileentity/TileEntityPiston.java -@@ -151,7 +151,8 @@ - if (this.field_145850_b.func_180495_p(this.field_174879_c).func_177230_c() == Blocks.field_180384_M) - { - this.field_145850_b.func_180501_a(this.field_174879_c, this.field_174932_a, 3); -- this.field_145850_b.func_180496_d(this.field_174879_c, this.field_174932_a.func_177230_c()); -+ if(!net.minecraftforge.event.ForgeEventFactory.onNeighborNotify(field_145850_b, field_174879_c, field_145850_b.func_180495_p(field_174879_c), java.util.EnumSet.noneOf(EnumFacing.class)).isCanceled()) -+ this.field_145850_b.func_180496_d(this.field_174879_c, this.field_174932_a.func_177230_c()); - } - } - } -@@ -169,7 +170,8 @@ - if (this.field_145850_b.func_180495_p(this.field_174879_c).func_177230_c() == Blocks.field_180384_M) - { - this.field_145850_b.func_180501_a(this.field_174879_c, this.field_174932_a, 3); -- this.field_145850_b.func_180496_d(this.field_174879_c, this.field_174932_a.func_177230_c()); -+ if(!net.minecraftforge.event.ForgeEventFactory.onNeighborNotify(field_145850_b, field_174879_c, field_145850_b.func_180495_p(field_174879_c), java.util.EnumSet.noneOf(EnumFacing.class)).isCanceled()) -+ this.field_145850_b.func_180496_d(this.field_174879_c, this.field_174932_a.func_177230_c()); - } - } - else diff --git a/patches/minecraft/net/minecraft/tileentity/TileEntitySign.java.patch b/patches/minecraft/net/minecraft/tileentity/TileEntitySign.java.patch deleted file mode 100644 index d1cc9e896..000000000 --- a/patches/minecraft/net/minecraft/tileentity/TileEntitySign.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/tileentity/TileEntitySign.java -+++ ../src-work/minecraft/net/minecraft/tileentity/TileEntitySign.java -@@ -161,7 +161,7 @@ - public void func_145747_a(IChatComponent p_145747_1_) {} - public boolean func_70003_b(int p_70003_1_, String p_70003_2_) - { -- return true; -+ return p_70003_1_ <= 2; //Forge: Fixes MC-75630 - Exploit with signs and command blocks - } - public BlockPos func_180425_c() - { diff --git a/patches/minecraft/net/minecraft/util/Vec3.java.patch b/patches/minecraft/net/minecraft/util/Vec3.java.patch deleted file mode 100644 index 0ad59ca10..000000000 --- a/patches/minecraft/net/minecraft/util/Vec3.java.patch +++ /dev/null @@ -1,27 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/util/Vec3.java -+++ ../src-work/minecraft/net/minecraft/util/Vec3.java -@@ -1,8 +1,5 @@ - package net.minecraft.util; - --import net.minecraftforge.fml.relauncher.Side; --import net.minecraftforge.fml.relauncher.SideOnly; -- - public class Vec3 - { - public final double field_72450_a; -@@ -32,7 +29,6 @@ - this.field_72449_c = p_i1108_5_; - } - -- @SideOnly(Side.CLIENT) - public Vec3 func_72444_a(Vec3 p_72444_1_) - { - return new Vec3(p_72444_1_.field_72450_a - this.field_72450_a, p_72444_1_.field_72448_b - this.field_72448_b, p_72444_1_.field_72449_c - this.field_72449_c); -@@ -49,7 +45,6 @@ - return this.field_72450_a * p_72430_1_.field_72450_a + this.field_72448_b * p_72430_1_.field_72448_b + this.field_72449_c * p_72430_1_.field_72449_c; - } - -- @SideOnly(Side.CLIENT) - public Vec3 func_72431_c(Vec3 p_72431_1_) - { - return new Vec3(this.field_72448_b * p_72431_1_.field_72449_c - this.field_72449_c * p_72431_1_.field_72448_b, this.field_72449_c * p_72431_1_.field_72450_a - this.field_72450_a * p_72431_1_.field_72449_c, this.field_72450_a * p_72431_1_.field_72448_b - this.field_72448_b * p_72431_1_.field_72450_a); diff --git a/patches/minecraft/net/minecraft/world/ChunkCache.java.patch b/patches/minecraft/net/minecraft/world/ChunkCache.java.patch deleted file mode 100644 index 1fd5bcd2f..000000000 --- a/patches/minecraft/net/minecraft/world/ChunkCache.java.patch +++ /dev/null @@ -1,61 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/ChunkCache.java -+++ ../src-work/minecraft/net/minecraft/world/ChunkCache.java -@@ -64,6 +64,8 @@ - { - int i = (p_175625_1_.func_177958_n() >> 4) - this.field_72818_a; - int j = (p_175625_1_.func_177952_p() >> 4) - this.field_72816_b; -+ if (i < 0 || i >= field_72817_c.length || j < 0 || j >= field_72817_c[i].length) return null; -+ if (field_72817_c[i][j] == null) return null; - return this.field_72817_c[i][j].func_177424_a(p_175625_1_, Chunk.EnumCreateEntityType.IMMEDIATE); - } - -@@ -87,6 +89,7 @@ - { - int i = (p_180495_1_.func_177958_n() >> 4) - this.field_72818_a; - int j = (p_180495_1_.func_177952_p() >> 4) - this.field_72816_b; -+ if (i < 0 || i >= field_72817_c.length || j < 0 || i >= field_72817_c[i].length) return Blocks.field_150350_a.func_176223_P(); - - if (i >= 0 && i < this.field_72817_c.length && j >= 0 && j < this.field_72817_c[i].length) - { -@@ -147,6 +150,8 @@ - { - i = (p_175629_2_.func_177958_n() >> 4) - this.field_72818_a; - int j = (p_175629_2_.func_177952_p() >> 4) - this.field_72816_b; -+ if (i < 0 || i >= field_72817_c.length || j < 0 || j >= field_72817_c[i].length) return p_175629_1_.field_77198_c; -+ if (field_72817_c[i][j] == null) return p_175629_1_.field_77198_c; - return this.field_72817_c[i][j].func_177413_a(p_175629_1_, p_175629_2_); - } - } -@@ -158,7 +163,7 @@ - - public boolean func_175623_d(BlockPos p_175623_1_) - { -- return this.func_180495_p(p_175623_1_).func_177230_c().func_149688_o() == Material.field_151579_a; -+ return this.func_180495_p(p_175623_1_).func_177230_c().isAir(this, p_175623_1_); - } - - @SideOnly(Side.CLIENT) -@@ -168,6 +173,7 @@ - { - int i = (p_175628_2_.func_177958_n() >> 4) - this.field_72818_a; - int j = (p_175628_2_.func_177952_p() >> 4) - this.field_72816_b; -+ if (i < 0 || i >= field_72817_c.length || j < 0 || i >= field_72817_c[i].length) return p_175628_1_.field_77198_c; - return this.field_72817_c[i][j].func_177413_a(p_175628_1_, p_175628_2_); - } - else -@@ -187,4 +193,15 @@ - { - return this.field_72815_e.func_175624_G(); - } -+ -+ @Override -+ public boolean isSideSolid(BlockPos pos, EnumFacing side, boolean _default) -+ { -+ int x = (pos.func_177958_n() >> 4) - this.field_72818_a; -+ int z = (pos.func_177952_p() >> 4) - this.field_72816_b; -+ if (pos.func_177956_o() >= 0 && pos.func_177956_o() < 256) return _default; -+ if (x < 0 || x >= field_72817_c.length || z < 0 || x >= field_72817_c[x].length) return _default; -+ -+ return func_180495_p(pos).func_177230_c().isSideSolid(this, pos, side); -+ } - } diff --git a/patches/minecraft/net/minecraft/world/Explosion.java.patch b/patches/minecraft/net/minecraft/world/Explosion.java.patch deleted file mode 100644 index c7d47ad51..000000000 --- a/patches/minecraft/net/minecraft/world/Explosion.java.patch +++ /dev/null @@ -1,52 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/Explosion.java -+++ ../src-work/minecraft/net/minecraft/world/Explosion.java -@@ -40,6 +40,7 @@ - private final List field_77281_g; - private final Map field_77288_k; - private static final String __OBFID = "CL_00000134"; -+ private final Vec3 position; - - @SideOnly(Side.CLIENT) - public Explosion(World p_i45752_1_, Entity p_i45752_2_, double p_i45752_3_, double p_i45752_5_, double p_i45752_7_, float p_i45752_9_, List p_i45752_10_) -@@ -67,6 +68,7 @@ - this.field_77282_d = p_i45754_7_; - this.field_77286_a = p_i45754_10_; - this.field_82755_b = p_i45754_11_; -+ this.position = new Vec3(field_77284_b, field_77285_c, field_77282_d); - } - - public void func_77278_a() -@@ -103,7 +105,7 @@ - - if (iblockstate.func_177230_c().func_149688_o() != Material.field_151579_a) - { -- float f2 = this.field_77283_e != null ? this.field_77283_e.func_180428_a(this, this.field_77287_j, blockpos, iblockstate) : iblockstate.func_177230_c().func_149638_a((Entity)null); -+ float f2 = this.field_77283_e != null ? this.field_77283_e.func_180428_a(this, this.field_77287_j, blockpos, iblockstate) : iblockstate.func_177230_c().getExplosionResistance(field_77287_j, blockpos, (Entity)null, this); - f -= (f2 + 0.3F) * 0.3F; - } - -@@ -130,6 +132,7 @@ - int k1 = MathHelper.func_76128_c(this.field_77282_d - (double)f3 - 1.0D); - int i1 = MathHelper.func_76128_c(this.field_77282_d + (double)f3 + 1.0D); - List list = this.field_77287_j.func_72839_b(this.field_77283_e, new AxisAlignedBB((double)j, (double)j1, (double)k1, (double)k, (double)l, (double)i1)); -+ net.minecraftforge.event.ForgeEventFactory.onExplosionDetonate(this.field_77287_j, this, list, f3); - Vec3 vec3 = new Vec3(this.field_77284_b, this.field_77285_c, this.field_77282_d); - - for (int l1 = 0; l1 < list.size(); ++l1) -@@ -223,8 +226,7 @@ - block.func_180653_a(this.field_77287_j, blockpos, this.field_77287_j.func_180495_p(blockpos), 1.0F / this.field_77280_f, 0); - } - -- this.field_77287_j.func_180501_a(blockpos, Blocks.field_150350_a.func_176223_P(), 3); -- block.func_180652_a(this.field_77287_j, blockpos, this); -+ block.onBlockExploded(this.field_77287_j, blockpos, this); - } - } - } -@@ -264,4 +266,6 @@ - { - return this.field_77281_g; - } -+ -+ public Vec3 getPosition(){ return this.position; } - } diff --git a/patches/minecraft/net/minecraft/world/World.java.patch b/patches/minecraft/net/minecraft/world/World.java.patch deleted file mode 100644 index d8bf6c7f2..000000000 --- a/patches/minecraft/net/minecraft/world/World.java.patch +++ /dev/null @@ -1,930 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/World.java -+++ ../src-work/minecraft/net/minecraft/world/World.java -@@ -56,8 +56,30 @@ - import net.minecraftforge.fml.relauncher.Side; - import net.minecraftforge.fml.relauncher.SideOnly; - -+import net.minecraftforge.fml.common.FMLLog; -+import com.google.common.collect.ImmutableSetMultimap; -+import net.minecraftforge.client.ForgeHooksClient; -+import net.minecraftforge.common.ForgeChunkManager; -+import net.minecraftforge.common.ForgeChunkManager.Ticket; -+import net.minecraftforge.common.ForgeModContainer; -+import net.minecraftforge.common.ForgeHooks; -+import net.minecraftforge.common.MinecraftForge; -+import net.minecraftforge.common.WorldSpecificSaveHandler; -+import net.minecraftforge.event.entity.EntityEvent; -+import net.minecraftforge.event.entity.EntityJoinWorldEvent; -+import net.minecraftforge.event.world.WorldEvent; -+import net.minecraftforge.event.entity.PlaySoundAtEntityEvent; -+import net.minecraft.entity.EnumCreatureType; -+ - public abstract class World implements IBlockAccess - { -+ /** -+ * Used in the getEntitiesWithinAABB functions to expand the search area for entities. -+ * Modders should change this variable to a higher value if it is less then the radius -+ * of one of there entities. -+ */ -+ public static double MAX_ENTITY_RADIUS = 2.0D; -+ - protected boolean field_72999_e; - public final List field_72996_f = Lists.newArrayList(); - protected final List field_72997_g = Lists.newArrayList(); -@@ -99,6 +121,10 @@ - int[] field_72994_J; - private static final String __OBFID = "CL_00000140"; - -+ public boolean restoringBlockSnapshots = false; -+ public boolean captureBlockSnapshots = false; -+ public ArrayList capturedBlockSnapshots = new ArrayList(); -+ - protected World(ISaveHandler p_i45749_1_, WorldInfo p_i45749_2_, WorldProvider p_i45749_3_, Profiler p_i45749_4_, boolean p_i45749_5_) - { - this.field_72990_M = this.field_73012_v.nextInt(12000); -@@ -111,6 +137,7 @@ - this.field_73011_w = p_i45749_3_; - this.field_72995_K = p_i45749_5_; - this.field_175728_M = p_i45749_3_.func_177501_r(); -+ perWorldStorage = new MapStorage((ISaveHandler)null); - } - - public World func_175643_b() -@@ -120,13 +147,18 @@ - - public BiomeGenBase func_180494_b(final BlockPos p_180494_1_) - { -- if (this.func_175667_e(p_180494_1_)) -+ return this.field_73011_w.getBiomeGenForCoords(p_180494_1_); -+ } -+ -+ public BiomeGenBase getBiomeGenForCoordsBody(final BlockPos pos) -+ { -+ if (this.func_175667_e(pos)) - { -- Chunk chunk = this.func_175726_f(p_180494_1_); -+ Chunk chunk = this.func_175726_f(pos); - - try - { -- return chunk.func_177411_a(p_180494_1_, this.field_73011_w.func_177499_m()); -+ return chunk.func_177411_a(pos, this.field_73011_w.func_177499_m()); - } - catch (Throwable throwable) - { -@@ -137,7 +169,7 @@ - private static final String __OBFID = "CL_00000141"; - public String call() - { -- return CrashReportCategory.func_180522_a(p_180494_1_); -+ return CrashReportCategory.func_180522_a(pos); - } - }); - throw new ReportedException(crashreport); -@@ -145,7 +177,7 @@ - } - else - { -- return this.field_73011_w.func_177499_m().func_180300_a(p_180494_1_, BiomeGenBase.field_76772_c); -+ return this.field_73011_w.func_177499_m().func_180300_a(pos, BiomeGenBase.field_76772_c); - } - } - -@@ -186,7 +218,7 @@ - - public boolean func_175623_d(BlockPos p_175623_1_) - { -- return this.func_180495_p(p_175623_1_).func_177230_c().func_149688_o() == Material.field_151579_a; -+ return this.func_180495_p(p_175623_1_).func_177230_c().isAir(this, p_175623_1_); - } - - public boolean func_175667_e(BlockPos p_175667_1_) -@@ -286,39 +318,58 @@ - { - Chunk chunk = this.func_175726_f(p_180501_1_); - Block block = p_180501_2_.func_177230_c(); -+ -+ net.minecraftforge.common.util.BlockSnapshot blockSnapshot = null; -+ if (this.captureBlockSnapshots && !this.field_72995_K) -+ { -+ blockSnapshot = net.minecraftforge.common.util.BlockSnapshot.getBlockSnapshot(this, p_180501_1_, p_180501_3_); -+ this.capturedBlockSnapshots.add(blockSnapshot); -+ } -+ int oldLight = func_180495_p(p_180501_1_).func_177230_c().getLightValue(this, p_180501_1_); -+ - IBlockState iblockstate1 = chunk.func_177436_a(p_180501_1_, p_180501_2_); - - if (iblockstate1 == null) - { -+ if (blockSnapshot != null) this.capturedBlockSnapshots.remove(blockSnapshot); - return false; - } - else - { - Block block1 = iblockstate1.func_177230_c(); - -- if (block.func_149717_k() != block1.func_149717_k() || block.func_149750_m() != block1.func_149750_m()) -+ if (block.func_149717_k() != block1.func_149717_k() || block.getLightValue(this, p_180501_1_) != oldLight) - { - this.field_72984_F.func_76320_a("checkLight"); - this.func_175664_x(p_180501_1_); - this.field_72984_F.func_76319_b(); - } - -- if ((p_180501_3_ & 2) != 0 && (!this.field_72995_K || (p_180501_3_ & 4) == 0) && chunk.func_150802_k()) -+ if (blockSnapshot == null) // Don't notify clients or update physics while capturing blockstates - { -- this.func_175689_h(p_180501_1_); -+ this.markAndNotifyBlock(p_180501_1_, chunk, iblockstate1, p_180501_2_, p_180501_3_); // Modularize client and physic updates - } - -- if (!this.field_72995_K && (p_180501_3_ & 1) != 0) -- { -- this.func_175722_b(p_180501_1_, iblockstate1.func_177230_c()); -+ return true; -+ } -+ } -+ } - -- if (block.func_149740_M()) -- { -- this.func_175666_e(p_180501_1_, block); -- } -- } -+ // Split off from original setBlockState(BlockPos, IBlockState Block p_147465_4_, int) method in order to directly send client and physic updates -+ public void markAndNotifyBlock(BlockPos pos, Chunk chunk, IBlockState old, IBlockState new_, int flags) -+ { -+ if ((flags & 2) != 0 && (!this.field_72995_K || (flags & 4) == 0) && (chunk == null || chunk.func_150802_k())) -+ { -+ this.func_175689_h(pos); -+ } - -- return true; -+ if (!this.field_72995_K && (flags & 1) != 0) -+ { -+ this.func_175722_b(pos, old.func_177230_c()); -+ -+ if (new_.func_177230_c().func_149740_M()) -+ { -+ this.func_175666_e(pos, new_.func_177230_c()); - } - } - } -@@ -408,6 +459,9 @@ - - public void func_175685_c(BlockPos p_175685_1_, Block p_175685_2_) - { -+ if(net.minecraftforge.event.ForgeEventFactory.onNeighborNotify(this, p_175685_1_, this.func_180495_p(p_175685_1_), java.util.EnumSet.allOf(EnumFacing.class)).isCanceled()) -+ return; -+ - this.func_180496_d(p_175685_1_.func_177976_e(), p_175685_2_); - this.func_180496_d(p_175685_1_.func_177974_f(), p_175685_2_); - this.func_180496_d(p_175685_1_.func_177977_b(), p_175685_2_); -@@ -418,6 +472,11 @@ - - public void func_175695_a(BlockPos p_175695_1_, Block p_175695_2_, EnumFacing p_175695_3_) - { -+ java.util.EnumSet directions = java.util.EnumSet.allOf(EnumFacing.class); -+ directions.remove(p_175695_3_); -+ if(net.minecraftforge.event.ForgeEventFactory.onNeighborNotify(this, p_175695_1_, this.func_180495_p(p_175695_1_), directions).isCanceled()) -+ return; -+ - if (p_175695_3_ != EnumFacing.WEST) - { - this.func_180496_d(p_175695_1_.func_177976_e(), p_175695_2_); -@@ -782,7 +841,7 @@ - - public boolean func_72935_r() - { -- return this.field_73008_k < 4; -+ return this.field_73011_w.isDaytime(); - } - - public MovingObjectPosition func_72933_a(Vec3 p_72933_1_, Vec3 p_72933_2_) -@@ -978,6 +1037,11 @@ - - public void func_72956_a(Entity p_72956_1_, String p_72956_2_, float p_72956_3_, float p_72956_4_) - { -+ PlaySoundAtEntityEvent event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(p_72956_1_, p_72956_2_, p_72956_3_, p_72956_4_); -+ if (event.isCanceled() || event.name == null) return; -+ p_72956_2_ = event.name; -+ p_72956_3_ = event.newVolume; -+ p_72956_4_ = event.newPitch; - for (int i = 0; i < this.field_73021_x.size(); ++i) - { - ((IWorldAccess)this.field_73021_x.get(i)).func_72704_a(p_72956_2_, p_72956_1_.field_70165_t, p_72956_1_.field_70163_u, p_72956_1_.field_70161_v, p_72956_3_, p_72956_4_); -@@ -986,6 +1050,11 @@ - - public void func_85173_a(EntityPlayer p_85173_1_, String p_85173_2_, float p_85173_3_, float p_85173_4_) - { -+ PlaySoundAtEntityEvent event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(p_85173_1_, p_85173_2_, p_85173_3_, p_85173_4_); -+ if (event.isCanceled() || event.name == null) return; -+ p_85173_2_ = event.name; -+ p_85173_3_ = event.newVolume; -+ p_85173_4_ = event.newPitch; - for (int i = 0; i < this.field_73021_x.size(); ++i) - { - ((IWorldAccess)this.field_73021_x.get(i)).func_85102_a(p_85173_1_, p_85173_2_, p_85173_1_.field_70165_t, p_85173_1_.field_70163_u, p_85173_1_.field_70161_v, p_85173_3_, p_85173_4_); -@@ -1037,6 +1106,9 @@ - - public boolean func_72838_d(Entity p_72838_1_) - { -+ // do not drop any items while restoring blocksnapshots. Prevents dupes -+ if (!this.field_72995_K && (p_72838_1_ == null || (p_72838_1_ instanceof net.minecraft.entity.item.EntityItem && this.restoringBlockSnapshots))) return false; -+ - int i = MathHelper.func_76128_c(p_72838_1_.field_70165_t / 16.0D); - int j = MathHelper.func_76128_c(p_72838_1_.field_70161_v / 16.0D); - boolean flag = p_72838_1_.field_98038_p; -@@ -1059,6 +1131,8 @@ - this.func_72854_c(); - } - -+ if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.EntityJoinWorldEvent(p_72838_1_, this)) && !flag) return false; -+ - this.func_72964_e(i, j).func_76612_a(p_72838_1_); - this.field_72996_f.add(p_72838_1_); - this.func_72923_a(p_72838_1_); -@@ -1271,17 +1345,29 @@ - - public int func_72967_a(float p_72967_1_) - { -+ float f2 = field_73011_w.getSunBrightnessFactor(p_72967_1_); -+ f2 = 1.0F - f2; -+ return (int)(f2 * 11.0F); -+ } -+ -+ /** -+ * The current sun brightness factor for this dimension. -+ * 0.0f means no light at all, and 1.0f means maximum sunlight. -+ * Highly recommended for sunlight detection like solar panel. -+ * -+ * @return The current brightness factor -+ * */ -+ public float getSunBrightnessFactor(float p_72967_1_) -+ { - float f1 = this.func_72826_c(p_72967_1_); - float f2 = 1.0F - (MathHelper.func_76134_b(f1 * (float)Math.PI * 2.0F) * 2.0F + 0.5F); - f2 = MathHelper.func_76131_a(f2, 0.0F, 1.0F); - f2 = 1.0F - f2; - f2 = (float)((double)f2 * (1.0D - (double)(this.func_72867_j(p_72967_1_) * 5.0F) / 16.0D)); - f2 = (float)((double)f2 * (1.0D - (double)(this.func_72819_i(p_72967_1_) * 5.0F) / 16.0D)); -- f2 = 1.0F - f2; -- return (int)(f2 * 11.0F); -+ return f2; - } - -- @SideOnly(Side.CLIENT) - public void func_72848_b(IWorldAccess p_72848_1_) - { - this.field_73021_x.remove(p_72848_1_); -@@ -1290,6 +1376,12 @@ - @SideOnly(Side.CLIENT) - public float func_72971_b(float p_72971_1_) - { -+ return this.field_73011_w.getSunBrightness(p_72971_1_); -+ } -+ -+ @SideOnly(Side.CLIENT) -+ public float getSunBrightnessBody(float p_72971_1_) -+ { - float f1 = this.func_72826_c(p_72971_1_); - float f2 = 1.0F - (MathHelper.func_76134_b(f1 * (float)Math.PI * 2.0F) * 2.0F + 0.2F); - f2 = MathHelper.func_76131_a(f2, 0.0F, 1.0F); -@@ -1302,6 +1394,12 @@ - @SideOnly(Side.CLIENT) - public Vec3 func_72833_a(Entity p_72833_1_, float p_72833_2_) - { -+ return this.field_73011_w.getSkyColor(p_72833_1_, p_72833_2_); -+ } -+ -+ @SideOnly(Side.CLIENT) -+ public Vec3 getSkyColorBody(Entity p_72833_1_, float p_72833_2_) -+ { - float f1 = this.func_72826_c(p_72833_2_); - float f2 = MathHelper.func_76134_b(f1 * (float)Math.PI * 2.0F) * 2.0F + 0.5F; - f2 = MathHelper.func_76131_a(f2, 0.0F, 1.0F); -@@ -1309,9 +1407,7 @@ - int j = MathHelper.func_76128_c(p_72833_1_.field_70163_u); - int k = MathHelper.func_76128_c(p_72833_1_.field_70161_v); - BlockPos blockpos = new BlockPos(i, j, k); -- BiomeGenBase biomegenbase = this.func_180494_b(blockpos); -- float f3 = biomegenbase.func_180626_a(blockpos); -- int l = biomegenbase.func_76731_a(f3); -+ int l = net.minecraftforge.client.ForgeHooksClient.getSkyBlendColour(this, blockpos); - float f4 = (float)(l >> 16 & 255) / 255.0F; - float f5 = (float)(l >> 8 & 255) / 255.0F; - float f6 = (float)(l & 255) / 255.0F; -@@ -1373,6 +1469,11 @@ - - public float func_130001_d() - { -+ return field_73011_w.getCurrentMoonPhaseFactor(); -+ } -+ -+ public float getCurrentMoonPhaseFactorBody() -+ { - return WorldProvider.field_111203_a[this.field_73011_w.func_76559_b(this.field_72986_A.func_76073_f())]; - } - -@@ -1385,6 +1486,12 @@ - @SideOnly(Side.CLIENT) - public Vec3 func_72824_f(float p_72824_1_) - { -+ return this.field_73011_w.drawClouds(p_72824_1_); -+ } -+ -+ @SideOnly(Side.CLIENT) -+ public Vec3 drawCloudsBody(float p_72824_1_) -+ { - float f1 = this.func_72826_c(p_72824_1_); - float f2 = MathHelper.func_76134_b(f1 * (float)Math.PI * 2.0F) * 2.0F + 0.5F; - f2 = MathHelper.func_76131_a(f2, 0.0F, 1.0F); -@@ -1442,9 +1549,9 @@ - for (blockpos1 = new BlockPos(p_175672_1_.func_177958_n(), chunk.func_76625_h() + 16, p_175672_1_.func_177952_p()); blockpos1.func_177956_o() >= 0; blockpos1 = blockpos2) - { - blockpos2 = blockpos1.func_177977_b(); -- Material material = chunk.func_177428_a(blockpos2).func_149688_o(); -+ Block block = chunk.func_177428_a(blockpos2); - -- if (material.func_76230_c() && material != Material.field_151584_j) -+ if (block.func_149688_o().func_76230_c() && !block.isLeaves(this, blockpos2) && !block.isFoliage(this, blockpos2)) - { - break; - } -@@ -1456,6 +1563,12 @@ - @SideOnly(Side.CLIENT) - public float func_72880_h(float p_72880_1_) - { -+ return this.field_73011_w.getStarBrightness(p_72880_1_); -+ } -+ -+ @SideOnly(Side.CLIENT) -+ public float getStarBrightnessBody(float p_72880_1_) -+ { - float f1 = this.func_72826_c(p_72880_1_); - float f2 = 1.0F - (MathHelper.func_76134_b(f1 * (float)Math.PI * 2.0F) * 2.0F + 0.25F); - f2 = MathHelper.func_76131_a(f2, 0.0F, 1.0F); -@@ -1500,7 +1613,15 @@ - entity.func_85029_a(crashreportcategory); - } - -- throw new ReportedException(crashreport); -+ if (ForgeModContainer.removeErroringEntities) -+ { -+ FMLLog.severe(crashreport.func_71502_e()); -+ func_72900_e(entity); -+ } -+ else -+ { -+ throw new ReportedException(crashreport); -+ } - } - - if (entity.field_70128_L) -@@ -1562,7 +1683,16 @@ - crashreport = CrashReport.func_85055_a(throwable1, "Ticking entity"); - crashreportcategory = crashreport.func_85058_a("Entity being ticked"); - entity.func_85029_a(crashreportcategory); -- throw new ReportedException(crashreport); -+ if (ForgeModContainer.removeErroringEntities) -+ { -+ FMLLog.severe(crashreport.func_71502_e()); -+ func_72900_e(entity); -+ } -+ else -+ { -+ throw new ReportedException(crashreport); -+ } -+ - } - } - -@@ -1609,7 +1739,16 @@ - CrashReport crashreport1 = CrashReport.func_85055_a(throwable, "Ticking block entity"); - CrashReportCategory crashreportcategory1 = crashreport1.func_85058_a("Block entity being ticked"); - tileentity.func_145828_a(crashreportcategory1); -- throw new ReportedException(crashreport1); -+ if (ForgeModContainer.removeErroringTileEntities) -+ { -+ FMLLog.severe(crashreport1.func_71502_e()); -+ tileentity.func_145843_s(); -+ this.func_175713_t(tileentity.func_174877_v()); -+ } -+ else -+ { -+ throw new ReportedException(crashreport1); -+ } - } - } - } -@@ -1626,15 +1765,19 @@ - } - } - -- this.field_147481_N = false; -- - if (!this.field_147483_b.isEmpty()) - { -+ for (Object tile : field_147483_b) -+ { -+ ((TileEntity)tile).onChunkUnload(); -+ } - this.field_175730_i.removeAll(this.field_147483_b); - this.field_147482_g.removeAll(this.field_147483_b); - this.field_147483_b.clear(); - } - -+ this.field_147481_N = false; //FML Move below remove to prevent CMEs -+ - this.field_72984_F.func_76318_c("pendingBlockEntities"); - - if (!this.field_147484_a.isEmpty()) -@@ -1668,7 +1811,8 @@ - - public boolean func_175700_a(TileEntity p_175700_1_) - { -- boolean flag = this.field_147482_g.add(p_175700_1_); -+ List dest = field_147481_N ? field_147484_a : field_147482_g; -+ boolean flag = dest.add(p_175700_1_); - - if (flag && p_175700_1_ instanceof IUpdatePlayerListBox) - { -@@ -1710,9 +1854,12 @@ - { - int i = MathHelper.func_76128_c(p_72866_1_.field_70165_t); - int j = MathHelper.func_76128_c(p_72866_1_.field_70161_v); -- byte b0 = 32; -+ boolean isForced = getPersistentChunks().containsKey(new ChunkCoordIntPair(i >> 4, j >> 4)); -+ byte b0 = isForced ? (byte)0 : 32; -+ boolean canUpdate = !p_72866_2_ || this.func_175663_a(i - b0, 0, j - b0, i + b0, 0, j + b0, true); -+ if (!canUpdate) canUpdate = net.minecraftforge.event.ForgeEventFactory.canEntityUpdate(p_72866_1_); - -- if (!p_72866_2_ || this.func_175663_a(i - b0, 0, j - b0, i + b0, 0, j + b0, true)) -+ if (canUpdate) - { - p_72866_1_.field_70142_S = p_72866_1_.field_70165_t; - p_72866_1_.field_70137_T = p_72866_1_.field_70163_u; -@@ -1839,7 +1986,7 @@ - { - Block block = this.func_180495_p(new BlockPos(k1, l1, i2)).func_177230_c(); - -- if (block.func_149688_o() != Material.field_151579_a) -+ if (!block.isAir(this, new BlockPos(k1, l1, i2))) - { - return true; - } -@@ -1901,6 +2048,10 @@ - { - return true; - } -+ else if (block.isBurning(this, new BlockPos(k1, l1, i2))) -+ { -+ return true; -+ } - } - } - } -@@ -2039,6 +2190,7 @@ - public Explosion func_72885_a(Entity p_72885_1_, double p_72885_2_, double p_72885_4_, double p_72885_6_, float p_72885_8_, boolean p_72885_9_, boolean p_72885_10_) - { - Explosion explosion = new Explosion(this, p_72885_1_, p_72885_2_, p_72885_4_, p_72885_6_, p_72885_8_, p_72885_9_, p_72885_10_); -+ if (net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this, explosion)) return explosion; - explosion.func_77278_a(); - explosion.func_77279_a(true); - return explosion; -@@ -2185,19 +2337,28 @@ - else - { - this.func_175700_a(p_175690_2_); -- this.func_175726_f(p_175690_1_).func_177426_a(p_175690_1_, p_175690_2_); -+ Chunk chunk = this.func_175726_f(p_175690_1_); //Forge add NPE protection -+ if (chunk != null) chunk.func_177426_a(p_175690_1_, p_175690_2_); - } -+ this.func_175666_e(p_175690_1_, func_180495_p(p_175690_1_).func_177230_c()); //Notify neighbors of changes - } - } - - public void func_175713_t(BlockPos p_175713_1_) - { -+ //Chunk chunk = this.getChunkFromBlockCoords(pos); -+ //if (chunk != null) chunk.removeTileEntity(pos); -+ //Forge ToDO: Are these patches needed anymore? -+ - TileEntity tileentity = this.func_175625_s(p_175713_1_); - - if (tileentity != null && this.field_147481_N) - { - tileentity.func_145843_s(); - this.field_147484_a.remove(tileentity); -+ if (!(tileentity instanceof IUpdatePlayerListBox)) //Forge: If they are not tickable they wont be removed in the update loop. -+ this.field_147482_g.remove(tileentity); -+ - } - else - { -@@ -2210,6 +2371,7 @@ - - this.func_175726_f(p_175713_1_).func_177425_e(p_175713_1_); - } -+ this.func_175666_e(p_175713_1_, func_180495_p(p_175713_1_).func_177230_c()); //Notify neighbors of changes - } - - public void func_147457_a(TileEntity p_147457_1_) -@@ -2228,7 +2390,7 @@ - { - IBlockState iblockstate = p_175683_0_.func_180495_p(p_175683_1_); - Block block = iblockstate.func_177230_c(); -- return block.func_149688_o().func_76218_k() && block.func_149686_d() ? true : (block instanceof BlockStairs ? iblockstate.func_177229_b(BlockStairs.field_176308_b) == BlockStairs.EnumHalf.TOP : (block instanceof BlockSlab ? iblockstate.func_177229_b(BlockSlab.field_176554_a) == BlockSlab.EnumBlockHalf.TOP : (block instanceof BlockHopper ? true : (block instanceof BlockSnow ? ((Integer)iblockstate.func_177229_b(BlockSnow.field_176315_a)).intValue() == 7 : false)))); -+ return block.isSideSolid(p_175683_0_, p_175683_1_, EnumFacing.UP); - } - - public boolean func_175677_d(BlockPos p_175677_1_, boolean p_175677_2_) -@@ -2248,7 +2410,7 @@ - else - { - Block block = this.func_180495_p(p_175677_1_).func_177230_c(); -- return block.func_149688_o().func_76218_k() && block.func_149686_d(); -+ return block.isNormalCube(this, p_175677_1_); - } - } - } -@@ -2265,8 +2427,7 @@ - - public void func_72891_a(boolean p_72891_1_, boolean p_72891_2_) - { -- this.field_72985_G = p_72891_1_; -- this.field_72992_H = p_72891_2_; -+ this.field_73011_w.setAllowedSpawnTypes(p_72891_1_, p_72891_2_); - } - - public void func_72835_b() -@@ -2276,6 +2437,11 @@ - - protected void func_72947_a() - { -+ this.field_73011_w.calculateInitialWeather(); -+ } -+ -+ public void calculateInitialWeatherBody() -+ { - if (this.field_72986_A.func_76059_o()) - { - this.field_73004_o = 1.0F; -@@ -2289,6 +2455,11 @@ - - protected void func_72979_l() - { -+ this.field_73011_w.updateWeather(); -+ } -+ -+ public void updateWeatherBody() -+ { - if (!this.field_73011_w.func_177495_o()) - { - if (!this.field_72995_K) -@@ -2383,6 +2554,7 @@ - { - this.field_72993_I.clear(); - this.field_72984_F.func_76320_a("buildList"); -+ this.field_72993_I.addAll(getPersistentChunks().keySet()); - int i; - EntityPlayer entityplayer; - int j; -@@ -2445,7 +2617,7 @@ - l += p_147467_1_; - i1 += p_147467_2_; - -- if (block.func_149688_o() == Material.field_151579_a && this.func_175699_k(blockpos) <= this.field_73012_v.nextInt(8) && this.func_175642_b(EnumSkyBlock.SKY, blockpos) <= 0) -+ if (block.isAir(this, blockpos) && this.func_175699_k(blockpos) <= this.field_73012_v.nextInt(8) && this.func_175642_b(EnumSkyBlock.SKY, blockpos) <= 0) - { - EntityPlayer entityplayer = this.func_72977_a((double)l + 0.5D, (double)j1 + 0.5D, (double)i1 + 0.5D, 8.0D); - -@@ -2485,6 +2657,11 @@ - - public boolean func_175670_e(BlockPos p_175670_1_, boolean p_175670_2_) - { -+ return this.field_73011_w.canBlockFreeze(p_175670_1_, p_175670_2_); -+ } -+ -+ public boolean canBlockFreezeBody(BlockPos p_175670_1_, boolean p_175670_2_) -+ { - BiomeGenBase biomegenbase = this.func_180494_b(p_175670_1_); - float f = biomegenbase.func_180626_a(p_175670_1_); - -@@ -2526,6 +2703,11 @@ - - public boolean func_175708_f(BlockPos p_175708_1_, boolean p_175708_2_) - { -+ return this.field_73011_w.canSnowAt(p_175708_1_, p_175708_2_); -+ } -+ -+ public boolean canSnowAtBody(BlockPos p_175708_1_, boolean p_175708_2_) -+ { - BiomeGenBase biomegenbase = this.func_180494_b(p_175708_1_); - float f = biomegenbase.func_180626_a(p_175708_1_); - -@@ -2543,7 +2725,7 @@ - { - Block block = this.func_180495_p(p_175708_1_).func_177230_c(); - -- if (block.func_149688_o() == Material.field_151579_a && Blocks.field_150431_aC.func_176196_c(this, p_175708_1_)) -+ if (block.isAir(this, p_175708_1_) && Blocks.field_150431_aC.func_176196_c(this, p_175708_1_)) - { - return true; - } -@@ -2575,10 +2757,11 @@ - else - { - Block block = this.func_180495_p(p_175638_1_).func_177230_c(); -- int i = p_175638_2_ == EnumSkyBlock.SKY ? 0 : block.func_149750_m(); -- int j = block.func_149717_k(); -+ int blockLight = block.getLightValue(this, p_175638_1_); -+ int i = p_175638_2_ == EnumSkyBlock.SKY ? 0 : blockLight; -+ int j = block.getLightOpacity(this, p_175638_1_); - -- if (j >= 15 && block.func_149750_m() > 0) -+ if (j >= 15 && blockLight > 0) - { - j = 1; - } -@@ -2792,10 +2975,10 @@ - public List func_175674_a(Entity p_175674_1_, AxisAlignedBB p_175674_2_, Predicate p_175674_3_) - { - ArrayList arraylist = Lists.newArrayList(); -- int i = MathHelper.func_76128_c((p_175674_2_.field_72340_a - 2.0D) / 16.0D); -- int j = MathHelper.func_76128_c((p_175674_2_.field_72336_d + 2.0D) / 16.0D); -- int k = MathHelper.func_76128_c((p_175674_2_.field_72339_c - 2.0D) / 16.0D); -- int l = MathHelper.func_76128_c((p_175674_2_.field_72334_f + 2.0D) / 16.0D); -+ int i = MathHelper.func_76128_c((p_175674_2_.field_72340_a - MAX_ENTITY_RADIUS) / 16.0D); -+ int j = MathHelper.func_76128_c((p_175674_2_.field_72336_d + MAX_ENTITY_RADIUS) / 16.0D); -+ int k = MathHelper.func_76128_c((p_175674_2_.field_72339_c - MAX_ENTITY_RADIUS) / 16.0D); -+ int l = MathHelper.func_76128_c((p_175674_2_.field_72334_f + MAX_ENTITY_RADIUS) / 16.0D); - - for (int i1 = i; i1 <= j; ++i1) - { -@@ -2854,10 +3037,10 @@ - - public List func_175647_a(Class p_175647_1_, AxisAlignedBB p_175647_2_, Predicate p_175647_3_) - { -- int i = MathHelper.func_76128_c((p_175647_2_.field_72340_a - 2.0D) / 16.0D); -- int j = MathHelper.func_76128_c((p_175647_2_.field_72336_d + 2.0D) / 16.0D); -- int k = MathHelper.func_76128_c((p_175647_2_.field_72339_c - 2.0D) / 16.0D); -- int l = MathHelper.func_76128_c((p_175647_2_.field_72334_f + 2.0D) / 16.0D); -+ int i = MathHelper.func_76128_c((p_175647_2_.field_72340_a - MAX_ENTITY_RADIUS) / 16.0D); -+ int j = MathHelper.func_76128_c((p_175647_2_.field_72336_d + MAX_ENTITY_RADIUS) / 16.0D); -+ int k = MathHelper.func_76128_c((p_175647_2_.field_72339_c - MAX_ENTITY_RADIUS) / 16.0D); -+ int l = MathHelper.func_76128_c((p_175647_2_.field_72334_f + MAX_ENTITY_RADIUS) / 16.0D); - ArrayList arraylist = Lists.newArrayList(); - - for (int i1 = i; i1 <= j; ++i1) -@@ -2938,13 +3121,16 @@ - - public void func_175650_b(Collection p_175650_1_) - { -- this.field_72996_f.addAll(p_175650_1_); - Iterator iterator = p_175650_1_.iterator(); - - while (iterator.hasNext()) - { - Entity entity = (Entity)iterator.next(); -- this.func_72923_a(entity); -+ if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.EntityJoinWorldEvent(entity, this))) -+ { -+ field_72996_f.add(entity); -+ this.func_72923_a(entity); -+ } - } - } - -@@ -2957,7 +3143,9 @@ - { - Block block1 = this.func_180495_p(p_175716_2_).func_177230_c(); - AxisAlignedBB axisalignedbb = p_175716_3_ ? null : p_175716_1_.func_180640_a(this, p_175716_2_, p_175716_1_.func_176223_P()); -- return axisalignedbb != null && !this.func_72917_a(axisalignedbb, p_175716_5_) ? false : (block1.func_149688_o() == Material.field_151594_q && p_175716_1_ == Blocks.field_150467_bQ ? true : block1.func_149688_o().func_76222_j() && p_175716_1_.func_176193_a(this, p_175716_2_, p_175716_4_, p_175716_6_)); -+ if (axisalignedbb != null && !this.func_72917_a(axisalignedbb, p_175716_5_)) return false; -+ if (block1.func_149688_o() == Material.field_151594_q && p_175716_1_ == Blocks.field_150467_bQ) return true; -+ return block1.func_176200_f(this, p_175716_2_) && p_175716_1_.func_176193_a(this, p_175716_2_, p_175716_4_, p_175716_6_); - } - - public int func_175627_a(BlockPos p_175627_1_, EnumFacing p_175627_2_) -@@ -3032,7 +3220,7 @@ - { - IBlockState iblockstate = this.func_180495_p(p_175651_1_); - Block block = iblockstate.func_177230_c(); -- return block.func_149721_r() ? this.func_175676_y(p_175651_1_) : block.func_180656_a(this, p_175651_1_, iblockstate, p_175651_2_); -+ return block.shouldCheckWeakPower(this, p_175651_1_, p_175651_2_) ? this.func_175676_y(p_175651_1_) : block.func_180656_a(this, p_175651_1_, iblockstate, p_175651_2_); - } - - public boolean func_175640_z(BlockPos p_175640_1_) -@@ -3160,7 +3348,7 @@ - - public long func_72905_C() - { -- return this.field_72986_A.func_76063_b(); -+ return this.field_73011_w.getSeed(); - } - - public long func_82737_E() -@@ -3170,17 +3358,17 @@ - - public long func_72820_D() - { -- return this.field_72986_A.func_76073_f(); -+ return this.field_73011_w.getWorldTime(); - } - - public void func_72877_b(long p_72877_1_) - { -- this.field_72986_A.func_76068_b(p_72877_1_); -+ this.field_73011_w.setWorldTime(p_72877_1_); - } - - public BlockPos func_175694_M() - { -- BlockPos blockpos = new BlockPos(this.field_72986_A.func_76079_c(), this.field_72986_A.func_76075_d(), this.field_72986_A.func_76074_e()); -+ BlockPos blockpos = this.field_73011_w.getSpawnPoint(); - - if (!this.func_175723_af().func_177746_a(blockpos)) - { -@@ -3192,7 +3380,7 @@ - - public void func_175652_B(BlockPos p_175652_1_) - { -- this.field_72986_A.func_176143_a(p_175652_1_); -+ this.field_73011_w.setSpawnPoint(p_175652_1_); - } - - @SideOnly(Side.CLIENT) -@@ -3212,12 +3400,18 @@ - - if (!this.field_72996_f.contains(p_72897_1_)) - { -+ if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.EntityJoinWorldEvent(p_72897_1_, this))) - this.field_72996_f.add(p_72897_1_); - } - } - - public boolean func_175660_a(EntityPlayer p_175660_1_, BlockPos p_175660_2_) - { -+ return this.field_73011_w.canMineBlock(p_175660_1_, p_175660_2_); -+ } -+ -+ public boolean canMineBlockBody(EntityPlayer p_175660_1_, BlockPos p_175660_2_) -+ { - return true; - } - -@@ -3307,8 +3501,7 @@ - - public boolean func_180502_D(BlockPos p_180502_1_) - { -- BiomeGenBase biomegenbase = this.func_180494_b(p_180502_1_); -- return biomegenbase.func_76736_e(); -+ return this.field_73011_w.isBlockHighHumidity(p_180502_1_); - } - - public MapStorage func_175693_T() -@@ -3367,12 +3560,12 @@ - - public int func_72800_K() - { -- return 256; -+ return this.field_73011_w.getHeight(); - } - - public int func_72940_L() - { -- return this.field_73011_w.func_177495_o() ? 128 : 256; -+ return this.field_73011_w.getActualHeight(); - } - - public Random func_72843_D(int p_72843_1_, int p_72843_2_, int p_72843_3_) -@@ -3429,7 +3622,7 @@ - @SideOnly(Side.CLIENT) - public double func_72919_O() - { -- return this.field_72986_A.func_76067_t() == WorldType.field_77138_c ? 0.0D : 63.0D; -+ return field_73011_w.getHorizon(); - } - - public void func_175715_c(int p_175715_1_, BlockPos p_175715_2_, int p_175715_3_) -@@ -3461,29 +3654,21 @@ - - public void func_175666_e(BlockPos p_175666_1_, Block p_175666_2_) - { -- Iterator iterator = EnumFacing.Plane.HORIZONTAL.iterator(); -- -- while (iterator.hasNext()) -+ for (EnumFacing enumfacing : EnumFacing.values()) - { -- EnumFacing enumfacing = (EnumFacing)iterator.next(); - BlockPos blockpos1 = p_175666_1_.func_177972_a(enumfacing); - - if (this.func_175667_e(blockpos1)) - { - IBlockState iblockstate = this.func_180495_p(blockpos1); -- -- if (Blocks.field_150441_bU.func_149907_e(iblockstate.func_177230_c())) -+ iblockstate.func_177230_c().onNeighborChange(this, blockpos1, p_175666_1_); -+ if (iblockstate.func_177230_c().isNormalCube(this, blockpos1)) - { -- iblockstate.func_177230_c().func_176204_a(this, blockpos1, iblockstate, p_175666_2_); -- } -- else if (iblockstate.func_177230_c().func_149721_r()) -- { -- blockpos1 = blockpos1.func_177972_a(enumfacing); -- iblockstate = this.func_180495_p(blockpos1); -- -- if (Blocks.field_150441_bU.func_149907_e(iblockstate.func_177230_c())) -+ BlockPos posOther = blockpos1.func_177972_a(enumfacing); -+ Block other = func_180495_p(posOther).func_177230_c(); -+ if (other.getWeakChanges(this, posOther)) - { -- iblockstate.func_177230_c().func_176204_a(this, blockpos1, iblockstate, p_175666_2_); -+ other.onNeighborChange(this, posOther, p_175666_1_); - } - } - } -@@ -3553,4 +3738,82 @@ - short short1 = 128; - return k >= -short1 && k <= short1 && l >= -short1 && l <= short1; - } -+ -+ -+ /* ======================================== FORGE START =====================================*/ -+ /** -+ * Determine if the given block is considered solid on the -+ * specified side. Used by placement logic. -+ * -+ * @param pos Block Position -+ * @param side The Side in question -+ * @return True if the side is solid -+ */ -+ public boolean isSideSolid(BlockPos pos, EnumFacing side) -+ { -+ return isSideSolid(pos, side, false); -+ } -+ -+ /** -+ * Determine if the given block is considered solid on the -+ * specified side. Used by placement logic. -+ * -+ * @param pos Block Position -+ * @param side The Side in question -+ * @param _default The default to return if the block doesn't exist. -+ * @return True if the side is solid -+ */ -+ @Override -+ public boolean isSideSolid(BlockPos pos, EnumFacing side, boolean _default) -+ { -+ if (!this.func_175701_a(pos)) return _default; -+ -+ Chunk chunk = func_175726_f(pos); -+ if (chunk == null || chunk.func_76621_g()) return _default; -+ return func_180495_p(pos).func_177230_c().isSideSolid(this, pos, side); -+ } -+ -+ /** -+ * Get the persistent chunks for this world -+ * -+ * @return -+ */ -+ public ImmutableSetMultimap getPersistentChunks() -+ { -+ return ForgeChunkManager.getPersistentChunksFor(this); -+ } -+ -+ /** -+ * Readded as it was removed, very useful helper function -+ * -+ * @param pos Block position -+ * @return The blocks light opacity -+ */ -+ public int getBlockLightOpacity(BlockPos pos) -+ { -+ if (!this.func_175701_a(pos)) return 0; -+ return func_175726_f(pos).func_177437_b(pos); -+ } -+ -+ /** -+ * Returns a count of entities that classify themselves as the specified creature type. -+ */ -+ public int countEntities(EnumCreatureType type, boolean forSpawnCount) -+ { -+ int count = 0; -+ for (int x = 0; x < field_72996_f.size(); x++) -+ { -+ if (((Entity)field_72996_f.get(x)).isCreatureType(type, forSpawnCount)) -+ { -+ count++; -+ } -+ } -+ return count; -+ } -+ -+ protected MapStorage perWorldStorage; //Moved to a getter to simulate final without being final so we can load in subclasses. -+ public MapStorage getPerWorldStorage() -+ { -+ return perWorldStorage; -+ } - } diff --git a/patches/minecraft/net/minecraft/world/WorldServer.java.patch b/patches/minecraft/net/minecraft/world/WorldServer.java.patch deleted file mode 100644 index 82158837d..000000000 --- a/patches/minecraft/net/minecraft/world/WorldServer.java.patch +++ /dev/null @@ -1,257 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/WorldServer.java -+++ ../src-work/minecraft/net/minecraft/world/WorldServer.java -@@ -94,30 +94,46 @@ - private List field_94579_S = Lists.newArrayList(); - private static final String __OBFID = "CL_00001437"; - -+ /** Stores the recently processed (lighting) chunks */ -+ protected Set doneChunks = new java.util.HashSet(); -+ public List customTeleporters = new ArrayList(); -+ private static boolean initChest = false; -+ public static void fillChestHook() -+ { -+ if (!initChest) -+ net.minecraftforge.common.ChestGenHooks.init(net.minecraftforge.common.ChestGenHooks.BONUS_CHEST, field_73069_S, 10, 10); -+ initChest = true; -+ } -+ - public WorldServer(MinecraftServer p_i45921_1_, ISaveHandler p_i45921_2_, WorldInfo p_i45921_3_, int p_i45921_4_, Profiler p_i45921_5_) - { - super(p_i45921_2_, p_i45921_3_, WorldProvider.func_76570_a(p_i45921_4_), p_i45921_5_, false); - this.field_73061_a = p_i45921_1_; - this.field_73062_L = new EntityTracker(this); - this.field_73063_M = new PlayerManager(this); -+ // Guarantee the dimension ID was not reset by the provider -+ int providerDim = this.field_73011_w.field_76574_g; - this.field_73011_w.func_76558_a(this); -+ this.field_73011_w.field_76574_g = providerDim; - this.field_73020_y = this.func_72970_h(); -+ perWorldStorage = new MapStorage(new net.minecraftforge.common.WorldSpecificSaveHandler((WorldServer)this, p_i45921_2_)); - this.field_85177_Q = new Teleporter(this); - this.func_72966_v(); - this.func_72947_a(); - this.func_175723_af().func_177725_a(p_i45921_1_.func_175580_aG()); -+ net.minecraftforge.common.DimensionManager.setWorld(p_i45921_4_, this); - } - - public World func_175643_b() - { - this.field_72988_C = new MapStorage(this.field_73019_z); - String s = VillageCollection.func_176062_a(this.field_73011_w); -- VillageCollection villagecollection = (VillageCollection)this.field_72988_C.func_75742_a(VillageCollection.class, s); -+ VillageCollection villagecollection = (VillageCollection)this.perWorldStorage.func_75742_a(VillageCollection.class, s); - - if (villagecollection == null) - { - this.field_72982_D = new VillageCollection(this); -- this.field_72988_C.func_75745_a(s, this.field_72982_D); -+ this.perWorldStorage.func_75745_a(s, this.field_72982_D); - } - else - { -@@ -210,6 +226,10 @@ - this.field_175740_d.func_75528_a(); - this.field_72984_F.func_76318_c("portalForcer"); - this.field_85177_Q.func_85189_a(this.func_82737_E()); -+ for (Teleporter tele : customTeleporters) -+ { -+ tele.func_85189_a(func_82737_E()); -+ } - this.field_72984_F.func_76319_b(); - this.func_147488_Z(); - } -@@ -217,6 +237,7 @@ - public BiomeGenBase.SpawnListEntry func_175734_a(EnumCreatureType p_175734_1_, BlockPos p_175734_2_) - { - List list = this.func_72863_F().func_177458_a(p_175734_1_, p_175734_2_); -+ list = net.minecraftforge.event.ForgeEventFactory.getPotentialSpawns(this, p_175734_1_, p_175734_2_, list); - return list != null && !list.isEmpty() ? (BiomeGenBase.SpawnListEntry)WeightedRandom.func_76271_a(this.field_73012_v, list) : null; - } - -@@ -274,10 +295,7 @@ - - private void func_73051_P() - { -- this.field_72986_A.func_76080_g(0); -- this.field_72986_A.func_76084_b(false); -- this.field_72986_A.func_76090_f(0); -- this.field_72986_A.func_76069_a(false); -+ this.field_73011_w.resetRainAndThunder(); - } - - public boolean func_73056_e() -@@ -367,7 +385,7 @@ - int i1; - BlockPos blockpos; - -- if (this.field_73012_v.nextInt(100000) == 0 && this.func_72896_J() && this.func_72911_I()) -+ if (this.field_73011_w.canDoLightning(chunk) && this.field_73012_v.nextInt(100000) == 0 && this.func_72896_J() && this.func_72911_I()) - { - this.field_73005_l = this.field_73005_l * 3 + 1013904223; - i1 = this.field_73005_l >> 2; -@@ -381,7 +399,7 @@ - - this.field_72984_F.func_76318_c("iceandsnow"); - -- if (this.field_73012_v.nextInt(16) == 0) -+ if (this.field_73011_w.canDoRainSnowIce(chunk) && this.field_73012_v.nextInt(16) == 0) - { - this.field_73005_l = this.field_73005_l * 3 + 1013904223; - i1 = this.field_73005_l >> 2; -@@ -483,6 +501,9 @@ - if (p_175654_2_.func_149698_L()) - { - b0 = 8; -+ //Keeping here as a note for future when it may be restored. -+ boolean isForced = getPersistentChunks().containsKey(new ChunkCoordIntPair(nextticklistentry.field_180282_a.func_177958_n() >> 4, nextticklistentry.field_180282_a.func_177952_p() >> 4)); -+ b0 = (byte)(isForced ? 0 : 8); - - if (this.func_175707_a(nextticklistentry.field_180282_a.func_177982_a(-b0, -b0, -b0), nextticklistentry.field_180282_a.func_177982_a(b0, b0, b0))) - { -@@ -535,7 +556,7 @@ - - public void func_72939_s() - { -- if (this.field_73010_i.isEmpty()) -+ if (this.field_73010_i.isEmpty() && getPersistentChunks().isEmpty()) - { - if (this.field_80004_Q++ >= 1200) - { -@@ -601,6 +622,9 @@ - { - nextticklistentry = (NextTickListEntry)iterator.next(); - iterator.remove(); -+ //Keeping here as a note for future when it may be restored. -+ //boolean isForced = getPersistentChunks().containsKey(new ChunkCoordIntPair(nextticklistentry.xCoord >> 4, nextticklistentry.zCoord >> 4)); -+ //byte b0 = isForced ? 0 : 8; - byte b0 = 0; - - if (this.func_175707_a(nextticklistentry.field_180282_a.func_177982_a(-b0, -b0, -b0), nextticklistentry.field_180282_a.func_177982_a(b0, b0, b0))) -@@ -729,14 +753,29 @@ - { - ArrayList arraylist = Lists.newArrayList(); - -- for (int k1 = 0; k1 < this.field_147482_g.size(); ++k1) -+ //Forge: Optomize this loop to only grab from the chunks it needs -+ for (int x = (p_147486_1_ >> 4); x <= (p_147486_4_ >> 4); x++) - { -- TileEntity tileentity = (TileEntity)this.field_147482_g.get(k1); -- BlockPos blockpos = tileentity.func_174877_v(); -- -- if (blockpos.func_177958_n() >= p_147486_1_ && blockpos.func_177956_o() >= p_147486_2_ && blockpos.func_177952_p() >= p_147486_3_ && blockpos.func_177958_n() < p_147486_4_ && blockpos.func_177956_o() < p_147486_5_ && blockpos.func_177952_p() < p_147486_6_) -+ for (int z = (p_147486_3_ >> 4); z <= (p_147486_6_ >> 4); z++) - { -- arraylist.add(tileentity); -+ Chunk chunk = this.func_72964_e(x, z); -+ if (chunk != null) -+ { -+ for (Object obj : chunk.func_177434_r().values()) -+ { -+ TileEntity entity = (TileEntity)obj; -+ if (!entity.func_145837_r()) -+ { -+ BlockPos pos = entity.func_174877_v(); -+ if (pos.func_177958_n() >= p_147486_1_ && pos.func_177956_o() >= p_147486_2_ && pos.func_177952_p() >= p_147486_3_ && -+ pos.func_177958_n() <= p_147486_4_ && pos.func_177956_o() <= p_147486_5_ && pos.func_177952_p() <= p_147486_6_) -+ { -+ arraylist.add(entity); -+ } -+ -+ } -+ } -+ } - } - } - -@@ -745,6 +784,10 @@ - - public boolean func_175660_a(EntityPlayer p_175660_1_, BlockPos p_175660_2_) - { -+ return super.func_175660_a(p_175660_1_, p_175660_2_); -+ } -+ public boolean canMineBlockBody(EntityPlayer p_175660_1_, BlockPos p_175660_2_) -+ { - return !this.field_73061_a.func_175579_a(this, p_175660_2_, p_175660_1_) && this.func_175723_af().func_177746_a(p_175660_2_); - } - -@@ -810,6 +853,7 @@ - } - else - { -+ if (net.minecraftforge.event.ForgeEventFactory.onCreateWorldSpawn(this, p_73052_1_)) return; - this.field_72987_B = true; - WorldChunkManager worldchunkmanager = this.field_73011_w.func_177499_m(); - List list = worldchunkmanager.func_76932_a(); -@@ -855,7 +899,7 @@ - - protected void func_73047_i() - { -- WorldGeneratorBonusChest worldgeneratorbonuschest = new WorldGeneratorBonusChest(field_73069_S, 10); -+ WorldGeneratorBonusChest worldgeneratorbonuschest = net.minecraftforge.common.ForgeHooks.getBonusChest(field_73012_v); - - for (int i = 0; i < 10; ++i) - { -@@ -892,6 +936,7 @@ - } - - this.field_73020_y.func_73151_a(p_73044_1_, p_73044_2_); -+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.WorldEvent.Save(this)); - List list = this.field_73059_b.func_152380_a(); - Iterator iterator = list.iterator(); - -@@ -929,6 +974,7 @@ - this.field_72986_A.func_176135_e(this.func_175723_af().func_177732_i()); - this.field_73019_z.func_75755_a(this.field_72986_A, this.field_73061_a.func_71203_ab().func_72378_q()); - this.field_72988_C.func_75744_a(); -+ this.perWorldStorage.func_75744_a(); - } - - public void func_72923_a(Entity p_72923_1_) -@@ -984,6 +1030,7 @@ - public Explosion func_72885_a(Entity p_72885_1_, double p_72885_2_, double p_72885_4_, double p_72885_6_, float p_72885_8_, boolean p_72885_9_, boolean p_72885_10_) - { - Explosion explosion = new Explosion(this, p_72885_1_, p_72885_2_, p_72885_4_, p_72885_6_, p_72885_8_, p_72885_9_, p_72885_10_); -+ if (net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this, explosion)) return explosion; - explosion.func_77278_a(); - explosion.func_77279_a(false); - -@@ -1074,19 +1121,23 @@ - this.field_73061_a.func_71203_ab().func_148537_a(new S2BPacketChangeGameState(8, this.field_73017_q), this.field_73011_w.func_177502_q()); - } - -+ /* The function in use here has been replaced in order to only send the weather info to players in the correct dimension, -+ * rather than to all players on the server. This is what causes the client-side rain, as the -+ * client believes that it has started raining locally, rather than in another dimension. -+ */ - if (flag != this.func_72896_J()) - { - if (flag) - { -- this.field_73061_a.func_71203_ab().func_148540_a(new S2BPacketChangeGameState(2, 0.0F)); -+ this.field_73061_a.func_71203_ab().func_148537_a(new S2BPacketChangeGameState(2, 0.0F), this.field_73011_w.field_76574_g); - } - else - { -- this.field_73061_a.func_71203_ab().func_148540_a(new S2BPacketChangeGameState(1, 0.0F)); -+ this.field_73061_a.func_71203_ab().func_148537_a(new S2BPacketChangeGameState(1, 0.0F), this.field_73011_w.field_76574_g); - } - -- this.field_73061_a.func_71203_ab().func_148540_a(new S2BPacketChangeGameState(7, this.field_73004_o)); -- this.field_73061_a.func_71203_ab().func_148540_a(new S2BPacketChangeGameState(8, this.field_73017_q)); -+ this.field_73061_a.func_71203_ab().func_148537_a(new S2BPacketChangeGameState(7, this.field_73004_o), this.field_73011_w.field_76574_g); -+ this.field_73061_a.func_71203_ab().func_148537_a(new S2BPacketChangeGameState(8, this.field_73017_q), this.field_73011_w.field_76574_g); - } - } - -@@ -1152,6 +1203,11 @@ - return this.field_73061_a.func_152345_ab(); - } - -+ public java.io.File getChunkSaveLocation() -+ { -+ return ((net.minecraft.world.chunk.storage.AnvilChunkLoader)field_73059_b.field_73247_e).field_75825_d; -+ } -+ - static class ServerBlockEventList extends ArrayList - { - private static final String __OBFID = "CL_00001439"; diff --git a/patches/minecraft/net/minecraft/world/WorldServerMulti.java.patch b/patches/minecraft/net/minecraft/world/WorldServerMulti.java.patch deleted file mode 100644 index 8295a73c4..000000000 --- a/patches/minecraft/net/minecraft/world/WorldServerMulti.java.patch +++ /dev/null @@ -1,62 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/WorldServerMulti.java -+++ ../src-work/minecraft/net/minecraft/world/WorldServerMulti.java -@@ -11,13 +11,14 @@ - public class WorldServerMulti extends WorldServer - { - private WorldServer field_175743_a; -+ private IBorderListener borderListener; - private static final String __OBFID = "CL_00001430"; - - public WorldServerMulti(MinecraftServer p_i45923_1_, ISaveHandler p_i45923_2_, int p_i45923_3_, WorldServer p_i45923_4_, Profiler p_i45923_5_) - { - super(p_i45923_1_, p_i45923_2_, new DerivedWorldInfo(p_i45923_4_.func_72912_H()), p_i45923_3_, p_i45923_5_); - this.field_175743_a = p_i45923_4_; -- p_i45923_4_.func_175723_af().func_177737_a(new IBorderListener() -+ this.borderListener = new IBorderListener() - { - private static final String __OBFID = "CL_00002273"; - public void func_177694_a(WorldBorder p_177694_1_, double p_177694_2_) -@@ -48,22 +49,26 @@ - { - WorldServerMulti.this.func_175723_af().func_177724_b(p_177695_2_); - } -- }); -+ }; -+ this.field_175743_a.func_175723_af().func_177737_a(this.borderListener); - } - -- protected void func_73042_a() throws MinecraftException {} -+ protected void func_73042_a() throws MinecraftException -+ { -+ this.perWorldStorage.func_75744_a(); -+ } - - public World func_175643_b() - { - this.field_72988_C = this.field_175743_a.func_175693_T(); - this.field_96442_D = this.field_175743_a.func_96441_U(); - String s = VillageCollection.func_176062_a(this.field_73011_w); -- VillageCollection villagecollection = (VillageCollection)this.field_72988_C.func_75742_a(VillageCollection.class, s); -+ VillageCollection villagecollection = (VillageCollection)this.perWorldStorage.func_75742_a(VillageCollection.class, s); - - if (villagecollection == null) - { - this.field_72982_D = new VillageCollection(this); -- this.field_72988_C.func_75745_a(s, this.field_72982_D); -+ this.perWorldStorage.func_75745_a(s, this.field_72982_D); - } - else - { -@@ -73,4 +78,12 @@ - - return this; - } -+ -+ -+ @Override -+ public void func_73041_k() -+ { -+ super.func_73041_k(); -+ this.field_175743_a.func_175723_af().removeListener(this.borderListener); // Unlink ourselves, to prevent world leak. -+ } - } diff --git a/patches/minecraft/net/minecraft/world/biome/BiomeDecorator.java.patch b/patches/minecraft/net/minecraft/world/biome/BiomeDecorator.java.patch deleted file mode 100644 index f1cbc0743..000000000 --- a/patches/minecraft/net/minecraft/world/biome/BiomeDecorator.java.patch +++ /dev/null @@ -1,267 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/biome/BiomeDecorator.java -+++ ../src-work/minecraft/net/minecraft/world/biome/BiomeDecorator.java -@@ -23,6 +23,11 @@ - import net.minecraft.world.gen.feature.WorldGenWaterlily; - import net.minecraft.world.gen.feature.WorldGenerator; - -+import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.*; -+import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.*; -+import net.minecraftforge.common.*; -+import net.minecraftforge.event.terraingen.*; -+ - public class BiomeDecorator - { - public World field_76815_a; -@@ -125,26 +130,30 @@ - - protected void func_150513_a(BiomeGenBase p_150513_1_) - { -+ MinecraftForge.EVENT_BUS.post(new DecorateBiomeEvent.Pre(field_76815_a, field_76813_b, field_180294_c)); - this.func_76797_b(); - int i; - int j; - int k; - -- for (i = 0; i < this.field_76805_H; ++i) -+ boolean doGen = TerrainGen.decorate(field_76815_a, field_76813_b, field_180294_c, SAND); -+ for (i = 0; doGen && i < this.field_76805_H; ++i) - { - j = this.field_76813_b.nextInt(16) + 8; - k = this.field_76813_b.nextInt(16) + 8; - this.field_76810_g.func_180709_b(this.field_76815_a, this.field_76813_b, this.field_76815_a.func_175672_r(this.field_180294_c.func_177982_a(j, 0, k))); - } - -- for (i = 0; i < this.field_76806_I; ++i) -+ doGen = TerrainGen.decorate(field_76815_a, field_76813_b, field_180294_c, CLAY); -+ for (i = 0; doGen && i < this.field_76806_I; ++i) - { - j = this.field_76813_b.nextInt(16) + 8; - k = this.field_76813_b.nextInt(16) + 8; - this.field_76809_f.func_180709_b(this.field_76815_a, this.field_76813_b, this.field_76815_a.func_175672_r(this.field_180294_c.func_177982_a(j, 0, k))); - } - -- for (i = 0; i < this.field_76801_G; ++i) -+ doGen = TerrainGen.decorate(field_76815_a, field_76813_b, field_180294_c, SAND_PASS2); -+ for (i = 0; doGen && i < this.field_76801_G; ++i) - { - j = this.field_76813_b.nextInt(16) + 8; - k = this.field_76813_b.nextInt(16) + 8; -@@ -161,7 +170,8 @@ - int l; - BlockPos blockpos; - -- for (j = 0; j < i; ++j) -+ doGen = TerrainGen.decorate(field_76815_a, field_76813_b, field_180294_c, TREE); -+ for (j = 0; doGen && j < i; ++j) - { - k = this.field_76813_b.nextInt(16) + 8; - l = this.field_76813_b.nextInt(16) + 8; -@@ -175,7 +185,8 @@ - } - } - -- for (j = 0; j < this.field_76807_J; ++j) -+ doGen = TerrainGen.decorate(field_76815_a, field_76813_b, field_180294_c, BIG_SHROOM); -+ for (j = 0; doGen && j < this.field_76807_J; ++j) - { - k = this.field_76813_b.nextInt(16) + 8; - l = this.field_76813_b.nextInt(16) + 8; -@@ -184,11 +195,12 @@ - - int i1; - -- for (j = 0; j < this.field_76802_A; ++j) -+ doGen = TerrainGen.decorate(field_76815_a, field_76813_b, field_180294_c, FLOWERS); -+ for (j = 0; doGen && j < this.field_76802_A; ++j) - { - k = this.field_76813_b.nextInt(16) + 8; - l = this.field_76813_b.nextInt(16) + 8; -- i1 = this.field_76813_b.nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(k, 0, l)).func_177956_o() + 32); -+ i1 = nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(k, 0, l)).func_177956_o() + 32); - blockpos = this.field_180294_c.func_177982_a(k, i1, l); - BlockFlower.EnumFlowerType enumflowertype = p_150513_1_.func_180623_a(this.field_76813_b, blockpos); - BlockFlower blockflower = enumflowertype.func_176964_a().func_180346_a(); -@@ -200,29 +212,32 @@ - } - } - -- for (j = 0; j < this.field_76803_B; ++j) -+ doGen = TerrainGen.decorate(field_76815_a, field_76813_b, field_180294_c, GRASS); -+ for (j = 0; doGen && j < this.field_76803_B; ++j) - { - k = this.field_76813_b.nextInt(16) + 8; - l = this.field_76813_b.nextInt(16) + 8; -- i1 = this.field_76813_b.nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(k, 0, l)).func_177956_o() * 2); -+ i1 = nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(k, 0, l)).func_177956_o() * 2); - p_150513_1_.func_76730_b(this.field_76813_b).func_180709_b(this.field_76815_a, this.field_76813_b, this.field_180294_c.func_177982_a(k, i1, l)); - } - -- for (j = 0; j < this.field_76804_C; ++j) -+ doGen = TerrainGen.decorate(field_76815_a, field_76813_b, field_180294_c, DEAD_BUSH); -+ for (j = 0; doGen && j < this.field_76804_C; ++j) - { - k = this.field_76813_b.nextInt(16) + 8; - l = this.field_76813_b.nextInt(16) + 8; -- i1 = this.field_76813_b.nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(k, 0, l)).func_177956_o() * 2); -+ i1 = nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(k, 0, l)).func_177956_o() * 2); - (new WorldGenDeadBush()).func_180709_b(this.field_76815_a, this.field_76813_b, this.field_180294_c.func_177982_a(k, i1, l)); - } - - j = 0; - -- while (j < this.field_76833_y) -+ doGen = TerrainGen.decorate(field_76815_a, field_76813_b, field_180294_c, LILYPAD); -+ while (doGen && j < this.field_76833_y) - { - k = this.field_76813_b.nextInt(16) + 8; - l = this.field_76813_b.nextInt(16) + 8; -- i1 = this.field_76813_b.nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(k, 0, l)).func_177956_o() * 2); -+ i1 = nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(k, 0, l)).func_177956_o() * 2); - blockpos = this.field_180294_c.func_177982_a(k, i1, l); - - while (true) -@@ -244,7 +259,8 @@ - } - } - -- for (j = 0; j < this.field_76798_D; ++j) -+ doGen = TerrainGen.decorate(field_76815_a, field_76813_b, field_180294_c, SHROOM); -+ for (j = 0; doGen && j < this.field_76798_D; ++j) - { - if (this.field_76813_b.nextInt(4) == 0) - { -@@ -258,57 +274,60 @@ - { - k = this.field_76813_b.nextInt(16) + 8; - l = this.field_76813_b.nextInt(16) + 8; -- i1 = this.field_76813_b.nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(k, 0, l)).func_177956_o() * 2); -+ i1 = nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(k, 0, l)).func_177956_o() * 2); - blockpos = this.field_180294_c.func_177982_a(k, i1, l); - this.field_76827_t.func_180709_b(this.field_76815_a, this.field_76813_b, blockpos); - } - } - -- if (this.field_76813_b.nextInt(4) == 0) -+ if (doGen && this.field_76813_b.nextInt(4) == 0) - { - j = this.field_76813_b.nextInt(16) + 8; - k = this.field_76813_b.nextInt(16) + 8; -- l = this.field_76813_b.nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(j, 0, k)).func_177956_o() * 2); -+ l = nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(j, 0, k)).func_177956_o() * 2); - this.field_76828_s.func_180709_b(this.field_76815_a, this.field_76813_b, this.field_180294_c.func_177982_a(j, l, k)); - } - -- if (this.field_76813_b.nextInt(8) == 0) -+ if (doGen && this.field_76813_b.nextInt(8) == 0) - { - j = this.field_76813_b.nextInt(16) + 8; - k = this.field_76813_b.nextInt(16) + 8; -- l = this.field_76813_b.nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(j, 0, k)).func_177956_o() * 2); -+ l = nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(j, 0, k)).func_177956_o() * 2); - this.field_76827_t.func_180709_b(this.field_76815_a, this.field_76813_b, this.field_180294_c.func_177982_a(j, l, k)); - } - -- for (j = 0; j < this.field_76799_E; ++j) -+ doGen = TerrainGen.decorate(field_76815_a, field_76813_b, field_180294_c, REED); -+ for (j = 0; doGen && j < this.field_76799_E; ++j) - { - k = this.field_76813_b.nextInt(16) + 8; - l = this.field_76813_b.nextInt(16) + 8; -- i1 = this.field_76813_b.nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(k, 0, l)).func_177956_o() * 2); -+ i1 = nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(k, 0, l)).func_177956_o() * 2); - this.field_76825_v.func_180709_b(this.field_76815_a, this.field_76813_b, this.field_180294_c.func_177982_a(k, i1, l)); - } - -- for (j = 0; j < 10; ++j) -+ for (j = 0; doGen && j < 10; ++j) - { - k = this.field_76813_b.nextInt(16) + 8; - l = this.field_76813_b.nextInt(16) + 8; -- i1 = this.field_76813_b.nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(k, 0, l)).func_177956_o() * 2); -+ i1 = nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(k, 0, l)).func_177956_o() * 2); - this.field_76825_v.func_180709_b(this.field_76815_a, this.field_76813_b, this.field_180294_c.func_177982_a(k, i1, l)); - } - -- if (this.field_76813_b.nextInt(32) == 0) -+ doGen = TerrainGen.decorate(field_76815_a, field_76813_b, field_180294_c, PUMPKIN); -+ if (doGen && this.field_76813_b.nextInt(32) == 0) - { - j = this.field_76813_b.nextInt(16) + 8; - k = this.field_76813_b.nextInt(16) + 8; -- l = this.field_76813_b.nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(j, 0, k)).func_177956_o() * 2); -+ l = nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(j, 0, k)).func_177956_o() * 2); - (new WorldGenPumpkin()).func_180709_b(this.field_76815_a, this.field_76813_b, this.field_180294_c.func_177982_a(j, l, k)); - } - -- for (j = 0; j < this.field_76800_F; ++j) -+ doGen = TerrainGen.decorate(field_76815_a, field_76813_b, field_180294_c, CACTUS); -+ for (j = 0; doGen && j < this.field_76800_F; ++j) - { - k = this.field_76813_b.nextInt(16) + 8; - l = this.field_76813_b.nextInt(16) + 8; -- i1 = this.field_76813_b.nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(k, 0, l)).func_177956_o() * 2); -+ i1 = nextInt(this.field_76815_a.func_175645_m(this.field_180294_c.func_177982_a(k, 0, l)).func_177956_o() * 2); - this.field_76824_w.func_180709_b(this.field_76815_a, this.field_76813_b, this.field_180294_c.func_177982_a(k, i1, l)); - } - -@@ -316,18 +335,22 @@ - { - BlockPos blockpos1; - -- for (j = 0; j < 50; ++j) -+ doGen = TerrainGen.decorate(field_76815_a, field_76813_b, field_180294_c, LAKE_WATER); -+ for (j = 0; doGen && j < 50; ++j) - { - blockpos1 = this.field_180294_c.func_177982_a(this.field_76813_b.nextInt(16) + 8, this.field_76813_b.nextInt(this.field_76813_b.nextInt(248) + 8), this.field_76813_b.nextInt(16) + 8); - (new WorldGenLiquids(Blocks.field_150358_i)).func_180709_b(this.field_76815_a, this.field_76813_b, blockpos1); - } - -- for (j = 0; j < 20; ++j) -+ doGen = TerrainGen.decorate(field_76815_a, field_76813_b, field_180294_c, LAKE_LAVA); -+ for (j = 0; doGen && j < 20; ++j) - { - blockpos1 = this.field_180294_c.func_177982_a(this.field_76813_b.nextInt(16) + 8, this.field_76813_b.nextInt(this.field_76813_b.nextInt(this.field_76813_b.nextInt(240) + 8) + 8), this.field_76813_b.nextInt(16) + 8); - (new WorldGenLiquids(Blocks.field_150356_k)).func_180709_b(this.field_76815_a, this.field_76813_b, blockpos1); - } - } -+ -+ MinecraftForge.EVENT_BUS.post(new DecorateBiomeEvent.Post(field_76815_a, field_76813_b, field_180294_c)); - } - - protected void func_76795_a(int p_76795_1_, WorldGenerator p_76795_2_, int p_76795_3_, int p_76795_4_) -@@ -370,16 +393,35 @@ - - protected void func_76797_b() - { -+ MinecraftForge.ORE_GEN_BUS.post(new OreGenEvent.Pre(field_76815_a, field_76813_b, field_180294_c)); -+ if (TerrainGen.generateOre(field_76815_a, field_76813_b, field_76823_i, field_180294_c, DIRT)) - this.func_76795_a(this.field_180293_d.field_177790_J, this.field_76823_i, this.field_180293_d.field_177791_K, this.field_180293_d.field_177784_L); -+ if (TerrainGen.generateOre(field_76815_a, field_76813_b, field_76820_j, field_180294_c, GRAVEL)) - this.func_76795_a(this.field_180293_d.field_177786_N, this.field_76820_j, this.field_180293_d.field_177787_O, this.field_180293_d.field_177797_P); -+ if (TerrainGen.generateOre(field_76815_a, field_76813_b, field_180297_k, field_180294_c, DIORITE)) - this.func_76795_a(this.field_180293_d.field_177795_V, this.field_180297_k, this.field_180293_d.field_177794_W, this.field_180293_d.field_177801_X); -+ if (TerrainGen.generateOre(field_76815_a, field_76813_b, field_180296_j, field_180294_c, GRANITE)) - this.func_76795_a(this.field_180293_d.field_177799_R, this.field_180296_j, this.field_180293_d.field_177798_S, this.field_180293_d.field_177793_T); -+ if (TerrainGen.generateOre(field_76815_a, field_76813_b, field_180295_l, field_180294_c, ANDESITE)) - this.func_76795_a(this.field_180293_d.field_177802_Z, this.field_180295_l, this.field_180293_d.field_177846_aa, this.field_180293_d.field_177847_ab); -+ if (TerrainGen.generateOre(field_76815_a, field_76813_b, field_76821_k, field_180294_c, COAL)) - this.func_76795_a(this.field_180293_d.field_177845_ad, this.field_76821_k, this.field_180293_d.field_177851_ae, this.field_180293_d.field_177853_af); -+ if (TerrainGen.generateOre(field_76815_a, field_76813_b, field_76818_l, field_180294_c, IRON)) - this.func_76795_a(this.field_180293_d.field_177849_ah, this.field_76818_l, this.field_180293_d.field_177832_ai, this.field_180293_d.field_177834_aj); -+ if (TerrainGen.generateOre(field_76815_a, field_76813_b, field_76819_m, field_180294_c, GOLD)) - this.func_76795_a(this.field_180293_d.field_177830_al, this.field_76819_m, this.field_180293_d.field_177840_am, this.field_180293_d.field_177842_an); -+ if (TerrainGen.generateOre(field_76815_a, field_76813_b, field_180299_p, field_180294_c, REDSTONE)) - this.func_76795_a(this.field_180293_d.field_177838_ap, this.field_180299_p, this.field_180293_d.field_177818_aq, this.field_180293_d.field_177816_ar); -+ if (TerrainGen.generateOre(field_76815_a, field_76813_b, field_180298_q, field_180294_c, DIAMOND)) - this.func_76795_a(this.field_180293_d.field_177812_at, this.field_180298_q, this.field_180293_d.field_177826_au, this.field_180293_d.field_177824_av); -+ if (TerrainGen.generateOre(field_76815_a, field_76813_b, field_76831_p, field_180294_c, LAPIS)) - this.func_76793_b(this.field_180293_d.field_177820_ax, this.field_76831_p, this.field_180293_d.field_177807_ay, this.field_180293_d.field_177805_az); -+ MinecraftForge.ORE_GEN_BUS.post(new OreGenEvent.Post(field_76815_a, field_76813_b, field_180294_c)); - } -+ -+ private int nextInt(int i) { //Safety wrapper to prevent exceptions. -+ if (i <= 1) -+ return 0; -+ return this.field_76813_b.nextInt(i); -+ } - } diff --git a/patches/minecraft/net/minecraft/world/biome/BiomeGenHills.java.patch b/patches/minecraft/net/minecraft/world/biome/BiomeGenHills.java.patch deleted file mode 100644 index 951092d6d..000000000 --- a/patches/minecraft/net/minecraft/world/biome/BiomeGenHills.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/biome/BiomeGenHills.java -+++ ../src-work/minecraft/net/minecraft/world/biome/BiomeGenHills.java -@@ -58,7 +58,7 @@ - int i1 = p_180624_2_.nextInt(16); - BlockPos blockpos1 = p_180624_3_.func_177982_a(k, l, i1); - -- if (p_180624_1_.func_180495_p(blockpos1).func_177230_c() == Blocks.field_150348_b) -+ if (p_180624_1_.func_180495_p(blockpos1).func_177230_c().isReplaceableOreGen(p_180624_1_, blockpos1, net.minecraft.block.state.pattern.BlockHelper.func_177642_a(Blocks.field_150348_b))) - { - p_180624_1_.func_180501_a(blockpos1, Blocks.field_150412_bA.func_176223_P(), 2); - } diff --git a/patches/minecraft/net/minecraft/world/biome/BiomeGenJungle.java.patch b/patches/minecraft/net/minecraft/world/biome/BiomeGenJungle.java.patch deleted file mode 100644 index 52cad7625..000000000 --- a/patches/minecraft/net/minecraft/world/biome/BiomeGenJungle.java.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/biome/BiomeGenJungle.java -+++ ../src-work/minecraft/net/minecraft/world/biome/BiomeGenJungle.java -@@ -61,7 +61,9 @@ - super.func_180624_a(p_180624_1_, p_180624_2_, p_180624_3_); - int i = p_180624_2_.nextInt(16) + 8; - int j = p_180624_2_.nextInt(16) + 8; -- int k = p_180624_2_.nextInt(p_180624_1_.func_175645_m(p_180624_3_.func_177982_a(i, 0, j)).func_177956_o() * 2); -+ int height = p_180624_1_.func_175645_m(p_180624_3_.func_177982_a(i, 0, j)).func_177956_o() * 2; // could == 0, which crashes nextInt -+ if (height < 1) height = 1; -+ int k = p_180624_2_.nextInt(height); - (new WorldGenMelon()).func_180709_b(p_180624_1_, p_180624_2_, p_180624_3_.func_177982_a(i, k, j)); - WorldGenVines worldgenvines = new WorldGenVines(); - diff --git a/patches/minecraft/net/minecraft/world/biome/BiomeGenPlains.java.patch b/patches/minecraft/net/minecraft/world/biome/BiomeGenPlains.java.patch deleted file mode 100644 index 307fd62fc..000000000 --- a/patches/minecraft/net/minecraft/world/biome/BiomeGenPlains.java.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/biome/BiomeGenPlains.java -+++ ../src-work/minecraft/net/minecraft/world/biome/BiomeGenPlains.java -@@ -109,4 +109,19 @@ - biomegenplains.field_150609_ah = 14273354; - return biomegenplains; - } -+ -+ @Override -+ public void addDefaultFlowers() -+ { -+ BlockFlower red = net.minecraft.init.Blocks.field_150328_O; -+ BlockFlower yel = net.minecraft.init.Blocks.field_150327_N; -+ addFlower(red.func_176223_P().func_177226_a(red.func_176494_l(), BlockFlower.EnumFlowerType.ORANGE_TULIP), 3); -+ addFlower(red.func_176223_P().func_177226_a(red.func_176494_l(), BlockFlower.EnumFlowerType.RED_TULIP), 3); -+ addFlower(red.func_176223_P().func_177226_a(red.func_176494_l(), BlockFlower.EnumFlowerType.PINK_TULIP), 3); -+ addFlower(red.func_176223_P().func_177226_a(red.func_176494_l(), BlockFlower.EnumFlowerType.WHITE_TULIP), 3); -+ addFlower(red.func_176223_P().func_177226_a(red.func_176494_l(), BlockFlower.EnumFlowerType.POPPY), 20); -+ addFlower(red.func_176223_P().func_177226_a(red.func_176494_l(), BlockFlower.EnumFlowerType.HOUSTONIA), 20); -+ addFlower(red.func_176223_P().func_177226_a(red.func_176494_l(), BlockFlower.EnumFlowerType.OXEYE_DAISY), 20); -+ addFlower(yel.func_176223_P().func_177226_a(yel.func_176494_l(), BlockFlower.EnumFlowerType.DANDELION), 30); -+ } - } diff --git a/patches/minecraft/net/minecraft/world/chunk/Chunk.java.patch b/patches/minecraft/net/minecraft/world/chunk/Chunk.java.patch deleted file mode 100644 index 9ccc98432..000000000 --- a/patches/minecraft/net/minecraft/world/chunk/Chunk.java.patch +++ /dev/null @@ -1,264 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/chunk/Chunk.java -+++ ../src-work/minecraft/net/minecraft/world/chunk/Chunk.java -@@ -35,6 +35,9 @@ - import net.minecraft.world.gen.ChunkProviderDebug; - import net.minecraftforge.fml.relauncher.Side; - import net.minecraftforge.fml.relauncher.SideOnly; -+import net.minecraftforge.common.MinecraftForge; -+import net.minecraftforge.event.entity.EntityEvent; -+import net.minecraftforge.event.world.ChunkEvent; - import org.apache.logging.log4j.LogManager; - import org.apache.logging.log4j.Logger; - -@@ -174,7 +177,7 @@ - { - Block block = this.func_150810_a(j, l - 1, k); - -- if (block.func_149717_k() == 0) -+ if (func_150808_b(j, l - 1, k) == 0) - { - --l; - continue; -@@ -469,12 +472,12 @@ - - public int func_177437_b(BlockPos p_177437_1_) - { -- return this.func_177428_a(p_177437_1_).func_149717_k(); -+ return this.func_177428_a(p_177437_1_).getLightOpacity(field_76637_e, p_177437_1_); - } - - private int func_150808_b(int p_150808_1_, int p_150808_2_, int p_150808_3_) - { -- return this.func_150810_a(p_150808_1_, p_150808_2_, p_150808_3_).func_149717_k(); -+ return func_177437_b(new BlockPos((field_76635_g << 4) + p_150808_1_, p_150808_2_, (field_76647_h << 4) + p_150808_3_)); - } - - private Block func_150810_a(int p_150810_1_, int p_150810_2_, int p_150810_3_) -@@ -653,16 +656,23 @@ - flag = j >= i1; - } - -+ int j1 = block.getLightOpacity(this.field_76637_e, p_177436_1_); -+ - extendedblockstorage.func_177484_a(i, j & 15, k, p_177436_2_); - -- if (block1 != block) -+ //if (block1 != block) - { - if (!this.field_76637_e.field_72995_K) - { -+ if (iblockstate1.func_177230_c() != p_177436_2_.func_177230_c()) //Only fire block breaks when the block changes. - block1.func_180663_b(this.field_76637_e, p_177436_1_, iblockstate1); -+ TileEntity te = this.func_177424_a(p_177436_1_, Chunk.EnumCreateEntityType.CHECK); -+ if (te != null && te.shouldRefresh(this.field_76637_e, p_177436_1_, iblockstate1, p_177436_2_)) this.field_76637_e.func_175713_t(p_177436_1_); - } -- else if (block1 instanceof ITileEntityProvider) -+ else if (block1.hasTileEntity(iblockstate1)) - { -+ TileEntity te = this.func_177424_a(p_177436_1_, Chunk.EnumCreateEntityType.CHECK); -+ if (te != null && te.shouldRefresh(this.field_76637_e, p_177436_1_, iblockstate1, p_177436_2_)) - this.field_76637_e.func_175713_t(p_177436_1_); - } - } -@@ -679,8 +689,7 @@ - } - else - { -- int j1 = block.func_149717_k(); -- int k1 = block1.func_149717_k(); -+ int k1 = block.getLightOpacity(this.field_76637_e, p_177436_1_); - - if (j1 > 0) - { -@@ -702,28 +711,18 @@ - - TileEntity tileentity; - -- if (block1 instanceof ITileEntityProvider) -- { -- tileentity = this.func_177424_a(p_177436_1_, Chunk.EnumCreateEntityType.CHECK); -- -- if (tileentity != null) -- { -- tileentity.func_145836_u(); -- } -- } -- - if (!this.field_76637_e.field_72995_K && block1 != block) - { - block.func_176213_c(this.field_76637_e, p_177436_1_, p_177436_2_); - } - -- if (block instanceof ITileEntityProvider) -+ if (block.hasTileEntity(p_177436_2_)) - { - tileentity = this.func_177424_a(p_177436_1_, Chunk.EnumCreateEntityType.CHECK); - - if (tileentity == null) - { -- tileentity = ((ITileEntityProvider)block).func_149915_a(this.field_76637_e, block.func_176201_c(p_177436_2_)); -+ tileentity = block.createTileEntity(this.field_76637_e, p_177436_2_); - this.field_76637_e.func_175690_a(p_177436_1_, tileentity); - } - -@@ -826,6 +825,7 @@ - k = this.field_76645_j.length - 1; - } - -+ MinecraftForge.EVENT_BUS.post(new EntityEvent.EnteringChunk(p_76612_1_, this.field_76635_g, this.field_76647_h, p_76612_1_.field_70176_ah, p_76612_1_.field_70164_aj)); - p_76612_1_.field_70175_ag = true; - p_76612_1_.field_70176_ah = this.field_76635_g; - p_76612_1_.field_70162_ai = k; -@@ -864,13 +864,20 @@ - private TileEntity func_177422_i(BlockPos p_177422_1_) - { - Block block = this.func_177428_a(p_177422_1_); -- return !block.func_149716_u() ? null : ((ITileEntityProvider)block).func_149915_a(this.field_76637_e, this.func_177418_c(p_177422_1_)); -+ IBlockState state = block.func_176203_a(this.func_177418_c(p_177422_1_)); -+ return !block.hasTileEntity(state) ? null : block.createTileEntity(this.field_76637_e, state); - } - - public TileEntity func_177424_a(BlockPos p_177424_1_, Chunk.EnumCreateEntityType p_177424_2_) - { - TileEntity tileentity = (TileEntity)this.field_150816_i.get(p_177424_1_); - -+ if (tileentity != null && tileentity.func_145837_r()) -+ { -+ field_150816_i.remove(p_177424_1_); -+ tileentity = null; -+ } -+ - if (tileentity == null) - { - if (p_177424_2_ == Chunk.EnumCreateEntityType.IMMEDIATE) -@@ -883,11 +890,6 @@ - this.field_177447_w.add(p_177424_1_); - } - } -- else if (tileentity.func_145837_r()) -- { -- this.field_150816_i.remove(p_177424_1_); -- return null; -- } - - return tileentity; - } -@@ -907,7 +909,7 @@ - p_177426_2_.func_145834_a(this.field_76637_e); - p_177426_2_.func_174878_a(p_177426_1_); - -- if (this.func_177428_a(p_177426_1_) instanceof ITileEntityProvider) -+ if (this.func_177428_a(p_177426_1_).hasTileEntity(func_177428_a(p_177426_1_).func_176203_a(this.func_177418_c(p_177426_1_)))) - { - if (this.field_150816_i.containsKey(p_177426_1_)) - { -@@ -947,8 +949,9 @@ - entity.func_110123_P(); - } - -- this.field_76637_e.func_175650_b(this.field_76645_j[i]); -+ this.field_76637_e.func_175650_b(com.google.common.collect.ImmutableList.copyOf(this.field_76645_j[i])); - } -+ MinecraftForge.EVENT_BUS.post(new ChunkEvent.Load(this)); - } - - public void func_76623_d() -@@ -966,6 +969,7 @@ - { - this.field_76637_e.func_175681_c(this.field_76645_j[i]); - } -+ MinecraftForge.EVENT_BUS.post(new ChunkEvent.Unload(this)); - } - - public void func_76630_e() -@@ -975,8 +979,8 @@ - - public void func_177414_a(Entity p_177414_1_, AxisAlignedBB p_177414_2_, List p_177414_3_, Predicate p_177414_4_) - { -- int i = MathHelper.func_76128_c((p_177414_2_.field_72338_b - 2.0D) / 16.0D); -- int j = MathHelper.func_76128_c((p_177414_2_.field_72337_e + 2.0D) / 16.0D); -+ int i = MathHelper.func_76128_c((p_177414_2_.field_72338_b - World.MAX_ENTITY_RADIUS) / 16.0D); -+ int j = MathHelper.func_76128_c((p_177414_2_.field_72337_e + World.MAX_ENTITY_RADIUS) / 16.0D); - i = MathHelper.func_76125_a(i, 0, this.field_76645_j.length - 1); - j = MathHelper.func_76125_a(j, 0, this.field_76645_j.length - 1); - -@@ -1012,8 +1016,8 @@ - - public void func_177430_a(Class p_177430_1_, AxisAlignedBB p_177430_2_, List p_177430_3_, Predicate p_177430_4_) - { -- int i = MathHelper.func_76128_c((p_177430_2_.field_72338_b - 2.0D) / 16.0D); -- int j = MathHelper.func_76128_c((p_177430_2_.field_72337_e + 2.0D) / 16.0D); -+ int i = MathHelper.func_76128_c((p_177430_2_.field_72338_b - World.MAX_ENTITY_RADIUS) / 16.0D); -+ int j = MathHelper.func_76128_c((p_177430_2_.field_72337_e + World.MAX_ENTITY_RADIUS) / 16.0D); - i = MathHelper.func_76125_a(i, 0, this.field_76645_j.length - 1); - j = MathHelper.func_76125_a(j, 0, this.field_76645_j.length - 1); - -@@ -1179,8 +1183,10 @@ - while (!this.field_177447_w.isEmpty()) - { - BlockPos blockpos = (BlockPos)this.field_177447_w.poll(); -+ Block block = this.func_177428_a(blockpos); -+ IBlockState state = block.func_176203_a(this.func_177418_c(blockpos)); - -- if (this.func_177424_a(blockpos, Chunk.EnumCreateEntityType.CHECK) == null && this.func_177428_a(blockpos).func_149716_u()) -+ if (this.func_177424_a(blockpos, Chunk.EnumCreateEntityType.CHECK) == null && block.hasTileEntity(state)) - { - TileEntity tileentity = this.func_177422_i(blockpos); - this.field_76637_e.func_175690_a(blockpos, tileentity); -@@ -1242,6 +1248,15 @@ - @SideOnly(Side.CLIENT) - public void func_177439_a(byte[] p_177439_1_, int p_177439_2_, boolean p_177439_3_) - { -+ Iterator iterator = field_150816_i.values().iterator(); -+ while(iterator.hasNext()) -+ { -+ TileEntity tileEntity = (TileEntity)iterator.next(); -+ tileEntity.func_145836_u(); -+ tileEntity.func_145832_p(); -+ tileEntity.func_145838_q(); -+ } -+ - int j = 0; - boolean flag1 = !this.field_76637_e.field_73011_w.func_177495_o(); - int k; -@@ -1311,13 +1326,18 @@ - this.field_150814_l = true; - this.field_76646_k = true; - this.func_76590_a(); -- Iterator iterator = this.field_150816_i.values().iterator(); -+ List invalidList = new java.util.ArrayList(); -+ iterator = this.field_150816_i.values().iterator(); - - while (iterator.hasNext()) - { - TileEntity tileentity = (TileEntity)iterator.next(); -+ if (tileentity.shouldRefresh(this.field_76637_e, tileentity.func_174877_v(), tileentity.func_145838_q().func_176203_a(tileentity.func_145832_p()), func_177435_g(tileentity.func_174877_v()))) -+ invalidList.add(tileentity); - tileentity.func_145836_u(); - } -+ -+ for (TileEntity te : invalidList) te.func_145843_s(); - } - - public BiomeGenBase func_177411_a(BlockPos p_177411_1_, WorldChunkManager p_177411_2_) -@@ -1644,4 +1664,20 @@ - - private static final String __OBFID = "CL_00002009"; - } -+ -+ /** -+ * Removes the tile entity at the specified position, only if it's -+ * marked as invalid. -+ */ -+ public void removeInvalidTileEntity(BlockPos pos) -+ { -+ if (field_76636_d) -+ { -+ TileEntity entity = (TileEntity)field_150816_i.get(pos); -+ if (entity != null && entity.func_145837_r()) -+ { -+ field_150816_i.remove(pos); -+ } -+ } -+ } - } diff --git a/patches/minecraft/net/minecraft/world/chunk/storage/ExtendedBlockStorage.java.patch b/patches/minecraft/net/minecraft/world/chunk/storage/ExtendedBlockStorage.java.patch deleted file mode 100644 index 34fba0645..000000000 --- a/patches/minecraft/net/minecraft/world/chunk/storage/ExtendedBlockStorage.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/chunk/storage/ExtendedBlockStorage.java -+++ ../src-work/minecraft/net/minecraft/world/chunk/storage/ExtendedBlockStorage.java -@@ -35,6 +35,8 @@ - - public void func_177484_a(int p_177484_1_, int p_177484_2_, int p_177484_3_, IBlockState p_177484_4_) - { -+ if (p_177484_4_ instanceof net.minecraftforge.common.property.IExtendedBlockState) -+ p_177484_4_ = ((net.minecraftforge.common.property.IExtendedBlockState) p_177484_4_).getClean(); - IBlockState iblockstate1 = this.func_177485_a(p_177484_1_, p_177484_2_, p_177484_3_); - Block block = iblockstate1.func_177230_c(); - Block block1 = p_177484_4_.func_177230_c(); diff --git a/patches/minecraft/net/minecraft/world/gen/ChunkProviderGenerate.java.patch b/patches/minecraft/net/minecraft/world/gen/ChunkProviderGenerate.java.patch deleted file mode 100644 index 36e3964e9..000000000 --- a/patches/minecraft/net/minecraft/world/gen/ChunkProviderGenerate.java.patch +++ /dev/null @@ -1,121 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/ChunkProviderGenerate.java -+++ ../src-work/minecraft/net/minecraft/world/gen/ChunkProviderGenerate.java -@@ -24,6 +24,11 @@ - import net.minecraft.world.gen.structure.MapGenStronghold; - import net.minecraft.world.gen.structure.MapGenVillage; - import net.minecraft.world.gen.structure.StructureOceanMonument; -+import static net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.*; -+import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.*; -+import net.minecraftforge.common.*; -+import net.minecraftforge.fml.common.eventhandler.Event.*; -+import net.minecraftforge.event.terraingen.*; - - public class ChunkProviderGenerate implements IChunkProvider - { -@@ -68,6 +73,15 @@ - this.field_73233_x = new MapGenScatteredFeature(); - this.field_73232_y = new MapGenRavine(); - this.field_177474_A = new StructureOceanMonument(); -+ { -+ field_73226_t = TerrainGen.getModdedMapGen(field_73226_t, CAVE); -+ field_73225_u = (MapGenStronghold)TerrainGen.getModdedMapGen(field_73225_u, STRONGHOLD); -+ field_73224_v = (MapGenVillage)TerrainGen.getModdedMapGen(field_73224_v, VILLAGE); -+ field_73223_w = (MapGenMineshaft)TerrainGen.getModdedMapGen(field_73223_w, MINESHAFT); -+ field_73233_x = (MapGenScatteredFeature)TerrainGen.getModdedMapGen(field_73233_x, SCATTERED_FEATURE); -+ field_73232_y = TerrainGen.getModdedMapGen(field_73232_y, RAVINE); -+ field_177474_A = (StructureOceanMonument)TerrainGen.getModdedMapGen(field_177474_A, OCEAN_MONUMENT); -+ } - this.field_73230_p = p_i45636_1_; - this.field_73229_q = p_i45636_4_; - this.field_177475_o = p_i45636_1_.func_72912_H().func_76067_t(); -@@ -96,6 +110,16 @@ - this.field_177477_r = ChunkProviderSettings.Factory.func_177865_a(p_i45636_5_).func_177864_b(); - this.field_177476_s = this.field_177477_r.field_177778_E ? Blocks.field_150353_l : Blocks.field_150355_j; - } -+ -+ NoiseGenerator[] noiseGens = {field_147431_j, field_147432_k, field_147429_l, field_147430_m, field_73214_a, field_73212_b, field_73213_c}; -+ noiseGens = TerrainGen.getModdedNoiseGenerators(p_i45636_1_, this.field_73220_k, noiseGens); -+ this.field_147431_j = (NoiseGeneratorOctaves)noiseGens[0]; -+ this.field_147432_k = (NoiseGeneratorOctaves)noiseGens[1]; -+ this.field_147429_l = (NoiseGeneratorOctaves)noiseGens[2]; -+ this.field_147430_m = (NoiseGeneratorPerlin)noiseGens[3]; -+ this.field_73214_a = (NoiseGeneratorOctaves)noiseGens[4]; -+ this.field_73212_b = (NoiseGeneratorOctaves)noiseGens[5]; -+ this.field_73213_c = (NoiseGeneratorOctaves)noiseGens[6]; - } - - public void func_180518_a(int p_180518_1_, int p_180518_2_, ChunkPrimer p_180518_3_) -@@ -169,6 +193,10 @@ - - public void func_180517_a(int p_180517_1_, int p_180517_2_, ChunkPrimer p_180517_3_, BiomeGenBase[] p_180517_4_) - { -+ ChunkProviderEvent.ReplaceBiomeBlocks event = new ChunkProviderEvent.ReplaceBiomeBlocks(this, p_180517_1_, p_180517_2_, p_180517_3_, this.field_73230_p); -+ MinecraftForge.EVENT_BUS.post(event); -+ if (event.getResult() == Result.DENY) return; -+ - double d0 = 0.03125D; - this.field_73227_s = this.field_147430_m.func_151599_a(this.field_73227_s, (double)(p_180517_1_ * 16), (double)(p_180517_2_ * 16), 16, 16, d0 * 2.0D, d0 * 2.0D, 1.0D); - -@@ -375,6 +403,8 @@ - boolean flag = false; - ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(p_73153_2_, p_73153_3_); - -+ MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Pre(p_73153_1_, field_73230_p, field_73220_k, p_73153_2_, p_73153_3_, flag)); -+ - if (this.field_177477_r.field_177829_w && this.field_73229_q) - { - this.field_73223_w.func_175794_a(this.field_73230_p, this.field_73220_k, chunkcoordintpair); -@@ -404,7 +434,8 @@ - int l1; - int i2; - -- if (biomegenbase != BiomeGenBase.field_76769_d && biomegenbase != BiomeGenBase.field_76786_s && this.field_177477_r.field_177781_A && !flag && this.field_73220_k.nextInt(this.field_177477_r.field_177782_B) == 0) -+ if (biomegenbase != BiomeGenBase.field_76769_d && biomegenbase != BiomeGenBase.field_76786_s && this.field_177477_r.field_177781_A && !flag && this.field_73220_k.nextInt(this.field_177477_r.field_177782_B) == 0 -+ && TerrainGen.populate(p_73153_1_, field_73230_p, field_73220_k, p_73153_2_, p_73153_3_, flag, LAKE)) - { - k1 = this.field_73220_k.nextInt(16) + 8; - l1 = this.field_73220_k.nextInt(256); -@@ -412,7 +443,7 @@ - (new WorldGenLakes(Blocks.field_150355_j)).func_180709_b(this.field_73230_p, this.field_73220_k, blockpos.func_177982_a(k1, l1, i2)); - } - -- if (!flag && this.field_73220_k.nextInt(this.field_177477_r.field_177777_D / 10) == 0 && this.field_177477_r.field_177783_C) -+ if (TerrainGen.populate(p_73153_1_, field_73230_p, field_73220_k, p_73153_2_, p_73153_3_, flag, LAVA) && !flag && this.field_73220_k.nextInt(this.field_177477_r.field_177777_D / 10) == 0 && this.field_177477_r.field_177783_C) - { - k1 = this.field_73220_k.nextInt(16) + 8; - l1 = this.field_73220_k.nextInt(this.field_73220_k.nextInt(248) + 8); -@@ -426,7 +457,8 @@ - - if (this.field_177477_r.field_177837_s) - { -- for (k1 = 0; k1 < this.field_177477_r.field_177835_t; ++k1) -+ boolean doGen = TerrainGen.populate(p_73153_1_, field_73230_p, field_73220_k, p_73153_2_, p_73153_3_, flag, DUNGEON); -+ for (k1 = 0; doGen && k1 < this.field_177477_r.field_177835_t; ++k1) - { - l1 = this.field_73220_k.nextInt(16) + 8; - i2 = this.field_73220_k.nextInt(256); -@@ -436,10 +468,14 @@ - } - - biomegenbase.func_180624_a(this.field_73230_p, this.field_73220_k, new BlockPos(k, 0, l)); -+ if (TerrainGen.populate(p_73153_1_, field_73230_p, field_73220_k, p_73153_2_, p_73153_3_, flag, ANIMALS)) -+ { - SpawnerAnimals.func_77191_a(this.field_73230_p, biomegenbase, k + 8, l + 8, 16, 16, this.field_73220_k); -+ } - blockpos = blockpos.func_177982_a(8, 0, 8); - -- for (k1 = 0; k1 < 16; ++k1) -+ boolean doGen = TerrainGen.populate(p_73153_1_, field_73230_p, field_73220_k, p_73153_2_, p_73153_3_, flag, ICE); -+ for (k1 = 0; doGen && k1 < 16; ++k1) - { - for (l1 = 0; l1 < 16; ++l1) - { -@@ -458,6 +494,8 @@ - } - } - -+ MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Post(p_73153_1_, field_73230_p, field_73220_k, p_73153_2_, p_73153_3_, flag)); -+ - BlockFalling.field_149832_M = false; - } - diff --git a/patches/minecraft/net/minecraft/world/gen/ChunkProviderHell.java.patch b/patches/minecraft/net/minecraft/world/gen/ChunkProviderHell.java.patch deleted file mode 100644 index 98670b6ba..000000000 --- a/patches/minecraft/net/minecraft/world/gen/ChunkProviderHell.java.patch +++ /dev/null @@ -1,145 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/ChunkProviderHell.java -+++ ../src-work/minecraft/net/minecraft/world/gen/ChunkProviderHell.java -@@ -24,6 +24,13 @@ - import net.minecraft.world.gen.feature.WorldGenMinable; - import net.minecraft.world.gen.feature.WorldGenerator; - import net.minecraft.world.gen.structure.MapGenNetherBridge; -+import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.*; -+import static net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.*; -+import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.*; -+import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.*; -+import net.minecraftforge.common.*; -+import net.minecraftforge.fml.common.eventhandler.Event.*; -+import net.minecraftforge.event.terraingen.*; - - public class ChunkProviderHell implements IChunkProvider - { -@@ -65,18 +72,30 @@ - this.field_177472_y = new WorldGenHellLava(Blocks.field_150356_k, false); - this.field_177471_z = new GeneratorBushFeature(Blocks.field_150338_P); - this.field_177465_A = new GeneratorBushFeature(Blocks.field_150337_Q); -- this.field_73172_c = new MapGenNetherBridge(); -- this.field_73182_t = new MapGenCavesHell(); -+ this.field_73172_c = (MapGenNetherBridge) TerrainGen.getModdedMapGen(new MapGenNetherBridge(), NETHER_BRIDGE); -+ this.field_73182_t = TerrainGen.getModdedMapGen(new MapGenCavesHell(), NETHER_CAVE); - this.field_73175_o = p_i45637_1_; - this.field_177466_i = p_i45637_2_; - this.field_73181_i = new Random(p_i45637_3_); -- this.field_73178_j = new NoiseGeneratorOctaves(this.field_73181_i, 16); -- this.field_73179_k = new NoiseGeneratorOctaves(this.field_73181_i, 16); -- this.field_73176_l = new NoiseGeneratorOctaves(this.field_73181_i, 8); -- this.field_73177_m = new NoiseGeneratorOctaves(this.field_73181_i, 4); -- this.field_73174_n = new NoiseGeneratorOctaves(this.field_73181_i, 4); -- this.field_73173_a = new NoiseGeneratorOctaves(this.field_73181_i, 10); -- this.field_73171_b = new NoiseGeneratorOctaves(this.field_73181_i, 16); -+ -+ NoiseGenerator[] noiseGens = -+ { -+ new NoiseGeneratorOctaves(this.field_73181_i, 16), -+ new NoiseGeneratorOctaves(this.field_73181_i, 16), -+ new NoiseGeneratorOctaves(this.field_73181_i, 8), -+ new NoiseGeneratorOctaves(this.field_73181_i, 4), -+ new NoiseGeneratorOctaves(this.field_73181_i, 4), -+ new NoiseGeneratorOctaves(this.field_73181_i, 10), -+ new NoiseGeneratorOctaves(this.field_73181_i, 16) -+ }; -+ noiseGens = TerrainGen.getModdedNoiseGenerators(p_i45637_1_, this.field_73181_i, noiseGens); -+ this.field_73178_j = (NoiseGeneratorOctaves)noiseGens[0]; -+ this.field_73179_k = (NoiseGeneratorOctaves)noiseGens[1]; -+ this.field_73176_l = (NoiseGeneratorOctaves)noiseGens[2]; -+ this.field_73177_m = (NoiseGeneratorOctaves)noiseGens[3]; -+ this.field_73174_n = (NoiseGeneratorOctaves)noiseGens[4]; -+ this.field_73173_a = (NoiseGeneratorOctaves)noiseGens[5]; -+ this.field_73171_b = (NoiseGeneratorOctaves)noiseGens[6]; - } - - public void func_180515_a(int p_180515_1_, int p_180515_2_, ChunkPrimer p_180515_3_) -@@ -155,6 +174,10 @@ - - public void func_180516_b(int p_180516_1_, int p_180516_2_, ChunkPrimer p_180516_3_) - { -+ ChunkProviderEvent.ReplaceBiomeBlocks event = new ChunkProviderEvent.ReplaceBiomeBlocks(this, p_180516_1_, p_180516_2_, p_180516_3_, this.field_73175_o); -+ MinecraftForge.EVENT_BUS.post(event); -+ if (event.getResult() == Result.DENY) return; -+ - byte b0 = 64; - double d0 = 0.03125D; - this.field_73185_q = this.field_73177_m.func_76304_a(this.field_73185_q, p_180516_1_ * 16, p_180516_2_ * 16, 0, 16, 16, 1, d0, d0, 1.0D); -@@ -272,6 +295,10 @@ - - private double[] func_73164_a(double[] p_73164_1_, int p_73164_2_, int p_73164_3_, int p_73164_4_, int p_73164_5_, int p_73164_6_, int p_73164_7_) - { -+ ChunkProviderEvent.InitNoiseField event = new ChunkProviderEvent.InitNoiseField(this, p_73164_1_, p_73164_2_, p_73164_3_, p_73164_4_, p_73164_5_, p_73164_6_, p_73164_7_); -+ MinecraftForge.EVENT_BUS.post(event); -+ if (event.getResult() == Result.DENY) return event.noisefield; -+ - if (p_73164_1_ == null) - { - p_73164_1_ = new double[p_73164_5_ * p_73164_6_ * p_73164_7_]; -@@ -365,47 +392,58 @@ - public void func_73153_a(IChunkProvider p_73153_1_, int p_73153_2_, int p_73153_3_) - { - BlockFalling.field_149832_M = true; -+ -+ MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Pre(p_73153_1_, field_73175_o, field_73181_i, p_73153_2_, p_73153_3_, false)); -+ - BlockPos blockpos = new BlockPos(p_73153_2_ * 16, 0, p_73153_3_ * 16); - ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(p_73153_2_, p_73153_3_); - this.field_73172_c.func_175794_a(this.field_73175_o, this.field_73181_i, chunkcoordintpair); - int k; - -- for (k = 0; k < 8; ++k) -+ boolean doGen = TerrainGen.populate(p_73153_1_, field_73175_o, field_73181_i, p_73153_2_, p_73153_3_, false, NETHER_LAVA); -+ for (k = 0; doGen && k < 8; ++k) - { - this.field_177472_y.func_180709_b(this.field_73175_o, this.field_73181_i, blockpos.func_177982_a(this.field_73181_i.nextInt(16) + 8, this.field_73181_i.nextInt(120) + 4, this.field_73181_i.nextInt(16) + 8)); - } - -- for (k = 0; k < this.field_73181_i.nextInt(this.field_73181_i.nextInt(10) + 1) + 1; ++k) -+ doGen = TerrainGen.populate(p_73153_1_, field_73175_o, field_73181_i, p_73153_2_, p_73153_3_, false, FIRE); -+ for (k = 0; doGen && k < this.field_73181_i.nextInt(this.field_73181_i.nextInt(10) + 1) + 1; ++k) - { - this.field_177470_t.func_180709_b(this.field_73175_o, this.field_73181_i, blockpos.func_177982_a(this.field_73181_i.nextInt(16) + 8, this.field_73181_i.nextInt(120) + 4, this.field_73181_i.nextInt(16) + 8)); - } - -- for (k = 0; k < this.field_73181_i.nextInt(this.field_73181_i.nextInt(10) + 1); ++k) -+ doGen = TerrainGen.populate(p_73153_1_, field_73175_o, field_73181_i, p_73153_2_, p_73153_3_, false, GLOWSTONE); -+ for (k = 0; doGen && k < this.field_73181_i.nextInt(this.field_73181_i.nextInt(10) + 1); ++k) - { - this.field_177469_u.func_180709_b(this.field_73175_o, this.field_73181_i, blockpos.func_177982_a(this.field_73181_i.nextInt(16) + 8, this.field_73181_i.nextInt(120) + 4, this.field_73181_i.nextInt(16) + 8)); - } - -- for (k = 0; k < 10; ++k) -+ for (k = 0; doGen && k < 10; ++k) - { - this.field_177468_v.func_180709_b(this.field_73175_o, this.field_73181_i, blockpos.func_177982_a(this.field_73181_i.nextInt(16) + 8, this.field_73181_i.nextInt(128), this.field_73181_i.nextInt(16) + 8)); - } - -- if (this.field_73181_i.nextBoolean()) -+ MinecraftForge.EVENT_BUS.post(new DecorateBiomeEvent.Pre(field_73175_o, field_73181_i, blockpos)); -+ -+ doGen = TerrainGen.decorate(field_73175_o, field_73181_i, blockpos, SHROOM); -+ if (doGen && this.field_73181_i.nextBoolean()) - { - this.field_177471_z.func_180709_b(this.field_73175_o, this.field_73181_i, blockpos.func_177982_a(this.field_73181_i.nextInt(16) + 8, this.field_73181_i.nextInt(128), this.field_73181_i.nextInt(16) + 8)); - } - -- if (this.field_73181_i.nextBoolean()) -+ if (doGen && this.field_73181_i.nextBoolean()) - { - this.field_177465_A.func_180709_b(this.field_73175_o, this.field_73181_i, blockpos.func_177982_a(this.field_73181_i.nextInt(16) + 8, this.field_73181_i.nextInt(128), this.field_73181_i.nextInt(16) + 8)); - } - -- for (k = 0; k < 16; ++k) -+ doGen = TerrainGen.generateOre(field_73175_o, field_73181_i, field_177467_w, blockpos, QUARTZ); -+ for (k = 0; doGen && k < 16; ++k) - { - this.field_177467_w.func_180709_b(this.field_73175_o, this.field_73181_i, blockpos.func_177982_a(this.field_73181_i.nextInt(16), this.field_73181_i.nextInt(108) + 10, this.field_73181_i.nextInt(16))); - } - -- for (k = 0; k < 16; ++k) -+ doGen = TerrainGen.populate(p_73153_1_, field_73175_o, field_73181_i, p_73153_2_, p_73153_3_, false, NETHER_LAVA2); -+ for (k = 0; doGen && k < 16; ++k) - { - this.field_177473_x.func_180709_b(this.field_73175_o, this.field_73181_i, blockpos.func_177982_a(this.field_73181_i.nextInt(16), this.field_73181_i.nextInt(108) + 10, this.field_73181_i.nextInt(16))); - } diff --git a/patches/minecraft/net/minecraft/world/gen/ChunkProviderServer.java.patch b/patches/minecraft/net/minecraft/world/gen/ChunkProviderServer.java.patch deleted file mode 100644 index 0d7b3a944..000000000 --- a/patches/minecraft/net/minecraft/world/gen/ChunkProviderServer.java.patch +++ /dev/null @@ -1,138 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/ChunkProviderServer.java -+++ ../src-work/minecraft/net/minecraft/world/gen/ChunkProviderServer.java -@@ -24,6 +24,10 @@ - import net.minecraft.world.chunk.storage.IChunkLoader; - import org.apache.logging.log4j.LogManager; - import org.apache.logging.log4j.Logger; -+import net.minecraft.world.chunk.storage.AnvilChunkLoader; -+import net.minecraftforge.common.DimensionManager; -+import net.minecraftforge.common.ForgeChunkManager; -+import net.minecraftforge.common.chunkio.ChunkIOExecutor; - - public class ChunkProviderServer implements IChunkProvider - { -@@ -36,6 +40,7 @@ - public LongHashMap field_73244_f = new LongHashMap(); - public List field_73245_g = Lists.newArrayList(); - public WorldServer field_73251_h; -+ private Set loadingChunks = com.google.common.collect.Sets.newHashSet(); - private static final String __OBFID = "CL_00001436"; - - public ChunkProviderServer(WorldServer p_i1520_1_, IChunkLoader p_i1520_2_, IChunkProvider p_i1520_3_) -@@ -58,7 +63,7 @@ - - public void func_73241_b(int p_73241_1_, int p_73241_2_) - { -- if (this.field_73251_h.field_73011_w.func_76567_e()) -+ if (this.field_73251_h.field_73011_w.func_76567_e() && DimensionManager.shouldLoadSpawn(this.field_73251_h.field_73011_w.func_177502_q())) - { - if (!this.field_73251_h.func_72916_c(p_73241_1_, p_73241_2_)) - { -@@ -84,12 +89,64 @@ - - public Chunk func_73158_c(int p_73158_1_, int p_73158_2_) - { -+ return loadChunk(p_73158_1_, p_73158_2_, null); -+ } -+ -+ public Chunk loadChunk(int par1, int par2, Runnable runnable) -+ { -+ long k = ChunkCoordIntPair.func_77272_a(par1, par2); -+ this.field_73248_b.remove(Long.valueOf(k)); -+ Chunk chunk = (Chunk)this.field_73244_f.func_76164_a(k); -+ AnvilChunkLoader loader = null; -+ -+ if (this.field_73247_e instanceof AnvilChunkLoader) -+ { -+ loader = (AnvilChunkLoader) this.field_73247_e; -+ } -+ -+ // We can only use the queue for already generated chunks -+ if (chunk == null && loader != null && loader.chunkExists(this.field_73251_h, par1, par2)) -+ { -+ if (runnable != null) -+ { -+ ChunkIOExecutor.queueChunkLoad(this.field_73251_h, loader, this, par1, par2, runnable); -+ return null; -+ } -+ else -+ { -+ chunk = ChunkIOExecutor.syncChunkLoad(this.field_73251_h, loader, this, par1, par2); -+ } -+ } -+ else if (chunk == null) -+ { -+ chunk = this.originalLoadChunk(par1, par2); -+ } -+ -+ // If we didn't load the chunk async and have a callback run it now -+ if (runnable != null) -+ { -+ runnable.run(); -+ } -+ -+ return chunk; -+ } -+ -+ public Chunk originalLoadChunk(int p_73158_1_, int p_73158_2_) -+ { - long k = ChunkCoordIntPair.func_77272_a(p_73158_1_, p_73158_2_); - this.field_73248_b.remove(Long.valueOf(k)); - Chunk chunk = (Chunk)this.field_73244_f.func_76164_a(k); - - if (chunk == null) - { -+ boolean added = loadingChunks.add(k); -+ if (!added) -+ { -+ net.minecraftforge.fml.common.FMLLog.bigWarning("There is an attempt to load a chunk (%d,%d) in dimension %d that is already being loaded. This will cause weird chunk breakages.", p_73158_1_, p_73158_2_, field_73251_h.field_73011_w.func_177502_q()); -+ } -+ chunk = ForgeChunkManager.fetchDormantChunk(k, this.field_73251_h); -+ -+ if (chunk == null) - chunk = this.func_73239_e(p_73158_1_, p_73158_2_); - - if (chunk == null) -@@ -118,6 +175,7 @@ - - this.field_73244_f.func_76163_a(k, chunk); - this.field_73245_g.add(chunk); -+ loadingChunks.remove(k); - chunk.func_76631_c(); - chunk.func_76624_a(this, this, p_73158_1_, p_73158_2_); - } -@@ -209,6 +267,7 @@ - if (this.field_73246_d != null) - { - this.field_73246_d.func_73153_a(p_73153_1_, p_73153_2_, p_73153_3_); -+ net.minecraftforge.fml.common.registry.GameRegistry.generateWorld(p_73153_2_, p_73153_3_, field_73251_h, field_73246_d, p_73153_1_); - chunk.func_76630_e(); - } - } -@@ -269,8 +328,13 @@ - { - if (!this.field_73251_h.field_73058_d) - { -- for (int i = 0; i < 100; ++i) -+ for (ChunkCoordIntPair forced : this.field_73251_h.getPersistentChunks().keySet()) - { -+ this.field_73248_b.remove(ChunkCoordIntPair.func_77272_a(forced.field_77276_a, forced.field_77275_b)); -+ } -+ -+ for (int i = 0; i < 100; ++i) -+ { - if (!this.field_73248_b.isEmpty()) - { - Long olong = (Long)this.field_73248_b.iterator().next(); -@@ -283,6 +347,11 @@ - this.func_73243_a(chunk); - this.field_73244_f.func_76159_d(olong.longValue()); - this.field_73245_g.remove(chunk); -+ ForgeChunkManager.putDormantChunk(ChunkCoordIntPair.func_77272_a(chunk.field_76635_g, chunk.field_76647_h), chunk); -+ if(field_73245_g.size() == 0 && ForgeChunkManager.getPersistentChunksFor(this.field_73251_h).size() == 0 && !DimensionManager.shouldLoadSpawn(this.field_73251_h.field_73011_w.func_177502_q())){ -+ DimensionManager.unloadWorld(this.field_73251_h.field_73011_w.func_177502_q()); -+ return field_73246_d.func_73156_b(); -+ } - } - - this.field_73248_b.remove(olong); diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenAbstractTree.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenAbstractTree.java.patch deleted file mode 100644 index 087efae91..000000000 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenAbstractTree.java.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenAbstractTree.java -+++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenAbstractTree.java -@@ -30,4 +30,10 @@ - this.func_175903_a(p_175921_1_, p_175921_2_, Blocks.field_150346_d.func_176223_P()); - } - } -+ -+ public boolean isReplaceable(World world, BlockPos pos) -+ { -+ net.minecraft.block.state.IBlockState state = world.func_180495_p(pos); -+ return state.func_177230_c().isAir(world, pos) || state.func_177230_c().isLeaves(world, pos) || state.func_177230_c().isWood(world, pos) || func_150523_a(state.func_177230_c()); -+ } - } diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBigMushroom.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBigMushroom.java.patch deleted file mode 100644 index 74b05fae4..000000000 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBigMushroom.java.patch +++ /dev/null @@ -1,37 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenBigMushroom.java -+++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenBigMushroom.java -@@ -55,9 +55,10 @@ - { - if (k >= 0 && k < 256) - { -- Block block = p_180709_1_.func_180495_p(new BlockPos(l, k, i1)).func_177230_c(); -+ BlockPos pos = new BlockPos(l, k, i1); -+ net.minecraft.block.state.IBlockState state = p_180709_1_.func_180495_p(pos); - -- if (block.func_149688_o() != Material.field_151579_a && block.func_149688_o() != Material.field_151584_j) -+ if (!state.func_177230_c().isAir(p_180709_1_, pos) && !state.func_177230_c().isLeaves(p_180709_1_, pos)) - { - flag = false; - } -@@ -188,7 +189,7 @@ - { - BlockPos blockpos1 = new BlockPos(i2, l, j1); - -- if (!p_180709_1_.func_180495_p(blockpos1).func_177230_c().func_149730_j()) -+ if (p_180709_1_.func_180495_p(blockpos1).func_177230_c().canBeReplacedByLeaves(p_180709_1_, blockpos1)) - { - this.func_175905_a(p_180709_1_, blockpos1, Block.func_149729_e(Block.func_149682_b(Blocks.field_150420_aW) + i), k1); - } -@@ -199,9 +200,10 @@ - - for (l = 0; l < j; ++l) - { -- Block block2 = p_180709_1_.func_180495_p(p_180709_3_.func_177981_b(l)).func_177230_c(); -+ BlockPos upN = p_180709_3_.func_177981_b(l); -+ net.minecraft.block.state.IBlockState state = p_180709_1_.func_180495_p(upN); - -- if (!block2.func_149730_j()) -+ if (state.func_177230_c().canBeReplacedByLeaves(p_180709_1_, upN)) - { - this.func_175905_a(p_180709_1_, p_180709_3_.func_177981_b(l), Block.func_149729_e(Block.func_149682_b(Blocks.field_150420_aW) + i), 10); - } diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.java.patch deleted file mode 100644 index 4921fddef..000000000 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.java.patch +++ /dev/null @@ -1,52 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.java -+++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.java -@@ -107,9 +107,9 @@ - if (Math.pow((double)Math.abs(j) + 0.5D, 2.0D) + Math.pow((double)Math.abs(k) + 0.5D, 2.0D) <= (double)(p_180712_2_ * p_180712_2_)) - { - BlockPos blockpos1 = p_180712_1_.func_177982_a(j, 0, k); -- Material material = this.field_175946_l.func_180495_p(blockpos1).func_177230_c().func_149688_o(); -+ net.minecraft.block.state.IBlockState state = this.field_175946_l.func_180495_p(blockpos1); - -- if (material == Material.field_151579_a || material == Material.field_151584_j) -+ if (state.func_177230_c().isAir(this.field_175946_l, blockpos1) || state.func_177230_c().isLeaves(this.field_175946_l, blockpos1)) - { - this.func_175905_a(this.field_175946_l, blockpos1, p_180712_3_, 0); - } -@@ -268,7 +268,7 @@ - { - BlockPos blockpos3 = p_175936_1_.func_177963_a((double)(0.5F + (float)j * f), (double)(0.5F + (float)j * f1), (double)(0.5F + (float)j * f2)); - -- if (!this.func_150523_a(this.field_175946_l.func_180495_p(blockpos3).func_177230_c())) -+ if (!this.isReplaceable(field_175946_l, blockpos3)) - { - return j; - } -@@ -296,6 +296,7 @@ - - if (!this.func_76497_e()) - { -+ this.field_175946_l = null; //Fix vanilla Mem leak, holds latest world - return false; - } - else -@@ -304,15 +305,18 @@ - this.func_175941_b(); - this.func_175942_c(); - this.func_175939_d(); -+ this.field_175946_l = null; //Fix vanilla Mem leak, holds latest world - return true; - } - } - - private boolean func_76497_e() - { -- Block block = this.field_175946_l.func_180495_p(this.field_175947_m.func_177977_b()).func_177230_c(); -+ BlockPos down = this.field_175947_m.func_177977_b(); -+ net.minecraft.block.state.IBlockState state = this.field_175946_l.func_180495_p(down); -+ boolean isSoil = state.func_177230_c().canSustainPlant(this.field_175946_l, down, net.minecraft.util.EnumFacing.UP, ((net.minecraft.block.BlockSapling)Blocks.field_150345_g)); - -- if (block != Blocks.field_150346_d && block != Blocks.field_150349_c && block != Blocks.field_150458_ak) -+ if (!isSoil) - { - return false; - } diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenCanopyTree.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenCanopyTree.java.patch deleted file mode 100644 index 2b819de6b..000000000 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenCanopyTree.java.patch +++ /dev/null @@ -1,67 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenCanopyTree.java -+++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenCanopyTree.java -@@ -48,7 +48,7 @@ - { - if (j >= 0 && j < 256) - { -- if (!this.func_150523_a(p_180709_1_.func_180495_p(new BlockPos(k, j, l)).func_177230_c())) -+ if (!this.isReplaceable(p_180709_1_, new BlockPos(k, j, l))) - { - flag = false; - } -@@ -67,14 +67,16 @@ - } - else - { -- Block block = p_180709_1_.func_180495_p(p_180709_3_.func_177977_b()).func_177230_c(); -+ BlockPos down = p_180709_3_.func_177977_b(); -+ net.minecraft.block.state.IBlockState state = p_180709_1_.func_180495_p(down); -+ boolean isSoil = state.func_177230_c().canSustainPlant(p_180709_1_, down, net.minecraft.util.EnumFacing.UP, ((net.minecraft.block.BlockSapling)Blocks.field_150345_g)); - -- if ((block == Blocks.field_150349_c || block == Blocks.field_150346_d) && p_180709_3_.func_177956_o() < 256 - i - 1) -+ if (isSoil && p_180709_3_.func_177956_o() < 256 - i - 1) - { -- this.func_175921_a(p_180709_1_, p_180709_3_.func_177977_b()); -- this.func_175921_a(p_180709_1_, p_180709_3_.func_177982_a(1, -1, 0)); -- this.func_175921_a(p_180709_1_, p_180709_3_.func_177982_a(1, -1, 1)); -- this.func_175921_a(p_180709_1_, p_180709_3_.func_177982_a(0, -1, 1)); -+ this.onPlantGrow(p_180709_1_, p_180709_3_.func_177977_b(), p_180709_3_); -+ this.onPlantGrow(p_180709_1_, p_180709_3_.func_177982_a(1, -1, 0), p_180709_3_); -+ this.onPlantGrow(p_180709_1_, p_180709_3_.func_177982_a(1, -1, 1), p_180709_3_); -+ this.onPlantGrow(p_180709_1_, p_180709_3_.func_177982_a(0, -1, 1), p_180709_3_); - EnumFacing enumfacing = EnumFacing.Plane.HORIZONTAL.func_179518_a(p_180709_2_); - k = i - p_180709_2_.nextInt(4); - l = 2 - p_180709_2_.nextInt(3); -@@ -96,9 +98,9 @@ - } - - BlockPos blockpos1 = new BlockPos(i1, i2, j1); -- Material material = p_180709_1_.func_180495_p(blockpos1).func_177230_c().func_149688_o(); -+ state = p_180709_1_.func_180495_p(blockpos1); - -- if (material == Material.field_151579_a || material == Material.field_151584_j) -+ if (state.func_177230_c().isAir(p_180709_1_, blockpos1) || state.func_177230_c().isLeaves(p_180709_1_, blockpos1)) - { - this.func_175905_a(p_180709_1_, blockpos1, Blocks.field_150363_s, BlockPlanks.EnumType.DARK_OAK.func_176839_a() - 4); - this.func_175905_a(p_180709_1_, blockpos1.func_177974_f(), Blocks.field_150363_s, BlockPlanks.EnumType.DARK_OAK.func_176839_a() - 4); -@@ -202,11 +204,18 @@ - - private void func_150526_a(World p_150526_1_, int p_150526_2_, int p_150526_3_, int p_150526_4_) - { -- Block block = p_150526_1_.func_180495_p(new BlockPos(p_150526_2_, p_150526_3_, p_150526_4_)).func_177230_c(); -+ BlockPos pos = new BlockPos(p_150526_2_, p_150526_3_, p_150526_4_); -+ net.minecraft.block.state.IBlockState state = p_150526_1_.func_180495_p(pos); - -- if (block.func_149688_o() == Material.field_151579_a) -+ if (state.func_177230_c().isAir(p_150526_1_, pos)) - { - this.func_175905_a(p_150526_1_, new BlockPos(p_150526_2_, p_150526_3_, p_150526_4_), Blocks.field_150361_u, 1); - } - } -+ -+ //Just a helper macro -+ private void onPlantGrow(World world, BlockPos pos, BlockPos source) -+ { -+ world.func_180495_p(pos).func_177230_c().onPlantGrow(world, pos, source); -+ } - } diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenDeadBush.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenDeadBush.java.patch deleted file mode 100644 index fea2ba727..000000000 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenDeadBush.java.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenDeadBush.java -+++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenDeadBush.java -@@ -15,10 +15,12 @@ - { - Block block; - -- while (((block = p_180709_1_.func_180495_p(p_180709_3_).func_177230_c()).func_149688_o() == Material.field_151579_a || block.func_149688_o() == Material.field_151584_j) && p_180709_3_.func_177956_o() > 0) -+ do - { -+ block = p_180709_1_.func_180495_p(p_180709_3_).func_177230_c(); -+ if (!block.isLeaves(p_180709_1_, p_180709_3_) && !block.isLeaves(p_180709_1_, p_180709_3_)) break; - p_180709_3_ = p_180709_3_.func_177977_b(); -- } -+ } while (p_180709_3_.func_177956_o() > 0); - - for (int i = 0; i < 4; ++i) - { diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenForest.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenForest.java.patch deleted file mode 100644 index a08072e11..000000000 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenForest.java.patch +++ /dev/null @@ -1,50 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenForest.java -+++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenForest.java -@@ -55,7 +55,7 @@ - { - if (j >= 0 && j < 256) - { -- if (!this.func_150523_a(p_180709_1_.func_180495_p(new BlockPos(k, j, l)).func_177230_c())) -+ if (!this.isReplaceable(p_180709_1_, new BlockPos(k, j, l))) - { - flag = false; - } -@@ -74,11 +74,13 @@ - } - else - { -- Block block1 = p_180709_1_.func_180495_p(p_180709_3_.func_177977_b()).func_177230_c(); -+ BlockPos down = p_180709_3_.func_177977_b(); -+ Block block1 = p_180709_1_.func_180495_p(down).func_177230_c(); -+ boolean isSoil = block1.canSustainPlant(p_180709_1_, down, net.minecraft.util.EnumFacing.UP, ((net.minecraft.block.BlockSapling)Blocks.field_150345_g)); - -- if ((block1 == Blocks.field_150349_c || block1 == Blocks.field_150346_d || block1 == Blocks.field_150458_ak) && p_180709_3_.func_177956_o() < 256 - i - 1) -+ if (isSoil && p_180709_3_.func_177956_o() < 256 - i - 1) - { -- this.func_175921_a(p_180709_1_, p_180709_3_.func_177977_b()); -+ block1.onPlantGrow(p_180709_1_, down, p_180709_3_); - int i2; - - for (i2 = p_180709_3_.func_177956_o() - 3 + i; i2 <= p_180709_3_.func_177956_o() + i; ++i2) -@@ -99,7 +101,7 @@ - BlockPos blockpos1 = new BlockPos(i1, i2, k1); - Block block = p_180709_1_.func_180495_p(blockpos1).func_177230_c(); - -- if (block.func_149688_o() == Material.field_151579_a || block.func_149688_o() == Material.field_151584_j) -+ if (block.isAir(p_180709_1_, blockpos1) || block.isLeaves(p_180709_1_, blockpos1)) - { - this.func_175905_a(p_180709_1_, blockpos1, Blocks.field_150362_t, BlockPlanks.EnumType.BIRCH.func_176839_a()); - } -@@ -110,9 +112,10 @@ - - for (i2 = 0; i2 < i; ++i2) - { -- Block block2 = p_180709_1_.func_180495_p(p_180709_3_.func_177981_b(i2)).func_177230_c(); -+ BlockPos upN = p_180709_3_.func_177981_b(i2); -+ Block block2 = p_180709_1_.func_180495_p(upN).func_177230_c(); - -- if (block2.func_149688_o() == Material.field_151579_a || block2.func_149688_o() == Material.field_151584_j) -+ if (block2.isAir(p_180709_1_, upN) || block2.isLeaves(p_180709_1_, upN)) - { - this.func_175905_a(p_180709_1_, p_180709_3_.func_177981_b(i2), Blocks.field_150364_r, BlockPlanks.EnumType.BIRCH.func_176839_a()); - } diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenHugeTrees.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenHugeTrees.java.patch deleted file mode 100644 index 553097c1b..000000000 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenHugeTrees.java.patch +++ /dev/null @@ -1,66 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenHugeTrees.java -+++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenHugeTrees.java -@@ -59,7 +59,7 @@ - { - for (int l = -b0; l <= b0 && flag; ++l) - { -- if (p_175926_2_.func_177956_o() + j < 0 || p_175926_2_.func_177956_o() + j >= 256 || !this.func_150523_a(p_175926_1_.func_180495_p(p_175926_2_.func_177982_a(k, j, l)).func_177230_c())) -+ if (p_175926_2_.func_177956_o() + j < 0 || p_175926_2_.func_177956_o() + j >= 256 || !this.isReplaceable(p_175926_1_, p_175926_2_.func_177982_a(k, j, l))) - { - flag = false; - } -@@ -79,13 +79,14 @@ - { - BlockPos blockpos1 = p_175927_1_.func_177977_b(); - Block block = p_175927_2_.func_180495_p(blockpos1).func_177230_c(); -+ boolean isSoil = block.canSustainPlant(p_175927_2_, blockpos1, net.minecraft.util.EnumFacing.UP, ((net.minecraft.block.BlockSapling)Blocks.field_150345_g)); - -- if ((block == Blocks.field_150349_c || block == Blocks.field_150346_d) && p_175927_1_.func_177956_o() >= 2) -+ if (isSoil && p_175927_1_.func_177956_o() >= 2) - { -- this.func_175921_a(p_175927_2_, blockpos1); -- this.func_175921_a(p_175927_2_, blockpos1.func_177974_f()); -- this.func_175921_a(p_175927_2_, blockpos1.func_177968_d()); -- this.func_175921_a(p_175927_2_, blockpos1.func_177968_d().func_177974_f()); -+ this.onPlantGrow(p_175927_2_, blockpos1, p_175927_1_); -+ this.onPlantGrow(p_175927_2_, blockpos1.func_177974_f(), p_175927_1_); -+ this.onPlantGrow(p_175927_2_, blockpos1.func_177968_d(), p_175927_1_); -+ this.onPlantGrow(p_175927_2_, blockpos1.func_177968_d().func_177974_f(), p_175927_1_); - return true; - } - else -@@ -113,9 +114,9 @@ - if (k * k + l * l <= j || i1 * i1 + j1 * j1 <= j || k * k + j1 * j1 <= j || i1 * i1 + l * l <= j) - { - BlockPos blockpos1 = p_175925_2_.func_177982_a(k, 0, l); -- Material material = p_175925_1_.func_180495_p(blockpos1).func_177230_c().func_149688_o(); -+ net.minecraft.block.state.IBlockState state = p_175925_1_.func_180495_p(blockpos1); - -- if (material == Material.field_151579_a || material == Material.field_151584_j) -+ if (state.func_177230_c().isAir(p_175925_1_, blockpos1) || state.func_177230_c().isLeaves(p_175925_1_, blockpos1)) - { - this.func_175905_a(p_175925_1_, blockpos1, Blocks.field_150362_t, this.field_76521_c); - } -@@ -135,9 +136,9 @@ - if (k * k + l * l <= j) - { - BlockPos blockpos1 = p_175928_2_.func_177982_a(k, 0, l); -- Material material = p_175928_1_.func_180495_p(blockpos1).func_177230_c().func_149688_o(); -+ Block block = p_175928_1_.func_180495_p(blockpos1).func_177230_c(); - -- if (material == Material.field_151579_a || material == Material.field_151584_j) -+ if (block.isAir(p_175928_1_, blockpos1) || block.isLeaves(p_175928_1_, blockpos1)) - { - this.func_175905_a(p_175928_1_, blockpos1, Blocks.field_150362_t, this.field_76521_c); - } -@@ -145,4 +146,10 @@ - } - } - } -+ -+ //Just a helper macro -+ private void onPlantGrow(World world, BlockPos pos, BlockPos source) -+ { -+ world.func_180495_p(pos).func_177230_c().onPlantGrow(world, pos, source); -+ } - } diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenMegaJungle.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenMegaJungle.java.patch deleted file mode 100644 index 449385cd2..000000000 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenMegaJungle.java.patch +++ /dev/null @@ -1,62 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenMegaJungle.java -+++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenMegaJungle.java -@@ -57,7 +57,7 @@ - { - BlockPos blockpos1 = p_180709_3_.func_177981_b(i2); - -- if (this.func_175931_a(p_180709_1_.func_180495_p(blockpos1).func_177230_c().func_149688_o())) -+ if (this.isAirLeaves(p_180709_1_, blockpos1)) - { - this.func_175905_a(p_180709_1_, blockpos1, Blocks.field_150364_r, this.field_76520_b); - -@@ -72,7 +72,7 @@ - { - BlockPos blockpos2 = blockpos1.func_177974_f(); - -- if (this.func_175931_a(p_180709_1_.func_180495_p(blockpos2).func_177230_c().func_149688_o())) -+ if (this.isAirLeaves(p_180709_1_, blockpos2)) - { - this.func_175905_a(p_180709_1_, blockpos2, Blocks.field_150364_r, this.field_76520_b); - -@@ -85,7 +85,7 @@ - - BlockPos blockpos3 = blockpos1.func_177968_d().func_177974_f(); - -- if (this.func_175931_a(p_180709_1_.func_180495_p(blockpos3).func_177230_c().func_149688_o())) -+ if (this.isAirLeaves(p_180709_1_, blockpos3)) - { - this.func_175905_a(p_180709_1_, blockpos3, Blocks.field_150364_r, this.field_76520_b); - -@@ -98,7 +98,7 @@ - - BlockPos blockpos4 = blockpos1.func_177968_d(); - -- if (this.func_175931_a(p_180709_1_.func_180495_p(blockpos4).func_177230_c().func_149688_o())) -+ if (this.isAirLeaves(p_180709_1_, blockpos4)) - { - this.func_175905_a(p_180709_1_, blockpos4, Blocks.field_150364_r, this.field_76520_b); - -@@ -115,11 +115,6 @@ - } - } - -- private boolean func_175931_a(Material p_175931_1_) -- { -- return p_175931_1_ == Material.field_151579_a || p_175931_1_ == Material.field_151584_j; -- } -- - private void func_175932_b(World p_175932_1_, Random p_175932_2_, BlockPos p_175932_3_, int p_175932_4_) - { - if (p_175932_2_.nextInt(3) > 0 && p_175932_1_.func_175623_d(p_175932_3_)) -@@ -137,4 +132,11 @@ - this.func_175925_a(p_175930_1_, p_175930_2_.func_177981_b(j), p_175930_3_ + 1 - j); - } - } -+ -+ //Helper macro -+ private boolean isAirLeaves(World world, BlockPos pos) -+ { -+ net.minecraft.block.Block block = world.func_180495_p(pos).func_177230_c(); -+ return block.isAir(world, pos) || block.isLeaves(world, pos); -+ } - } diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenMegaPineTree.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenMegaPineTree.java.patch deleted file mode 100644 index 865e78c88..000000000 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenMegaPineTree.java.patch +++ /dev/null @@ -1,65 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenMegaPineTree.java -+++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenMegaPineTree.java -@@ -35,32 +35,24 @@ - - for (int j = 0; j < i; ++j) - { -- Block block = p_180709_1_.func_180495_p(p_180709_3_.func_177981_b(j)).func_177230_c(); -- -- if (block.func_149688_o() == Material.field_151579_a || block.func_149688_o() == Material.field_151584_j) -+ if (this.isAirLeaves(p_180709_1_, p_180709_3_.func_177981_b(j))) - { - this.func_175905_a(p_180709_1_, p_180709_3_.func_177981_b(j), Blocks.field_150364_r, this.field_76520_b); - } - - if (j < i - 1) - { -- block = p_180709_1_.func_180495_p(p_180709_3_.func_177982_a(1, j, 0)).func_177230_c(); -- -- if (block.func_149688_o() == Material.field_151579_a || block.func_149688_o() == Material.field_151584_j) -+ if (this.isAirLeaves(p_180709_1_, p_180709_3_.func_177982_a(1, j, 0))) - { - this.func_175905_a(p_180709_1_, p_180709_3_.func_177982_a(1, j, 0), Blocks.field_150364_r, this.field_76520_b); - } - -- block = p_180709_1_.func_180495_p(p_180709_3_.func_177982_a(1, j, 1)).func_177230_c(); -- -- if (block.func_149688_o() == Material.field_151579_a || block.func_149688_o() == Material.field_151584_j) -+ if (this.isAirLeaves(p_180709_1_, p_180709_3_.func_177982_a(1, j, 1))) - { - this.func_175905_a(p_180709_1_, p_180709_3_.func_177982_a(1, j, 1), Blocks.field_150364_r, this.field_76520_b); - } - -- block = p_180709_1_.func_180495_p(p_180709_3_.func_177982_a(0, j, 1)).func_177230_c(); -- -- if (block.func_149688_o() == Material.field_151579_a || block.func_149688_o() == Material.field_151584_j) -+ if (this.isAirLeaves(p_180709_1_, p_180709_3_.func_177982_a(0, j, 1))) - { - this.func_175905_a(p_180709_1_, p_180709_3_.func_177982_a(0, j, 1), Blocks.field_150364_r, this.field_76520_b); - } -@@ -126,16 +118,23 @@ - BlockPos blockpos1 = p_175934_2_.func_177981_b(i); - Block block = p_175934_1_.func_180495_p(blockpos1).func_177230_c(); - -- if (block == Blocks.field_150349_c || block == Blocks.field_150346_d) -+ if (block.canSustainPlant(p_175934_1_, blockpos1, net.minecraft.util.EnumFacing.UP, ((net.minecraft.block.BlockSapling)Blocks.field_150345_g))) - { - this.func_175905_a(p_175934_1_, blockpos1, Blocks.field_150346_d, BlockDirt.DirtType.PODZOL.func_176925_a()); - break; - } - -- if (block.func_149688_o() != Material.field_151579_a && i < 0) -+ if (!block.isAir(p_175934_1_, blockpos1) && i < 0) - { - break; - } - } - } -+ -+ //Helper macro -+ private boolean isAirLeaves(World world, BlockPos pos) -+ { -+ net.minecraft.block.Block block = world.func_180495_p(pos).func_177230_c(); -+ return block.isAir(world, pos) || block.isLeaves(world, pos); -+ } - } diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenSavannaTree.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenSavannaTree.java.patch deleted file mode 100644 index 48c841f3b..000000000 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenSavannaTree.java.patch +++ /dev/null @@ -1,64 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenSavannaTree.java -+++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenSavannaTree.java -@@ -48,7 +48,7 @@ - { - if (j >= 0 && j < 256) - { -- if (!this.func_150523_a(p_180709_1_.func_180495_p(new BlockPos(k, j, l)).func_177230_c())) -+ if (!this.isReplaceable(p_180709_1_, new BlockPos(k, j, l))) - { - flag = false; - } -@@ -67,11 +67,13 @@ - } - else - { -- Block block = p_180709_1_.func_180495_p(p_180709_3_.func_177977_b()).func_177230_c(); -+ BlockPos down = p_180709_3_.func_177977_b(); -+ Block block = p_180709_1_.func_180495_p(down).func_177230_c(); -+ boolean isSoil = block.canSustainPlant(p_180709_1_, down, net.minecraft.util.EnumFacing.UP, ((net.minecraft.block.BlockSapling)Blocks.field_150345_g)); - -- if ((block == Blocks.field_150349_c || block == Blocks.field_150346_d) && p_180709_3_.func_177956_o() < 256 - i - 1) -+ if (isSoil && p_180709_3_.func_177956_o() < 256 - i - 1) - { -- this.func_175921_a(p_180709_1_, p_180709_3_.func_177977_b()); -+ block.onPlantGrow(p_180709_1_, down, p_180709_3_); - EnumFacing enumfacing = EnumFacing.Plane.HORIZONTAL.func_179518_a(p_180709_2_); - k = i - p_180709_2_.nextInt(4) - 1; - l = 3 - p_180709_2_.nextInt(3); -@@ -92,9 +94,9 @@ - } - - BlockPos blockpos1 = new BlockPos(i1, i2, j1); -- Material material = p_180709_1_.func_180495_p(blockpos1).func_177230_c().func_149688_o(); -+ block = p_180709_1_.func_180495_p(blockpos1).func_177230_c(); - -- if (material == Material.field_151579_a || material == Material.field_151584_j) -+ if (block.isAir(p_180709_1_, blockpos1) || block.isLeaves(p_180709_1_, blockpos1)) - { - this.func_175905_a(p_180709_1_, blockpos1, Blocks.field_150363_s, BlockPlanks.EnumType.ACACIA.func_176839_a() - 4); - k1 = i2; -@@ -148,9 +150,9 @@ - i1 += enumfacing1.func_82601_c(); - j1 += enumfacing1.func_82599_e(); - BlockPos blockpos2 = new BlockPos(i1, j2, j1); -- Material material1 = p_180709_1_.func_180495_p(blockpos2).func_177230_c().func_149688_o(); -+ block = p_180709_1_.func_180495_p(blockpos2).func_177230_c(); - -- if (material1 == Material.field_151579_a || material1 == Material.field_151584_j) -+ if (block.isAir(p_180709_1_, blockpos2) || block.isLeaves(p_180709_1_, blockpos2)) - { - this.func_175905_a(p_180709_1_, blockpos2, Blocks.field_150363_s, BlockPlanks.EnumType.ACACIA.func_176839_a() - 4); - k1 = j2; -@@ -204,9 +206,9 @@ - - private void func_175924_b(World p_175924_1_, BlockPos p_175924_2_) - { -- Material material = p_175924_1_.func_180495_p(p_175924_2_).func_177230_c().func_149688_o(); -+ Block block = p_175924_1_.func_180495_p(p_175924_2_).func_177230_c(); - -- if (material == Material.field_151579_a || material == Material.field_151584_j) -+ if (block.isAir(p_175924_1_, p_175924_2_) || block.isLeaves(p_175924_1_, p_175924_2_)) - { - this.func_175905_a(p_175924_1_, p_175924_2_, Blocks.field_150361_u, 0); - } diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenShrub.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenShrub.java.patch deleted file mode 100644 index 0d9e1734f..000000000 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenShrub.java.patch +++ /dev/null @@ -1,31 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenShrub.java -+++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenShrub.java -@@ -24,14 +24,16 @@ - { - Block block; - -- while (((block = p_180709_1_.func_180495_p(p_180709_3_).func_177230_c()).func_149688_o() == Material.field_151579_a || block.func_149688_o() == Material.field_151584_j) && p_180709_3_.func_177956_o() > 0) -+ do - { -+ block = p_180709_1_.func_180495_p(p_180709_3_).func_177230_c(); -+ if (!block.isAir(p_180709_1_, p_180709_3_) && !block.isLeaves(p_180709_1_, p_180709_3_)) break; - p_180709_3_ = p_180709_3_.func_177977_b(); -- } -+ } while (p_180709_3_.func_177956_o() > 0); - - Block block1 = p_180709_1_.func_180495_p(p_180709_3_).func_177230_c(); - -- if (block1 == Blocks.field_150346_d || block1 == Blocks.field_150349_c) -+ if (block1.canSustainPlant(p_180709_1_, p_180709_3_, net.minecraft.util.EnumFacing.UP, ((net.minecraft.block.BlockSapling)Blocks.field_150345_g))) - { - p_180709_3_ = p_180709_3_.func_177984_a(); - this.func_175905_a(p_180709_1_, p_180709_3_, Blocks.field_150364_r, this.field_150527_b); -@@ -53,7 +55,7 @@ - { - BlockPos blockpos1 = new BlockPos(l, i, j1); - -- if (!p_180709_1_.func_180495_p(blockpos1).func_177230_c().func_149730_j()) -+ if (p_180709_1_.func_180495_p(blockpos1).func_177230_c().canBeReplacedByLeaves(p_180709_1_, blockpos1)) - { - this.func_175905_a(p_180709_1_, blockpos1, Blocks.field_150362_t, this.field_150528_a); - } diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenSwamp.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenSwamp.java.patch deleted file mode 100644 index 9f553475e..000000000 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenSwamp.java.patch +++ /dev/null @@ -1,98 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenSwamp.java -+++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenSwamp.java -@@ -53,9 +53,10 @@ - { - if (j >= 0 && j < 256) - { -- Block block = p_180709_1_.func_180495_p(new BlockPos(k, j, l)).func_177230_c(); -+ BlockPos pos = new BlockPos(k, j, l); -+ Block block = p_180709_1_.func_180495_p(pos).func_177230_c(); - -- if (block.func_149688_o() != Material.field_151579_a && block.func_149688_o() != Material.field_151584_j) -+ if (!block.isAir(p_180709_1_, pos) && !block.isLeaves(p_180709_1_, pos)) - { - if (block != Blocks.field_150355_j && block != Blocks.field_150358_i) - { -@@ -81,11 +82,13 @@ - } - else - { -- Block block1 = p_180709_1_.func_180495_p(p_180709_3_.func_177977_b()).func_177230_c(); -+ BlockPos down = p_180709_3_.func_177977_b(); -+ Block block1 = p_180709_1_.func_180495_p(down).func_177230_c(); -+ boolean isSoil = block1.canSustainPlant(p_180709_1_, down, net.minecraft.util.EnumFacing.UP, ((net.minecraft.block.BlockSapling)Blocks.field_150345_g)); - -- if ((block1 == Blocks.field_150349_c || block1 == Blocks.field_150346_d) && p_180709_3_.func_177956_o() < 256 - i - 1) -+ if (isSoil && p_180709_3_.func_177956_o() < 256 - i - 1) - { -- this.func_175921_a(p_180709_1_, p_180709_3_.func_177977_b()); -+ block1.onPlantGrow(p_180709_1_, down, p_180709_3_); - int i1; - BlockPos blockpos1; - int l1; -@@ -108,7 +111,7 @@ - { - blockpos1 = new BlockPos(i2, l1, j1); - -- if (!p_180709_1_.func_180495_p(blockpos1).func_177230_c().func_149730_j()) -+ if (p_180709_1_.func_180495_p(blockpos1).func_177230_c().canBeReplacedByLeaves(p_180709_1_, blockpos1)) - { - this.func_175906_a(p_180709_1_, blockpos1, Blocks.field_150362_t); - } -@@ -119,9 +122,10 @@ - - for (l1 = 0; l1 < i; ++l1) - { -- Block block2 = p_180709_1_.func_180495_p(p_180709_3_.func_177981_b(l1)).func_177230_c(); -+ BlockPos upN = p_180709_3_.func_177981_b(l1); -+ Block block2 = p_180709_1_.func_180495_p(upN).func_177230_c(); - -- if (block2.func_149688_o() == Material.field_151579_a || block2.func_149688_o() == Material.field_151584_j || block2 == Blocks.field_150358_i || block2 == Blocks.field_150355_j) -+ if (block2.isAir(p_180709_1_, upN) || block2.isLeaves(p_180709_1_, upN) || block2 == Blocks.field_150358_i || block2 == Blocks.field_150355_j) - { - this.func_175906_a(p_180709_1_, p_180709_3_.func_177981_b(l1), Blocks.field_150364_r); - } -@@ -138,29 +142,29 @@ - { - BlockPos blockpos4 = new BlockPos(i2, l1, i1); - -- if (p_180709_1_.func_180495_p(blockpos4).func_177230_c().func_149688_o() == Material.field_151584_j) -+ if (p_180709_1_.func_180495_p(blockpos4).func_177230_c().isLeaves(p_180709_1_, blockpos4)) - { - BlockPos blockpos5 = blockpos4.func_177976_e(); - blockpos1 = blockpos4.func_177974_f(); - BlockPos blockpos2 = blockpos4.func_177978_c(); - BlockPos blockpos3 = blockpos4.func_177968_d(); - -- if (p_180709_2_.nextInt(4) == 0 && p_180709_1_.func_180495_p(blockpos5).func_177230_c().func_149688_o() == Material.field_151579_a) -+ if (p_180709_2_.nextInt(4) == 0 && p_180709_1_.func_180495_p(blockpos5).func_177230_c().isAir(p_180709_1_, blockpos5)) - { - this.func_175922_a(p_180709_1_, blockpos5, BlockVine.field_176275_S); - } - -- if (p_180709_2_.nextInt(4) == 0 && p_180709_1_.func_180495_p(blockpos1).func_177230_c().func_149688_o() == Material.field_151579_a) -+ if (p_180709_2_.nextInt(4) == 0 && p_180709_1_.func_180495_p(blockpos1).func_177230_c().isAir(p_180709_1_, blockpos1)) - { - this.func_175922_a(p_180709_1_, blockpos1, BlockVine.field_176271_T); - } - -- if (p_180709_2_.nextInt(4) == 0 && p_180709_1_.func_180495_p(blockpos2).func_177230_c().func_149688_o() == Material.field_151579_a) -+ if (p_180709_2_.nextInt(4) == 0 && p_180709_1_.func_180495_p(blockpos2).func_177230_c().isAir(p_180709_1_, blockpos2)) - { - this.func_175922_a(p_180709_1_, blockpos2, BlockVine.field_176272_Q); - } - -- if (p_180709_2_.nextInt(4) == 0 && p_180709_1_.func_180495_p(blockpos3).func_177230_c().func_149688_o() == Material.field_151579_a) -+ if (p_180709_2_.nextInt(4) == 0 && p_180709_1_.func_180495_p(blockpos3).func_177230_c().isAir(p_180709_1_, blockpos3)) - { - this.func_175922_a(p_180709_1_, blockpos3, BlockVine.field_176276_R); - } -@@ -188,7 +192,7 @@ - this.func_175905_a(p_175922_1_, p_175922_2_, Blocks.field_150395_bd, p_175922_3_); - int j = 4; - -- for (p_175922_2_ = p_175922_2_.func_177977_b(); p_175922_1_.func_180495_p(p_175922_2_).func_177230_c().func_149688_o() == Material.field_151579_a && j > 0; --j) -+ for (p_175922_2_ = p_175922_2_.func_177977_b(); p_175922_1_.func_180495_p(p_175922_2_).func_177230_c().isAir(p_175922_1_, p_175922_2_) && j > 0; --j) - { - this.func_175905_a(p_175922_1_, p_175922_2_, Blocks.field_150395_bd, p_175922_3_); - p_175922_2_ = p_175922_2_.func_177977_b(); diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga1.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga1.java.patch deleted file mode 100644 index a32469775..000000000 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga1.java.patch +++ /dev/null @@ -1,50 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga1.java -+++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga1.java -@@ -50,7 +50,7 @@ - { - if (i1 >= 0 && i1 < 256) - { -- if (!this.func_150523_a(p_180709_1_.func_180495_p(new BlockPos(j1, i1, k1)).func_177230_c())) -+ if (!this.isReplaceable(p_180709_1_, new BlockPos(j1, i1, k1))) - { - flag = false; - } -@@ -69,11 +69,13 @@ - } - else - { -- Block block = p_180709_1_.func_180495_p(p_180709_3_.func_177977_b()).func_177230_c(); -+ BlockPos down = p_180709_3_.func_177977_b(); -+ Block block = p_180709_1_.func_180495_p(down).func_177230_c(); -+ boolean isSoil = block.canSustainPlant(p_180709_1_, down, net.minecraft.util.EnumFacing.UP, (net.minecraft.block.BlockSapling)Blocks.field_150345_g); - -- if ((block == Blocks.field_150349_c || block == Blocks.field_150346_d) && p_180709_3_.func_177956_o() < 256 - i - 1) -+ if (isSoil && p_180709_3_.func_177956_o() < 256 - i - 1) - { -- this.func_175921_a(p_180709_1_, p_180709_3_.func_177977_b()); -+ block.onPlantGrow(p_180709_1_, down, p_180709_3_); - k2 = 0; - - for (j1 = p_180709_3_.func_177956_o() + i; j1 >= p_180709_3_.func_177956_o() + j; --j1) -@@ -90,7 +92,7 @@ - { - BlockPos blockpos1 = new BlockPos(k1, j1, i2); - -- if (!p_180709_1_.func_180495_p(blockpos1).func_177230_c().func_149730_j()) -+ if (p_180709_1_.func_180495_p(blockpos1).func_177230_c().canBeReplacedByLeaves(p_180709_1_, blockpos1)) - { - this.func_175905_a(p_180709_1_, blockpos1, Blocks.field_150362_t, BlockPlanks.EnumType.SPRUCE.func_176839_a()); - } -@@ -110,9 +112,10 @@ - - for (j1 = 0; j1 < i - 1; ++j1) - { -- Block block1 = p_180709_1_.func_180495_p(p_180709_3_.func_177981_b(j1)).func_177230_c(); -+ BlockPos upN = p_180709_3_.func_177981_b(j1); -+ Block block1 = p_180709_1_.func_180495_p(upN).func_177230_c(); - -- if (block1.func_149688_o() == Material.field_151579_a || block1.func_149688_o() == Material.field_151584_j) -+ if (block1.isAir(p_180709_1_, upN) || block1.isLeaves(p_180709_1_, upN)) - { - this.func_175905_a(p_180709_1_, p_180709_3_.func_177981_b(j1), Blocks.field_150364_r, BlockPlanks.EnumType.SPRUCE.func_176839_a()); - } diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga2.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga2.java.patch deleted file mode 100644 index 9a8619068..000000000 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga2.java.patch +++ /dev/null @@ -1,54 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga2.java -+++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga2.java -@@ -49,9 +49,10 @@ - { - if (i1 >= 0 && i1 < 256) - { -- Block block = p_180709_1_.func_180495_p(new BlockPos(j1, i1, k1)).func_177230_c(); -+ BlockPos off = new BlockPos(j1, i1, k1); -+ Block block = p_180709_1_.func_180495_p(off).func_177230_c(); - -- if (block.func_149688_o() != Material.field_151579_a && block.func_149688_o() != Material.field_151584_j) -+ if (!block.isAir(p_180709_1_, off) && !block.isLeaves(p_180709_1_, off)) - { - flag = false; - } -@@ -70,11 +71,13 @@ - } - else - { -- Block block1 = p_180709_1_.func_180495_p(p_180709_3_.func_177977_b()).func_177230_c(); -+ BlockPos down = p_180709_3_.func_177977_b(); -+ Block block1 = p_180709_1_.func_180495_p(down).func_177230_c(); -+ boolean isSoil = block1.canSustainPlant(p_180709_1_, down, net.minecraft.util.EnumFacing.UP, (net.minecraft.block.BlockSapling)Blocks.field_150345_g); - -- if ((block1 == Blocks.field_150349_c || block1 == Blocks.field_150346_d || block1 == Blocks.field_150458_ak) && p_180709_3_.func_177956_o() < 256 - i - 1) -+ if (isSoil && p_180709_3_.func_177956_o() < 256 - i - 1) - { -- this.func_175921_a(p_180709_1_, p_180709_3_.func_177977_b()); -+ block1.onPlantGrow(p_180709_1_, down, p_180709_3_); - i3 = p_180709_2_.nextInt(2); - j1 = 1; - byte b0 = 0; -@@ -97,7 +100,7 @@ - { - BlockPos blockpos1 = new BlockPos(i2, l1, k2); - -- if (!p_180709_1_.func_180495_p(blockpos1).func_177230_c().func_149730_j()) -+ if (p_180709_1_.func_180495_p(blockpos1).func_177230_c().canBeReplacedByLeaves(p_180709_1_, blockpos1)) - { - this.func_175905_a(p_180709_1_, blockpos1, Blocks.field_150362_t, BlockPlanks.EnumType.SPRUCE.func_176839_a()); - } -@@ -126,9 +129,10 @@ - - for (l1 = 0; l1 < i - j3; ++l1) - { -- Block block2 = p_180709_1_.func_180495_p(p_180709_3_.func_177981_b(l1)).func_177230_c(); -+ BlockPos upN = p_180709_3_.func_177981_b(l1); -+ Block block2 = p_180709_1_.func_180495_p(upN).func_177230_c(); - -- if (block2.func_149688_o() == Material.field_151579_a || block2.func_149688_o() == Material.field_151584_j) -+ if (block2.isAir(p_180709_1_, upN) || block2.isLeaves(p_180709_1_, upN)) - { - this.func_175905_a(p_180709_1_, p_180709_3_.func_177981_b(l1), Blocks.field_150364_r, BlockPlanks.EnumType.SPRUCE.func_176839_a()); - } diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTallGrass.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTallGrass.java.patch deleted file mode 100644 index b8fe9ec78..000000000 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTallGrass.java.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenTallGrass.java -+++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenTallGrass.java -@@ -23,10 +23,12 @@ - { - Block block; - -- while (((block = p_180709_1_.func_180495_p(p_180709_3_).func_177230_c()).func_149688_o() == Material.field_151579_a || block.func_149688_o() == Material.field_151584_j) && p_180709_3_.func_177956_o() > 0) -+ do - { -+ block = p_180709_1_.func_180495_p(p_180709_3_).func_177230_c(); -+ if (!block.isAir(p_180709_1_, p_180709_3_) && !block.isLeaves(p_180709_1_, p_180709_3_)) break; - p_180709_3_ = p_180709_3_.func_177977_b(); -- } -+ } while (p_180709_3_.func_177956_o() > 0); - - for (int i = 0; i < 128; ++i) - { diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTrees.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTrees.java.patch deleted file mode 100644 index 37d7c07ab..000000000 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTrees.java.patch +++ /dev/null @@ -1,94 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGenTrees.java -+++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGenTrees.java -@@ -61,7 +61,7 @@ - { - if (j >= 0 && j < 256) - { -- if (!this.func_150523_a(p_180709_1_.func_180495_p(new BlockPos(k, j, l)).func_177230_c())) -+ if (!this.isReplaceable(p_180709_1_, new BlockPos(k, j, l))) - { - flag = false; - } -@@ -80,11 +80,13 @@ - } - else - { -- Block block1 = p_180709_1_.func_180495_p(p_180709_3_.func_177977_b()).func_177230_c(); -+ BlockPos down = p_180709_3_.func_177977_b(); -+ Block block1 = p_180709_1_.func_180495_p(down).func_177230_c(); -+ boolean isSoil = block1.canSustainPlant(p_180709_1_, down, net.minecraft.util.EnumFacing.UP, (net.minecraft.block.BlockSapling)Blocks.field_150345_g); - -- if ((block1 == Blocks.field_150349_c || block1 == Blocks.field_150346_d || block1 == Blocks.field_150458_ak) && p_180709_3_.func_177956_o() < 256 - i - 1) -+ if (isSoil && p_180709_3_.func_177956_o() < 256 - i - 1) - { -- this.func_175921_a(p_180709_1_, p_180709_3_.func_177977_b()); -+ block1.onPlantGrow(p_180709_1_, down, p_180709_3_); - b0 = 3; - byte b1 = 0; - int i1; -@@ -111,7 +113,7 @@ - blockpos1 = new BlockPos(k1, l, i2); - Block block = p_180709_1_.func_180495_p(blockpos1).func_177230_c(); - -- if (block.func_149688_o() == Material.field_151579_a || block.func_149688_o() == Material.field_151584_j || block.func_149688_o() == Material.field_151582_l) -+ if (block.isAir(p_180709_1_, blockpos1) || block.isLeaves(p_180709_1_, blockpos1) || block.func_149688_o() == Material.field_151582_l) - { - this.func_175905_a(p_180709_1_, blockpos1, Blocks.field_150362_t, this.field_76530_d); - } -@@ -122,9 +124,10 @@ - - for (l = 0; l < i; ++l) - { -- Block block2 = p_180709_1_.func_180495_p(p_180709_3_.func_177981_b(l)).func_177230_c(); -+ BlockPos upN = p_180709_3_.func_177981_b(l); -+ Block block2 = p_180709_1_.func_180495_p(upN).func_177230_c(); - -- if (block2.func_149688_o() == Material.field_151579_a || block2.func_149688_o() == Material.field_151584_j || block2.func_149688_o() == Material.field_151582_l) -+ if (block2.isAir(p_180709_1_, upN) || block2.isLeaves(p_180709_1_, upN) || block2.func_149688_o() == Material.field_151582_l) - { - this.func_175905_a(p_180709_1_, p_180709_3_.func_177981_b(l), Blocks.field_150364_r, this.field_76532_c); - -@@ -166,29 +169,29 @@ - { - BlockPos blockpos3 = new BlockPos(k1, l, l1); - -- if (p_180709_1_.func_180495_p(blockpos3).func_177230_c().func_149688_o() == Material.field_151584_j) -+ if (p_180709_1_.func_180495_p(blockpos3).func_177230_c().isLeaves(p_180709_1_, blockpos3)) - { - BlockPos blockpos4 = blockpos3.func_177976_e(); - blockpos1 = blockpos3.func_177974_f(); - BlockPos blockpos5 = blockpos3.func_177978_c(); - BlockPos blockpos2 = blockpos3.func_177968_d(); - -- if (p_180709_2_.nextInt(4) == 0 && p_180709_1_.func_180495_p(blockpos4).func_177230_c().func_149688_o() == Material.field_151579_a) -+ if (p_180709_2_.nextInt(4) == 0 && p_180709_1_.func_180495_p(blockpos4).func_177230_c().isAir(p_180709_1_, blockpos4)) - { - this.func_175923_a(p_180709_1_, blockpos4, BlockVine.field_176275_S); - } - -- if (p_180709_2_.nextInt(4) == 0 && p_180709_1_.func_180495_p(blockpos1).func_177230_c().func_149688_o() == Material.field_151579_a) -+ if (p_180709_2_.nextInt(4) == 0 && p_180709_1_.func_180495_p(blockpos1).func_177230_c().isAir(p_180709_1_, blockpos1)) - { - this.func_175923_a(p_180709_1_, blockpos1, BlockVine.field_176271_T); - } - -- if (p_180709_2_.nextInt(4) == 0 && p_180709_1_.func_180495_p(blockpos5).func_177230_c().func_149688_o() == Material.field_151579_a) -+ if (p_180709_2_.nextInt(4) == 0 && p_180709_1_.func_180495_p(blockpos5).func_177230_c().isAir(p_180709_1_, blockpos5)) - { - this.func_175923_a(p_180709_1_, blockpos5, BlockVine.field_176272_Q); - } - -- if (p_180709_2_.nextInt(4) == 0 && p_180709_1_.func_180495_p(blockpos2).func_177230_c().func_149688_o() == Material.field_151579_a) -+ if (p_180709_2_.nextInt(4) == 0 && p_180709_1_.func_180495_p(blockpos2).func_177230_c().isAir(p_180709_1_, blockpos2)) - { - this.func_175923_a(p_180709_1_, blockpos2, BlockVine.field_176276_R); - } -@@ -233,7 +236,7 @@ - this.func_175905_a(p_175923_1_, p_175923_2_, Blocks.field_150395_bd, p_175923_3_); - int j = 4; - -- for (p_175923_2_ = p_175923_2_.func_177977_b(); p_175923_1_.func_180495_p(p_175923_2_).func_177230_c().func_149688_o() == Material.field_151579_a && j > 0; --j) -+ for (p_175923_2_ = p_175923_2_.func_177977_b(); p_175923_1_.func_180495_p(p_175923_2_).func_177230_c().isAir(p_175923_1_, p_175923_2_) && j > 0; --j) - { - this.func_175905_a(p_175923_1_, p_175923_2_, Blocks.field_150395_bd, p_175923_3_); - p_175923_2_ = p_175923_2_.func_177977_b(); diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGeneratorBonusChest.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGeneratorBonusChest.java.patch deleted file mode 100644 index fa45af1d8..000000000 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGeneratorBonusChest.java.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/feature/WorldGeneratorBonusChest.java -+++ ../src-work/minecraft/net/minecraft/world/gen/feature/WorldGeneratorBonusChest.java -@@ -27,10 +27,12 @@ - { - Block block; - -- while (((block = p_180709_1_.func_180495_p(p_180709_3_).func_177230_c()).func_149688_o() == Material.field_151579_a || block.func_149688_o() == Material.field_151584_j) && p_180709_3_.func_177956_o() > 1) -+ do - { -+ block = p_180709_1_.func_180495_p(p_180709_3_).func_177230_c(); -+ if (!block.isAir(p_180709_1_, p_180709_3_) && !block.isLeaves(p_180709_1_, p_180709_3_)) break; - p_180709_3_ = p_180709_3_.func_177977_b(); -- } -+ } while (p_180709_3_.func_177956_o() > 0); - - if (p_180709_3_.func_177956_o() < 1) - { diff --git a/patches/minecraft/net/minecraft/world/gen/structure/MapGenStructure.java.patch b/patches/minecraft/net/minecraft/world/gen/structure/MapGenStructure.java.patch deleted file mode 100644 index 9aeab1702..000000000 --- a/patches/minecraft/net/minecraft/world/gen/structure/MapGenStructure.java.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/structure/MapGenStructure.java -+++ ../src-work/minecraft/net/minecraft/world/gen/structure/MapGenStructure.java -@@ -231,12 +231,12 @@ - { - if (this.field_143029_e == null) - { -- this.field_143029_e = (MapGenStructureData)p_143027_1_.func_72943_a(MapGenStructureData.class, this.func_143025_a()); -+ this.field_143029_e = (MapGenStructureData)p_143027_1_.getPerWorldStorage().func_75742_a(MapGenStructureData.class, this.func_143025_a()); - - if (this.field_143029_e == null) - { - this.field_143029_e = new MapGenStructureData(this.func_143025_a()); -- p_143027_1_.func_72823_a(this.func_143025_a(), this.field_143029_e); -+ p_143027_1_.getPerWorldStorage().func_75745_a(this.func_143025_a(), this.field_143029_e); - } - else - { diff --git a/patches/minecraft/net/minecraft/world/gen/structure/StructureMineshaftPieces.java.patch b/patches/minecraft/net/minecraft/world/gen/structure/StructureMineshaftPieces.java.patch deleted file mode 100644 index 00ba3940d..000000000 --- a/patches/minecraft/net/minecraft/world/gen/structure/StructureMineshaftPieces.java.patch +++ /dev/null @@ -1,42 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/structure/StructureMineshaftPieces.java -+++ ../src-work/minecraft/net/minecraft/world/gen/structure/StructureMineshaftPieces.java -@@ -19,6 +19,8 @@ - import net.minecraft.util.EnumFacing; - import net.minecraft.util.WeightedRandomChestContent; - import net.minecraft.world.World; -+import net.minecraftforge.common.ChestGenHooks; -+import static net.minecraftforge.common.ChestGenHooks.*; - - public class StructureMineshaftPieces - { -@@ -33,6 +35,12 @@ - MapGenStructureIO.func_143031_a(StructureMineshaftPieces.Stairs.class, "MSStairs"); - } - -+ static -+ { -+ ChestGenHooks.init(MINESHAFT_CORRIDOR, field_175893_a, 8, 8); -+ ChestGenHooks.addItem(MINESHAFT_CORRIDOR, new WeightedRandomChestContent(new net.minecraft.item.ItemStack(Items.field_151134_bR, 1, 0), 1, 1, 1)); -+ } -+ - private static StructureComponent func_175892_a(List p_175892_0_, Random p_175892_1_, int p_175892_2_, int p_175892_3_, int p_175892_4_, EnumFacing p_175892_5_, int p_175892_6_) - { - int i1 = p_175892_1_.nextInt(100); -@@ -354,14 +362,15 @@ - this.func_175809_a(p_74875_1_, p_74875_3_, p_74875_2_, 0.05F, 1, 2, k - 1, Blocks.field_150478_aa.func_176203_a(EnumFacing.UP.func_176745_a())); - this.func_175809_a(p_74875_1_, p_74875_3_, p_74875_2_, 0.05F, 1, 2, k + 1, Blocks.field_150478_aa.func_176203_a(EnumFacing.UP.func_176745_a())); - -+ ChestGenHooks info = ChestGenHooks.getInfo(MINESHAFT_CORRIDOR); - if (p_74875_2_.nextInt(100) == 0) - { -- this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 2, 0, k - 1, WeightedRandomChestContent.func_177629_a(StructureMineshaftPieces.field_175893_a, new WeightedRandomChestContent[] {Items.field_151134_bR.func_92114_b(p_74875_2_)}), 3 + p_74875_2_.nextInt(4)); -+ this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 2, 0, k - 1, info.getItems(p_74875_2_), info.getCount(p_74875_2_)); - } - - if (p_74875_2_.nextInt(100) == 0) - { -- this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 0, 0, k + 1, WeightedRandomChestContent.func_177629_a(StructureMineshaftPieces.field_175893_a, new WeightedRandomChestContent[] {Items.field_151134_bR.func_92114_b(p_74875_2_)}), 3 + p_74875_2_.nextInt(4)); -+ this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 0, 0, k + 1, info.getItems(p_74875_2_), info.getCount(p_74875_2_)); - } - - if (this.field_74956_b && !this.field_74957_c) diff --git a/patches/minecraft/net/minecraft/world/gen/structure/StructureNetherBridgePieces.java.patch b/patches/minecraft/net/minecraft/world/gen/structure/StructureNetherBridgePieces.java.patch deleted file mode 100644 index fbe1b5d05..000000000 --- a/patches/minecraft/net/minecraft/world/gen/structure/StructureNetherBridgePieces.java.patch +++ /dev/null @@ -1,28 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/structure/StructureNetherBridgePieces.java -+++ ../src-work/minecraft/net/minecraft/world/gen/structure/StructureNetherBridgePieces.java -@@ -154,7 +154,7 @@ - if (this.field_111021_b && p_74875_3_.func_175898_b(new BlockPos(this.func_74865_a(3, 3), this.func_74862_a(2), this.func_74873_b(3, 3)))) - { - this.field_111021_b = false; -- this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 3, 2, 3, field_111019_a, 2 + p_74875_2_.nextInt(4)); -+ this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 3, 2, 3, net.minecraftforge.common.ChestGenHooks.getItems(net.minecraftforge.common.ChestGenHooks.NETHER_FORTRESS, p_74875_2_), net.minecraftforge.common.ChestGenHooks.getCount(net.minecraftforge.common.ChestGenHooks.NETHER_FORTRESS, p_74875_2_)); - } - - this.func_175804_a(p_74875_1_, p_74875_3_, 0, 6, 0, 4, 6, 4, Blocks.field_150385_bj.func_176223_P(), Blocks.field_150385_bj.func_176223_P(), false); -@@ -224,7 +224,7 @@ - if (this.field_111020_b && p_74875_3_.func_175898_b(new BlockPos(this.func_74865_a(1, 3), this.func_74862_a(2), this.func_74873_b(1, 3)))) - { - this.field_111020_b = false; -- this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 1, 2, 3, field_111019_a, 2 + p_74875_2_.nextInt(4)); -+ this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 1, 2, 3, net.minecraftforge.common.ChestGenHooks.getItems(net.minecraftforge.common.ChestGenHooks.NETHER_FORTRESS, p_74875_2_), net.minecraftforge.common.ChestGenHooks.getCount(net.minecraftforge.common.ChestGenHooks.NETHER_FORTRESS, p_74875_2_)); - } - - this.func_175804_a(p_74875_1_, p_74875_3_, 0, 6, 0, 4, 6, 4, Blocks.field_150385_bj.func_176223_P(), Blocks.field_150385_bj.func_176223_P(), false); -@@ -953,6 +953,7 @@ - abstract static class Piece extends StructureComponent - { - protected static final List field_111019_a = Lists.newArrayList(new WeightedRandomChestContent[] {new WeightedRandomChestContent(Items.field_151045_i, 0, 1, 3, 5), new WeightedRandomChestContent(Items.field_151042_j, 0, 1, 5, 5), new WeightedRandomChestContent(Items.field_151043_k, 0, 1, 3, 15), new WeightedRandomChestContent(Items.field_151010_B, 0, 1, 1, 5), new WeightedRandomChestContent(Items.field_151171_ah, 0, 1, 1, 5), new WeightedRandomChestContent(Items.field_151033_d, 0, 1, 1, 5), new WeightedRandomChestContent(Items.field_151075_bm, 0, 3, 7, 5), new WeightedRandomChestContent(Items.field_151141_av, 0, 1, 1, 10), new WeightedRandomChestContent(Items.field_151136_bY, 0, 1, 1, 8), new WeightedRandomChestContent(Items.field_151138_bX, 0, 1, 1, 5), new WeightedRandomChestContent(Items.field_151125_bZ, 0, 1, 1, 3), new WeightedRandomChestContent(Item.func_150898_a(Blocks.field_150343_Z), 0, 2, 4, 2)}); -+ static { net.minecraftforge.common.ChestGenHooks.init(net.minecraftforge.common.ChestGenHooks.NETHER_FORTRESS, field_111019_a, 2, 5); } - private static final String __OBFID = "CL_00000466"; - - public Piece() {} diff --git a/patches/minecraft/net/minecraft/world/gen/structure/StructureStrongholdPieces.java.patch b/patches/minecraft/net/minecraft/world/gen/structure/StructureStrongholdPieces.java.patch deleted file mode 100644 index a8d7f2e10..000000000 --- a/patches/minecraft/net/minecraft/world/gen/structure/StructureStrongholdPieces.java.patch +++ /dev/null @@ -1,84 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/gen/structure/StructureStrongholdPieces.java -+++ ../src-work/minecraft/net/minecraft/world/gen/structure/StructureStrongholdPieces.java -@@ -17,6 +17,8 @@ - import net.minecraft.util.EnumFacing; - import net.minecraft.util.WeightedRandomChestContent; - import net.minecraft.world.World; -+import net.minecraftforge.common.ChestGenHooks; -+import static net.minecraftforge.common.ChestGenHooks.*; - - public class StructureStrongholdPieces - { -@@ -248,6 +250,12 @@ - - public ChestCorridor() {} - -+ static -+ { -+ ChestGenHooks.init(STRONGHOLD_CORRIDOR, field_75003_a, 2, 4); -+ ChestGenHooks.addItem(STRONGHOLD_CORRIDOR, new WeightedRandomChestContent(new net.minecraft.item.ItemStack(Items.field_151134_bR, 1, 0), 1, 1, 1)); -+ } -+ - public ChestCorridor(int p_i45582_1_, Random p_i45582_2_, StructureBoundingBox p_i45582_3_, EnumFacing p_i45582_4_) - { - super(p_i45582_1_); -@@ -304,7 +312,7 @@ - if (!this.field_75002_c && p_74875_3_.func_175898_b(new BlockPos(this.func_74865_a(3, 3), this.func_74862_a(2), this.func_74873_b(3, 3)))) - { - this.field_75002_c = true; -- this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 3, 2, 3, WeightedRandomChestContent.func_177629_a(field_75003_a, new WeightedRandomChestContent[] {Items.field_151134_bR.func_92114_b(p_74875_2_)}), 2 + p_74875_2_.nextInt(2)); -+ this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 3, 2, 3, ChestGenHooks.getItems(STRONGHOLD_CORRIDOR, p_74875_2_), ChestGenHooks.getCount(STRONGHOLD_CORRIDOR, p_74875_2_)); - } - - return true; -@@ -599,6 +607,12 @@ - private boolean field_75008_c; - private static final String __OBFID = "CL_00000491"; - -+ static -+ { -+ ChestGenHooks.init(STRONGHOLD_CORRIDOR, field_75007_b, 1, 5); -+ ChestGenHooks.addItem(STRONGHOLD_CORRIDOR, new WeightedRandomChestContent(new net.minecraft.item.ItemStack(Items.field_151134_bR, 1, 0), 1, 5, 2)); -+ } -+ - public Library() {} - - public Library(int p_i45578_1_, Random p_i45578_2_, StructureBoundingBox p_i45578_3_, EnumFacing p_i45578_4_) -@@ -742,12 +756,13 @@ - this.func_175811_a(p_74875_1_, Blocks.field_150478_aa.func_176223_P(), b1, 8, b2 + 1, p_74875_3_); - } - -- this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 3, 3, 5, WeightedRandomChestContent.func_177629_a(field_75007_b, new WeightedRandomChestContent[] {Items.field_151134_bR.func_92112_a(p_74875_2_, 1, 5, 2)}), 1 + p_74875_2_.nextInt(4)); -+ ChestGenHooks info = ChestGenHooks.getInfo(STRONGHOLD_LIBRARY); -+ this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 3, 3, 5, info.getItems(p_74875_2_), info.getCount(p_74875_2_)); - - if (this.field_75008_c) - { - this.func_175811_a(p_74875_1_, Blocks.field_150350_a.func_176223_P(), 12, 9, 1, p_74875_3_); -- this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 12, 8, 1, WeightedRandomChestContent.func_177629_a(field_75007_b, new WeightedRandomChestContent[] {Items.field_151134_bR.func_92112_a(p_74875_2_, 1, 5, 2)}), 1 + p_74875_2_.nextInt(4)); -+ this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 12, 8, 1, info.getItems(p_74875_2_), info.getCount(p_74875_2_)); - } - - return true; -@@ -1024,6 +1039,12 @@ - protected int field_75013_b; - private static final String __OBFID = "CL_00000496"; - -+ static -+ { -+ ChestGenHooks.init(STRONGHOLD_CROSSING, field_75014_c, 1, 5); -+ ChestGenHooks.addItem(STRONGHOLD_CROSSING, new WeightedRandomChestContent(new net.minecraft.item.ItemStack(Items.field_151134_bR, 1, 0), 1, 1, 1)); -+ } -+ - public RoomCrossing() {} - - public RoomCrossing(int p_i45575_1_, Random p_i45575_2_, StructureBoundingBox p_i45575_3_, EnumFacing p_i45575_4_) -@@ -1159,7 +1180,7 @@ - this.func_175811_a(p_74875_1_, Blocks.field_150468_ap.func_176203_a(this.func_151555_a(Blocks.field_150468_ap, EnumFacing.WEST.func_176745_a())), 9, 1, 3, p_74875_3_); - this.func_175811_a(p_74875_1_, Blocks.field_150468_ap.func_176203_a(this.func_151555_a(Blocks.field_150468_ap, EnumFacing.WEST.func_176745_a())), 9, 2, 3, p_74875_3_); - this.func_175811_a(p_74875_1_, Blocks.field_150468_ap.func_176203_a(this.func_151555_a(Blocks.field_150468_ap, EnumFacing.WEST.func_176745_a())), 9, 3, 3, p_74875_3_); -- this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 3, 4, 8, WeightedRandomChestContent.func_177629_a(field_75014_c, new WeightedRandomChestContent[] {Items.field_151134_bR.func_92114_b(p_74875_2_)}), 1 + p_74875_2_.nextInt(4)); -+ this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 3, 4, 8, ChestGenHooks.getItems(STRONGHOLD_CROSSING, p_74875_2_), ChestGenHooks.getCount(STRONGHOLD_CROSSING, p_74875_2_)); - } - - return true; diff --git a/patches/minecraft/net/minecraft/world/storage/MapData.java.patch b/patches/minecraft/net/minecraft/world/storage/MapData.java.patch deleted file mode 100644 index 60cc5db82..000000000 --- a/patches/minecraft/net/minecraft/world/storage/MapData.java.patch +++ /dev/null @@ -1,48 +0,0 @@ ---- ../src-base/minecraft/net/minecraft/world/storage/MapData.java -+++ ../src-work/minecraft/net/minecraft/world/storage/MapData.java -@@ -22,7 +22,7 @@ - { - public int field_76201_a; - public int field_76199_b; -- public byte field_76200_c; -+ public int field_76200_c; //FML byte -> int - public byte field_76197_d; - public byte[] field_76198_e = new byte[16384]; - public List field_76196_g = Lists.newArrayList(); -@@ -46,7 +46,17 @@ - - public void func_76184_a(NBTTagCompound p_76184_1_) - { -- this.field_76200_c = p_76184_1_.func_74771_c("dimension"); -+ net.minecraft.nbt.NBTBase dimension = p_76184_1_.func_74781_a("dimension"); -+ -+ if (dimension instanceof net.minecraft.nbt.NBTTagByte) -+ { -+ this.field_76200_c = ((net.minecraft.nbt.NBTTagByte)dimension).func_150290_f(); -+ } -+ else -+ { -+ this.field_76200_c = ((net.minecraft.nbt.NBTTagInt)dimension).func_150287_d(); -+ } -+ - this.field_76201_a = p_76184_1_.func_74762_e("xCenter"); - this.field_76199_b = p_76184_1_.func_74762_e("zCenter"); - this.field_76197_d = p_76184_1_.func_74771_c("scale"); -@@ -87,7 +97,7 @@ - - public void func_76187_b(NBTTagCompound p_76187_1_) - { -- p_76187_1_.func_74774_a("dimension", this.field_76200_c); -+ p_76187_1_.func_74768_a("dimension", this.field_76200_c); - p_76187_1_.func_74768_a("xCenter", this.field_76201_a); - p_76187_1_.func_74768_a("zCenter", this.field_76199_b); - p_76187_1_.func_74774_a("scale", this.field_76197_d); -@@ -166,7 +176,7 @@ - p_82567_8_ += p_82567_8_ < 0.0D ? -8.0D : 8.0D; - b2 = (byte)((int)(p_82567_8_ * 16.0D / 360.0D)); - -- if (this.field_76200_c < 0) -+ if (p_82567_2_.field_73011_w.shouldMapSpin(p_82567_3_, p_82567_4_, p_82567_6_, p_82567_8_)) - { - int k = (int)(p_82567_2_.func_72912_H().func_76073_f() / 10L); - b2 = (byte)(k * k * 34187121 + k * 121 >> 15 & 15);