From 836338d4aab0b4ccf22269565d08a22f222dd9c8 Mon Sep 17 00:00:00 2001 From: gigaherz Date: Wed, 27 Jul 2016 16:59:55 +0200 Subject: [PATCH] Improve early exit tests on the attach capability event. Hopefully prevents a reported crash with Mekanism. --- build.gradle | 2 +- .../chopblock/RenderChoppingBlock.java | 74 +++++++------------ .../survivalist/chopblock/TileChopping.java | 9 ++- .../scraping/ItemBreakingTracker.java | 54 +++++++------- 4 files changed, 60 insertions(+), 79 deletions(-) diff --git a/build.gradle b/build.gradle index 234462d..f0e9594 100644 --- a/build.gradle +++ b/build.gradle @@ -27,7 +27,7 @@ repositories { apply plugin: 'net.minecraftforge.gradle.forge' -version = "1.5.2" +version = "1.5.3" group= "gigaherz.survivalist" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "Survivalist-1.10.2" diff --git a/src/main/java/gigaherz/survivalist/chopblock/RenderChoppingBlock.java b/src/main/java/gigaherz/survivalist/chopblock/RenderChoppingBlock.java index 222950a..067d32f 100644 --- a/src/main/java/gigaherz/survivalist/chopblock/RenderChoppingBlock.java +++ b/src/main/java/gigaherz/survivalist/chopblock/RenderChoppingBlock.java @@ -5,15 +5,15 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.block.model.ItemCameraTransforms; -import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.item.ItemStack; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; -import org.lwjgl.opengl.GL11; public class RenderChoppingBlock extends TileEntitySpecialRenderer { + final Minecraft mc = Minecraft.getMinecraft(); + @Override public void renderTileEntityAt(TileChopping te, double x, double y, double z, float partialTicks, int destroyStage) { @@ -21,57 +21,33 @@ public void renderTileEntityAt(TileChopping te, double x, double y, double z, fl if (state.getBlock() != Survivalist.chopping_block) return; - if (destroyStage >= 0) - { - this.bindTexture(DESTROY_STAGES[destroyStage]); - GlStateManager.matrixMode(GL11.GL_TEXTURE); - GlStateManager.pushMatrix(); - GlStateManager.scale(8, 8, 1); - GlStateManager.matrixMode(GL11.GL_MODELVIEW); - } - else - { - bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); - } - - GlStateManager.disableLighting(); - - IItemHandler inv = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); - - GlStateManager.pushMatrix(); - - GlStateManager.translate(x + 0.5, y + 0.65, z + 0.5); - - ItemStack stack = inv.getStackInSlot(0); - if (stack != null) + if (destroyStage < 0) { + GlStateManager.disableLighting(); GlStateManager.pushMatrix(); + GlStateManager.translate(x + 0.5, y + 0.65, z + 0.5); + + IItemHandler inv = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); + ItemStack stack = inv.getStackInSlot(0); + if (stack != null) + { + GlStateManager.pushMatrix(); + GlStateManager.translate(0, -4.5 / 16.0f, 0); + GlStateManager.scale(2, 2, 2); + GlStateManager.color(1f, 1f, 1f, 1f); + + mc.getRenderItem().renderItem(stack, ItemCameraTransforms.TransformType.GROUND); + /*int breakStage = te.getBreakStage(); + if (breakStage >= 0) + { + renderItem(stack, ItemCameraTransforms.TransformType.GROUND, breakStage); + }*/ + + GlStateManager.popMatrix(); + } - GlStateManager.translate(0, -4.5 / 16.0f, 0); - - GlStateManager.scale(2, 2, 2); - - GlStateManager.color(1f, 1f, 1f, 1f); - - Minecraft mc = Minecraft.getMinecraft(); - if (destroyStage >= 0) - mc.renderEngine.bindTexture(DESTROY_STAGES[destroyStage]); - else - mc.renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); - mc.getRenderItem().renderItem(stack, ItemCameraTransforms.TransformType.GROUND); - - GlStateManager.popMatrix(); - } - - GlStateManager.popMatrix(); - - GlStateManager.enableLighting(); - - if (destroyStage >= 0) - { - GlStateManager.matrixMode(GL11.GL_TEXTURE); GlStateManager.popMatrix(); - GlStateManager.matrixMode(GL11.GL_MODELVIEW); + GlStateManager.enableLighting(); } } } diff --git a/src/main/java/gigaherz/survivalist/chopblock/TileChopping.java b/src/main/java/gigaherz/survivalist/chopblock/TileChopping.java index 8fdc58a..aead76d 100644 --- a/src/main/java/gigaherz/survivalist/chopblock/TileChopping.java +++ b/src/main/java/gigaherz/survivalist/chopblock/TileChopping.java @@ -3,7 +3,6 @@ import com.google.common.collect.Lists; import gigaherz.survivalist.Survivalist; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.particle.ParticleDigging; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; @@ -14,7 +13,6 @@ import net.minecraft.network.play.server.SPacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; -import net.minecraft.util.ITickable; import net.minecraft.util.SoundCategory; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -255,4 +253,11 @@ public ItemStackHandler getSlotInventory() { return slotInventory; } + + public int getBreakStage() + { + if (breakingProgress <= 0) + return -1; + return breakingProgress * 10 / 200; + } } diff --git a/src/main/java/gigaherz/survivalist/scraping/ItemBreakingTracker.java b/src/main/java/gigaherz/survivalist/scraping/ItemBreakingTracker.java index 2c39374..0e6b6b6 100644 --- a/src/main/java/gigaherz/survivalist/scraping/ItemBreakingTracker.java +++ b/src/main/java/gigaherz/survivalist/scraping/ItemBreakingTracker.java @@ -293,38 +293,38 @@ public void attachCapabilities(AttachCapabilitiesEvent.Entity e) { final Entity entity = e.getEntity(); - if (entity.worldObj.isRemote) + if (!(entity instanceof EntityPlayer)) return; - if (entity instanceof EntityPlayer) + if (entity.worldObj == null || entity.worldObj.isRemote) + return; + + if (entity.hasCapability(TRACKER, null)) + return; + + e.addCapability(PROP_KEY, new ICapabilityProvider() { - if (!entity.hasCapability(TRACKER, null)) + ItemBreakingTracker cap = new ItemBreakingTracker(); + { - e.addCapability(PROP_KEY, new ICapabilityProvider() - { - ItemBreakingTracker cap = new ItemBreakingTracker(); - - { - cap.init(entity, entity.worldObj); - } - - @Override - public boolean hasCapability(Capability capability, EnumFacing facing) - { - return capability == TRACKER; - } - - @SuppressWarnings("unchecked") - @Override - public T getCapability(Capability capability, EnumFacing facing) - { - if (capability == TRACKER) - return (T) cap; - return null; - } - }); + cap.init(entity, entity.worldObj); } - } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + return capability == TRACKER; + } + + @SuppressWarnings("unchecked") + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if (capability == TRACKER) + return (T) cap; + return null; + } + }); } }