From 323517e88bc46e09f6f0477a3b1010ceb33261b8 Mon Sep 17 00:00:00 2001 From: Chicken Bones Date: Wed, 23 Jan 2013 03:07:00 +1000 Subject: [PATCH 01/49] Gave entities and tile entities access to the second render pass for translucency. --- .../client/ForgeHooksClient.java | 5 + .../client/renderer/EntityRenderer.java.patch | 30 ++++- .../client/renderer/RenderGlobal.java.patch | 124 ++++++++++++++++-- .../net/minecraft/entity/Entity.java.patch | 7 +- .../tileentity/TileEntity.java.patch | 7 +- 5 files changed, 159 insertions(+), 14 deletions(-) diff --git a/client/net/minecraftforge/client/ForgeHooksClient.java b/client/net/minecraftforge/client/ForgeHooksClient.java index 72c4181a6a..053e62cc0b 100644 --- a/client/net/minecraftforge/client/ForgeHooksClient.java +++ b/client/net/minecraftforge/client/ForgeHooksClient.java @@ -413,4 +413,9 @@ public class ForgeHooksClient } } } + + public static void setRenderPass(int pass) + { + renderPass = pass; + } } diff --git a/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.java.patch index d3764cfd90..047c2833e0 100644 --- a/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/EntityRenderer.java.patch @@ -56,7 +56,17 @@ GL11.glRotatef(var2.prevRotationYaw + (var2.rotationYaw - var2.prevRotationYaw) * par1 + 180.0F, 0.0F, -1.0F, 0.0F); GL11.glRotatef(var2.prevRotationPitch + (var2.rotationPitch - var2.prevRotationPitch) * par1, -1.0F, 0.0F, 0.0F); } -@@ -1139,8 +1143,11 @@ +@@ -1124,7 +1128,9 @@ + { + RenderHelper.enableStandardItemLighting(); + this.mc.mcProfiler.endStartSection("entities"); ++ ForgeHooksClient.setRenderPass(0); + var5.renderEntities(var4.getPosition(par1), var14, par1); ++ ForgeHooksClient.setRenderPass(-1); + this.enableLightmap((double)par1); + this.mc.mcProfiler.endStartSection("litParticles"); + var6.renderLitParticles(var4, par1); +@@ -1139,8 +1145,11 @@ var17 = (EntityPlayer)var4; GL11.glDisable(GL11.GL_ALPHA_TEST); this.mc.mcProfiler.endStartSection("outline"); @@ -70,7 +80,21 @@ GL11.glEnable(GL11.GL_ALPHA_TEST); } } -@@ -1204,15 +1211,18 @@ +@@ -1194,6 +1203,13 @@ + this.mc.mcProfiler.endStartSection("water"); + var5.sortAndRender(var4, 1, (double)par1); + } ++ ++ RenderHelper.enableStandardItemLighting(); ++ this.mc.mcProfiler.endStartSection("entities"); ++ ForgeHooksClient.setRenderPass(1); ++ var5.renderEntities(var4.getPosition(par1), var14, par1); ++ ForgeHooksClient.setRenderPass(-1); ++ RenderHelper.disableStandardItemLighting(); + + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_CULL_FACE); +@@ -1204,15 +1220,18 @@ var17 = (EntityPlayer)var4; GL11.glDisable(GL11.GL_ALPHA_TEST); this.mc.mcProfiler.endStartSection("outline"); @@ -92,7 +116,7 @@ GL11.glDisable(GL11.GL_BLEND); this.mc.mcProfiler.endStartSection("weather"); this.renderRainSnow(par1); -@@ -1222,6 +1232,9 @@ +@@ -1222,6 +1241,9 @@ { this.renderCloudsCheck(var5, par1); } diff --git a/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.java.patch b/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.java.patch index e0d6509fcf..6acb4e55ca 100644 --- a/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.java.patch @@ -1,15 +1,121 @@ --- ../src_base/minecraft/net/minecraft/client/renderer/RenderGlobal.java +++ ../src_work/minecraft/net/minecraft/client/renderer/RenderGlobal.java -@@ -62,6 +62,8 @@ +@@ -62,6 +62,9 @@ import org.lwjgl.opengl.ARBOcclusionQuery; import org.lwjgl.opengl.GL11; +import net.minecraftforge.client.IRenderHandler; ++import net.minecraftforge.client.MinecraftForgeClient; + @SideOnly(Side.CLIENT) public class RenderGlobal implements IWorldAccess { -@@ -929,6 +931,12 @@ +@@ -439,62 +442,72 @@ + */ + public void renderEntities(Vec3 par1Vec3, ICamera par2ICamera, float par3) + { ++ int pass = MinecraftForgeClient.getRenderPass(); + if (this.renderEntitiesStartupCounter > 0) + { ++ if(pass > 0) ++ return; ++ + --this.renderEntitiesStartupCounter; + } + else + { +- this.theWorld.theProfiler.startSection("prepare"); +- TileEntityRenderer.instance.cacheActiveRenderInfo(this.theWorld, this.renderEngine, this.mc.fontRenderer, this.mc.renderViewEntity, par3); +- RenderManager.instance.cacheActiveRenderInfo(this.theWorld, this.renderEngine, this.mc.fontRenderer, this.mc.renderViewEntity, this.mc.gameSettings, par3); +- this.countEntitiesTotal = 0; +- this.countEntitiesRendered = 0; +- this.countEntitiesHidden = 0; +- EntityLiving var4 = this.mc.renderViewEntity; +- RenderManager.renderPosX = var4.lastTickPosX + (var4.posX - var4.lastTickPosX) * (double)par3; +- RenderManager.renderPosY = var4.lastTickPosY + (var4.posY - var4.lastTickPosY) * (double)par3; +- RenderManager.renderPosZ = var4.lastTickPosZ + (var4.posZ - var4.lastTickPosZ) * (double)par3; +- TileEntityRenderer.staticPlayerX = var4.lastTickPosX + (var4.posX - var4.lastTickPosX) * (double)par3; +- TileEntityRenderer.staticPlayerY = var4.lastTickPosY + (var4.posY - var4.lastTickPosY) * (double)par3; +- TileEntityRenderer.staticPlayerZ = var4.lastTickPosZ + (var4.posZ - var4.lastTickPosZ) * (double)par3; ++ List var5 = this.theWorld.getLoadedEntityList(); ++ if(pass == 0) ++ { ++ this.theWorld.theProfiler.startSection("prepare"); ++ TileEntityRenderer.instance.cacheActiveRenderInfo(this.theWorld, this.renderEngine, this.mc.fontRenderer, this.mc.renderViewEntity, par3); ++ RenderManager.instance.cacheActiveRenderInfo(this.theWorld, this.renderEngine, this.mc.fontRenderer, this.mc.renderViewEntity, this.mc.gameSettings, par3); ++ this.countEntitiesTotal = 0; ++ this.countEntitiesRendered = 0; ++ this.countEntitiesHidden = 0; ++ EntityLiving var4 = this.mc.renderViewEntity; ++ RenderManager.renderPosX = var4.lastTickPosX + (var4.posX - var4.lastTickPosX) * (double)par3; ++ RenderManager.renderPosY = var4.lastTickPosY + (var4.posY - var4.lastTickPosY) * (double)par3; ++ RenderManager.renderPosZ = var4.lastTickPosZ + (var4.posZ - var4.lastTickPosZ) * (double)par3; ++ TileEntityRenderer.staticPlayerX = var4.lastTickPosX + (var4.posX - var4.lastTickPosX) * (double)par3; ++ TileEntityRenderer.staticPlayerY = var4.lastTickPosY + (var4.posY - var4.lastTickPosY) * (double)par3; ++ TileEntityRenderer.staticPlayerZ = var4.lastTickPosZ + (var4.posZ - var4.lastTickPosZ) * (double)par3; ++ this.countEntitiesTotal = var5.size(); ++ } + this.mc.entityRenderer.enableLightmap((double)par3); + this.theWorld.theProfiler.endStartSection("global"); +- List var5 = this.theWorld.getLoadedEntityList(); +- this.countEntitiesTotal = var5.size(); + int var6; + Entity var7; + + for (var6 = 0; var6 < this.theWorld.weatherEffects.size(); ++var6) + { + var7 = (Entity)this.theWorld.weatherEffects.get(var6); +- ++this.countEntitiesRendered; +- +- if (var7.isInRangeToRenderVec3D(par1Vec3)) +- { +- RenderManager.instance.renderEntity(var7, par3); +- } +- } +- +- this.theWorld.theProfiler.endStartSection("entities"); +- +- for (var6 = 0; var6 < var5.size(); ++var6) +- { +- var7 = (Entity)var5.get(var6); +- +- if (var7.isInRangeToRenderVec3D(par1Vec3) && (var7.ignoreFrustumCheck || par2ICamera.isBoundingBoxInFrustum(var7.boundingBox) || var7.riddenByEntity == this.mc.thePlayer) && (var7 != this.mc.renderViewEntity || this.mc.gameSettings.thirdPersonView != 0 || this.mc.renderViewEntity.isPlayerSleeping()) && this.theWorld.blockExists(MathHelper.floor_double(var7.posX), 0, MathHelper.floor_double(var7.posZ))) ++ ++ if (var7.shouldRenderInPass(pass) && var7.isInRangeToRenderVec3D(par1Vec3)) + { + ++this.countEntitiesRendered; + RenderManager.instance.renderEntity(var7, par3); + } + } + ++ this.theWorld.theProfiler.endStartSection("entities"); ++ ++ for (var6 = 0; var6 < var5.size(); ++var6) ++ { ++ var7 = (Entity)var5.get(var6); ++ ++ if (var7.shouldRenderInPass(pass) && var7.isInRangeToRenderVec3D(par1Vec3) && (var7.ignoreFrustumCheck || par2ICamera.isBoundingBoxInFrustum(var7.boundingBox) || var7.riddenByEntity == this.mc.thePlayer) && (var7 != this.mc.renderViewEntity || this.mc.gameSettings.thirdPersonView != 0 || this.mc.renderViewEntity.isPlayerSleeping()) && this.theWorld.blockExists(MathHelper.floor_double(var7.posX), 0, MathHelper.floor_double(var7.posZ))) ++ { ++ ++this.countEntitiesRendered; ++ RenderManager.instance.renderEntity(var7, par3); ++ } ++ } ++ + this.theWorld.theProfiler.endStartSection("tileentities"); + RenderHelper.enableStandardItemLighting(); +- ++ ++ TileEntity te; + for (var6 = 0; var6 < this.tileEntities.size(); ++var6) + { +- TileEntityRenderer.instance.renderTileEntity((TileEntity)this.tileEntities.get(var6), par3); ++ te = (TileEntity)this.tileEntities.get(var6); ++ if(te.shouldRenderInPass(pass)) ++ TileEntityRenderer.instance.renderTileEntity(te, par3); + } + + this.mc.entityRenderer.disableLightmap((double)par3); +@@ -929,6 +942,12 @@ */ public void renderSky(float par1) { @@ -22,7 +128,7 @@ if (this.mc.theWorld.provider.dimensionId == 1) { GL11.glDisable(GL11.GL_FOG); -@@ -1167,6 +1175,13 @@ +@@ -1167,6 +1186,13 @@ public void renderClouds(float par1) { @@ -36,7 +142,7 @@ if (this.mc.theWorld.provider.isSurfaceWorld()) { if (this.mc.gameSettings.fancyGraphics) -@@ -1596,6 +1611,11 @@ +@@ -1596,6 +1622,11 @@ } public void drawBlockDamageTexture(Tessellator par1Tessellator, EntityPlayer par2EntityPlayer, float par3) @@ -48,7 +154,7 @@ { double var4 = par2EntityPlayer.lastTickPosX + (par2EntityPlayer.posX - par2EntityPlayer.lastTickPosX) * (double)par3; double var6 = par2EntityPlayer.lastTickPosY + (par2EntityPlayer.posY - par2EntityPlayer.lastTickPosY) * (double)par3; -@@ -1873,6 +1893,7 @@ +@@ -1873,6 +1904,7 @@ double var17 = this.mc.renderViewEntity.posY - par4; double var19 = this.mc.renderViewEntity.posZ - par6; EntityFX var21 = null; @@ -56,7 +162,7 @@ if (par1Str.equals("hugeexplosion")) { -@@ -2009,6 +2030,7 @@ +@@ -2009,6 +2041,7 @@ else if (par1Str.equals("snowballpoof")) { var21 = new EntityBreakingFX(this.theWorld, par2, par4, par6, Item.snowball); @@ -64,7 +170,7 @@ } else if (par1Str.equals("dripWater")) { -@@ -2025,6 +2047,7 @@ +@@ -2025,6 +2058,7 @@ else if (par1Str.equals("slime")) { var21 = new EntityBreakingFX(this.theWorld, par2, par4, par6, Item.slimeBall); @@ -72,7 +178,7 @@ } else if (par1Str.equals("heart")) { -@@ -2046,6 +2069,7 @@ +@@ -2046,6 +2080,7 @@ { int var27 = Integer.parseInt(par1Str.substring(par1Str.indexOf("_") + 1)); var21 = new EntityBreakingFX(this.theWorld, par2, par4, par6, par8, par10, par12, Item.itemsList[var27]); @@ -80,7 +186,7 @@ } else if (par1Str.startsWith("tilecrack_")) { -@@ -2053,11 +2077,12 @@ +@@ -2053,11 +2088,12 @@ int var25 = Integer.parseInt(var28[1]); int var26 = Integer.parseInt(var28[2]); var21 = (new EntityDiggingFX(this.theWorld, par2, par4, par6, par8, par10, par12, Block.blocksList[var25], 0, var26)).applyRenderColor(var26); diff --git a/patches/minecraft/net/minecraft/entity/Entity.java.patch b/patches/minecraft/net/minecraft/entity/Entity.java.patch index 2e663e0ac3..54068a2556 100644 --- a/patches/minecraft/net/minecraft/entity/Entity.java.patch +++ b/patches/minecraft/net/minecraft/entity/Entity.java.patch @@ -138,7 +138,7 @@ } public int func_82143_as() -@@ -2399,4 +2441,84 @@ +@@ -2399,4 +2441,89 @@ { return this.isBurning(); } @@ -221,5 +221,10 @@ + { + persistentID = UUID.randomUUID(); + } ++ } ++ ++ public boolean shouldRenderInPass(int pass) ++ { ++ return pass == 0; + } } diff --git a/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch b/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch index e9a418748d..ffb353149d 100644 --- a/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch +++ b/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch @@ -10,7 +10,7 @@ import net.minecraft.world.World; public class TileEntity -@@ -296,4 +298,52 @@ +@@ -296,4 +298,57 @@ addMapping(TileEntityBeacon.class, "Beacon"); addMapping(TileEntitySkull.class, "Skull"); } @@ -61,5 +61,10 @@ + public boolean shouldRefresh(int oldID, int newID, int oldMeta, int newMeta, World world, int x, int y, int z) + { + return true; ++ } ++ ++ public boolean shouldRenderInPass(int pass) ++ { ++ return pass == 0; + } } From f20ea649c6fbf4e49ccb857e6ea9d3333cf6d6a9 Mon Sep 17 00:00:00 2001 From: Christian Date: Wed, 23 Jan 2013 23:36:59 -0500 Subject: [PATCH 02/49] Attempt to fix a possible NPE in the face of ChickenBones' hackery. ChickenBones. stop it! --- .../common/DimensionManager.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/common/net/minecraftforge/common/DimensionManager.java b/common/net/minecraftforge/common/DimensionManager.java index 918525f983..8cf50502d8 100644 --- a/common/net/minecraftforge/common/DimensionManager.java +++ b/common/net/minecraftforge/common/DimensionManager.java @@ -240,14 +240,28 @@ public class DimensionManager */ public static void unloadWorlds(Hashtable worldTickTimes) { for (int id : unloadQueue) { + WorldServer w = worlds.get(id); try { - worlds.get(id).saveAllChunks(true, null); + if (w != null) + { + w.saveAllChunks(true, null); + } + else + { + FMLLog.warning("Unexpected world unload - world %d is already unloaded", id); + } } catch (MinecraftException e) { e.printStackTrace(); } - MinecraftForge.EVENT_BUS.post(new WorldEvent.Unload(worlds.get(id))); - ((WorldServer)worlds.get(id)).flush(); - setWorld(id, null); + finally + { + if (w != null) + { + MinecraftForge.EVENT_BUS.post(new WorldEvent.Unload(w)); + w.flush(); + setWorld(id, null); + } + } } unloadQueue.clear(); } From ae7e328228af47a8f1c792d45f65700674e94aae Mon Sep 17 00:00:00 2001 From: Christian Date: Fri, 25 Jan 2013 21:21:20 -0500 Subject: [PATCH 03/49] Fix a potential problem with "Entity already added" when using the dormant chunk cache capability. The entities in the dormant chunk cache will get new IDs prior to the cached chunk returning. --- .../minecraftforge/common/ForgeChunkManager.java | 13 ++++++++++++- .../net/minecraft/entity/Entity.java.patch | 10 +++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/common/net/minecraftforge/common/ForgeChunkManager.java b/common/net/minecraftforge/common/ForgeChunkManager.java index 5145c2c18d..57274c83c1 100644 --- a/common/net/minecraftforge/common/ForgeChunkManager.java +++ b/common/net/minecraftforge/common/ForgeChunkManager.java @@ -880,7 +880,18 @@ public class ForgeChunkManager public static Chunk fetchDormantChunk(long coords, World world) { Cache cache = dormantChunkCache.get(world); - return cache == null ? null : cache.getIfPresent(coords); + Chunk chunk = cache.getIfPresent(coords); + if (chunk != null) + { + for (List eList : chunk.entityLists) + { + for (Entity e: eList) + { + e.resetEntityId(); + } + } + } + return chunk; } static void captureConfig(File configDir) diff --git a/patches/minecraft/net/minecraft/entity/Entity.java.patch b/patches/minecraft/net/minecraft/entity/Entity.java.patch index 2e663e0ac3..a3fe8122b2 100644 --- a/patches/minecraft/net/minecraft/entity/Entity.java.patch +++ b/patches/minecraft/net/minecraft/entity/Entity.java.patch @@ -138,7 +138,7 @@ } public int func_82143_as() -@@ -2399,4 +2441,84 @@ +@@ -2399,4 +2441,92 @@ { return this.isBurning(); } @@ -221,5 +221,13 @@ + { + persistentID = UUID.randomUUID(); + } ++ } ++ ++ /** ++ * Reset the entity ID to a new value. Not to be used from Mod code ++ */ ++ public final void resetEntityId() ++ { ++ this.entityId = nextEntityID++; + } } From 695b080197bd577cc34fe6dbc72b74f4a74b2d5c Mon Sep 17 00:00:00 2001 From: Christian Date: Sat, 26 Jan 2013 10:24:48 -0500 Subject: [PATCH 04/49] Fix NPE causing issue with the cache. Derpy derp. --- common/net/minecraftforge/common/ForgeChunkManager.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/net/minecraftforge/common/ForgeChunkManager.java b/common/net/minecraftforge/common/ForgeChunkManager.java index 57274c83c1..4794f53b2b 100644 --- a/common/net/minecraftforge/common/ForgeChunkManager.java +++ b/common/net/minecraftforge/common/ForgeChunkManager.java @@ -880,6 +880,10 @@ public class ForgeChunkManager public static Chunk fetchDormantChunk(long coords, World world) { Cache cache = dormantChunkCache.get(world); + if (cache == null) + { + return null; + } Chunk chunk = cache.getIfPresent(coords); if (chunk != null) { From 70ca0eeb74d8976c05ee7061b30f4d3768393113 Mon Sep 17 00:00:00 2001 From: Christian Date: Sat, 26 Jan 2013 11:11:20 -0500 Subject: [PATCH 05/49] Add in TESR culling, and a new TileEntity method to allow for differential sizing of the TESR view culling vs the TE collision bounding box (the former defaults to the latter) Checked into a branch because it's likely to break expanded TileEntities. --- .../client/renderer/RenderGlobal.java.patch | 29 +++++++++---- .../tileentity/TileEntity.java.patch | 42 +++++++++++++++---- 2 files changed, 56 insertions(+), 15 deletions(-) diff --git a/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.java.patch b/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.java.patch index e0d6509fcf..fdfb4748c6 100644 --- a/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.java.patch @@ -9,7 +9,20 @@ @SideOnly(Side.CLIENT) public class RenderGlobal implements IWorldAccess { -@@ -929,6 +931,12 @@ +@@ -494,7 +496,11 @@ + + for (var6 = 0; var6 < this.tileEntities.size(); ++var6) + { +- TileEntityRenderer.instance.renderTileEntity((TileEntity)this.tileEntities.get(var6), par3); ++ TileEntity te = (TileEntity)this.tileEntities.get(var6); ++ if (par2ICamera.isBoundingBoxInFrustum(te.getRenderBoundingBox())) ++ { ++ TileEntityRenderer.instance.renderTileEntity(te, par3); ++ } + } + + this.mc.entityRenderer.disableLightmap((double)par3); +@@ -929,6 +935,12 @@ */ public void renderSky(float par1) { @@ -22,7 +35,7 @@ if (this.mc.theWorld.provider.dimensionId == 1) { GL11.glDisable(GL11.GL_FOG); -@@ -1167,6 +1175,13 @@ +@@ -1167,6 +1179,13 @@ public void renderClouds(float par1) { @@ -36,7 +49,7 @@ if (this.mc.theWorld.provider.isSurfaceWorld()) { if (this.mc.gameSettings.fancyGraphics) -@@ -1596,6 +1611,11 @@ +@@ -1596,6 +1615,11 @@ } public void drawBlockDamageTexture(Tessellator par1Tessellator, EntityPlayer par2EntityPlayer, float par3) @@ -48,7 +61,7 @@ { double var4 = par2EntityPlayer.lastTickPosX + (par2EntityPlayer.posX - par2EntityPlayer.lastTickPosX) * (double)par3; double var6 = par2EntityPlayer.lastTickPosY + (par2EntityPlayer.posY - par2EntityPlayer.lastTickPosY) * (double)par3; -@@ -1873,6 +1893,7 @@ +@@ -1873,6 +1897,7 @@ double var17 = this.mc.renderViewEntity.posY - par4; double var19 = this.mc.renderViewEntity.posZ - par6; EntityFX var21 = null; @@ -56,7 +69,7 @@ if (par1Str.equals("hugeexplosion")) { -@@ -2009,6 +2030,7 @@ +@@ -2009,6 +2034,7 @@ else if (par1Str.equals("snowballpoof")) { var21 = new EntityBreakingFX(this.theWorld, par2, par4, par6, Item.snowball); @@ -64,7 +77,7 @@ } else if (par1Str.equals("dripWater")) { -@@ -2025,6 +2047,7 @@ +@@ -2025,6 +2051,7 @@ else if (par1Str.equals("slime")) { var21 = new EntityBreakingFX(this.theWorld, par2, par4, par6, Item.slimeBall); @@ -72,7 +85,7 @@ } else if (par1Str.equals("heart")) { -@@ -2046,6 +2069,7 @@ +@@ -2046,6 +2073,7 @@ { int var27 = Integer.parseInt(par1Str.substring(par1Str.indexOf("_") + 1)); var21 = new EntityBreakingFX(this.theWorld, par2, par4, par6, par8, par10, par12, Item.itemsList[var27]); @@ -80,7 +93,7 @@ } else if (par1Str.startsWith("tilecrack_")) { -@@ -2053,11 +2077,12 @@ +@@ -2053,11 +2081,12 @@ int var25 = Integer.parseInt(var28[1]); int var26 = Integer.parseInt(var28[2]); var21 = (new EntityDiggingFX(this.theWorld, par2, par4, par6, par8, par10, par12, Block.blocksList[var25], 0, var26)).applyRenderColor(var26); diff --git a/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch b/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch index e9a418748d..d223a60561 100644 --- a/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch +++ b/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch @@ -1,16 +1,21 @@ --- ../src_base/minecraft/net/minecraft/tileentity/TileEntity.java +++ ../src_work/minecraft/net/minecraft/tileentity/TileEntity.java -@@ -11,7 +11,9 @@ +@@ -9,9 +9,14 @@ + + import net.minecraft.block.Block; import net.minecraft.block.TileEntityRecordPlayer; ++import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.crash.CrashReportCategory; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.INetworkManager; import net.minecraft.network.packet.Packet; +import net.minecraft.network.packet.Packet132TileEntityData; ++import net.minecraft.util.AABBPool; ++import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; public class TileEntity -@@ -296,4 +298,52 @@ +@@ -296,4 +301,75 @@ addMapping(TileEntityBeacon.class, "Beacon"); addMapping(TileEntitySkull.class, "Skull"); } @@ -27,10 +32,10 @@ + /** + * Called when you receive a TileEntityData packet for the location this + * TileEntity is currently in. On the client, the NetworkManager will always -+ * be the remote server. On the server, it will be whomever is responsible for ++ * be the remote server. On the server, it will be whomever is responsible for + * sending the packet. -+ * -+ * @param net The NetworkManager the packet originated from ++ * ++ * @param net The NetworkManager the packet originated from + * @param pkt The data packet + */ + public void onDataPacket(INetworkManager net, Packet132TileEntityData pkt) @@ -47,12 +52,12 @@ + /** + * Called from Chunk.setBlockIDWithMetadata, determines if this tile entity should be re-created when the ID, or Metadata changes. + * Use with caution as this will leave straggler TileEntities, or create conflicts with other TileEntities if not used properly. -+ * ++ * + * @param oldID The old ID of the block + * @param newID The new ID of the block (May be the same) + * @param oldMeta The old metadata of the block + * @param newMeta The new metadata of the block (May be the same) -+ * @param world Current world ++ * @param world Current world + * @param x X Postion + * @param y Y Position + * @param z Z Position @@ -61,5 +66,28 @@ + public boolean shouldRefresh(int oldID, int newID, int oldMeta, int newMeta, World world, int x, int y, int z) + { + return true; ++ } ++ ++ /** ++ * Default render bounding box: infinite in scope. Used to control rendering on {@link TileEntitySpecialRenderer}. ++ */ ++ @SideOnly(Side.CLIENT) ++ public static final AxisAlignedBB INFINITE_EXTENT_AABB = AxisAlignedBB.getBoundingBox(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY); ++ ++ /** ++ * Return an {@link AxisAlignedBB} that controls the visible scope of a {@link TileEntitySpecialRenderer} associated with this {@link TileEntity} ++ * Defaults to the collision bounding box {@link Block#getCollisionBoundingBoxFromPool(World, int, int, int)} associated with the block ++ * at this location. ++ * ++ * @return an appropriately size {@link AxisAlignedBB} for the {@link TileEntity} ++ */ ++ @SideOnly(Side.CLIENT) ++ public AxisAlignedBB getRenderBoundingBox() ++ { ++ if (getBlockType()!=null) ++ { ++ return getBlockType().getCollisionBoundingBoxFromPool(worldObj, xCoord, yCoord, zCoord); ++ } ++ return INFINITE_EXTENT_AABB; + } } From c483f68b262c0953a38b765966e9998d460dcb97 Mon Sep 17 00:00:00 2001 From: Christian Date: Sat, 26 Jan 2013 12:35:01 -0500 Subject: [PATCH 06/49] Bump the revision number for the TESR and renderpass changes --- common/net/minecraftforge/common/ForgeVersion.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/net/minecraftforge/common/ForgeVersion.java b/common/net/minecraftforge/common/ForgeVersion.java index b9f4b77601..c3bc3b7bdd 100644 --- a/common/net/minecraftforge/common/ForgeVersion.java +++ b/common/net/minecraftforge/common/ForgeVersion.java @@ -12,7 +12,7 @@ public class ForgeVersion //This number is incremented every minecraft release, never reset public static final int minorVersion = 6; //This number is incremented every time a interface changes or new major feature is added, and reset every Minecraft version - public static final int revisionVersion = 0; + public static final int revisionVersion = 1; //This number is incremented every time Jenkins builds Forge, and never reset. Should always be 0 in the repo code. public static final int buildVersion = 0; From b38656588163842ad3fd51ba70b69a11d9614e66 Mon Sep 17 00:00:00 2001 From: Christian Date: Sat, 26 Jan 2013 14:07:51 -0500 Subject: [PATCH 07/49] Add in a mechanism for explicit subclassing of WeightedRandomChestItem to allow for generational style chest content generation rather than static. Cleans up some old code nicely --- .../minecraftforge/common/DungeonHooks.java | 11 ++++- .../WeightedRandomChestContent.java.patch | 43 ++++++++++++------- 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/common/net/minecraftforge/common/DungeonHooks.java b/common/net/minecraftforge/common/DungeonHooks.java index bc1965aa27..09f6ff6dbc 100644 --- a/common/net/minecraftforge/common/DungeonHooks.java +++ b/common/net/minecraftforge/common/DungeonHooks.java @@ -3,6 +3,9 @@ package net.minecraftforge.common; import java.util.ArrayList; import java.util.Random; +import cpw.mods.fml.common.FMLLog; + +import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.WeightedRandom; @@ -148,12 +151,18 @@ public class DungeonHooks { int min = theMinimumChanceToGenerateItem; int max = theMaximumChanceToGenerateItem; - + ItemStack ret = this.theItemId.copy(); ret.stackSize = min + (rand.nextInt(max - min + 1)); return ret; } + @Override + protected final ItemStack[] generateChestContent(Random random, IInventory newInventory) + { + FMLLog.warning("Some mod is still using DungeonHooks.DungonLoot, tell them to stop! %s", this); + return new ItemStack[] { generateStack(random) }; + } public boolean equals(ItemStack item, int min, int max) { int minCount = theMinimumChanceToGenerateItem; diff --git a/patches/minecraft/net/minecraft/util/WeightedRandomChestContent.java.patch b/patches/minecraft/net/minecraft/util/WeightedRandomChestContent.java.patch index caca7b31f0..fb28b67632 100644 --- a/patches/minecraft/net/minecraft/util/WeightedRandomChestContent.java.patch +++ b/patches/minecraft/net/minecraft/util/WeightedRandomChestContent.java.patch @@ -1,11 +1,12 @@ --- ../src_base/minecraft/net/minecraft/util/WeightedRandomChestContent.java +++ ../src_work/minecraft/net/minecraft/util/WeightedRandomChestContent.java -@@ -1,9 +1,13 @@ +@@ -1,9 +1,14 @@ package net.minecraft.util; import java.util.Random; + +import cpw.mods.fml.common.FMLLog; ++import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntityChest; import net.minecraft.tileentity.TileEntityDispenser; @@ -14,7 +15,7 @@ public class WeightedRandomChestContent extends WeightedRandomItem { -@@ -35,27 +39,26 @@ +@@ -35,27 +40,17 @@ /** * Generates the Chest contents. */ @@ -25,24 +26,17 @@ { WeightedRandomChestContent var5 = (WeightedRandomChestContent)WeightedRandom.getRandomItem(par0Random, par1ArrayOfWeightedRandomChestContent); - int var6 = var5.theMinimumChanceToGenerateItem + par0Random.nextInt(var5.theMaximumChanceToGenerateItem - var5.theMinimumChanceToGenerateItem + 1); ++ ItemStack[] stacks = var5.generateChestContent(par0Random, par2TileEntityChest); - if (var5.theItemId.getMaxStackSize() >= var6) -+ if (var5 instanceof DungeonHooks.DungeonLoot) ++ for (ItemStack item : stacks) { - ItemStack var7 = var5.theItemId.copy(); - var7.stackSize = var6; - par2TileEntityChest.setInventorySlotContents(par0Random.nextInt(par2TileEntityChest.getSizeInventory()), var7); -+ DungeonHooks.DungeonLoot loot = (DungeonHooks.DungeonLoot)var5; -+ par2TileEntityChest.setInventorySlotContents(par0Random.nextInt(par2TileEntityChest.getSizeInventory()), loot.generateStack(par0Random)); -+ FMLLog.warning("Some mod is still using DungeonHooks.DungonLoot, tell them to stop! %s", loot); -+ continue; - } +- } - else -+ -+ ItemStack[] stacks = ChestGenHooks.generateStacks(par0Random, var5.theItemId, var5.theMinimumChanceToGenerateItem, var5.theMaximumChanceToGenerateItem); -+ -+ for (ItemStack item : stacks) - { +- { - for (int var9 = 0; var9 < var6; ++var9) - { - ItemStack var8 = var5.theItemId.copy(); @@ -53,12 +47,12 @@ } } } -@@ -68,22 +71,11 @@ +@@ -68,22 +63,11 @@ for (int var4 = 0; var4 < par3; ++var4) { WeightedRandomChestContent var5 = (WeightedRandomChestContent)WeightedRandom.getRandomItem(par0Random, par1ArrayOfWeightedRandomChestContent); - int var6 = var5.theMinimumChanceToGenerateItem + par0Random.nextInt(var5.theMaximumChanceToGenerateItem - var5.theMinimumChanceToGenerateItem + 1); -+ ItemStack[] stacks = ChestGenHooks.generateStacks(par0Random, var5.theItemId, var5.theMinimumChanceToGenerateItem, var5.theMaximumChanceToGenerateItem); ++ ItemStack[] stacks = var5.generateChestContent(par0Random, par2TileEntityDispenser); - if (var5.theItemId.getMaxStackSize() >= var6) + for (ItemStack item : stacks) @@ -79,3 +73,22 @@ } } } +@@ -109,4 +93,18 @@ + + return var2; + } ++ ++ // -- Forge hooks ++ /** ++ * Allow a mod to submit a custom implementation that can delegate item stack generation beyond simple stack lookup ++ * ++ * @param random The current random for generation ++ * @param newInventory The inventory being generated (do not populate it, but you can refer to it) ++ * @return An array of {@link ItemStack} to put into the chest ++ */ ++ protected ItemStack[] generateChestContent(Random random, IInventory newInventory) ++ { ++ return ChestGenHooks.generateStacks(random, theItemId, theMinimumChanceToGenerateItem, theMaximumChanceToGenerateItem); ++ } ++ + } From f06e0be5e59723808305f4c4aeb89c9108c79230 Mon Sep 17 00:00:00 2001 From: Christian Date: Sun, 27 Jan 2013 10:43:35 -0500 Subject: [PATCH 08/49] We try and log a message if we detect a world leak: it's probably not infallible, but it should help mod developers- if you see this when testing your mod with, say, mystcraft, you're probably keeping a hold of an invalid handle to the World (either directly, or indirectly via Entity or TileEntity) and you should look to refactor to wrap those handles in WeakReferences --- .../common/DimensionManager.java | 40 ++++++++++++++++++- .../server/MinecraftServer.java.patch | 2 +- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/common/net/minecraftforge/common/DimensionManager.java b/common/net/minecraftforge/common/DimensionManager.java index 8cf50502d8..2b29e7413b 100644 --- a/common/net/minecraftforge/common/DimensionManager.java +++ b/common/net/minecraftforge/common/DimensionManager.java @@ -3,15 +3,23 @@ package net.minecraftforge.common; import java.io.File; import java.util.ArrayList; import java.util.BitSet; +import java.util.HashSet; import java.util.Hashtable; +import java.util.List; +import java.util.ListIterator; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; +import java.util.concurrent.ConcurrentMap; import java.util.logging.Level; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ListMultimap; +import com.google.common.collect.Lists; +import com.google.common.collect.MapMaker; import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.FMLLog; @@ -40,9 +48,10 @@ public class DimensionManager private static Hashtable worlds = new Hashtable(); private static boolean hasInit = false; private static Hashtable dimensions = new Hashtable(); - private static Map> persistentChunkStore = Maps.newHashMap(); //FIXME: Unused? private static ArrayList unloadQueue = new ArrayList(); private static BitSet dimensionMap = new BitSet(Long.SIZE << 4); + private static ConcurrentMap weakWorldMap = new MapMaker().weakKeys().weakValues().makeMap(); + private static Set leakedWorlds = Sets.newHashSet(); public static boolean registerProviderType(int id, Class provider, boolean keepLoaded) { @@ -115,6 +124,34 @@ public class DimensionManager return getWorld(dim).provider; } + public static Integer[] getIDs(boolean check) + { + if (check) + { + List allWorlds = Lists.newArrayList(weakWorldMap.keySet()); + allWorlds.removeAll(worlds.values()); + Set newLeaks = Sets.newHashSet(); + for (ListIterator li = allWorlds.listIterator(); li.hasNext(); ) + { + World w = li.next(); + if (leakedWorlds.contains(System.identityHashCode(w))) + { + li.remove(); + } + newLeaks.add(System.identityHashCode(w)); + } + leakedWorlds = newLeaks; + if (allWorlds.size() > 0) + { + FMLLog.severe("Detected leaking worlds in memory. There are %d worlds that appear to be persisting. A mod is likely caching the world incorrectly\n", allWorlds.size() + leakedWorlds.size()); + for (World w : allWorlds) + { + FMLLog.severe("The world %x (%s) has leaked.\n", System.identityHashCode(w), w.getWorldInfo().getWorldName()); + } + } + } + return getIDs(); + } public static Integer[] getIDs() { return worlds.keySet().toArray(new Integer[worlds.size()]); //Only loaded dims, since usually used to cycle through loaded worlds @@ -124,6 +161,7 @@ public class DimensionManager { if (world != null) { worlds.put(id, world); + weakWorldMap.put(world, world); MinecraftServer.getServer().worldTickTimes.put(id, new long[100]); FMLLog.info("Loading dimension %d (%s) (%s)", id, world.getWorldInfo().getWorldName(), world.getMinecraftServer()); } else { diff --git a/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch b/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch index 6a773e51d3..7d08a6c34b 100644 --- a/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch +++ b/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch @@ -117,7 +117,7 @@ - for (var1 = 0; var1 < this.worldServers.length; ++var1) - { -+ Integer[] ids = DimensionManager.getIDs(); ++ Integer[] ids = DimensionManager.getIDs(this.tickCounter % 200 == 0); + for (int x = 0; x < ids.length; x++) + { + int id = ids[x]; From 30db5773892259c65924efc7f5007c1e66268a60 Mon Sep 17 00:00:00 2001 From: LexManos Date: Mon, 28 Jan 2013 16:36:03 -0800 Subject: [PATCH 09/49] Moved warning logic down, so that no more tickets are isues if the mod is over it's alotment. Fixes #378 --- common/net/minecraftforge/common/ForgeChunkManager.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/common/net/minecraftforge/common/ForgeChunkManager.java b/common/net/minecraftforge/common/ForgeChunkManager.java index 4794f53b2b..99146b8467 100644 --- a/common/net/minecraftforge/common/ForgeChunkManager.java +++ b/common/net/minecraftforge/common/ForgeChunkManager.java @@ -653,10 +653,13 @@ public class ForgeChunkManager int allowedCount = ticketConstraints.containsKey(modId) ? ticketConstraints.get(modId) : defaultMaxCount; - if (tickets.get(world).get(modId).size() >= allowedCount && !warnedMods.contains(modId)) + if (tickets.get(world).get(modId).size() >= allowedCount) { - FMLLog.info("The mod %s has attempted to allocate a chunkloading ticket beyond it's currently allocated maximum : %d", modId, allowedCount); - warnedMods.add(modId); + if (!warnedMods.contains(modId)) + { + FMLLog.info("The mod %s has attempted to allocate a chunkloading ticket beyond it's currently allocated maximum : %d", modId, allowedCount); + warnedMods.add(modId); + } return null; } Ticket ticket = new Ticket(modId, type, world); From 89e695cee935b010fe80a1a4acd3b7468a12bf8a Mon Sep 17 00:00:00 2001 From: LexManos Date: Mon, 28 Jan 2013 17:02:31 -0800 Subject: [PATCH 10/49] Forge Additions: Exposed ChunkCache.worldObj to public PR #383 --- common/forge_at.cfg | 2 ++ 1 file changed, 2 insertions(+) diff --git a/common/forge_at.cfg b/common/forge_at.cfg index cf6c2b5dad..abccc5a37a 100644 --- a/common/forge_at.cfg +++ b/common/forge_at.cfg @@ -126,3 +126,5 @@ public yc.o #FD:World/field_73018_p #prevThunderingStrength public ayp.b(Llq;)V #MD:WorldClient/func_72847_b #releaseEntitySkin #WorldServer public in.b(Llq;)V #MD:WorldServer/func_72847_b #releaseEntitySkin +# ChunkCache +public ys.e # FD:ChunkCache/field_72815_e # worldObj \ No newline at end of file From fbe86287b4ed8d8da408aadbe79dd80d2796722a Mon Sep 17 00:00:00 2001 From: LexManos Date: Mon, 28 Jan 2013 17:06:45 -0800 Subject: [PATCH 11/49] Fixup a resource leak warning. --- common/net/minecraftforge/common/Configuration.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/common/net/minecraftforge/common/Configuration.java b/common/net/minecraftforge/common/Configuration.java index 70a651d75b..2f04a89cf5 100644 --- a/common/net/minecraftforge/common/Configuration.java +++ b/common/net/minecraftforge/common/Configuration.java @@ -440,6 +440,7 @@ public class Configuration } BufferedReader buffer = null; + UnicodeInputStreamReader input = null; try { if (file.getParentFile() != null) @@ -454,7 +455,7 @@ public class Configuration if (file.canRead()) { - UnicodeInputStreamReader input = new UnicodeInputStreamReader(new FileInputStream(file), defaultEncoding); + input = new UnicodeInputStreamReader(new FileInputStream(file), defaultEncoding); defaultEncoding = input.getEncoding(); buffer = new BufferedReader(input); @@ -638,6 +639,13 @@ public class Configuration buffer.close(); } catch (IOException e){} } + if (input != null) + { + try + { + input.close(); + } catch (IOException e){} + } } } From c58433692c72e29cb3ca5bd405d7c4cbd27cbc7a Mon Sep 17 00:00:00 2001 From: LexManos Date: Mon, 28 Jan 2013 17:26:02 -0800 Subject: [PATCH 12/49] Add DimensionManager.unregisterProviderType for PR #388 --- .../common/DimensionManager.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/common/net/minecraftforge/common/DimensionManager.java b/common/net/minecraftforge/common/DimensionManager.java index 2b29e7413b..14e4f062c4 100644 --- a/common/net/minecraftforge/common/DimensionManager.java +++ b/common/net/minecraftforge/common/DimensionManager.java @@ -2,6 +2,7 @@ package net.minecraftforge.common; import java.io.File; import java.util.ArrayList; +import java.util.Arrays; import java.util.BitSet; import java.util.HashSet; import java.util.Hashtable; @@ -64,6 +65,38 @@ public class DimensionManager return true; } + /** + * Unregisters a Provider type, and returns a array of all dimensions that are + * registered to this provider type. + * If the return size is greater then 0, it is required that the caller either + * change those dimensions's registered type, or replace this type before the + * world is attempted to load, else the loader will throw an exception. + * + * @param id The provider type ID to unreigster + * @return An array containing all dimension IDs still registered to this provider type. + */ + public static int[] unregisterProviderType(int id) + { + if (!providers.containsKey(id)) + { + return new int[0]; + } + providers.remove(id); + spawnSettings.remove(id); + + int[] ret = new int[dimensions.size()]; + int x = 0; + for (Map.Entry ent : dimensions.entrySet()) + { + if (ent.getValue() == id) + { + ret[x++] = ent.getKey(); + } + } + + return Arrays.copyOf(ret, x); + } + public static void init() { if (hasInit) From fb87773c3ab77522a27651dcf20066277bb5e88d Mon Sep 17 00:00:00 2001 From: LexManos Date: Mon, 28 Jan 2013 17:33:53 -0800 Subject: [PATCH 13/49] Added input getters for Ore recipies, and javadoc warning for modders, #390 --- common/net/minecraftforge/oredict/ShapedOreRecipe.java | 10 ++++++++++ .../net/minecraftforge/oredict/ShapelessOreRecipe.java | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/common/net/minecraftforge/oredict/ShapedOreRecipe.java b/common/net/minecraftforge/oredict/ShapedOreRecipe.java index c3409309f8..cdf86574f8 100644 --- a/common/net/minecraftforge/oredict/ShapedOreRecipe.java +++ b/common/net/minecraftforge/oredict/ShapedOreRecipe.java @@ -251,4 +251,14 @@ public class ShapedOreRecipe implements IRecipe mirrored = mirror; return this; } + + /** + * Returns the input for this recipe, any mod accessing this value should never + * manipulate the values in this array as it will effect the recipe itself. + * @return The recipes input vales. + */ + public Object[] getInput() + { + return this.input; + } } diff --git a/common/net/minecraftforge/oredict/ShapelessOreRecipe.java b/common/net/minecraftforge/oredict/ShapelessOreRecipe.java index db3e605f08..18e3d8912d 100644 --- a/common/net/minecraftforge/oredict/ShapelessOreRecipe.java +++ b/common/net/minecraftforge/oredict/ShapelessOreRecipe.java @@ -139,4 +139,14 @@ public class ShapelessOreRecipe implements IRecipe { return (target.itemID == input.itemID && (target.getItemDamage() == -1 || target.getItemDamage() == input.getItemDamage())); } + + /** + * Returns the input for this recipe, any mod accessing this value should never + * manipulate the values in this array as it will effect the recipe itself. + * @return The recipes input vales. + */ + public ArrayList getInput() + { + return this.input; + } } From 704f879320a7ff8a0fde0bc823f8a8ca54eaf256 Mon Sep 17 00:00:00 2001 From: LexManos Date: Mon, 28 Jan 2013 17:51:48 -0800 Subject: [PATCH 14/49] Rework canSilkHarvest hook to try and honor vanilla overrides, should close #391 --- .../net/minecraft/block/Block.java.patch | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/patches/minecraft/net/minecraft/block/Block.java.patch b/patches/minecraft/net/minecraft/block/Block.java.patch index a43bef9114..01dbf229f6 100644 --- a/patches/minecraft/net/minecraft/block/Block.java.patch +++ b/patches/minecraft/net/minecraft/block/Block.java.patch @@ -141,7 +141,22 @@ { ItemStack var8 = this.createStackedBlock(par6); -@@ -1364,4 +1380,840 @@ +@@ -1097,12 +1113,13 @@ + } + } + ++ private int silk_check_meta = -1; //Dirty hack to stop us from needing to special case the silk check hook. + /** + * Return true if a player with Silk Touch can harvest this block directly, and not its normal drops. + */ + protected boolean canSilkHarvest() + { +- return this.renderAsNormalBlock() && !this.isBlockContainer; ++ return this.renderAsNormalBlock() && !this.hasTileEntity(silk_check_meta); + } + + /** +@@ -1364,4 +1381,839 @@ canBlockGrass[0] = true; StatList.initBreakableStats(); } @@ -493,11 +508,10 @@ + */ + public boolean canSilkHarvest(World world, EntityPlayer player, int x, int y, int z, int metadata) + { -+ if (this instanceof BlockGlass || this instanceof BlockEnderChest) -+ { -+ return true; -+ } -+ return renderAsNormalBlock() && !hasTileEntity(metadata); ++ silk_check_meta = metadata; ++ boolean ret = this.canSilkHarvest(); ++ silk_check_meta = 0; ++ return ret; + } + + /** From 6d6405973ce067c4e00b1fbe63dd1fd1615b36ba Mon Sep 17 00:00:00 2001 From: LexManos Date: Mon, 28 Jan 2013 18:05:38 -0800 Subject: [PATCH 15/49] Added catch to TileEntityChestRenderer for potential crash when modders do bad things -.- Closes #389 --- .../TileEntityChestRenderer.java.patch | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 patches/minecraft/net/minecraft/client/renderer/tileentity/TileEntityChestRenderer.java.patch diff --git a/patches/minecraft/net/minecraft/client/renderer/tileentity/TileEntityChestRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/tileentity/TileEntityChestRenderer.java.patch new file mode 100644 index 0000000000..46392dd599 --- /dev/null +++ b/patches/minecraft/net/minecraft/client/renderer/tileentity/TileEntityChestRenderer.java.patch @@ -0,0 +1,26 @@ +--- ../src_base/minecraft/net/minecraft/client/renderer/tileentity/TileEntityChestRenderer.java ++++ ../src_work/minecraft/net/minecraft/client/renderer/tileentity/TileEntityChestRenderer.java +@@ -1,5 +1,6 @@ + package net.minecraft.client.renderer.tileentity; + ++import cpw.mods.fml.common.FMLLog; + import cpw.mods.fml.relauncher.Side; + import cpw.mods.fml.relauncher.SideOnly; + import java.util.Calendar; +@@ -50,7 +51,15 @@ + + if (var10 != null && var9 == 0) + { +- ((BlockChest)var10).unifyAdjacentChests(par1TileEntityChest.getWorldObj(), par1TileEntityChest.xCoord, par1TileEntityChest.yCoord, par1TileEntityChest.zCoord); ++ try ++ { ++ ((BlockChest)var10).unifyAdjacentChests(par1TileEntityChest.getWorldObj(), par1TileEntityChest.xCoord, par1TileEntityChest.yCoord, par1TileEntityChest.zCoord); ++ } ++ catch (ClassCastException e) ++ { ++ FMLLog.severe("Attempted to render a chest at %d, %d, %d that was not a chest", ++ par1TileEntityChest.xCoord, par1TileEntityChest.yCoord, par1TileEntityChest.zCoord); ++ } + var9 = par1TileEntityChest.getBlockMetadata(); + } + From 40392216b3cdcced2678ba0e7ccdb1bf97009029 Mon Sep 17 00:00:00 2001 From: LexManos Date: Mon, 28 Jan 2013 18:08:38 -0800 Subject: [PATCH 16/49] Change access of upper and lower chest fields of InventoryLargeChest to public. Closes #387 --- common/forge_at.cfg | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/common/forge_at.cfg b/common/forge_at.cfg index abccc5a37a..0ec7c1cc8e 100644 --- a/common/forge_at.cfg +++ b/common/forge_at.cfg @@ -127,4 +127,7 @@ public ayp.b(Llq;)V #MD:WorldClient/func_72847_b #releaseEntitySkin #WorldServer public in.b(Llq;)V #MD:WorldServer/func_72847_b #releaseEntitySkin # ChunkCache -public ys.e # FD:ChunkCache/field_72815_e # worldObj \ No newline at end of file +public ys.e # FD:ChunkCache/field_72815_e # worldObj +# InventoryLargeChest +public kz.c #FD:InventoryLargeChest/field_70478_c #lowerChest +public kz.b #FD:InventoryLargeChest/field_70477_b #upperChest \ No newline at end of file From 4299aa22ffcc7770499b5edc4ec330da042a5eb8 Mon Sep 17 00:00:00 2001 From: LexManos Date: Mon, 28 Jan 2013 18:12:29 -0800 Subject: [PATCH 17/49] Change WorldServer.allPlayersSleeping to public, and remove the SideOnly annotation on EntityPlayer.getSleepTimer() Closes #393 --- common/forge_at.cfg | 1 + .../entity/player/EntityPlayer.java.patch | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/common/forge_at.cfg b/common/forge_at.cfg index 0ec7c1cc8e..660c5736c8 100644 --- a/common/forge_at.cfg +++ b/common/forge_at.cfg @@ -126,6 +126,7 @@ public yc.o #FD:World/field_73018_p #prevThunderingStrength public ayp.b(Llq;)V #MD:WorldClient/func_72847_b #releaseEntitySkin #WorldServer public in.b(Llq;)V #MD:WorldServer/func_72847_b #releaseEntitySkin +public in.N #FD:WorldServer/field_73068_P #allPlayersSleeping # ChunkCache public ys.e # FD:ChunkCache/field_72815_e # worldObj # InventoryLargeChest diff --git a/patches/minecraft/net/minecraft/entity/player/EntityPlayer.java.patch b/patches/minecraft/net/minecraft/entity/player/EntityPlayer.java.patch index 7e5e7055bb..2e93c85602 100644 --- a/patches/minecraft/net/minecraft/entity/player/EntityPlayer.java.patch +++ b/patches/minecraft/net/minecraft/entity/player/EntityPlayer.java.patch @@ -314,7 +314,15 @@ switch (var2) { -@@ -1846,7 +1953,7 @@ +@@ -1571,7 +1678,6 @@ + return this.sleeping && this.sleepTimer >= 100; + } + +- @SideOnly(Side.CLIENT) + public int getSleepTimer() + { + return this.sleepTimer; +@@ -1846,7 +1952,7 @@ { if (par1ItemStack.getItem().requiresMultipleRenderPasses()) { @@ -323,7 +331,7 @@ } if (this.itemInUse != null && par1ItemStack.itemID == Item.bow.itemID) -@@ -1868,6 +1975,7 @@ +@@ -1868,6 +1974,7 @@ return 101; } } @@ -331,7 +339,7 @@ } return var3; -@@ -2088,6 +2196,14 @@ +@@ -2088,6 +2195,14 @@ } this.theInventoryEnderChest = par1EntityPlayer.theInventoryEnderChest; From 1dc9ef9b08b6d363d83b3d24c76b177b6b558893 Mon Sep 17 00:00:00 2001 From: LexManos Date: Tue, 29 Jan 2013 03:11:59 -0800 Subject: [PATCH 18/49] Fix initalization issue with the clamping threshold config value. And remove vanilla console spam related to it. --- .../minecraftforge/common/ForgeDummyContainer.java | 2 +- .../net/minecraftforge/common/MinecraftForge.java | 1 - .../packet/Packet52MultiBlockChange.java.patch | 14 +++++++++----- .../server/management/PlayerInstance.java.patch | 11 ++++++----- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/common/net/minecraftforge/common/ForgeDummyContainer.java b/common/net/minecraftforge/common/ForgeDummyContainer.java index e3db4f8d5f..8a3dffe0ee 100644 --- a/common/net/minecraftforge/common/ForgeDummyContainer.java +++ b/common/net/minecraftforge/common/ForgeDummyContainer.java @@ -25,7 +25,7 @@ import static net.minecraftforge.common.ForgeVersion.*; public class ForgeDummyContainer extends DummyModContainer implements WorldAccessContainer { - public static int clumpingThreshold; + public static int clumpingThreshold = 64; public ForgeDummyContainer() { diff --git a/common/net/minecraftforge/common/MinecraftForge.java b/common/net/minecraftforge/common/MinecraftForge.java index 3af29f7259..48a6d22fae 100644 --- a/common/net/minecraftforge/common/MinecraftForge.java +++ b/common/net/minecraftforge/common/MinecraftForge.java @@ -35,7 +35,6 @@ public class MinecraftForge public static final EventBus ORE_GEN_BUS = new EventBus(); @Deprecated //Vanilla feature now public static boolean SPAWNER_ALLOW_ON_INVERTED = false; - public static final int clumpingThreshold = ForgeDummyContainer.clumpingThreshold; private static final ForgeInternalHandler INTERNAL_HANDLER = new ForgeInternalHandler(); diff --git a/patches/minecraft/net/minecraft/network/packet/Packet52MultiBlockChange.java.patch b/patches/minecraft/net/minecraft/network/packet/Packet52MultiBlockChange.java.patch index 75bd5217b3..d1d8795624 100644 --- a/patches/minecraft/net/minecraft/network/packet/Packet52MultiBlockChange.java.patch +++ b/patches/minecraft/net/minecraft/network/packet/Packet52MultiBlockChange.java.patch @@ -1,19 +1,23 @@ --- ../src_base/minecraft/net/minecraft/network/packet/Packet52MultiBlockChange.java +++ ../src_work/minecraft/net/minecraft/network/packet/Packet52MultiBlockChange.java -@@ -6,6 +6,7 @@ +@@ -6,6 +6,8 @@ import java.io.IOException; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; ++import net.minecraftforge.common.ForgeDummyContainer; +import net.minecraftforge.common.MinecraftForge; public class Packet52MultiBlockChange extends Packet { -@@ -38,7 +39,7 @@ +@@ -38,10 +40,8 @@ try { - if (par4 >= 64) -+ if (par4 >= MinecraftForge.clumpingThreshold) ++ if (par4 >= ForgeDummyContainer.clumpingThreshold) { - System.out.println("ChunkTilesUpdatePacket compress " + par4); - +- System.out.println("ChunkTilesUpdatePacket compress " + par4); +- + if (field_73449_e.length < var6) + { + field_73449_e = new byte[var6]; diff --git a/patches/minecraft/net/minecraft/server/management/PlayerInstance.java.patch b/patches/minecraft/net/minecraft/server/management/PlayerInstance.java.patch index 232daa62d7..0d53d34315 100644 --- a/patches/minecraft/net/minecraft/server/management/PlayerInstance.java.patch +++ b/patches/minecraft/net/minecraft/server/management/PlayerInstance.java.patch @@ -12,10 +12,11 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.network.packet.Packet; import net.minecraft.network.packet.Packet51MapChunk; -@@ -10,9 +14,15 @@ +@@ -10,9 +14,16 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.ChunkCoordIntPair; ++import net.minecraftforge.common.ForgeDummyContainer; +import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.world.ChunkWatchEvent; @@ -29,7 +30,7 @@ /** note: this is final */ private final ChunkCoordIntPair chunkLocation; -@@ -56,6 +66,8 @@ +@@ -56,6 +67,8 @@ this.playersInChunk.remove(par1EntityPlayerMP); par1EntityPlayerMP.loadedChunks.remove(this.chunkLocation); @@ -38,7 +39,7 @@ if (this.playersInChunk.isEmpty()) { long var2 = (long)this.chunkLocation.chunkXPos + 2147483647L | (long)this.chunkLocation.chunkZPos + 2147483647L << 32; -@@ -80,20 +92,21 @@ +@@ -80,20 +93,21 @@ this.field_73260_f |= 1 << (par2 >> 4); @@ -74,12 +75,12 @@ } public void sendToAllPlayersWatchingChunk(Packet par1Packet) -@@ -133,40 +146,26 @@ +@@ -133,40 +147,26 @@ { int var4; - if (this.numberOfTilesToUpdate == 64) -+ if (this.numberOfTilesToUpdate >= MinecraftForge.clumpingThreshold) ++ if (this.numberOfTilesToUpdate >= ForgeDummyContainer.clumpingThreshold) { var1 = this.chunkLocation.chunkXPos * 16; var2 = this.chunkLocation.chunkZPos * 16; From fb46c7a01fb535b183ea19f83f17516bd5c2f824 Mon Sep 17 00:00:00 2001 From: Christian Date: Thu, 31 Jan 2013 13:46:29 -0500 Subject: [PATCH 19/49] Fix small derp in TE --- .../minecraft/net/minecraft/tileentity/TileEntity.java.patch | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch b/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch index a9872d9386..a313f3604d 100644 --- a/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch +++ b/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch @@ -11,7 +11,7 @@ import net.minecraft.world.World; public class TileEntity -@@ -296,4 +299,80 @@ +@@ -296,4 +299,79 @@ addMapping(TileEntityBeacon.class, "Beacon"); addMapping(TileEntitySkull.class, "Skull"); } @@ -70,9 +70,8 @@ + return pass == 0; + } + /** -+ * Default render bounding box: infinite in scope. Used to control rendering on {@link TileEntitySpecialRenderer}. ++ * Sometimes default render bounding box: infinite in scope. Used to control rendering on {@link TileEntitySpecialRenderer}. + */ -+ @SideOnly(Side.CLIENT) + public static final AxisAlignedBB INFINITE_EXTENT_AABB = AxisAlignedBB.getBoundingBox(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY); + + /** From 3a0634b5d1b454ae3f4c80360b9301a8615b4396 Mon Sep 17 00:00:00 2001 From: Christian Date: Thu, 31 Jan 2013 13:51:56 -0500 Subject: [PATCH 20/49] Update FML:549b6fd 549b6fd IMC tweaks: runtimeMessages now work (thanks for all that testing for this much requested feature!) and IMCEvent will no longer rem 9fafdc1 More logging tweaks. You can probably configure individual mod log files if you wish now f169f7c A log of logging cleanup. FML will now read logging.properties to configure logging channels a couple of times during startup. You 3ac891f Try and handle "death on startup" a bit cleaner 2dc0189 Deprecate the old GUI ticktype. They're dead and have been for some time. dd98784 Tweak a method signature 1c9a510 Add parameters to FML install to enable/disable certian aspects. Applying patches, running transformer/merger, and decompiling serv 1bd6847 Fix up packages.csv ordering for easier diffing --- ...zip => fml-src-1.4.7-4.7.30.549-master.zip | Bin 5277061 -> 5278542 bytes 1 file changed, 0 insertions(+), 0 deletions(-) rename fml-src-1.4.7-4.7.22.539-master.zip => fml-src-1.4.7-4.7.30.549-master.zip (97%) diff --git a/fml-src-1.4.7-4.7.22.539-master.zip b/fml-src-1.4.7-4.7.30.549-master.zip similarity index 97% rename from fml-src-1.4.7-4.7.22.539-master.zip rename to fml-src-1.4.7-4.7.30.549-master.zip index 502748d10bc8d7db795ad932a9304eac3423262b..b60c5363b78bb5d8c44fdcfc1594b9d25afc4076 100644 GIT binary patch delta 77924 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 delta 76213 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

w}|9Ua(I21Um%$p!drh%q^O-6s68i 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 From fbf9527be3c3db1db38ea9fe178560c3137bcd5c Mon Sep 17 00:00:00 2001 From: Christian Date: Mon, 4 Feb 2013 11:07:53 -0500 Subject: [PATCH 21/49] Add in "armor ticking"- implement the interface and the armor piece will tick. Update FML:22dbe41 22dbe41 Fix up mistake that broke all modloading. Nice. --- .../minecraftforge/common/ITickingArmor.java | 15 +++++++++++ ...zip => fml-src-1.4.7-4.7.31.552-master.zip | Bin 5278542 -> 5278543 bytes .../entity/player/InventoryPlayer.java.patch | 25 ++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 common/net/minecraftforge/common/ITickingArmor.java rename fml-src-1.4.7-4.7.30.549-master.zip => fml-src-1.4.7-4.7.31.552-master.zip (98%) create mode 100644 patches/minecraft/net/minecraft/entity/player/InventoryPlayer.java.patch diff --git a/common/net/minecraftforge/common/ITickingArmor.java b/common/net/minecraftforge/common/ITickingArmor.java new file mode 100644 index 0000000000..3c240d3d87 --- /dev/null +++ b/common/net/minecraftforge/common/ITickingArmor.java @@ -0,0 +1,15 @@ +package net.minecraftforge.common; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +/** + * A simple interface to receive ticks from armor items when placed in armor slots. + * + * @author cpw + * + */ +public interface ITickingArmor { + void onArmorTickUpdate(World worldObj, EntityPlayer player, ItemStack itemStack); +} diff --git a/fml-src-1.4.7-4.7.30.549-master.zip b/fml-src-1.4.7-4.7.31.552-master.zip similarity index 98% rename from fml-src-1.4.7-4.7.30.549-master.zip rename to fml-src-1.4.7-4.7.31.552-master.zip index b60c5363b78bb5d8c44fdcfc1594b9d25afc4076..df4e31705b34cc4e7b57dc65c550538efc8c7f9b 100644 GIT binary patch delta 21246 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 delta 21494 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 Nv{COX&CKD|{{T}AX7vC7 diff --git a/patches/minecraft/net/minecraft/entity/player/InventoryPlayer.java.patch b/patches/minecraft/net/minecraft/entity/player/InventoryPlayer.java.patch new file mode 100644 index 0000000000..74f15678fc --- /dev/null +++ b/patches/minecraft/net/minecraft/entity/player/InventoryPlayer.java.patch @@ -0,0 +1,25 @@ +--- ../src_base/minecraft/net/minecraft/entity/player/InventoryPlayer.java ++++ ../src_work/minecraft/net/minecraft/entity/player/InventoryPlayer.java +@@ -10,6 +10,7 @@ + import net.minecraft.item.ItemStack; + import net.minecraft.nbt.NBTTagCompound; + import net.minecraft.nbt.NBTTagList; ++import net.minecraftforge.common.ITickingArmor; + + public class InventoryPlayer implements IInventory + { +@@ -337,6 +338,14 @@ + this.mainInventory[var1].updateAnimation(this.player.worldObj, this.player, var1, this.currentItem == var1); + } + } ++ ++ for (int i = 0; i < this.armorInventory.length; i++) ++ { ++ if (this.armorInventory[i] != null && this.armorInventory[i].getItem() instanceof ITickingArmor) ++ { ++ ((ITickingArmor)this.armorInventory[i].getItem()).onArmorTickUpdate(this.player.worldObj, this.player, this.armorInventory[i]); ++ } ++ } + } + + /** From 7e5a9076f00d160e30428bea3a795dd67594b0a2 Mon Sep 17 00:00:00 2001 From: Christian Date: Mon, 4 Feb 2013 11:19:39 -0500 Subject: [PATCH 22/49] Fix TESR rendering for double chests --- .../minecraft/net/minecraft/tileentity/TileEntity.java.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch b/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch index a313f3604d..b1fda24c70 100644 --- a/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch +++ b/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch @@ -84,7 +84,7 @@ + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { -+ if (getBlockType()!=null) ++ if (getBlockType()!=null && getBlockType() != Block.chest) + { + return getBlockType().getCollisionBoundingBoxFromPool(worldObj, xCoord, yCoord, zCoord); + } From 40a3660c9391e7972d690914a5a02c2fbe9ceec8 Mon Sep 17 00:00:00 2001 From: Christian Date: Mon, 4 Feb 2013 13:58:55 -0500 Subject: [PATCH 23/49] Fix possible null case for collision bounding box. --- .../net/minecraft/tileentity/TileEntity.java.patch | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch b/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch index b1fda24c70..0568a04f68 100644 --- a/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch +++ b/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch @@ -11,7 +11,7 @@ import net.minecraft.world.World; public class TileEntity -@@ -296,4 +299,79 @@ +@@ -296,4 +299,84 @@ addMapping(TileEntityBeacon.class, "Beacon"); addMapping(TileEntitySkull.class, "Skull"); } @@ -84,10 +84,15 @@ + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { ++ AxisAlignedBB bb = INFINITE_EXTENT_AABB; + if (getBlockType()!=null && getBlockType() != Block.chest) + { -+ return getBlockType().getCollisionBoundingBoxFromPool(worldObj, xCoord, yCoord, zCoord); ++ AxisAlignedBB cbb = getBlockType().getCollisionBoundingBoxFromPool(worldObj, xCoord, yCoord, zCoord); ++ if (cbb != null) ++ { ++ bb = cbb; ++ } + } -+ return INFINITE_EXTENT_AABB; ++ return bb; + } } From afea4fce1d641ac076f1e2c311572734f376ad3a Mon Sep 17 00:00:00 2001 From: Christian Date: Mon, 4 Feb 2013 17:53:47 -0500 Subject: [PATCH 24/49] Remove the single use interface ITickingArmor, and apply to Item directly. --- .../net/minecraftforge/common/ITickingArmor.java | 15 --------------- .../entity/player/InventoryPlayer.java.patch | 14 +++----------- .../minecraft/net/minecraft/item/Item.java.patch | 16 +++++++++++++++- 3 files changed, 18 insertions(+), 27 deletions(-) delete mode 100644 common/net/minecraftforge/common/ITickingArmor.java diff --git a/common/net/minecraftforge/common/ITickingArmor.java b/common/net/minecraftforge/common/ITickingArmor.java deleted file mode 100644 index 3c240d3d87..0000000000 --- a/common/net/minecraftforge/common/ITickingArmor.java +++ /dev/null @@ -1,15 +0,0 @@ -package net.minecraftforge.common; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -/** - * A simple interface to receive ticks from armor items when placed in armor slots. - * - * @author cpw - * - */ -public interface ITickingArmor { - void onArmorTickUpdate(World worldObj, EntityPlayer player, ItemStack itemStack); -} diff --git a/patches/minecraft/net/minecraft/entity/player/InventoryPlayer.java.patch b/patches/minecraft/net/minecraft/entity/player/InventoryPlayer.java.patch index 74f15678fc..9f0a109f08 100644 --- a/patches/minecraft/net/minecraft/entity/player/InventoryPlayer.java.patch +++ b/patches/minecraft/net/minecraft/entity/player/InventoryPlayer.java.patch @@ -1,23 +1,15 @@ --- ../src_base/minecraft/net/minecraft/entity/player/InventoryPlayer.java +++ ../src_work/minecraft/net/minecraft/entity/player/InventoryPlayer.java -@@ -10,6 +10,7 @@ - import net.minecraft.item.ItemStack; - import net.minecraft.nbt.NBTTagCompound; - import net.minecraft.nbt.NBTTagList; -+import net.minecraftforge.common.ITickingArmor; - - public class InventoryPlayer implements IInventory - { -@@ -337,6 +338,14 @@ +@@ -337,6 +337,14 @@ this.mainInventory[var1].updateAnimation(this.player.worldObj, this.player, var1, this.currentItem == var1); } } + + for (int i = 0; i < this.armorInventory.length; i++) + { -+ if (this.armorInventory[i] != null && this.armorInventory[i].getItem() instanceof ITickingArmor) ++ if (this.armorInventory[i] != null) + { -+ ((ITickingArmor)this.armorInventory[i].getItem()).onArmorTickUpdate(this.player.worldObj, this.player, this.armorInventory[i]); ++ this.armorInventory[i].getItem().onArmorTickUpdate(this.player.worldObj, this.player, this.armorInventory[i]); + } + } } diff --git a/patches/minecraft/net/minecraft/item/Item.java.patch b/patches/minecraft/net/minecraft/item/Item.java.patch index 4061dc3b80..7b248a427d 100644 --- a/patches/minecraft/net/minecraft/item/Item.java.patch +++ b/patches/minecraft/net/minecraft/item/Item.java.patch @@ -57,7 +57,7 @@ Vec3 var23 = var13.addVector((double)var18 * var21, (double)var17 * var21, (double)var20 * var21); return par1World.rayTraceBlocks_do_do(var13, var23, par3, !par3); } -@@ -701,4 +716,304 @@ +@@ -701,4 +716,318 @@ { StatList.initStats(); } @@ -361,4 +361,18 @@ + { + return false; + } ++ ++ ++ /** ++ * Called to tick armor in the armor slot. Override to do something ++ * ++ * @param world ++ * @param player ++ * @param itemStack ++ */ ++ public void onArmorTickUpdate(World world, EntityPlayer player, ItemStack itemStack) ++ { ++ ++ } ++ } From 6673844c54b8de0ebe4cba601b6505ec0e3dda3f Mon Sep 17 00:00:00 2001 From: Christian Date: Wed, 6 Feb 2013 20:28:54 -0500 Subject: [PATCH 25/49] Fix ServerBrand retriever- forge is now forge,fml! Update FML: cd96718 cd96718 Fix HD mob skins, FINALLY!!! Stupid eyes are stupid. --- ...zip => fml-src-1.4.7-4.7.32.553-master.zip | Bin 5278543 -> 5278783 bytes .../client/renderer/RenderEngine.java.patch | 2 +- .../server/MinecraftServer.java.patch | 9 +++++++++ 3 files changed, 10 insertions(+), 1 deletion(-) rename fml-src-1.4.7-4.7.31.552-master.zip => fml-src-1.4.7-4.7.32.553-master.zip (98%) diff --git a/fml-src-1.4.7-4.7.31.552-master.zip b/fml-src-1.4.7-4.7.32.553-master.zip similarity index 98% rename from fml-src-1.4.7-4.7.31.552-master.zip rename to fml-src-1.4.7-4.7.32.553-master.zip index df4e31705b34cc4e7b57dc65c550538efc8c7f9b..4a0910e290e5e2723b56b222dc4d1ebc67e5a576 100644 GIT binary patch delta 20286 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 R{6|=77bH(l{Y1N1`+p~6iDCc% delta 20149 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 x-j8DX*GEOh1+EKD`hOVFV7R(48w6 Date: Fri, 15 Feb 2013 03:18:36 -0800 Subject: [PATCH 26/49] Kill generated timestamp in config files, if you want to retreive this information, usethe file's modified time. Closes #404 --- common/net/minecraftforge/common/Configuration.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/common/net/minecraftforge/common/Configuration.java b/common/net/minecraftforge/common/Configuration.java index 2f04a89cf5..b3911a8ca8 100644 --- a/common/net/minecraftforge/common/Configuration.java +++ b/common/net/minecraftforge/common/Configuration.java @@ -674,8 +674,7 @@ public class Configuration FileOutputStream fos = new FileOutputStream(file); BufferedWriter buffer = new BufferedWriter(new OutputStreamWriter(fos, defaultEncoding)); - buffer.write("# Configuration file" + NEW_LINE); - buffer.write("# Generated on " + DateFormat.getInstance().format(new Date()) + NEW_LINE + NEW_LINE); + buffer.write("# Configuration file" + NEW_LINE + NEW_LINE); if (children.isEmpty()) { From 57b77ce17ee01aeb2b67c390977640e1631b8035 Mon Sep 17 00:00:00 2001 From: LexManos Date: Fri, 15 Feb 2013 03:22:59 -0800 Subject: [PATCH 27/49] Actually use the line parameter in ServerChatEvent, closes #401 --- common/net/minecraftforge/event/ServerChatEvent.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/common/net/minecraftforge/event/ServerChatEvent.java b/common/net/minecraftforge/event/ServerChatEvent.java index b5a150fa0f..0d7f6aaf7c 100644 --- a/common/net/minecraftforge/event/ServerChatEvent.java +++ b/common/net/minecraftforge/event/ServerChatEvent.java @@ -3,7 +3,8 @@ package net.minecraftforge.event; import net.minecraft.entity.player.EntityPlayerMP; @Cancelable -public class ServerChatEvent extends Event { +public class ServerChatEvent extends Event +{ public final String message, username; public final EntityPlayerMP player; public String line; @@ -13,6 +14,6 @@ public class ServerChatEvent extends Event { this.message = message; this.player = player; this.username = player.username; - this.line = "<" + username + "> " + message; + this.line = line; } } From 6e302a1350c574f9bdfce77cae8877ab4ee95e24 Mon Sep 17 00:00:00 2001 From: LexManos Date: Fri, 15 Feb 2013 03:38:46 -0800 Subject: [PATCH 28/49] Kill .sh wrappers until someone writes more robust versions, closes #392 and closes #402 --- build.sh | 2 -- setup.sh | 2 -- update_patches.sh | 2 -- 3 files changed, 6 deletions(-) delete mode 100755 build.sh delete mode 100755 setup.sh delete mode 100755 update_patches.sh diff --git a/build.sh b/build.sh deleted file mode 100755 index d57ac69499..0000000000 --- a/build.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -python build.py "$@" diff --git a/setup.sh b/setup.sh deleted file mode 100755 index 8c02e4c2fc..0000000000 --- a/setup.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -python setup.py "$@" \ No newline at end of file diff --git a/update_patches.sh b/update_patches.sh deleted file mode 100755 index 4f579cc047..0000000000 --- a/update_patches.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -python update_patches.py "$@" \ No newline at end of file From 0a2e78d0c6cb031eb86294d50f74c4a120bc42e0 Mon Sep 17 00:00:00 2001 From: LexManos Date: Fri, 15 Feb 2013 04:00:46 -0800 Subject: [PATCH 29/49] Made LiquidStack.isLiquidEqual(ItemStack) properly check the contained liquid, in addition to obvious id/meta closes #399 and closes #403 --- common/net/minecraftforge/liquids/LiquidStack.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/common/net/minecraftforge/liquids/LiquidStack.java b/common/net/minecraftforge/liquids/LiquidStack.java index 50d0a76f66..345dfdf0d4 100644 --- a/common/net/minecraftforge/liquids/LiquidStack.java +++ b/common/net/minecraftforge/liquids/LiquidStack.java @@ -75,7 +75,17 @@ public class LiquidStack */ public boolean isLiquidEqual(ItemStack other) { - return other != null && itemID == other.itemID && itemMeta == other.getItemDamage(); + if (other == null) + { + return false; + } + + if (itemID == other.itemID && itemMeta == other.getItemDamage()) + { + return true; + } + + return isLiquidEqual(LiquidContainerRegistry.getLiquidForFilledItem(other)); } /** From 1c57f03722d9066487b037bc2e93f6179f6a7595 Mon Sep 17 00:00:00 2001 From: LexManos Date: Fri, 15 Feb 2013 04:10:49 -0800 Subject: [PATCH 30/49] Add item frame transformations to the EntityItem render helper Closes #407 --- client/net/minecraftforge/client/ForgeHooksClient.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/client/net/minecraftforge/client/ForgeHooksClient.java b/client/net/minecraftforge/client/ForgeHooksClient.java index 053e62cc0b..d32735d196 100644 --- a/client/net/minecraftforge/client/ForgeHooksClient.java +++ b/client/net/minecraftforge/client/ForgeHooksClient.java @@ -24,6 +24,7 @@ import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.RenderEngine; import net.minecraft.client.renderer.RenderGlobal; import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.RenderItem; import net.minecraftforge.client.event.DrawBlockHighlightEvent; import net.minecraftforge.client.event.RenderWorldLastEvent; import net.minecraftforge.client.event.TextureLoadEvent; @@ -250,6 +251,13 @@ public class ForgeHooksClient int renderType = Block.blocksList[item.itemID].getRenderType(); float scale = (renderType == 1 || renderType == 19 || renderType == 12 || renderType == 2 ? 0.5F : 0.25F); + if (RenderItem.field_82407_g) + { + GL11.glScalef(1.25F, 1.25F, 1.25F); + GL11.glTranslatef(0.0F, 0.05F, 0.0F); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + } + GL11.glScalef(scale, scale, scale); int size = item.stackSize; From ace8c29085d275c830ab97c1779fc1426533b897 Mon Sep 17 00:00:00 2001 From: LexManos Date: Fri, 15 Feb 2013 04:25:08 -0800 Subject: [PATCH 31/49] Added a hook into SlotArmor so Items can control if they are classified as a Armor type. Closes #408 --- .../minecraft/inventory/SlotArmor.java.patch | 12 ++++++++++ .../net/minecraft/item/Item.java.patch | 24 ++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 patches/minecraft/net/minecraft/inventory/SlotArmor.java.patch diff --git a/patches/minecraft/net/minecraft/inventory/SlotArmor.java.patch b/patches/minecraft/net/minecraft/inventory/SlotArmor.java.patch new file mode 100644 index 0000000000..142ab5b8ce --- /dev/null +++ b/patches/minecraft/net/minecraft/inventory/SlotArmor.java.patch @@ -0,0 +1,12 @@ +--- ../src_base/minecraft/net/minecraft/inventory/SlotArmor.java ++++ ../src_work/minecraft/net/minecraft/inventory/SlotArmor.java +@@ -40,7 +40,8 @@ + */ + public boolean isItemValid(ItemStack par1ItemStack) + { +- return par1ItemStack == null ? false : (par1ItemStack.getItem() instanceof ItemArmor ? ((ItemArmor)par1ItemStack.getItem()).armorType == this.armorType : (par1ItemStack.getItem().itemID != Block.pumpkin.blockID && par1ItemStack.getItem().itemID != Item.skull.itemID ? false : this.armorType == 0)); ++ Item item = (par1ItemStack == null ? null : par1ItemStack.getItem()); ++ return item != null && item.isValidArmor(par1ItemStack, armorType); + } + + @SideOnly(Side.CLIENT) diff --git a/patches/minecraft/net/minecraft/item/Item.java.patch b/patches/minecraft/net/minecraft/item/Item.java.patch index 7b248a427d..5f235873fd 100644 --- a/patches/minecraft/net/minecraft/item/Item.java.patch +++ b/patches/minecraft/net/minecraft/item/Item.java.patch @@ -57,7 +57,7 @@ Vec3 var23 = var13.addVector((double)var18 * var21, (double)var17 * var21, (double)var20 * var21); return par1World.rayTraceBlocks_do_do(var13, var23, par3, !par3); } -@@ -701,4 +716,318 @@ +@@ -701,4 +716,340 @@ { StatList.initStats(); } @@ -374,5 +374,27 @@ + { + + } ++ ++ /** ++ * Determines if the specific ItemStack can be placed in the specified armor slot. ++ * ++ * @param stack The ItemStack ++ * @param armorType Armor slot ID: 0: Helmet, 1: Chest, 2: Legs, 3: Boots ++ * @return True if the given ItemStack can be inserted in the slot ++ */ ++ public boolean isValidArmor(ItemStack stack, int armorType) ++ { ++ if (this instanceof ItemArmor) ++ { ++ return ((ItemArmor)this).armorType == armorType; ++ } ++ ++ if (armorType == 0) ++ { ++ return itemID == Block.pumpkin.blockID || itemID == Item.skull.itemID; ++ } ++ ++ return false; ++ } + } From dcdd7c6c0edbaea2227862dc79f1bc4da29f90dc Mon Sep 17 00:00:00 2001 From: LexManos Date: Fri, 15 Feb 2013 04:43:20 -0800 Subject: [PATCH 32/49] Fixes comparison for items in creative inventory, closes #411 --- .../client/gui/inventory/GuiContainerCreative.java.patch | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/patches/minecraft/net/minecraft/client/gui/inventory/GuiContainerCreative.java.patch b/patches/minecraft/net/minecraft/client/gui/inventory/GuiContainerCreative.java.patch index 28e932e381..6520db4c64 100644 --- a/patches/minecraft/net/minecraft/client/gui/inventory/GuiContainerCreative.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/inventory/GuiContainerCreative.java.patch @@ -9,6 +9,15 @@ public GuiContainerCreative(EntityPlayer par1EntityPlayer) { +@@ -137,7 +139,7 @@ + return; + } + +- if (var7 != null && var8 != null && var7.isItemEqual(var8)) ++ if (var7 != null && var8 != null && var7.isItemEqual(var8) && ItemStack.areItemStackTagsEqual(var7, var8)) + { + if (par3 == 0) + { @@ -229,6 +231,13 @@ this.setCurrentCreativeTab(CreativeTabs.creativeTabArray[var1]); this.field_82324_x = new CreativeCrafting(this.mc); From e11feec55f4ef0eee581c28054f8457c3074f47b Mon Sep 17 00:00:00 2001 From: LexManos Date: Fri, 15 Feb 2013 04:49:33 -0800 Subject: [PATCH 33/49] Fix fortune modifier always passed as 0 to idDropped closes #412 --- patches/minecraft/net/minecraft/block/Block.java.patch | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/patches/minecraft/net/minecraft/block/Block.java.patch b/patches/minecraft/net/minecraft/block/Block.java.patch index 01dbf229f6..63bc8b033c 100644 --- a/patches/minecraft/net/minecraft/block/Block.java.patch +++ b/patches/minecraft/net/minecraft/block/Block.java.patch @@ -401,11 +401,11 @@ + { + if (blockID == Block.netherrack.blockID && side == UP) + { -+ return true; ++ return true; + } + if ((world.provider instanceof WorldProviderEnd) && blockID == Block.bedrock.blockID && side == UP) + { -+ return true; ++ return true; + } + return false; + } @@ -486,7 +486,7 @@ + int count = quantityDropped(metadata, fortune, world.rand); + for(int i = 0; i < count; i++) + { -+ int id = idDropped(metadata, world.rand, 0); ++ int id = idDropped(metadata, world.rand, fortune); + if (id > 0) + { + ret.add(new ItemStack(id, 1, damageDropped(metadata))); From 183b3e63161627df7958830f6995b6e3b6da61e3 Mon Sep 17 00:00:00 2001 From: LexManos Date: Fri, 15 Feb 2013 04:53:56 -0800 Subject: [PATCH 34/49] Fix EventTransformer throwing an NPE when transforming a class that doesn't exist. Closes #413 --- common/net/minecraftforge/transformers/EventTransformer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/net/minecraftforge/transformers/EventTransformer.java b/common/net/minecraftforge/transformers/EventTransformer.java index ebe50087d2..ae04b08e40 100644 --- a/common/net/minecraftforge/transformers/EventTransformer.java +++ b/common/net/minecraftforge/transformers/EventTransformer.java @@ -22,7 +22,7 @@ public class EventTransformer implements IClassTransformer @Override public byte[] transform(String name, byte[] bytes) { - if (name.equals("net.minecraftforge.event.Event") || name.startsWith("net.minecraft.") || name.indexOf('.') == -1) + if (bytes == null || name.equals("net.minecraftforge.event.Event") || name.startsWith("net.minecraft.") || name.indexOf('.') == -1) { return bytes; } From 307dd4822952c4f661a2ea8d756d0f084e365975 Mon Sep 17 00:00:00 2001 From: LexManos Date: Fri, 15 Feb 2013 04:56:55 -0800 Subject: [PATCH 35/49] Fix profiler issue with RenderGlobal patch. Closes #414 --- .../net/minecraft/client/renderer/RenderGlobal.java.patch | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.java.patch b/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.java.patch index b69c1590b3..293eb743ae 100644 --- a/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/RenderGlobal.java.patch @@ -24,7 +24,7 @@ } else { -- this.theWorld.theProfiler.startSection("prepare"); + this.theWorld.theProfiler.startSection("prepare"); - TileEntityRenderer.instance.cacheActiveRenderInfo(this.theWorld, this.renderEngine, this.mc.fontRenderer, this.mc.renderViewEntity, par3); - RenderManager.instance.cacheActiveRenderInfo(this.theWorld, this.renderEngine, this.mc.fontRenderer, this.mc.renderViewEntity, this.mc.gameSettings, par3); - this.countEntitiesTotal = 0; @@ -40,7 +40,6 @@ + List var5 = this.theWorld.getLoadedEntityList(); + if(pass == 0) + { -+ this.theWorld.theProfiler.startSection("prepare"); + TileEntityRenderer.instance.cacheActiveRenderInfo(this.theWorld, this.renderEngine, this.mc.fontRenderer, this.mc.renderViewEntity, par3); + RenderManager.instance.cacheActiveRenderInfo(this.theWorld, this.renderEngine, this.mc.fontRenderer, this.mc.renderViewEntity, this.mc.gameSettings, par3); + this.countEntitiesTotal = 0; From 53aac39d9093b56bfe8e7448c9f80f4ede7011b9 Mon Sep 17 00:00:00 2001 From: LexManos Date: Fri, 15 Feb 2013 05:11:55 -0800 Subject: [PATCH 36/49] Jenkins needs this script, *pokes Overmind* -.- --- setup.sh | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 setup.sh diff --git a/setup.sh b/setup.sh new file mode 100644 index 0000000000..8c02e4c2fc --- /dev/null +++ b/setup.sh @@ -0,0 +1,2 @@ +#!/bin/bash +python setup.py "$@" \ No newline at end of file From feca047114562c2ec2ec6be42e3ffd7c09a9a94d Mon Sep 17 00:00:00 2001 From: LexManos Date: Fri, 22 Feb 2013 15:01:45 -0800 Subject: [PATCH 37/49] Update FML to 556: b6d6f235 Fix sprite map issue. 1158aa46 Fix Language Registry, closes #FML 163 50ce6fb3 Option to disable renaming for srgnames. --- ...zip => fml-src-1.4.7-4.7.35.556-master.zip | Bin 5278783 -> 5278987 bytes 1 file changed, 0 insertions(+), 0 deletions(-) rename fml-src-1.4.7-4.7.32.553-master.zip => fml-src-1.4.7-4.7.35.556-master.zip (98%) diff --git a/fml-src-1.4.7-4.7.32.553-master.zip b/fml-src-1.4.7-4.7.35.556-master.zip similarity index 98% rename from fml-src-1.4.7-4.7.32.553-master.zip rename to fml-src-1.4.7-4.7.35.556-master.zip index 4a0910e290e5e2723b56b222dc4d1ebc67e5a576..2b0d129ab8bc35f274b34cbcac504356f0ca9641 100644 GIT binary patch delta 25216 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 Date: Sat, 23 Feb 2013 10:42:33 -0800 Subject: [PATCH 38/49] Disable automatic equiti of pcke dup items for players, and fixed index issues in Player.setCurrentItemOrArmor. --- .../entity/player/EntityPlayer.java.patch | 55 ++++++++++++++----- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/patches/minecraft/net/minecraft/entity/player/EntityPlayer.java.patch b/patches/minecraft/net/minecraft/entity/player/EntityPlayer.java.patch index 2e93c85602..47ff21b4f4 100644 --- a/patches/minecraft/net/minecraft/entity/player/EntityPlayer.java.patch +++ b/patches/minecraft/net/minecraft/entity/player/EntityPlayer.java.patch @@ -170,7 +170,18 @@ } /** -@@ -1079,12 +1140,22 @@ +@@ -831,6 +892,10 @@ + NBTTagList var3 = par1NBTTagCompound.getTagList("EnderItems"); + this.theInventoryEnderChest.loadInventoryFromNBT(var3); + } ++ ++ //Disable vanilla mob armor/item pickup, players can already pickup items ++ //and it causes issues with overwriting items, dropping items, etc.. ++ this.canPickUpLoot = false; + } + + /** +@@ -1079,12 +1144,22 @@ { if (!this.isEntityInvulnerable()) { @@ -194,7 +205,7 @@ par2 = this.applyPotionDamageCalculations(par1DamageSource, par2); this.addExhaustion(par1DamageSource.getHungerDamage()); this.health -= par2; -@@ -1125,6 +1196,10 @@ +@@ -1125,6 +1200,10 @@ public boolean interactWith(Entity par1Entity) { @@ -205,7 +216,7 @@ if (par1Entity.interact(this)) { return true; -@@ -1168,7 +1243,9 @@ +@@ -1168,7 +1247,9 @@ */ public void destroyCurrentEquippedItem() { @@ -215,7 +226,7 @@ } /** -@@ -1185,6 +1262,15 @@ +@@ -1185,6 +1266,15 @@ */ public void attackTargetEntityWithCurrentItem(Entity par1Entity) { @@ -231,7 +242,7 @@ if (par1Entity.canAttackWithItem()) { if (!par1Entity.func_85031_j(this)) -@@ -1348,6 +1434,12 @@ +@@ -1348,6 +1438,12 @@ */ public EnumStatus sleepInBedAt(int par1, int par2, int par3) { @@ -244,7 +255,7 @@ if (!this.worldObj.isRemote) { if (this.isPlayerSleeping() || !this.isEntityAlive()) -@@ -1387,6 +1479,11 @@ +@@ -1387,6 +1483,11 @@ { int var9 = this.worldObj.getBlockMetadata(par1, par2, par3); int var5 = BlockBed.getDirection(var9); @@ -256,7 +267,7 @@ float var10 = 0.5F; float var7 = 0.5F; -@@ -1457,10 +1554,12 @@ +@@ -1457,10 +1558,12 @@ ChunkCoordinates var4 = this.playerLocation; ChunkCoordinates var5 = this.playerLocation; @@ -273,7 +284,7 @@ if (var5 == null) { -@@ -1497,7 +1596,9 @@ +@@ -1497,7 +1600,9 @@ */ private boolean isInBed() { @@ -284,7 +295,7 @@ } /** -@@ -1512,9 +1613,12 @@ +@@ -1512,9 +1617,12 @@ var3.loadChunk(par1ChunkCoordinates.posX - 3 >> 4, par1ChunkCoordinates.posZ + 3 >> 4); var3.loadChunk(par1ChunkCoordinates.posX + 3 >> 4, par1ChunkCoordinates.posZ + 3 >> 4); @@ -300,7 +311,7 @@ return var8; } else -@@ -1536,8 +1640,11 @@ +@@ -1536,8 +1644,11 @@ { if (this.playerLocation != null) { @@ -314,7 +325,7 @@ switch (var2) { -@@ -1571,7 +1678,6 @@ +@@ -1571,7 +1682,6 @@ return this.sleeping && this.sleepTimer >= 100; } @@ -322,7 +333,7 @@ public int getSleepTimer() { return this.sleepTimer; -@@ -1846,7 +1952,7 @@ +@@ -1846,7 +1956,7 @@ { if (par1ItemStack.getItem().requiresMultipleRenderPasses()) { @@ -331,7 +342,7 @@ } if (this.itemInUse != null && par1ItemStack.itemID == Item.bow.itemID) -@@ -1868,6 +1974,7 @@ +@@ -1868,6 +1978,7 @@ return 101; } } @@ -339,7 +350,7 @@ } return var3; -@@ -2088,6 +2195,14 @@ +@@ -2088,6 +2199,14 @@ } this.theInventoryEnderChest = par1EntityPlayer.theInventoryEnderChest; @@ -354,3 +365,19 @@ } /** +@@ -2159,7 +2278,14 @@ + */ + public void setCurrentItemOrArmor(int par1, ItemStack par2ItemStack) + { +- this.inventory.armorInventory[par1] = par2ItemStack; ++ if (par1 == 0) ++ { ++ this.inventory.mainInventory[this.inventory.currentItem] = par2ItemStack; ++ } ++ else ++ { ++ this.inventory.armorInventory[par1 - 1] = par2ItemStack; ++ } + } + + public ItemStack[] getLastActiveItems() From 3945819851f317b4e2662a735f08c13807c40af0 Mon Sep 17 00:00:00 2001 From: LexManos Date: Sat, 23 Feb 2013 10:59:44 -0800 Subject: [PATCH 39/49] Fixed entity colision above max world height, and below 0. Closes #400 --- .../minecraft/world/chunk/Chunk.java.patch | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/patches/minecraft/net/minecraft/world/chunk/Chunk.java.patch b/patches/minecraft/net/minecraft/world/chunk/Chunk.java.patch index 579664f058..de0af20b6f 100644 --- a/patches/minecraft/net/minecraft/world/chunk/Chunk.java.patch +++ b/patches/minecraft/net/minecraft/world/chunk/Chunk.java.patch @@ -367,7 +367,7 @@ } /** -@@ -1014,8 +1121,8 @@ +@@ -1014,17 +1121,25 @@ */ public void getEntitiesWithinAABBForEntity(Entity par1Entity, AxisAlignedBB par2AxisAlignedBB, List par3List) { @@ -378,7 +378,24 @@ if (var4 < 0) { -@@ -1062,8 +1169,8 @@ + var4 = 0; + } ++ else if (var4 >= this.entityLists.length) //BugFix: Collision above the world ++ { ++ var4 = this.entityLists.length - 1; ++ } + + if (var5 >= this.entityLists.length) + { + var5 = this.entityLists.length - 1; ++ } ++ else if (var5 < 0) //BugFix: Collision below the world ++ { ++ var5 = 0; + } + + for (int var6 = var4; var6 <= var5; ++var6) +@@ -1062,8 +1177,8 @@ */ public void getEntitiesOfTypeWithinAAAB(Class par1Class, AxisAlignedBB par2AxisAlignedBB, List par3List, IEntitySelector par4IEntitySelector) { @@ -389,7 +406,7 @@ if (var5 < 0) { -@@ -1246,6 +1353,15 @@ +@@ -1246,6 +1361,15 @@ */ public void fillChunk(byte[] par1ArrayOfByte, int par2, int par3, boolean par4) { @@ -405,7 +422,7 @@ int var5 = 0; boolean var6 = !this.worldObj.provider.hasNoSky; int var7; -@@ -1346,12 +1462,26 @@ +@@ -1346,12 +1470,26 @@ } this.generateHeightMap(); @@ -438,7 +455,7 @@ } } -@@ -1460,4 +1590,18 @@ +@@ -1460,4 +1598,18 @@ } } } From d9ebd3fb536f790f40d6277c9f3cdfed38d0c114 Mon Sep 17 00:00:00 2001 From: LexManos Date: Sat, 23 Feb 2013 11:22:01 -0800 Subject: [PATCH 40/49] Change usage of ketSet/get to entrySet in OreDictionary, closes #422 --- .../minecraftforge/oredict/OreDictionary.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/common/net/minecraftforge/oredict/OreDictionary.java b/common/net/minecraftforge/oredict/OreDictionary.java index 911a8ebe42..b3faa098d0 100644 --- a/common/net/minecraftforge/oredict/OreDictionary.java +++ b/common/net/minecraftforge/oredict/OreDictionary.java @@ -184,15 +184,19 @@ public class OreDictionary */ public static int getOreID(ItemStack itemStack) { - if( itemStack == null ) - return -1; - - for(int oreID : oreStacks.keySet()) + if (itemStack == null) { - for(ItemStack target : oreStacks.get(oreID)) + return -1; + } + + for(Entry> ore : oreStacks.entrySet()) + { + for(ItemStack target : ore.getValue()) { if(itemStack.itemID == target.itemID && (target.getItemDamage() == -1 || itemStack.getItemDamage() == target.getItemDamage())) - return oreID; + { + return ore.getKey(); + } } } return -1; // didn't find it. From b754d6f301b9c618aa551b8ea6fb4cf8c12939e2 Mon Sep 17 00:00:00 2001 From: LexManos Date: Sat, 23 Feb 2013 11:30:56 -0800 Subject: [PATCH 41/49] Fix movement speed check, closes #420 --- .../network/NetServerHandler.java.patch | 46 ++++++++++++------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/patches/minecraft/net/minecraft/network/NetServerHandler.java.patch b/patches/minecraft/net/minecraft/network/NetServerHandler.java.patch index cb805119db..9a32ced01b 100644 --- a/patches/minecraft/net/minecraft/network/NetServerHandler.java.patch +++ b/patches/minecraft/net/minecraft/network/NetServerHandler.java.patch @@ -26,19 +26,33 @@ } this.mcServer.getConfigurationManager().serverUpdateMountedMovingPlayer(this.playerEntity); -@@ -327,6 +339,11 @@ - this.playerEntity.addExhaustion(0.2F); - } +@@ -307,9 +319,10 @@ + var13 = var5 - this.playerEntity.posX; + double var15 = var7 - this.playerEntity.posY; + double var17 = var9 - this.playerEntity.posZ; +- double var19 = Math.min(Math.abs(var13), Math.abs(this.playerEntity.motionX)); +- double var21 = Math.min(Math.abs(var15), Math.abs(this.playerEntity.motionY)); +- double var23 = Math.min(Math.abs(var17), Math.abs(this.playerEntity.motionZ)); ++ //Change min->max, fixes movement speed check ++ double var19 = Math.max(Math.abs(var13), Math.abs(this.playerEntity.motionX)); ++ double var21 = Math.max(Math.abs(var15), Math.abs(this.playerEntity.motionY)); ++ double var23 = Math.max(Math.abs(var17), Math.abs(this.playerEntity.motionZ)); + double var25 = var19 * var19 + var21 * var21 + var23 * var23; + if (var25 > 100.0D && (!this.mcServer.isSinglePlayer() || !this.mcServer.getServerOwner().equals(this.playerEntity.username))) +@@ -325,6 +338,11 @@ + if (this.playerEntity.onGround && !par1Packet10Flying.onGround && var15 > 0.0D) + { + this.playerEntity.addExhaustion(0.2F); ++ } ++ + if (!this.hasMoved) //Fixes "Moved Too Fast" kick when being teleported while moving + { + return; -+ } -+ + } + this.playerEntity.moveEntity(var13, var15, var17); - this.playerEntity.onGround = par1Packet10Flying.onGround; - this.playerEntity.addMovementStat(var13, var15, var17); -@@ -349,10 +366,15 @@ +@@ -349,10 +367,15 @@ logger.warning(this.playerEntity.username + " moved wrongly!"); } @@ -55,7 +69,7 @@ { this.setPlayerLocation(this.lastPosX, this.lastPosY, this.lastPosZ, var11, var12); return; -@@ -360,7 +382,7 @@ +@@ -360,7 +383,7 @@ AxisAlignedBB var33 = this.playerEntity.boundingBox.copy().expand((double)var27, (double)var27, (double)var27).addCoord(0.0D, -0.55D, 0.0D); @@ -64,7 +78,7 @@ { if (var29 >= -0.03125D) { -@@ -379,6 +401,11 @@ +@@ -379,6 +402,11 @@ this.ticksForFloatKick = 0; } @@ -76,7 +90,7 @@ this.playerEntity.onGround = par1Packet10Flying.onGround; this.mcServer.getConfigurationManager().serverUpdateMountedMovingPlayer(this.playerEntity); this.playerEntity.updateFlyingState(this.playerEntity.posY - var3, par1Packet10Flying.onGround); -@@ -447,7 +474,10 @@ +@@ -447,7 +475,10 @@ double var13 = this.playerEntity.posZ - ((double)var8 + 0.5D); double var15 = var9 * var9 + var11 * var11 + var13 * var13; @@ -88,7 +102,7 @@ { return; } -@@ -471,6 +501,7 @@ +@@ -471,6 +502,7 @@ { if (var18 <= var3 && !var4) { @@ -96,7 +110,7 @@ this.playerEntity.playerNetServerHandler.sendPacketToPlayer(new Packet53BlockChange(var6, var7, var8, var2)); } else -@@ -518,7 +549,11 @@ +@@ -518,7 +550,11 @@ return; } @@ -109,7 +123,7 @@ } else if (par1Packet15Place.getYPosition() >= this.mcServer.getBuildLimit() - 1 && (par1Packet15Place.getDirection() == 1 || par1Packet15Place.getYPosition() >= this.mcServer.getBuildLimit())) { -@@ -536,7 +571,9 @@ +@@ -536,7 +572,9 @@ var13 = var12; } @@ -120,7 +134,7 @@ { this.playerEntity.theItemInWorldManager.activateBlockOrUseItem(this.playerEntity, var2, var3, var5, var6, var7, var8, par1Packet15Place.getXOffset(), par1Packet15Place.getYOffset(), par1Packet15Place.getZOffset()); } -@@ -703,8 +740,12 @@ +@@ -703,8 +741,12 @@ this.sendPacketToPlayer(new Packet3Chat("Cannot send chat message.")); return; } @@ -135,7 +149,7 @@ logger.info(var2); this.mcServer.getConfigurationManager().sendPacketToAllPlayers(new Packet3Chat(var2, false)); } -@@ -835,7 +876,7 @@ +@@ -835,7 +877,7 @@ return; } From f703dbb230c06d12565e14e26c0076c36fe96f62 Mon Sep 17 00:00:00 2001 From: LexManos Date: Sat, 23 Feb 2013 11:51:16 -0800 Subject: [PATCH 42/49] clarify what the size is measured in for the dormant chunk cache. -.- --- common/net/minecraftforge/common/ForgeChunkManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/net/minecraftforge/common/ForgeChunkManager.java b/common/net/minecraftforge/common/ForgeChunkManager.java index 99146b8467..ae45c5a73c 100644 --- a/common/net/minecraftforge/common/ForgeChunkManager.java +++ b/common/net/minecraftforge/common/ForgeChunkManager.java @@ -936,7 +936,7 @@ public class ForgeChunkManager Property dormantChunkCacheSizeProperty = config.get("defaults", "dormantChunkCacheSize", 0); dormantChunkCacheSizeProperty.comment = "Unloaded chunks can first be kept in a dormant cache for quicker\n" + - "loading times. Specify the size of that cache here"; + "loading times. Specify the size (in chunks) of that cache here"; dormantChunkCacheSize = dormantChunkCacheSizeProperty.getInt(0); FMLLog.info("Configured a dormant chunk cache size of %d", dormantChunkCacheSizeProperty.getInt(0)); From 0396ba2252511da3aaaa22cbda0374132654bf8f Mon Sep 17 00:00:00 2001 From: LexManos Date: Sat, 23 Feb 2013 12:02:36 -0800 Subject: [PATCH 43/49] ItemStack sensitive versions of Item.getPotionEffect and Item.isPotionIngredient Closes #321 --- .../SlotBrewingStandIngredient.java.patch | 11 +++++ .../net/minecraft/item/Item.java.patch | 42 ++++++++++++++++++- .../TileEntityBrewingStand.java.patch | 18 ++++++++ 3 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 patches/minecraft/net/minecraft/inventory/SlotBrewingStandIngredient.java.patch diff --git a/patches/minecraft/net/minecraft/inventory/SlotBrewingStandIngredient.java.patch b/patches/minecraft/net/minecraft/inventory/SlotBrewingStandIngredient.java.patch new file mode 100644 index 0000000000..83a474dd98 --- /dev/null +++ b/patches/minecraft/net/minecraft/inventory/SlotBrewingStandIngredient.java.patch @@ -0,0 +1,11 @@ +--- ../src_base/minecraft/net/minecraft/inventory/SlotBrewingStandIngredient.java ++++ ../src_work/minecraft/net/minecraft/inventory/SlotBrewingStandIngredient.java +@@ -19,7 +19,7 @@ + */ + public boolean isItemValid(ItemStack par1ItemStack) + { +- return par1ItemStack != null ? Item.itemsList[par1ItemStack.itemID].isPotionIngredient() : false; ++ return par1ItemStack != null ? Item.itemsList[par1ItemStack.itemID].isPotionIngredient(par1ItemStack) : false; + } + + /** diff --git a/patches/minecraft/net/minecraft/item/Item.java.patch b/patches/minecraft/net/minecraft/item/Item.java.patch index 5f235873fd..4461f722ad 100644 --- a/patches/minecraft/net/minecraft/item/Item.java.patch +++ b/patches/minecraft/net/minecraft/item/Item.java.patch @@ -46,7 +46,23 @@ } /** -@@ -627,6 +638,10 @@ +@@ -561,6 +572,7 @@ + + /** + * Returns a string representing what this item does to a potion. ++ * @Deprecated In favor of ItemStack sensitive version + */ + public String getPotionEffect() + { +@@ -569,6 +581,7 @@ + + /** + * Returns true if this item serves as a potion ingredient (its ingredient information is not null). ++ * @Deprecated In favor of ItemStack sensitive version + */ + public boolean isPotionIngredient() + { +@@ -627,6 +640,10 @@ float var18 = var15 * var16; float var20 = var14 * var16; double var21 = 5.0D; @@ -57,7 +73,7 @@ Vec3 var23 = var13.addVector((double)var18 * var21, (double)var17 * var21, (double)var20 * var21); return par1World.rayTraceBlocks_do_do(var13, var23, par3, !par3); } -@@ -701,4 +716,340 @@ +@@ -701,4 +718,362 @@ { StatList.initStats(); } @@ -396,5 +412,27 @@ + + return false; + } ++ ++ /** ++ * ItemStack sensitive version of isPotionIngredient ++ * ++ * @param stack The item stack ++ * @return True if this stack can be used as a potion ingredient ++ */ ++ public boolean isPotionIngredient(ItemStack stack) ++ { ++ return isPotionIngredient(); ++ } ++ ++ /** ++ * ItemStack sensitive version of getPotionEffect ++ * ++ * @param stack The item stack ++ * @return A string containing the bit manipulation to apply the the potion. ++ */ ++ public String getPotionEffect(ItemStack stack) ++ { ++ return getPotionEffect(); ++ } + } diff --git a/patches/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java.patch b/patches/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java.patch index 215dfd1e5a..f6838f834c 100644 --- a/patches/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java.patch +++ b/patches/minecraft/net/minecraft/tileentity/TileEntityBrewingStand.java.patch @@ -12,6 +12,15 @@ { /** The itemstacks currently placed in the slots of the brewing stand */ private ItemStack[] brewingItemStacks = new ItemStack[4]; +@@ -94,7 +97,7 @@ + { + ItemStack var1 = this.brewingItemStacks[3]; + +- if (!Item.itemsList[var1.itemID].isPotionIngredient()) ++ if (!Item.itemsList[var1.itemID].isPotionIngredient(var1)) + { + return false; + } @@ -166,7 +169,7 @@ if (Item.itemsList[var1.itemID].hasContainerItem()) @@ -21,6 +30,15 @@ } else { +@@ -185,7 +188,7 @@ + */ + private int getPotionResult(int par1, ItemStack par2ItemStack) + { +- return par2ItemStack == null ? par1 : (Item.itemsList[par2ItemStack.itemID].isPotionIngredient() ? PotionHelper.applyIngredient(par1, Item.itemsList[par2ItemStack.itemID].getPotionEffect()) : par1); ++ return par2ItemStack == null ? par1 : (Item.itemsList[par2ItemStack.itemID].isPotionIngredient(par2ItemStack) ? PotionHelper.applyIngredient(par1, Item.itemsList[par2ItemStack.itemID].getPotionEffect(par2ItemStack)) : par1); + } + + /** @@ -333,4 +336,16 @@ return var1; From a7cdcc1f33e89640be3e1aaa968b4c714e55821b Mon Sep 17 00:00:00 2001 From: LexManos Date: Sat, 23 Feb 2013 13:07:00 -0800 Subject: [PATCH 44/49] WorldGen*Trees shoud not respect custom soils. Closes #355 --- .../net/minecraft/block/Block.java.patch | 27 ++++++- .../gen/feature/WorldGenBigTree.java.patch | 26 +++++++ .../gen/feature/WorldGenForest.java.patch | 33 ++++++++- .../gen/feature/WorldGenHugeTrees.java.patch | 74 ++++++++++++++++--- .../gen/feature/WorldGenTaiga2.java.patch | 31 +++++++- .../gen/feature/WorldGenTrees.java.patch | 41 ++++++++-- 6 files changed, 206 insertions(+), 26 deletions(-) create mode 100644 patches/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.java.patch diff --git a/patches/minecraft/net/minecraft/block/Block.java.patch b/patches/minecraft/net/minecraft/block/Block.java.patch index 63bc8b033c..825f8573d8 100644 --- a/patches/minecraft/net/minecraft/block/Block.java.patch +++ b/patches/minecraft/net/minecraft/block/Block.java.patch @@ -156,7 +156,7 @@ } /** -@@ -1364,4 +1381,839 @@ +@@ -1364,4 +1381,864 @@ canBlockGrass[0] = true; StatList.initBreakableStats(); } @@ -925,6 +925,31 @@ + } + + /** ++ * Called when a plant grows on this block, only implemented for saplings using the WorldGen*Trees classes right now. ++ * Modder may implement this for custom plants. ++ * This does not use ForgeDirection, because large/huge trees can be located in non-representable direction, ++ * so the source location is specified. ++ * Currently this just changes the block to dirt if it was grass. ++ * ++ * Note: This happens DURING the generation, the generation may not be complete when this is called. ++ * ++ * @param world Current world ++ * @param x Soil X ++ * @param y Soil Y ++ * @param z Soil Z ++ * @param sourceX Plant growth location X ++ * @param sourceY Plant growth location Y ++ * @param sourceZ Plant growth location Z ++ */ ++ public void onPlantGrow(World world, int x, int y, int z, int sourceX, int sourceY, int sourceZ) ++ { ++ if (blockID == grass.blockID) ++ { ++ world.setBlock(x, y, z, dirt.blockID); ++ } ++ } ++ ++ /** + * Checks if this soil is fertile, typically this means that growth rates + * of plants on this soil will be slightly sped up. + * Only vanilla case is tilledField when it is within range of water. diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.java.patch new file mode 100644 index 0000000000..5380f0c004 --- /dev/null +++ b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.java.patch @@ -0,0 +1,26 @@ +--- ../src_base/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.java ++++ ../src_work/minecraft/net/minecraft/world/gen/feature/WorldGenBigTree.java +@@ -1,9 +1,12 @@ + package net.minecraft.world.gen.feature; + + import java.util.Random; ++ + import net.minecraft.block.Block; ++import net.minecraft.block.BlockSapling; + import net.minecraft.util.MathHelper; + import net.minecraft.world.World; ++import net.minecraftforge.common.ForgeDirection; + + public class WorldGenBigTree extends WorldGenerator + { +@@ -442,7 +445,9 @@ + int[] var2 = new int[] {this.basePos[0], this.basePos[1] + this.heightLimit - 1, this.basePos[2]}; + int var3 = this.worldObj.getBlockId(this.basePos[0], this.basePos[1] - 1, this.basePos[2]); + +- if (var3 != 2 && var3 != 3) ++ Block soil = Block.blocksList[var3]; ++ boolean isValidSoil = (soil != null && soil.canSustainPlant(worldObj, basePos[0], basePos[1] - 1, basePos[2], ForgeDirection.UP, (BlockSapling)Block.sapling)); ++ if (!isValidSoil) + { + return false; + } diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenForest.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenForest.java.patch index 9ae5752969..89def515ec 100644 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenForest.java.patch +++ b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenForest.java.patch @@ -1,6 +1,18 @@ --- ../src_base/minecraft/net/minecraft/world/gen/feature/WorldGenForest.java +++ ../src_work/minecraft/net/minecraft/world/gen/feature/WorldGenForest.java -@@ -45,7 +45,9 @@ +@@ -1,8 +1,11 @@ + package net.minecraft.world.gen.feature; + + import java.util.Random; ++ + import net.minecraft.block.Block; ++import net.minecraft.block.BlockSapling; + import net.minecraft.world.World; ++import net.minecraftforge.common.ForgeDirection; + + public class WorldGenForest extends WorldGenerator + { +@@ -45,7 +48,9 @@ { var12 = par1World.getBlockId(var10, var8, var11); @@ -11,7 +23,22 @@ { var7 = false; } -@@ -84,7 +86,10 @@ +@@ -65,10 +70,12 @@ + else + { + var8 = par1World.getBlockId(par3, par4 - 1, par5); ++ Block soil = Block.blocksList[var8]; ++ boolean isValidSoil = soil != null && soil.canSustainPlant(par1World, par3, par4 - 1, par5, ForgeDirection.UP, (BlockSapling)Block.sapling); + +- if ((var8 == Block.grass.blockID || var8 == Block.dirt.blockID) && par4 < 256 - var6 - 1) ++ if (isValidSoil && par4 < 256 - var6 - 1) + { +- this.setBlock(par1World, par3, par4 - 1, par5, Block.dirt.blockID); ++ soil.onPlantGrow(par1World, par3, par4 - 1, par5, par3, par4, par5); + int var16; + + for (var16 = par4 - 3 + var6; var16 <= par4 + var6; ++var16) +@@ -84,7 +91,10 @@ { int var15 = var14 - par5; @@ -23,7 +50,7 @@ { this.setBlockAndMetadata(par1World, var12, var16, var14, Block.leaves.blockID, 2); } -@@ -96,7 +101,9 @@ +@@ -96,7 +106,9 @@ { var10 = par1World.getBlockId(par3, par4 + var16, par5); diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenHugeTrees.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenHugeTrees.java.patch index 76c350b3db..5d46fa309d 100644 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenHugeTrees.java.patch +++ b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenHugeTrees.java.patch @@ -1,20 +1,56 @@ --- ../src_base/minecraft/net/minecraft/world/gen/feature/WorldGenHugeTrees.java +++ ../src_work/minecraft/net/minecraft/world/gen/feature/WorldGenHugeTrees.java -@@ -58,7 +58,12 @@ +@@ -2,8 +2,10 @@ + + import java.util.Random; + import net.minecraft.block.Block; ++import net.minecraft.block.BlockSapling; + import net.minecraft.util.MathHelper; + import net.minecraft.world.World; ++import net.minecraftforge.common.ForgeDirection; + + public class WorldGenHugeTrees extends WorldGenerator + { +@@ -57,8 +59,13 @@ + if (var8 >= 0 && var8 < 256) { var12 = par1World.getBlockId(var10, var8, var11); - +- - if (var12 != 0 && var12 != Block.leaves.blockID && var12 != Block.grass.blockID && var12 != Block.dirt.blockID && var12 != Block.wood.blockID && var12 != Block.sapling.blockID) -+ if (var12 != 0 && -+ (Block.blocksList[var12] != null && !Block.blocksList[var12].isLeaves(par1World, var10, var8, var11)) && -+ var12 != Block.grass.blockID && -+ var12 != Block.dirt.blockID && -+ (Block.blocksList[var12] != null && !Block.blocksList[var12].isWood(par1World, var10, var8, var11)) && ++ Block block = Block.blocksList[var12]; ++ ++ if (block != null && ++ !block.isLeaves(par1World, var10, var8, var11) && ++ !block.canSustainPlant(par1World, var10, var8, var11, ForgeDirection.UP, (BlockSapling)Block.sapling) && ++ !block.isWood(par1World, var10, var8, var11) && + var12 != Block.sapling.blockID) { var7 = false; } -@@ -106,7 +111,7 @@ +@@ -78,13 +85,15 @@ + else + { + var8 = par1World.getBlockId(par3, par4 - 1, par5); +- +- if ((var8 == Block.grass.blockID || var8 == Block.dirt.blockID) && par4 < 256 - var6 - 1) +- { +- par1World.setBlock(par3, par4 - 1, par5, Block.dirt.blockID); +- par1World.setBlock(par3 + 1, par4 - 1, par5, Block.dirt.blockID); +- par1World.setBlock(par3, par4 - 1, par5 + 1, Block.dirt.blockID); +- par1World.setBlock(par3 + 1, par4 - 1, par5 + 1, Block.dirt.blockID); ++ Block soil = Block.blocksList[var8]; ++ boolean isValidSoil = soil != null && soil.canSustainPlant(par1World, par3, par4 - 1, par5, ForgeDirection.UP, (BlockSapling)Block.sapling); ++ ++ if (isValidSoil && par4 < 256 - var6 - 1) ++ { ++ onPlantGrow(par1World, par3, par4 - 1, par5, par3, par4, par5); ++ onPlantGrow(par1World, par3 + 1, par4 - 1, par5, par3, par4, par5); ++ onPlantGrow(par1World, par3, par4 - 1, par5 + 1, par3, par4, par5); ++ onPlantGrow(par1World, par3 + 1, par4 - 1, par5 + 1, par3, par4, par5); + this.growLeaves(par1World, par3, par5, par4 + var6, 2, par2Random); + + for (int var14 = par4 + var6 - 2 - par2Random.nextInt(4); var14 > par4 + var6 / 2; var14 -= 2 + par2Random.nextInt(4)) +@@ -106,7 +115,7 @@ { var11 = par1World.getBlockId(par3, par4 + var10, par5); @@ -23,7 +59,7 @@ { this.setBlockAndMetadata(par1World, par3, par4 + var10, par5, Block.wood.blockID, this.woodMetadata); -@@ -128,7 +133,7 @@ +@@ -128,7 +137,7 @@ { var11 = par1World.getBlockId(par3 + 1, par4 + var10, par5); @@ -32,7 +68,7 @@ { this.setBlockAndMetadata(par1World, par3 + 1, par4 + var10, par5, Block.wood.blockID, this.woodMetadata); -@@ -148,7 +153,7 @@ +@@ -148,7 +157,7 @@ var11 = par1World.getBlockId(par3 + 1, par4 + var10, par5 + 1); @@ -41,7 +77,7 @@ { this.setBlockAndMetadata(par1World, par3 + 1, par4 + var10, par5 + 1, Block.wood.blockID, this.woodMetadata); -@@ -168,7 +173,7 @@ +@@ -168,7 +177,7 @@ var11 = par1World.getBlockId(par3, par4 + var10, par5 + 1); @@ -50,7 +86,7 @@ { this.setBlockAndMetadata(par1World, par3, par4 + var10, par5 + 1, Block.wood.blockID, this.woodMetadata); -@@ -219,7 +224,12 @@ +@@ -219,7 +228,12 @@ { int var14 = var13 - par3; @@ -64,3 +100,17 @@ { this.setBlockAndMetadata(par1World, var11, var8, var13, Block.leaves.blockID, this.leavesMetadata); } +@@ -227,4 +241,13 @@ + } + } + } ++ ++ private void onPlantGrow(World world, int x, int y, int z, int sourceX, int sourceY, int sourceZ) ++ { ++ Block block = Block.blocksList[world.getBlockId(x, y, z)]; ++ if (block != null) ++ { ++ block.onPlantGrow(world, x, y, z, sourceX, sourceY, sourceZ); ++ } ++ } + } diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga2.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga2.java.patch index dedf0eb468..259739c8f2 100644 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga2.java.patch +++ b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga2.java.patch @@ -1,6 +1,16 @@ --- ../src_base/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga2.java +++ ../src_work/minecraft/net/minecraft/world/gen/feature/WorldGenTaiga2.java -@@ -47,7 +47,9 @@ +@@ -2,7 +2,9 @@ + + import java.util.Random; + import net.minecraft.block.Block; ++import net.minecraft.block.BlockSapling; + import net.minecraft.world.World; ++import net.minecraftforge.common.ForgeDirection; + + public class WorldGenTaiga2 extends WorldGenerator + { +@@ -47,7 +49,9 @@ { var15 = par1World.getBlockId(var13, var11, var14); @@ -11,7 +21,22 @@ { var10 = false; } -@@ -89,7 +91,10 @@ +@@ -67,10 +71,12 @@ + else + { + var11 = par1World.getBlockId(par3, par4 - 1, par5); ++ Block soil = Block.blocksList[var11]; ++ boolean isValidSoil = soil != null && soil.canSustainPlant(par1World, par3, par4 - 1, par5, ForgeDirection.UP, (BlockSapling)Block.sapling); + +- if ((var11 == Block.grass.blockID || var11 == Block.dirt.blockID) && par4 < 256 - var6 - 1) ++ if (isValidSoil && par4 < 256 - var6 - 1) + { +- this.setBlock(par1World, par3, par4 - 1, par5, Block.dirt.blockID); ++ soil.onPlantGrow(par1World, par3, par4 - 1, par5, par3, par4, par5); + var21 = par2Random.nextInt(2); + var13 = 1; + byte var22 = 0; +@@ -89,7 +95,10 @@ { int var20 = var19 - par5; @@ -23,7 +48,7 @@ { this.setBlockAndMetadata(par1World, var17, var16, var19, Block.leaves.blockID, 1); } -@@ -119,7 +124,9 @@ +@@ -119,7 +128,9 @@ { var17 = par1World.getBlockId(par3, par4 + var16, par5); diff --git a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTrees.java.patch b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTrees.java.patch index 6a494a9c5b..aa661276d8 100644 --- a/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTrees.java.patch +++ b/patches/minecraft/net/minecraft/world/gen/feature/WorldGenTrees.java.patch @@ -1,21 +1,48 @@ --- ../src_base/minecraft/net/minecraft/world/gen/feature/WorldGenTrees.java +++ ../src_work/minecraft/net/minecraft/world/gen/feature/WorldGenTrees.java -@@ -67,7 +67,13 @@ +@@ -2,8 +2,10 @@ + + import java.util.Random; + import net.minecraft.block.Block; ++import net.minecraft.block.BlockSapling; + import net.minecraft.util.Direction; + import net.minecraft.world.World; ++import net.minecraftforge.common.ForgeDirection; + + public class WorldGenTrees extends WorldGenerator + { +@@ -67,7 +69,12 @@ { var12 = par1World.getBlockId(var10, var8, var11); - if (var12 != 0 && var12 != Block.leaves.blockID && var12 != Block.grass.blockID && var12 != Block.dirt.blockID && var12 != Block.wood.blockID) + Block block = Block.blocksList[var12]; + -+ if (var12 != 0 && ++ if (block != null && + !block.isLeaves(par1World, var10, var8, var11) && -+ var12 != Block.grass.blockID && -+ var12 != Block.dirt.blockID && ++ !block.canSustainPlant(par1World, var10, var8, var11, ForgeDirection.UP, (BlockSapling)Block.sapling) && + !block.isWood(par1World, var10, var8, var11)) { var7 = false; } -@@ -110,7 +116,10 @@ +@@ -87,10 +94,12 @@ + else + { + var8 = par1World.getBlockId(par3, par4 - 1, par5); +- +- if ((var8 == Block.grass.blockID || var8 == Block.dirt.blockID) && par4 < 256 - var6 - 1) +- { +- this.setBlock(par1World, par3, par4 - 1, par5, Block.dirt.blockID); ++ Block soil = Block.blocksList[var8]; ++ boolean isSoil = (soil != null && soil.canSustainPlant(par1World, par3, par4 - 1, par5, ForgeDirection.UP, (BlockSapling)Block.sapling)); ++ ++ if (isSoil && par4 < 256 - var6 - 1) ++ { ++ soil.onPlantGrow(par1World, par3, par4 - 1, par5, par3, par4, par5); + var9 = 3; + byte var18 = 0; + int var13; +@@ -110,7 +119,10 @@ { int var17 = var16 - par5; @@ -27,7 +54,7 @@ { this.setBlockAndMetadata(par1World, var14, var11, var16, Block.leaves.blockID, this.metaLeaves); } -@@ -122,7 +131,9 @@ +@@ -122,7 +134,9 @@ { var12 = par1World.getBlockId(par3, par4 + var11, par5); @@ -38,7 +65,7 @@ { this.setBlockAndMetadata(par1World, par3, par4 + var11, par5, Block.wood.blockID, this.metaWood); -@@ -162,7 +173,8 @@ +@@ -162,7 +176,8 @@ { for (var15 = par5 - var13; var15 <= par5 + var13; ++var15) { From 3530e0d861d073cb51d736926941765cd984bf9e Mon Sep 17 00:00:00 2001 From: LexManos Date: Sat, 23 Feb 2013 13:41:43 -0800 Subject: [PATCH 45/49] Added unload event for client worlds Closes #405 --- .../net/minecraft/client/Minecraft.java.patch | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/patches/minecraft/net/minecraft/client/Minecraft.java.patch b/patches/minecraft/net/minecraft/client/Minecraft.java.patch index 101c28dc0e..8fb8de5f7f 100644 --- a/patches/minecraft/net/minecraft/client/Minecraft.java.patch +++ b/patches/minecraft/net/minecraft/client/Minecraft.java.patch @@ -1,17 +1,19 @@ --- ../src_base/minecraft/net/minecraft/client/Minecraft.java +++ ../src_work/minecraft/net/minecraft/client/Minecraft.java -@@ -128,6 +128,10 @@ +@@ -128,6 +128,12 @@ import com.google.common.collect.MapDifference; +import net.minecraftforge.common.ForgeHooks; ++import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.ForgeEventFactory; +import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action; ++import net.minecraftforge.event.world.WorldEvent; + @SideOnly(Side.CLIENT) public abstract class Minecraft implements Runnable, IPlayerUsage { -@@ -1253,7 +1257,7 @@ +@@ -1253,7 +1259,7 @@ if (this.thePlayer.canCurrentToolHarvestBlock(var3, var4, var5)) { @@ -20,7 +22,7 @@ this.thePlayer.swingItem(); } } -@@ -1319,7 +1323,8 @@ +@@ -1319,7 +1325,8 @@ { int var8 = var3 != null ? var3.stackSize : 0; @@ -30,7 +32,7 @@ { var2 = false; this.thePlayer.swingItem(); -@@ -1345,7 +1350,8 @@ +@@ -1345,7 +1352,8 @@ { ItemStack var9 = this.thePlayer.inventory.getCurrentItem(); @@ -40,7 +42,20 @@ { this.entityRenderer.itemRenderer.resetEquippedProgress2(); } -@@ -2041,6 +2047,18 @@ +@@ -2026,6 +2034,12 @@ + + if (par1WorldClient == null) + { ++ ++ if (theWorld != null) ++ { ++ MinecraftForge.EVENT_BUS.post(new WorldEvent.Unload(theWorld)); ++ } ++ + NetClientHandler var3 = this.getSendQueue(); + + if (var3 != null) +@@ -2041,6 +2055,18 @@ if (this.theIntegratedServer != null) { this.theIntegratedServer.initiateShutdown(); @@ -59,7 +74,7 @@ } this.theIntegratedServer = null; -@@ -2350,95 +2368,12 @@ +@@ -2350,95 +2376,12 @@ if (this.objectMouseOver != null) { boolean var1 = this.thePlayer.capabilities.isCreativeMode; From f0ea9c9106417582e0b7bf4fb36f78de9ed606fd Mon Sep 17 00:00:00 2001 From: LexManos Date: Sat, 23 Feb 2013 13:50:12 -0800 Subject: [PATCH 46/49] Store the glMultiTexCoord lightmap for later use with glDrawArrays closes #406 --- .../client/renderer/OpenGlHelper.java.patch | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 patches/minecraft/net/minecraft/client/renderer/OpenGlHelper.java.patch diff --git a/patches/minecraft/net/minecraft/client/renderer/OpenGlHelper.java.patch b/patches/minecraft/net/minecraft/client/renderer/OpenGlHelper.java.patch new file mode 100644 index 0000000000..4cddf89efe --- /dev/null +++ b/patches/minecraft/net/minecraft/client/renderer/OpenGlHelper.java.patch @@ -0,0 +1,25 @@ +--- ../src_base/minecraft/net/minecraft/client/renderer/OpenGlHelper.java ++++ ../src_work/minecraft/net/minecraft/client/renderer/OpenGlHelper.java +@@ -25,6 +25,10 @@ + * True if the renderer supports multitextures and the OpenGL version != 1.3 + */ + private static boolean useMultitextureARB = false; ++ ++ /* Stores the last values sent into setLightmapTextureCoords */ ++ public static float lastBrightnessX = 0.0f; ++ public static float lastBrightnessY = 0.0f; + + /** + * Initializes the texture constants to be used when rendering lightmap values +@@ -88,5 +92,11 @@ + { + GL13.glMultiTexCoord2f(par0, par1, par2); + } ++ ++ if (par0 == lightmapTexUnit) ++ { ++ lastBrightnessX = par1; ++ lastBrightnessY = par2; ++ } + } + } From 0f696c37392cfcbde05144d1e53e3ad01bdecbf9 Mon Sep 17 00:00:00 2001 From: LexManos Date: Sat, 23 Feb 2013 13:53:05 -0800 Subject: [PATCH 47/49] Add water and lava to liquid dictionary by default, closes #419 --- common/net/minecraftforge/liquids/LiquidDictionary.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/common/net/minecraftforge/liquids/LiquidDictionary.java b/common/net/minecraftforge/liquids/LiquidDictionary.java index 9cf6835e50..8e300f0766 100644 --- a/common/net/minecraftforge/liquids/LiquidDictionary.java +++ b/common/net/minecraftforge/liquids/LiquidDictionary.java @@ -3,10 +3,9 @@ package net.minecraftforge.liquids; import java.util.HashMap; import java.util.Map; -import net.minecraft.item.ItemStack; +import net.minecraft.block.Block; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.Event; -import net.minecraftforge.oredict.OreDictionary.OreRegisterEvent; import com.google.common.collect.ImmutableMap; @@ -87,4 +86,10 @@ public abstract class LiquidDictionary this.Liquid = liquid.copy(); } } + + static + { + getOrCreateLiquid("Water", new LiquidStack(Block.waterStill, LiquidContainerRegistry.BUCKET_VOLUME)); + getOrCreateLiquid("Lava", new LiquidStack(Block.lavaStill, LiquidContainerRegistry.BUCKET_VOLUME)); + } } From a0bc6a3ed0f1fb20c6e46c5d0ed9e953566f80fc Mon Sep 17 00:00:00 2001 From: LexManos Date: Sat, 23 Feb 2013 14:20:49 -0800 Subject: [PATCH 48/49] Bump version to 6.6.2, declaring Forge for MC 1.4.7 feature complete, as 1.5 is on the horizon, only bug fixes from this point on. Unless something major happens on Mojang's end. --- common/net/minecraftforge/common/ForgeVersion.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/net/minecraftforge/common/ForgeVersion.java b/common/net/minecraftforge/common/ForgeVersion.java index c3bc3b7bdd..d8d391c167 100644 --- a/common/net/minecraftforge/common/ForgeVersion.java +++ b/common/net/minecraftforge/common/ForgeVersion.java @@ -12,7 +12,7 @@ public class ForgeVersion //This number is incremented every minecraft release, never reset public static final int minorVersion = 6; //This number is incremented every time a interface changes or new major feature is added, and reset every Minecraft version - public static final int revisionVersion = 1; + public static final int revisionVersion = 2; //This number is incremented every time Jenkins builds Forge, and never reset. Should always be 0 in the repo code. public static final int buildVersion = 0; From a520e128d77be3d528e6e21a51911d2a99c49cc5 Mon Sep 17 00:00:00 2001 From: LexManos Date: Sun, 24 Feb 2013 22:55:48 -0800 Subject: [PATCH 49/49] Fix TESR culling for beacons, and implement a good enough measure for Chests. --- .../net/minecraft/tileentity/TileEntity.java.patch | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch b/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch index 0568a04f68..e9922fec22 100644 --- a/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch +++ b/patches/minecraft/net/minecraft/tileentity/TileEntity.java.patch @@ -11,7 +11,7 @@ import net.minecraft.world.World; public class TileEntity -@@ -296,4 +299,84 @@ +@@ -296,4 +299,93 @@ addMapping(TileEntityBeacon.class, "Beacon"); addMapping(TileEntitySkull.class, "Skull"); } @@ -85,7 +85,16 @@ + public AxisAlignedBB getRenderBoundingBox() + { + AxisAlignedBB bb = INFINITE_EXTENT_AABB; -+ if (getBlockType()!=null && getBlockType() != Block.chest) ++ Block type = getBlockType(); ++ if (type == Block.enchantmentTable) ++ { ++ bb = AxisAlignedBB.getAABBPool().addOrModifyAABBInPool(xCoord, yCoord, zCoord, xCoord + 1, yCoord + 1, zCoord + 1); ++ } ++ else if (type == Block.chest) ++ { ++ bb = AxisAlignedBB.getAABBPool().addOrModifyAABBInPool(xCoord - 1, yCoord, zCoord - 1, xCoord + 2, yCoord + 1, zCoord + 2); ++ } ++ else if (type != null && type != Block.beacon) + { + AxisAlignedBB cbb = getBlockType().getCollisionBoundingBoxFromPool(worldObj, xCoord, yCoord, zCoord); + if (cbb != null)