From 2e090805c1d99edf59961765ae70d44ef5be8e58 Mon Sep 17 00:00:00 2001 From: SteveKunG Date: Mon, 18 Sep 2017 23:08:26 +0700 Subject: [PATCH 01/13] Fixed 2nd skin layer rotation --- .../carryon/client/event/RenderEvents.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/main/java/tschipp/carryon/client/event/RenderEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEvents.java index 4046e61..db024e0 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEvents.java @@ -325,6 +325,8 @@ public class RenderEvents ModelRenderer fakeLeftArm = new ModelRenderer(model, 32, 48); ModelRenderer fakeRightArm = new ModelRenderer(model, 40, 16); + ModelRenderer fakeLeftArmwear = new ModelRenderer(model, 48, 48); + ModelRenderer fakeRightArmwear = new ModelRenderer(model, 40, 32); player.setArrowCountInEntity(0); // TODO Temporary Fix @@ -349,6 +351,8 @@ public class RenderEvents model.bipedLeftArm.isHidden = true; model.bipedRightArm.isHidden = true; + model.bipedLeftArmwear.isHidden = true; + model.bipedRightArmwear.isHidden = true; Minecraft.getMinecraft().getTextureManager().bindTexture(skinLoc); float rotation = -player.renderYawOffset; @@ -356,19 +360,23 @@ public class RenderEvents if (aplayer.getSkinType().equals("default")) { fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 4, 12, 4, .08F); + fakeLeftArmwear.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 4, 12, 4, .08F + 0.25F); } else { fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 3, 12, 4, .08F); + fakeLeftArmwear.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 3, 12, 4, .08F + 0.25F); } if (aplayer.getSkinType().equals("default")) { fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.9F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 4, 12, 4, .08F); + fakeRightArmwear.addBox(model.bipedRightArm.offsetX - 7.9F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 4, 12, 4, .08F + 0.25F); } else { fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.2F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 3, 12, 4, .08F); + fakeRightArmwear.addBox(model.bipedRightArm.offsetX - 7.2F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 3, 12, 4, .08F + 0.25F); } if (item == RegistrationHandler.itemTile) @@ -377,11 +385,15 @@ public class RenderEvents { fakeRightArm.rotateAngleX = -.9001F; fakeLeftArm.rotateAngleX = -.9001F; + fakeLeftArmwear.rotateAngleX = -.9001F; + fakeRightArmwear.rotateAngleX = -.9001F; } else { fakeRightArm.rotateAngleX = -1.4001F; fakeLeftArm.rotateAngleX = -1.4001F; + fakeLeftArmwear.rotateAngleX = -1.4001F; + fakeRightArmwear.rotateAngleX = -1.4001F; } } else @@ -390,25 +402,35 @@ public class RenderEvents { fakeRightArm.rotateAngleX = -1.2001F; fakeLeftArm.rotateAngleX = -1.2001F; + fakeLeftArmwear.rotateAngleX = -1.2001F; + fakeRightArmwear.rotateAngleX = -1.2001F; } else { fakeRightArm.rotateAngleX = -1.7001F; fakeLeftArm.rotateAngleX = -1.7001F; + fakeLeftArmwear.rotateAngleX = -1.7001F; + fakeRightArmwear.rotateAngleX = -1.7001F; } fakeRightArm.rotateAngleY = -0.15f; fakeLeftArm.rotateAngleY = 0.15f; + fakeLeftArmwear.rotateAngleY = 0.15f; + fakeRightArmwear.rotateAngleY = 0.15f; } model.bipedBody.addChild(fakeLeftArm); model.bipedBody.addChild(fakeRightArm); + model.bipedBody.addChild(fakeLeftArmwear); + model.bipedBody.addChild(fakeRightArmwear); } else { model.bipedLeftArm.isHidden = false; model.bipedRightArm.isHidden = false; + model.bipedLeftArmwear.isHidden = false; + model.bipedRightArmwear.isHidden = false; if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) { @@ -428,6 +450,8 @@ public class RenderEvents { model.bipedLeftArm.isHidden = false; model.bipedRightArm.isHidden = false; + model.bipedLeftArmwear.isHidden = false; + model.bipedRightArmwear.isHidden = false; } } From ef6d78fc2d3726488cfb9648cb70019ca435f801 Mon Sep 17 00:00:00 2001 From: SteveKunG Date: Tue, 19 Sep 2017 20:58:43 +0700 Subject: [PATCH 02/13] Minor fixes for 2nd Right Arm rotation Also checking the game setting if players enabled Left and Right sleeve. --- .../tschipp/carryon/client/event/RenderEvents.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/tschipp/carryon/client/event/RenderEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEvents.java index db024e0..280f368 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEvents.java @@ -416,13 +416,20 @@ public class RenderEvents fakeRightArm.rotateAngleY = -0.15f; fakeLeftArm.rotateAngleY = 0.15f; fakeLeftArmwear.rotateAngleY = 0.15f; - fakeRightArmwear.rotateAngleY = 0.15f; + fakeRightArmwear.rotateAngleY = -0.15f; } model.bipedBody.addChild(fakeLeftArm); model.bipedBody.addChild(fakeRightArm); - model.bipedBody.addChild(fakeLeftArmwear); - model.bipedBody.addChild(fakeRightArmwear); + + if (Minecraft.getMinecraft().gameSettings.getModelParts().contains(EnumPlayerModelParts.LEFT_SLEEVE)) + { + model.bipedBody.addChild(fakeLeftArmwear); + } + if (Minecraft.getMinecraft().gameSettings.getModelParts().contains(EnumPlayerModelParts.RIGHT_SLEEVE)) + { + model.bipedBody.addChild(fakeRightArmwear); + } } else From 555af2184fb2db1968409b4ab6bb1b2924d3a044 Mon Sep 17 00:00:00 2001 From: SteveKunG Date: Thu, 21 Sep 2017 13:10:10 +0700 Subject: [PATCH 03/13] Bug fixes --- .../carryon/client/event/RenderEvents.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/main/java/tschipp/carryon/client/event/RenderEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEvents.java index 280f368..8046313 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEvents.java @@ -2,7 +2,6 @@ package tschipp.carryon.client.event; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; @@ -19,8 +18,8 @@ import net.minecraft.client.renderer.entity.RenderPlayer; import net.minecraft.client.resources.DefaultPlayerSkin; import net.minecraft.client.settings.GameSettings; import net.minecraft.client.settings.KeyBinding; -import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EnumPlayerModelParts; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -50,6 +49,11 @@ import tschipp.carryon.network.server.SyncKeybindPacket; public class RenderEvents { + private static boolean initModels; + private ModelRenderer fakeLeftArm; + private ModelRenderer fakeRightArm; + private ModelRenderer fakeLeftArmwear; + private ModelRenderer fakeRightArmwear; /* * Prevents the Player from scrolling @@ -226,6 +230,8 @@ public class RenderEvents ModelPlayer modelPlayer = renderPlayer.getMainModel(); modelPlayer.bipedLeftArm.isHidden = false; modelPlayer.bipedRightArm.isHidden = false; + modelPlayer.bipedLeftArmwear.isHidden = false; + modelPlayer.bipedRightArmwear.isHidden = false; } } } @@ -311,22 +317,22 @@ public class RenderEvents @SubscribeEvent public void onPlayerRenderPre(RenderPlayerEvent.Pre event) { - if (!Loader.isModLoaded("mobends") && CarryOnConfig.settings.renderArms) { - EntityPlayer player = event.getEntityPlayer(); AbstractClientPlayer aplayer = (AbstractClientPlayer) player; ItemStack stack = player.getHeldItemMainhand(); ModelPlayer model = event.getRenderer().getMainModel(); - EntityPlayerSP clientPlayer = Minecraft.getMinecraft().player; - ResourceLocation skinLoc = DefaultPlayerSkin.getDefaultSkin(player.getPersistentID()); - ModelRenderer fakeLeftArm = new ModelRenderer(model, 32, 48); - ModelRenderer fakeRightArm = new ModelRenderer(model, 40, 16); - ModelRenderer fakeLeftArmwear = new ModelRenderer(model, 48, 48); - ModelRenderer fakeRightArmwear = new ModelRenderer(model, 40, 32); + if (!initModels) + { + fakeLeftArm = new ModelRenderer(model, 32, 48); + fakeRightArm = new ModelRenderer(model, 40, 16); + fakeLeftArmwear = new ModelRenderer(model, 48, 48); + fakeRightArmwear = new ModelRenderer(model, 40, 32); + initModels = true; + } player.setArrowCountInEntity(0); // TODO Temporary Fix @@ -422,11 +428,11 @@ public class RenderEvents model.bipedBody.addChild(fakeLeftArm); model.bipedBody.addChild(fakeRightArm); - if (Minecraft.getMinecraft().gameSettings.getModelParts().contains(EnumPlayerModelParts.LEFT_SLEEVE)) + if (player.isWearing(EnumPlayerModelParts.LEFT_SLEEVE)) { model.bipedBody.addChild(fakeLeftArmwear); } - if (Minecraft.getMinecraft().gameSettings.getModelParts().contains(EnumPlayerModelParts.RIGHT_SLEEVE)) + if (player.isWearing(EnumPlayerModelParts.RIGHT_SLEEVE)) { model.bipedBody.addChild(fakeRightArmwear); } From 57252bbae97038555d0692c1b750eca2f7877f25 Mon Sep 17 00:00:00 2001 From: Tschipp Date: Thu, 21 Sep 2017 22:23:06 +0200 Subject: [PATCH 04/13] Added Scripting --- carryon-scripts | 0 src/main/java/tschipp/carryon/CarryOn.java | 23 +- .../client/event/RenderEntityEvents.java | 71 +++- .../carryon/client/event/RenderEvents.java | 65 +++- .../tschipp/carryon/common/CommonProxy.java | 17 + .../common/command/CommandCarryOn.java | 6 + .../common/command/CommandCarryOnReload.java | 78 +++++ .../carryon/common/config/Configs.java | 4 + .../carryon/common/handler/PickupHandler.java | 168 ++++++---- .../common/helper/ScriptParseHelper.java | 312 ++++++++++++++++++ .../carryon/common/helper/StringParser.java | 18 + .../common/scripting/CarryOnOverride.java | 241 ++++++++++++++ .../common/scripting/ScriptChecker.java | 103 ++++++ .../common/scripting/ScriptReader.java | 194 +++++++++++ 14 files changed, 1214 insertions(+), 86 deletions(-) create mode 100644 carryon-scripts create mode 100644 src/main/java/tschipp/carryon/common/command/CommandCarryOnReload.java create mode 100644 src/main/java/tschipp/carryon/common/helper/ScriptParseHelper.java create mode 100644 src/main/java/tschipp/carryon/common/scripting/CarryOnOverride.java create mode 100644 src/main/java/tschipp/carryon/common/scripting/ScriptChecker.java create mode 100644 src/main/java/tschipp/carryon/common/scripting/ScriptReader.java diff --git a/carryon-scripts b/carryon-scripts new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/tschipp/carryon/CarryOn.java b/src/main/java/tschipp/carryon/CarryOn.java index 30c3538..566cc57 100644 --- a/src/main/java/tschipp/carryon/CarryOn.java +++ b/src/main/java/tschipp/carryon/CarryOn.java @@ -1,9 +1,13 @@ package tschipp.carryon; +import java.io.File; + import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import net.minecraft.client.Minecraft; +import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.common.Mod.EventHandler; @@ -16,6 +20,7 @@ import net.minecraftforge.fml.common.event.FMLServerStartingEvent; import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper; import tschipp.carryon.common.CommonProxy; import tschipp.carryon.common.command.CommandCarryOn; +import tschipp.carryon.common.command.CommandCarryOnReload; @EventBusSubscriber @Mod(modid = CarryOn.MODID, name = CarryOn.NAME, version = CarryOn.VERSION, guiFactory = "tschipp.carryon.client.gui.GuiFactoryCarryOn", dependencies = "required-after:forge@[13.20.1.2386,)", updateJSON = CarryOn.UPDATE_JSON) @@ -33,17 +38,18 @@ public class CarryOn { public static final String NAME = "Carry On"; public static final String UPDATE_JSON = "https://gist.githubusercontent.com/Tschipp/dccadee7c90d7a34e6e76a35d9d6fa2e/raw/"; public static final Logger LOGGER = LogManager.getFormatterLogger("CarryOn"); - + public static File CONFIGURATION_FILE; + public static SimpleNetworkWrapper network; @EventHandler - public void preInit(FMLPreInitializationEvent event) { + public void preInit(FMLPreInitializationEvent event){ CarryOn.proxy.preInit(event); } @EventHandler public void init(FMLInitializationEvent event) { - CarryOn.proxy.init(event); + CarryOn.proxy.init(event); } @EventHandler @@ -55,6 +61,17 @@ public class CarryOn { public void serverLoad(FMLServerStartingEvent event) { event.registerServerCommand(new CommandCarryOn()); + event.registerServerCommand(new CommandCarryOnReload()); + + } + + public static File getMcDir() + { + if (FMLCommonHandler.instance().getMinecraftServerInstance() != null && FMLCommonHandler.instance().getMinecraftServerInstance().isDedicatedServer()) + { + return new File("."); + } + return Minecraft.getMinecraft().mcDataDir; } } \ No newline at end of file diff --git a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java index c96a718..bbdc9df 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java @@ -2,7 +2,6 @@ package tschipp.carryon.client.event; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.AbstractClientPlayer; @@ -15,9 +14,12 @@ import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.settings.GameSettings; import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.client.event.GuiOpenEvent; @@ -29,8 +31,10 @@ import net.minecraftforge.fml.common.gameevent.InputEvent; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import tschipp.carryon.common.handler.RegistrationHandler; +import tschipp.carryon.common.helper.ScriptParseHelper; import tschipp.carryon.common.item.ItemEntity; -import tschipp.carryon.common.item.ItemTile; +import tschipp.carryon.common.scripting.CarryOnOverride; +import tschipp.carryon.common.scripting.ScriptChecker; public class RenderEntityEvents { @@ -159,6 +163,37 @@ public class RenderEntityEvents { RenderHelper.enableStandardItemLighting(); Minecraft.getMinecraft().getRenderManager().setRenderShadow(false); + + CarryOnOverride carryOverride = ScriptChecker.inspectEntity(entity); + if (carryOverride != null) + { + double[] translation = ScriptParseHelper.getXYZArray(carryOverride.getRenderTranslation()); + double[] rotation = ScriptParseHelper.getXYZArray(carryOverride.getRenderRotation()); + double[] scale = ScriptParseHelper.getScale(carryOverride.getRenderScale()); + String entityname = carryOverride.getRenderNameEntity(); + if (entityname != null) + { + Entity newEntity = EntityList.createEntityByIDFromName(new ResourceLocation(entityname), world); + if (newEntity != null) + { + NBTTagCompound nbttag = carryOverride.getRenderNBT(); + if (nbttag != null) + newEntity.readFromNBT(nbttag); + entity = newEntity; + entity.setPosition(d0, d1, d2); + entity.rotationYaw = 0.0f; + entity.prevRotationYaw = 0.0f; + entity.setRotationYawHead(0.0f); + } + } + + GlStateManager.translate(translation[0], translation[1], translation[2]); + GlStateManager.rotate((float) rotation[0], 1, 0, 0); + GlStateManager.rotate((float) rotation[1], 0, 1, 0); + GlStateManager.rotate((float) rotation[2], 0, 0, 1); + GlStateManager.scale(scale[0], scale[1], scale[2]); + + } Minecraft.getMinecraft().getRenderManager().renderEntityStatic(entity, 0.0f, false); Minecraft.getMinecraft().getRenderManager().setRenderShadow(true); @@ -237,6 +272,38 @@ public class RenderEntityEvents GlStateManager.translate(0, -0.3, 0); Minecraft.getMinecraft().getRenderManager().setRenderShadow(false); + + CarryOnOverride carryOverride = ScriptChecker.inspectEntity(entity); + if (carryOverride != null) + { + double[] translation = ScriptParseHelper.getXYZArray(carryOverride.getRenderTranslation()); + double[] rot = ScriptParseHelper.getXYZArray(carryOverride.getRenderRotation()); + double[] scale = ScriptParseHelper.getScale(carryOverride.getRenderScale()); + String entityname = carryOverride.getRenderNameEntity(); + if (entityname != null) + { + Entity newEntity = EntityList.createEntityByIDFromName(new ResourceLocation(entityname), world); + if (newEntity != null) + { + NBTTagCompound nbttag = carryOverride.getRenderNBT(); + if (nbttag != null) + newEntity.readFromNBT(nbttag); + entity = newEntity; + entity.setPosition(c0, c1, c2); + entity.rotationYaw = 0.0f; + entity.prevRotationYaw = 0.0f; + entity.setRotationYawHead(0.0f); + } + } + + GlStateManager.translate(translation[0], translation[1], translation[2]); + GlStateManager.rotate((float) rot[0], 1, 0, 0); + GlStateManager.rotate((float) rot[1], 0, 1, 0); + GlStateManager.rotate((float) rot[2], 0, 0, 1); + GlStateManager.scale(scale[0], scale[1], scale[2]); + + } + Minecraft.getMinecraft().getRenderManager().renderEntityStatic(entity, 0.0f, false); Minecraft.getMinecraft().getRenderManager().setRenderShadow(true); diff --git a/src/main/java/tschipp/carryon/client/event/RenderEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEvents.java index 280f368..ec5a394 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEvents.java @@ -2,7 +2,6 @@ package tschipp.carryon.client.event; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; @@ -19,8 +18,8 @@ import net.minecraft.client.renderer.entity.RenderPlayer; import net.minecraft.client.resources.DefaultPlayerSkin; import net.minecraft.client.settings.GameSettings; import net.minecraft.client.settings.KeyBinding; -import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EnumPlayerModelParts; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -44,8 +43,12 @@ import tschipp.carryon.client.keybinds.CarryOnKeybinds; import tschipp.carryon.common.config.CarryOnConfig; import tschipp.carryon.common.handler.ModelOverridesHandler; import tschipp.carryon.common.handler.RegistrationHandler; +import tschipp.carryon.common.helper.ScriptParseHelper; +import tschipp.carryon.common.helper.StringParser; import tschipp.carryon.common.item.ItemEntity; import tschipp.carryon.common.item.ItemTile; +import tschipp.carryon.common.scripting.CarryOnOverride; +import tschipp.carryon.common.scripting.ScriptChecker; import tschipp.carryon.network.server.SyncKeybindPacket; public class RenderEvents @@ -92,7 +95,6 @@ public class RenderEvents CarryOn.network.sendToServer(new SyncKeybindPacket(false)); } - } } @@ -150,13 +152,11 @@ public class RenderEvents } } - - int current = player.inventory.currentItem; - - if(player.getEntityData().hasKey("carrySlot") ? player.getEntityData().getInteger("carrySlot") != current : false) - player.inventory.currentItem = player.getEntityData().getInteger("carrySlot"); - + int current = player.inventory.currentItem; + + if (player.getEntityData().hasKey("carrySlot") ? player.getEntityData().getInteger("carrySlot") != current : false) + player.inventory.currentItem = player.getEntityData().getInteger("carrySlot"); } @@ -196,6 +196,29 @@ public class RenderEvents if (perspective == 0) { IBakedModel model = ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag, world, player) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileStack, world, player); + + CarryOnOverride carryOverride = ScriptChecker.inspectBlock(state, world, pos, tag); + if (carryOverride != null) + { + double[] translation = ScriptParseHelper.getXYZArray(carryOverride.getRenderTranslation()); + double[] rotation = ScriptParseHelper.getXYZArray(carryOverride.getRenderRotation()); + double[] scale = ScriptParseHelper.getScale(carryOverride.getRenderScale()); + Block b = StringParser.getBlock(carryOverride.getRenderNameBlock()); + if (b != null) + { + ItemStack s = new ItemStack(b, 1, carryOverride.getRenderMeta()); + s.setTagCompound(carryOverride.getRenderNBT()); + model = Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(s, world, player); + } + + GlStateManager.translate(translation[0], translation[1], translation[2]); + GlStateManager.rotate((float) rotation[0], 1, 0, 0); + GlStateManager.rotate((float) rotation[1], 0, 1, 0); + GlStateManager.rotate((float) rotation[2], 0, 0, 1); + GlStateManager.scale(scale[0], scale[1], scale[2]); + + } + if (ModelOverridesHandler.hasCustomOverrideModel(state, tag)) { Object override = ModelOverridesHandler.getOverrideObject(state, tag); @@ -285,6 +308,30 @@ public class RenderEvents GlStateManager.translate(0, -0.3, 0); IBakedModel model = ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag, world, player) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileItem, world, player); + + CarryOnOverride carryOverride = ScriptChecker.inspectBlock(state, world, player.getPosition(), tag); + if (carryOverride != null) + { + double[] translation = ScriptParseHelper.getXYZArray(carryOverride.getRenderTranslation()); + double[] rot = ScriptParseHelper.getXYZArray(carryOverride.getRenderRotation()); + double[] scale = ScriptParseHelper.getScale(carryOverride.getRenderScale()); + Block b = StringParser.getBlock(carryOverride.getRenderNameBlock()); + if (b != null) + { + ItemStack s = new ItemStack(b, 1, carryOverride.getRenderMeta()); + s.setTagCompound(carryOverride.getRenderNBT()); + model = Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(s, world, player); + } + + + GlStateManager.translate(translation[0], translation[1], translation[2]); + GlStateManager.rotate((float) rot[0], 1, 0, 0); + GlStateManager.rotate((float) rot[1], 0, 1, 0); + GlStateManager.rotate((float) rot[2], 0, 0, 1); + GlStateManager.scale(scale[0], scale[1], scale[2]); + + } + if (ModelOverridesHandler.hasCustomOverrideModel(state, tag)) { Object override = ModelOverridesHandler.getOverrideObject(state, tag); diff --git a/src/main/java/tschipp/carryon/common/CommonProxy.java b/src/main/java/tschipp/carryon/common/CommonProxy.java index 0683f9a..981ecd9 100644 --- a/src/main/java/tschipp/carryon/common/CommonProxy.java +++ b/src/main/java/tschipp/carryon/common/CommonProxy.java @@ -1,5 +1,11 @@ package tschipp.carryon.common; +import java.io.FileNotFoundException; + +import com.google.gson.JsonIOException; +import com.google.gson.JsonSyntaxException; + +import net.minecraft.nbt.NBTException; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; @@ -8,6 +14,7 @@ import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.relauncher.Side; import tschipp.carryon.CarryOn; import tschipp.carryon.common.handler.RegistrationHandler; +import tschipp.carryon.common.scripting.ScriptReader; import tschipp.carryon.network.client.CarrySlotPacket; import tschipp.carryon.network.client.CarrySlotPacketHandler; import tschipp.carryon.network.server.SyncKeybindPacket; @@ -19,6 +26,8 @@ public class CommonProxy @EventHandler public void preInit(FMLPreInitializationEvent event) { + ScriptReader.preInit(event); + CarryOn.network = NetworkRegistry.INSTANCE.newSimpleChannel("CarryOn"); CarryOn.network.registerMessage(SyncKeybindPacketHandler.class, SyncKeybindPacket.class, 0, Side.SERVER); @@ -31,6 +40,14 @@ public class CommonProxy @EventHandler public void init(FMLInitializationEvent event) { + try + { + ScriptReader.parseScripts(); + } + catch (JsonIOException | JsonSyntaxException | FileNotFoundException | NBTException e) + { + e.printStackTrace(); + } RegistrationHandler.regOverrideList(); } diff --git a/src/main/java/tschipp/carryon/common/command/CommandCarryOn.java b/src/main/java/tschipp/carryon/common/command/CommandCarryOn.java index 716e27f..81d316b 100644 --- a/src/main/java/tschipp/carryon/common/command/CommandCarryOn.java +++ b/src/main/java/tschipp/carryon/common/command/CommandCarryOn.java @@ -21,6 +21,7 @@ import tschipp.carryon.common.handler.ModelOverridesHandler; import tschipp.carryon.common.handler.RegistrationHandler; import tschipp.carryon.common.item.ItemEntity; import tschipp.carryon.common.item.ItemTile; +import tschipp.carryon.common.scripting.ScriptReader; import tschipp.carryon.network.client.CarrySlotPacket; public class CommandCarryOn extends CommandBase implements ICommand @@ -135,6 +136,11 @@ public class CommandCarryOn extends CommandBase implements ICommand } } } + else if (args[0].toLowerCase().equals("reload")) + { + ScriptReader.reloadScripts(); + sender.sendMessage(new TextComponentString("Successfully reloaded Scripts!")); + } else { throw new WrongUsageException(this.getUsage(sender)); diff --git a/src/main/java/tschipp/carryon/common/command/CommandCarryOnReload.java b/src/main/java/tschipp/carryon/common/command/CommandCarryOnReload.java new file mode 100644 index 0000000..745c945 --- /dev/null +++ b/src/main/java/tschipp/carryon/common/command/CommandCarryOnReload.java @@ -0,0 +1,78 @@ +package tschipp.carryon.common.command; + +import java.util.Collections; +import java.util.List; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import tschipp.carryon.common.config.CarryOnConfig; +import tschipp.carryon.common.scripting.ScriptReader; + +public class CommandCarryOnReload extends CommandBase +{ + + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + + if (CarryOnConfig.settings.useScripts) + { + ScriptReader.reloadScripts(); + sender.sendMessage(new TextComponentString("Successfully reloaded scripts!")); + } + else + sender.sendMessage(new TextComponentString("To use custom Carry On scripts, enable them in the config!")); + + } + + @Override + public boolean checkPermission(MinecraftServer server, ICommandSender sender) + { + return sender.canUseCommand(this.getRequiredPermissionLevel(), this.getName()); + } + + @Override + public int getRequiredPermissionLevel() + { + return 2; + } + + @Override + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos pos) + { + + if (args.length > 0) + { + if (args.length == 1) + { + return CommandBase.getListOfStringsMatchingLastWord(args, "reload"); + } + + else + { + return Collections.emptyList(); + } + + } + + return Collections.emptyList(); + + } + + @Override + public String getName() + { + return "reloadscripts"; + } + + @Override + public String getUsage(ICommandSender sender) + { + return "/reloadscripts"; + } +} diff --git a/src/main/java/tschipp/carryon/common/config/Configs.java b/src/main/java/tschipp/carryon/common/config/Configs.java index 1295470..fe94383 100644 --- a/src/main/java/tschipp/carryon/common/config/Configs.java +++ b/src/main/java/tschipp/carryon/common/config/Configs.java @@ -54,6 +54,10 @@ public class Configs { @Comment("Use Whitelist instead of Blacklist for Entities") public boolean useWhitelistEntities=false; + + @Config.RequiresMcRestart() + @Comment("Use custom Pickup Scripts. Having this set to false, will not allow you to run scripts, but will save you some performance") + public boolean useScripts=false; } public static class WhiteList diff --git a/src/main/java/tschipp/carryon/common/handler/PickupHandler.java b/src/main/java/tschipp/carryon/common/handler/PickupHandler.java index 596afb9..1dced76 100644 --- a/src/main/java/tschipp/carryon/common/handler/PickupHandler.java +++ b/src/main/java/tschipp/carryon/common/handler/PickupHandler.java @@ -16,6 +16,7 @@ import net.minecraft.entity.EnumCreatureType; import net.minecraft.entity.passive.EntityTameable; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; @@ -23,6 +24,8 @@ import net.minecraft.world.World; import net.minecraftforge.fml.common.Loader; import tschipp.carryon.common.config.CarryOnConfig; import tschipp.carryon.common.item.ItemTile; +import tschipp.carryon.common.scripting.CarryOnOverride; +import tschipp.carryon.common.scripting.ScriptChecker; public class PickupHandler { @@ -34,42 +37,54 @@ public class PickupHandler player.closeScreen(); - if (CarryOnConfig.settings.useWhitelistBlocks) + NBTTagCompound tag = new NBTTagCompound(); + if (tile != null) + tile.writeToNBT(tag); + + CarryOnOverride override = ScriptChecker.inspectBlock(world.getBlockState(pos), world, pos, tag); + if (override != null) { - if (!ListHandler.isAllowed(world.getBlockState(pos).getBlock())) - { - return false; - } + return (ScriptChecker.fulfillsConditions(override, player)) && handleFTBUtils((EntityPlayerMP) player, world, pos, state); } else { - if (ListHandler.isForbidden(world.getBlockState(pos).getBlock())) + if (CarryOnConfig.settings.useWhitelistBlocks) { - return false; - } - } - - if ((block.getBlockHardness(state, world, pos) != -1 || player.isCreative())) - { - double distance = pos.distanceSqToCenter(player.posX, player.posY + 0.5, player.posZ); - - if (distance < Math.pow(CarryOnConfig.settings.maxDistance, 2)) - { - if (!ItemTile.isLocked(pos, world)) + if (!ListHandler.isAllowed(world.getBlockState(pos).getBlock())) { - if (CustomPickupOverrideHandler.hasSpecialPickupConditions(state)) + return false; + } + } + else + { + if (ListHandler.isForbidden(world.getBlockState(pos).getBlock())) + { + return false; + } + } + + if ((block.getBlockHardness(state, world, pos) != -1 || player.isCreative())) + { + double distance = pos.distanceSqToCenter(player.posX, player.posY + 0.5, player.posZ); + + if (distance < Math.pow(CarryOnConfig.settings.maxDistance, 2)) + { + if (!ItemTile.isLocked(pos, world)) { - IStageData stageData = PlayerDataHandler.getStageData(player); - String condition = CustomPickupOverrideHandler.getPickupCondition(state); - if (stageData.hasUnlockedStage(condition)) + if (CustomPickupOverrideHandler.hasSpecialPickupConditions(state)) + { + IStageData stageData = PlayerDataHandler.getStageData(player); + String condition = CustomPickupOverrideHandler.getPickupCondition(state); + if (stageData.hasUnlockedStage(condition)) + return true && handleFTBUtils((EntityPlayerMP) player, world, pos, state); + + } + else if (CarryOnConfig.settings.pickupAllBlocks ? true : tile != null) + { return true && handleFTBUtils((EntityPlayerMP) player, world, pos, state); + } } - else if (CarryOnConfig.settings.pickupAllBlocks ? true : tile != null) - { - return true && handleFTBUtils((EntityPlayerMP) player, world, pos, state); - } - } } } @@ -83,58 +98,22 @@ public class PickupHandler if (toPickUp instanceof EntityPlayer) return false; - - // check for allow babies to be picked up - if (toPickUp instanceof EntityAgeable && CarryOnConfig.settings.allowBabies) + + CarryOnOverride override = ScriptChecker.inspectEntity(toPickUp); + if (override != null) { - EntityAgeable living = (EntityAgeable) toPickUp; - if (living.getGrowingAge() < 0 || living.isChild()) - { - - double distance = pos.distanceSqToCenter(player.posX, player.posY + 0.5, player.posZ); - if (distance < Math.pow(CarryOnConfig.settings.maxDistance, 2)) - { - if (toPickUp instanceof EntityTameable) - { - EntityTameable tame = (EntityTameable) toPickUp; - if (tame.getOwnerId() != null && tame.getOwnerId() != player.getUUID(player.getGameProfile())) - return false; - } - - if (CustomPickupOverrideHandler.hasSpecialPickupConditions(toPickUp)) - { - IStageData stageData = PlayerDataHandler.getStageData(player); - String condition = CustomPickupOverrideHandler.getPickupCondition(toPickUp); - if (stageData.hasUnlockedStage(condition)) - return true; - } - else - return true; - } - } - } - - if (CarryOnConfig.settings.useWhitelistEntities) - { - if (!ListHandler.isAllowed(toPickUp)) - { - return false; - } + return (ScriptChecker.fulfillsConditions(override, player)); } else { - if (ListHandler.isForbidden(toPickUp)) + + // check for allow babies to be picked up + if (toPickUp instanceof EntityAgeable && CarryOnConfig.settings.allowBabies) { - return false; - } - } - - if ((CarryOnConfig.settings.pickupHostileMobs ? true : !toPickUp.isCreatureType(EnumCreatureType.MONSTER, false) || player.isCreative())) - { - if ((CarryOnConfig.settings.pickupHostileMobs ? true : !toPickUp.isCreatureType(EnumCreatureType.MONSTER, false) || player.isCreative())) - { - if ((toPickUp.height <= CarryOnConfig.settings.maxEntityHeight && toPickUp.width <= CarryOnConfig.settings.maxEntityWidth || player.isCreative())) + EntityAgeable living = (EntityAgeable) toPickUp; + if (living.getGrowingAge() < 0 || living.isChild()) { + double distance = pos.distanceSqToCenter(player.posX, player.posY + 0.5, player.posZ); if (distance < Math.pow(CarryOnConfig.settings.maxDistance, 2)) { @@ -158,6 +137,51 @@ public class PickupHandler } } + if (CarryOnConfig.settings.useWhitelistEntities) + { + if (!ListHandler.isAllowed(toPickUp)) + { + return false; + } + } + else + { + if (ListHandler.isForbidden(toPickUp)) + { + return false; + } + } + + if ((CarryOnConfig.settings.pickupHostileMobs ? true : !toPickUp.isCreatureType(EnumCreatureType.MONSTER, false) || player.isCreative())) + { + if ((CarryOnConfig.settings.pickupHostileMobs ? true : !toPickUp.isCreatureType(EnumCreatureType.MONSTER, false) || player.isCreative())) + { + if ((toPickUp.height <= CarryOnConfig.settings.maxEntityHeight && toPickUp.width <= CarryOnConfig.settings.maxEntityWidth || player.isCreative())) + { + double distance = pos.distanceSqToCenter(player.posX, player.posY + 0.5, player.posZ); + if (distance < Math.pow(CarryOnConfig.settings.maxDistance, 2)) + { + if (toPickUp instanceof EntityTameable) + { + EntityTameable tame = (EntityTameable) toPickUp; + if (tame.getOwnerId() != null && tame.getOwnerId() != player.getUUID(player.getGameProfile())) + return false; + } + + if (CustomPickupOverrideHandler.hasSpecialPickupConditions(toPickUp)) + { + IStageData stageData = PlayerDataHandler.getStageData(player); + String condition = CustomPickupOverrideHandler.getPickupCondition(toPickUp); + if (stageData.hasUnlockedStage(condition)) + return true; + } + else + return true; + } + } + } + + } } return false; diff --git a/src/main/java/tschipp/carryon/common/helper/ScriptParseHelper.java b/src/main/java/tschipp/carryon/common/helper/ScriptParseHelper.java new file mode 100644 index 0000000..4c54cd3 --- /dev/null +++ b/src/main/java/tschipp/carryon/common/helper/ScriptParseHelper.java @@ -0,0 +1,312 @@ +package tschipp.carryon.common.helper; + +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.scoreboard.Score; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraft.stats.Achievement; +import net.minecraft.stats.AchievementList; +import net.minecraft.util.math.BlockPos; + +public class ScriptParseHelper +{ + + public static boolean matches(double number, String cond) + { + if (cond == null) + return true; + + try + { + if (cond.contains("<=")) + { + return number >= Double.parseDouble(cond.replace("<=", "")); + } + if (cond.contains(">=")) + { + return number <= Double.parseDouble(cond.replace(">=", "")); + } + if (cond.contains("<")) + { + return number > Double.parseDouble(cond.replace("<", "")); + } + if (cond.contains(">")) + { + return number < Double.parseDouble(cond.replace(">", "")); + } + if (cond.contains("=")) + { + return number == Double.parseDouble(cond.replace("=", "")); + } + else + return number == Double.parseDouble(cond); + + } + catch (Exception e) + { + new InvalidConfigException(e.getMessage()).printException(); + } + + return false; + } + + public static boolean matches(Block block, String cond) + { + if (cond == null) + return true; + + Block toCheck = StringParser.getBlock(cond); + if (toCheck != null) + return block == toCheck; + + return false; + } + + public static boolean matches(NBTTagCompound toCheck, NBTTagCompound toMatch) + { + if (toCheck == null || toMatch == null) + return true; + + boolean matching = true; + for (String key : toMatch.getKeySet()) + { + NBTBase tag = toMatch.getTag(key); + key = key.replace("\"", ""); + NBTBase tagToCheck = toCheck.getTag(key); + if (!tag.equals(tagToCheck)) + matching = false; + } + + return matching; + } + + public static double[] getXYZArray(String s) + { + double[] d = new double[3]; + d[0] = getValueFromString(s, "x"); + d[1] = getValueFromString(s, "y"); + d[2] = getValueFromString(s, "z"); + + return d; + } + + + public static double[] getScale(String s) + { + double[] d = new double[3]; + d[0] = getScaleValueFromString(s, "x"); + d[1] = getScaleValueFromString(s, "y"); + d[2] = getScaleValueFromString(s, "z"); + + return d; + } + + public static double getScaleValueFromString(String toGetFrom, String key) + { + if(toGetFrom == null) + return 1; + + String[] s = toGetFrom.split(","); + for (String string : s) + { + if (string.contains(key) && string.contains("=")) + { + double numb = 1; + string = string.replace(key + "=", ""); + + try + { + numb = Double.parseDouble(string); + } + catch (Exception e) + { + } + + return numb; + } + } + + return 1; + } + + public static Achievement getAchievementFromString(String s) + { + if (s == null) + return null; + + for (Achievement a : AchievementList.ACHIEVEMENTS) + { + if (a.statId.equals(s)) + return a; + } + + return null; + } + + public static boolean matchesScore(EntityPlayer player, String cond) + { + if (cond == null) + return true; + + Scoreboard score = player.getWorldScoreboard(); + String numb; + String scorename; + int iE = cond.indexOf("="); + int iG = cond.indexOf(">"); + int iL = cond.indexOf("<"); + + if (iG == -1 ? true : iE < iG && iL == -1 ? true : iE < iL && iE != -1) + numb = cond.substring(iE); + else if (iE == -1 ? true : iG < iE && iL == -1 ? true : iG < iL && iG != -1) + numb = cond.substring(iG); + else + numb = cond.substring(iL); + + scorename = cond.replace(numb, ""); + Map o = score.getObjectivesForEntity(player.getGameProfile().getName()); + if (o != null) + { + Score sc = o.get(score.getObjective(scorename)); + if (sc != null) + { + int points = sc.getScorePoints(); + + return matches(points, numb); + } + } + + return false; + } + + public static boolean matches(BlockPos pos, String cond) + { + if (cond == null) + return true; + + BlockPos blockpos = new BlockPos(getValueFromString(cond, "x"), getValueFromString(cond, "y"), getValueFromString(cond, "z")); + BlockPos expand = new BlockPos(getValueFromString(cond, "dx"), getValueFromString(cond, "dy"), getValueFromString(cond, "dz")); + BlockPos expanded = blockpos.add(expand); + + boolean x = (pos.getX() >= blockpos.getX() && pos.getX() <= expanded.getX()) || blockpos.getX() == 0; + boolean y = (pos.getY() >= blockpos.getY() && pos.getY() <= expanded.getY()) || blockpos.getY() == 0; + boolean z = (pos.getZ() >= blockpos.getZ() && pos.getZ() <= expanded.getZ()) || blockpos.getZ() == 0; + + return x && y && z; + } + + public static double getValueFromString(String toGetFrom, String key) + { + if(toGetFrom == null) + return 0; + + String[] s = toGetFrom.split(","); + for (String string : s) + { + if (string.contains(key) && string.contains("=")) + { + double numb = 0; + string = string.replace(key + "=", ""); + + try + { + numb = Double.parseDouble(string); + } + catch (Exception e) + { + } + + return numb; + } + } + + return 0; + } + + public static boolean matches(Material material, String cond) + { + if (cond == null) + return true; + + switch (cond) + { + case "air": + return material == Material.AIR; + case "anvil": + return material == Material.ANVIL; + case "barrier": + return material == Material.BARRIER; + case "cactus": + return material == Material.CACTUS; + case "cake": + return material == Material.CAKE; + case "carpet": + return material == Material.CARPET; + case "circuits": + return material == Material.CIRCUITS; + case "clay": + return material == Material.CLAY; + case "cloth": + return material == Material.CLOTH; + case "coral": + return material == Material.CORAL; + case "dragon_egg": + return material == Material.DRAGON_EGG; + case "fire": + return material == Material.FIRE; + case "glass": + return material == Material.GLASS; + case "gourd": + return material == Material.GOURD; + case "grass": + return material == Material.GRASS; + case "ground": + return material == Material.GROUND; + case "ice": + return material == Material.ICE; + case "iron": + return material == Material.IRON; + case "lava": + return material == Material.LAVA; + case "leaves": + return material == Material.LEAVES; + case "packed_ice": + return material == Material.PACKED_ICE; + case "piston": + return material == Material.PISTON; + case "plants": + return material == Material.PLANTS; + case "portal": + return material == Material.PORTAL; + case "redstone_light": + return material == Material.REDSTONE_LIGHT; + case "rock": + return material == Material.ROCK; + case "sand": + return material == Material.SAND; + case "snow": + return material == Material.SNOW; + case "sponge": + return material == Material.SPONGE; + case "structure_void": + return material == Material.STRUCTURE_VOID; + case "tnt": + return material == Material.TNT; + case "vine": + return material == Material.VINE; + case "water": + return material == Material.WATER; + case "web": + return material == Material.WEB; + case "wood": + return material == Material.WOOD; + } + + return false; + } +} diff --git a/src/main/java/tschipp/carryon/common/helper/StringParser.java b/src/main/java/tschipp/carryon/common/helper/StringParser.java index 1cd3395..edd9184 100644 --- a/src/main/java/tschipp/carryon/common/helper/StringParser.java +++ b/src/main/java/tschipp/carryon/common/helper/StringParser.java @@ -19,6 +19,9 @@ public class StringParser @Nullable public static Block getBlock(String string) { + if(string == null) + return null; + NBTTagCompound tag = getTagCompound(string); if (tag != null) string = string.replace(tag.toString(), ""); @@ -35,6 +38,9 @@ public class StringParser public static int getMeta(String string) { + if(string == null) + return 0; + NBTTagCompound tag = getTagCompound(string); if (tag != null) string = string.replace(tag.toString(), ""); @@ -59,6 +65,9 @@ public class StringParser @Nullable public static IBlockState getBlockState(String string) { + if(string == null) + return null; + NBTTagCompound tag = getTagCompound(string); if (tag != null) string = string.replace(tag.toString(), ""); @@ -84,6 +93,9 @@ public class StringParser @Nullable public static Item getItem(String string) { + if(string == null) + return null; + NBTTagCompound tag = getTagCompound(string); if (tag != null) string = string.replace(tag.toString(), ""); @@ -96,6 +108,9 @@ public class StringParser public static ItemStack getItemStack(String string) { + if(string == null) + return null; + Item item = getItem(string); if(item == null) @@ -113,6 +128,9 @@ public class StringParser public static NBTTagCompound getTagCompound(String string) { NBTTagCompound tag = null; + if(string == null) + return null; + if (string.contains("{")) { if (!string.contains("}")) diff --git a/src/main/java/tschipp/carryon/common/scripting/CarryOnOverride.java b/src/main/java/tschipp/carryon/common/scripting/CarryOnOverride.java new file mode 100644 index 0000000..a807f4e --- /dev/null +++ b/src/main/java/tschipp/carryon/common/scripting/CarryOnOverride.java @@ -0,0 +1,241 @@ +package tschipp.carryon.common.scripting; + +import net.minecraft.nbt.NBTTagCompound; + +public class CarryOnOverride +{ + //BLOCKS + private NBTTagCompound typeBlockTag; + private String typeMeta; + private String typeNameBlock; + private String typeMaterial; + private String typeHardness; + private String typeResistance; + + //ENTITIES + private NBTTagCompound typeEntityTag; + private String typeNameEntity; + private String typeHeight; + private String typeWidth; + private String typeHealth; + + //CONDITIONS + private String conditionGamestage; + private String conditionAchievement; + private String conditionXp; + private String conditionGamemode; + private String conditionScoreboard; + private String conditionPosition; + + //RENDER + private String renderNameBlock; + private String renderNameEntity; + private int renderMeta; + private NBTTagCompound renderNBT; + private String renderTranslation; + private String renderRotation; + private String renderScale; + + + + + + + + + public NBTTagCompound getTypeBlockTag() + { + return typeBlockTag; + } + public String getTypeMeta() + { + return typeMeta; + } + public String getTypeNameBlock() + { + return typeNameBlock; + } + public String getTypeMaterial() + { + return typeMaterial; + } + public String getTypeHardness() + { + return typeHardness; + } + public String getTypeResistance() + { + return typeResistance; + } + public NBTTagCompound getTypeEntityTag() + { + return typeEntityTag; + } + public String getTypeNameEntity() + { + return typeNameEntity; + } + public String getTypeHeight() + { + return typeHeight; + } + public String getTypeWidth() + { + return typeWidth; + } + public String getTypeHealth() + { + return typeHealth; + } + public String getConditionGamestage() + { + return conditionGamestage; + } + public String getConditionAchievement() + { + return conditionAchievement; + } + public String getConditionXp() + { + return conditionXp; + } + public String getConditionGamemode() + { + return conditionGamemode; + } + public String getConditionScoreboard() + { + return conditionScoreboard; + } + public String getConditionPosition() + { + return conditionPosition; + } + public String getRenderNameBlock() + { + return renderNameBlock; + } + public String getRenderNameEntity() + { + return renderNameEntity; + } + public int getRenderMeta() + { + return renderMeta; + } + public NBTTagCompound getRenderNBT() + { + return renderNBT; + } + public String getRenderTranslation() + { + return renderTranslation; + } + public String getRenderRotation() + { + return renderRotation; + } + public String getRenderScale() + { + return renderScale; + } + public void setTypeBlockTag(NBTTagCompound typeBlockTag) + { + this.typeBlockTag = typeBlockTag; + } + public void setTypeMeta(String typeMeta) + { + this.typeMeta = typeMeta; + } + public void setTypeNameBlock(String typeNameBlock) + { + this.typeNameBlock = typeNameBlock; + } + public void setTypeMaterial(String typeMaterial) + { + this.typeMaterial = typeMaterial; + } + public void setTypeHardness(String typeHardness) + { + this.typeHardness = typeHardness; + } + public void setTypeResistance(String typeResistance) + { + this.typeResistance = typeResistance; + } + public void setTypeEntityTag(NBTTagCompound typeEntityTag) + { + this.typeEntityTag = typeEntityTag; + } + public void setTypeNameEntity(String typeNameEntity) + { + this.typeNameEntity = typeNameEntity; + } + public void setTypeHeight(String typeHeight) + { + this.typeHeight = typeHeight; + } + public void setTypeWidth(String typeWidth) + { + this.typeWidth = typeWidth; + } + public void setTypeHealth(String typeHealth) + { + this.typeHealth = typeHealth; + } + public void setConditionGamestage(String conditionGamestage) + { + this.conditionGamestage = conditionGamestage; + } + public void setConditionAchievement(String conditionAchievement) + { + this.conditionAchievement = conditionAchievement; + } + public void setConditionXp(String conditionXp) + { + this.conditionXp = conditionXp; + } + public void setConditionGamemode(String conditionGamemode) + { + this.conditionGamemode = conditionGamemode; + } + public void setConditionScoreboard(String conditionScoreboard) + { + this.conditionScoreboard = conditionScoreboard; + } + public void setConditionPosition(String conditionPosition) + { + this.conditionPosition = conditionPosition; + } + public void setRenderNameBlock(String renderNameBlock) + { + this.renderNameBlock = renderNameBlock; + } + public void setRenderNameEntity(String renderNameEntity) + { + this.renderNameEntity = renderNameEntity; + } + public void setRenderMeta(int renderMeta) + { + this.renderMeta = renderMeta; + } + public void setRenderNBT(NBTTagCompound renderNBT) + { + this.renderNBT = renderNBT; + } + public void setRenderTranslation(String renderTranslation) + { + this.renderTranslation = renderTranslation; + } + public void setRenderRotation(String renderRotation) + { + this.renderRotation = renderRotation; + } + public void setRenderScale(String renderScale) + { + this.renderScale = renderScale; + } + + + +} diff --git a/src/main/java/tschipp/carryon/common/scripting/ScriptChecker.java b/src/main/java/tschipp/carryon/common/scripting/ScriptChecker.java new file mode 100644 index 0000000..102889c --- /dev/null +++ b/src/main/java/tschipp/carryon/common/scripting/ScriptChecker.java @@ -0,0 +1,103 @@ +package tschipp.carryon.common.scripting; + +import javax.annotation.Nullable; + +import net.darkhax.gamestages.capabilities.PlayerDataHandler; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.Loader; +import tschipp.carryon.common.config.CarryOnConfig; +import tschipp.carryon.common.helper.ScriptParseHelper; + +public class ScriptChecker +{ + @Nullable + public static CarryOnOverride inspectBlock(IBlockState state, World world, BlockPos pos, @Nullable NBTTagCompound tag) + { + if(!CarryOnConfig.settings.useScripts) + return null; + + Block block = state.getBlock(); + int meta = block.getMetaFromState(state); + Material material = state.getMaterial(); + float hardness = state.getBlockHardness(world, pos); + float resistance = block.getExplosionResistance(null); + NBTTagCompound nbt = tag; + + for(CarryOnOverride override : ScriptReader.OVERRIDES) + { + if(matchesAll(override, block, meta, material, hardness, resistance, nbt)) + return override; + } + + return null; + } + + + @Nullable + public static CarryOnOverride inspectEntity(Entity entity) + { + if(!CarryOnConfig.settings.useScripts) + return null; + + String name = EntityList.getKey(entity).toString(); + float height = entity.height; + float width = entity.width; + float health = entity instanceof EntityLivingBase ? ((EntityLivingBase) entity).getHealth() : 0.0f; + NBTTagCompound tag = new NBTTagCompound(); + entity.writeToNBT(tag); + + for(CarryOnOverride override : ScriptReader.OVERRIDES) + { + if(matchesAll(override, name, height, width, health, tag)) + return override; + } + + return null; + } + + + public static boolean matchesAll(CarryOnOverride override, String name, float height, float width, float health, NBTTagCompound tag) + { + boolean matchname = name == null ? true : name.equals(override.getTypeNameEntity()); + boolean matchheight = ScriptParseHelper.matches(height, override.getTypeHeight()); + boolean matchwidth = ScriptParseHelper.matches(width, override.getTypeWidth()); + boolean matchhealth = ScriptParseHelper.matches(health, override.getTypeHealth()); + boolean matchnbt = ScriptParseHelper.matches(tag, override.getTypeEntityTag()); + + return (matchname && matchheight && matchwidth && matchhealth && matchnbt); + } + + public static boolean matchesAll(CarryOnOverride override, Block block, int meta, Material material, float hardness, float resistance, NBTTagCompound nbt) + { + boolean matchnbt = ScriptParseHelper.matches(nbt, override.getTypeBlockTag()); + boolean matchblock = ScriptParseHelper.matches(block, override.getTypeNameBlock()); + boolean matchmeta = ScriptParseHelper.matches(meta, override.getTypeMeta()); + boolean matchmaterial = ScriptParseHelper.matches(material, override.getTypeMaterial()); + boolean matchhardness = ScriptParseHelper.matches(hardness, override.getTypeHardness()); + boolean matchresistance = ScriptParseHelper.matches(resistance, override.getTypeResistance()); + + return (matchnbt && matchblock && matchmeta && matchmaterial && matchhardness && matchresistance); + } + + public static boolean fulfillsConditions(CarryOnOverride override, EntityPlayer player) + { + boolean achievement = ScriptParseHelper.getAchievementFromString(override.getConditionAchievement()) == null ? true : player.hasAchievement(ScriptParseHelper.getAchievementFromString(override.getConditionAchievement())); + boolean gamemode = ScriptParseHelper.matches(((EntityPlayerMP)player).interactionManager.getGameType().getID(), override.getConditionGamemode()); + boolean gamestage = Loader.isModLoaded("gamestages") ? (override.getConditionGamestage() != null ? PlayerDataHandler.getStageData(player).hasUnlockedStage(override.getConditionGamestage()) : true) : true; + boolean position = ScriptParseHelper.matches(player.getPosition(), override.getConditionPosition()); + boolean xp = ScriptParseHelper.matches(player.experienceLevel, override.getConditionXp()); + boolean scoreboard = ScriptParseHelper.matchesScore(player, override.getConditionScoreboard()); + + return (achievement && gamemode && gamestage && position && xp && scoreboard); + } +} diff --git a/src/main/java/tschipp/carryon/common/scripting/ScriptReader.java b/src/main/java/tschipp/carryon/common/scripting/ScriptReader.java new file mode 100644 index 0000000..3202767 --- /dev/null +++ b/src/main/java/tschipp/carryon/common/scripting/ScriptReader.java @@ -0,0 +1,194 @@ +package tschipp.carryon.common.scripting; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; + +import com.google.gson.JsonElement; +import com.google.gson.JsonIOException; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.JsonSyntaxException; + +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.NBTException; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import tschipp.carryon.CarryOn; +import tschipp.carryon.common.config.CarryOnConfig; + +public class ScriptReader +{ + private static ArrayList scripts = new ArrayList(); + + public static HashSet OVERRIDES = new HashSet(); + + public static void preInit(FMLPreInitializationEvent event) + { + CarryOn.CONFIGURATION_FILE = new File(event.getModConfigurationDirectory(), "carryon-scripts/"); + if (!CarryOn.CONFIGURATION_FILE.exists()) + CarryOn.CONFIGURATION_FILE.mkdir(); + + for (File file : CarryOn.CONFIGURATION_FILE.listFiles()) + { + if (file.getName().endsWith(".json")) + scripts.add(file); + } + + } + + public static void parseScripts() throws JsonIOException, JsonSyntaxException, FileNotFoundException, NBTException + { + if(!CarryOnConfig.settings.useScripts) + return; + + for (File file : scripts) + { + boolean errored = false; + int hash = file.getAbsolutePath().hashCode(); + + JsonParser parser = new JsonParser(); + JsonObject json = (JsonObject) parser.parse(new FileReader(file.getAbsolutePath())); + + JsonObject object = (JsonObject) json.get("object"); + JsonObject conditions = (JsonObject) json.get("conditions"); + JsonObject render = (JsonObject) json.get("render"); + + if ((object != null && conditions != null) || (object != null && render != null)) + { + JsonObject block = (JsonObject) object.get("block"); + JsonObject entity = (JsonObject) object.get("entity"); + + if ((block == null && entity == null) || (block != null && entity != null)) + errored = true; + + if (!errored) + { + CarryOnOverride override = new CarryOnOverride(); + + if (block != null) + { + JsonElement name = block.get("name"); + JsonElement meta = block.get("meta"); + JsonElement material = block.get("material"); + JsonElement hardness = block.get("hardness"); + JsonElement resistance = block.get("resistance"); + JsonObject nbt = (JsonObject) block.get("nbt"); + + if (name != null) + override.setTypeNameBlock(name.getAsString()); + if (meta != null) + override.setTypeMeta(meta.getAsString()); + if (material != null) + override.setTypeMaterial(material.getAsString()); + if (hardness != null) + override.setTypeHardness(hardness.getAsString()); + if (resistance != null) + override.setTypeResistance(resistance.getAsString()); + if (nbt != null) + override.setTypeBlockTag(JsonToNBT.getTagFromJson(nbt.toString())); + } + else + { + JsonElement name = entity.get("name"); + JsonElement health = entity.get("health"); + JsonElement height = entity.get("height"); + JsonElement width = entity.get("width"); + JsonObject nbt = (JsonObject) entity.get("nbt"); + + if (name != null) + override.setTypeNameEntity(name.getAsString()); + if (health != null) + override.setTypeHealth(health.getAsString()); + if (height != null) + override.setTypeHeight(height.getAsString()); + if (width != null) + override.setTypeWidth(width.getAsString()); + if (nbt != null) + override.setTypeEntityTag(JsonToNBT.getTagFromJson(nbt.toString())); + } + + if (conditions != null) + { + JsonElement gamestage = conditions.get("gamestage"); + JsonElement achievement = conditions.get("achievement"); + JsonElement xp = conditions.get("xp"); + JsonElement gamemode = conditions.get("gamemode"); + JsonElement scoreboard = conditions.get("scoreboard"); + JsonElement position = conditions.get("position"); + + if(gamestage != null) + override.setConditionGamestage(gamestage.getAsString()); + if(achievement != null) + override.setConditionAchievement(achievement.getAsString()); + if(xp != null) + override.setConditionXp(xp.getAsString()); + if(gamemode != null) + override.setConditionGamemode(gamemode.getAsString()); + if(scoreboard != null) + override.setConditionScoreboard(scoreboard.getAsString()); + if(position != null) + override.setConditionPosition(position.getAsString()); + } + + if (render != null) + { + JsonElement name_block = render.get("name_block"); + JsonElement name_entity = render.get("name_entity"); + JsonElement meta = render.get("meta"); + JsonObject nbt = (JsonObject) render.get("nbt"); + JsonElement translation = render.get("translation"); + JsonElement rotation = render.get("rotation"); + JsonElement scale = render.get("scale"); + + if(name_block != null) + override.setRenderNameBlock(name_block.getAsString()); + if(name_entity != null) + override.setRenderNameEntity(name_entity.getAsString()); + if(meta != null) + override.setRenderMeta(meta.getAsInt()); + if(translation != null) + override.setRenderTranslation(translation.getAsString()); + if(rotation != null) + override.setRenderRotation(rotation.getAsString()); + if(scale != null) + override.setRenderScale(scale.getAsString()); + if (nbt != null) + override.setRenderNBT(JsonToNBT.getTagFromJson(nbt.toString())); + } + + OVERRIDES.add(override); + + } + } + } + + System.out.println("Successfully parsed scripts!"); + } + + + public static void reloadScripts() + { + scripts.clear(); + OVERRIDES.clear(); + + for (File file : CarryOn.CONFIGURATION_FILE.listFiles()) + { + if (file.getName().endsWith(".json")) + scripts.add(file); + } + + try + { + parseScripts(); + } + catch (JsonIOException | JsonSyntaxException | FileNotFoundException | NBTException e) + { + e.printStackTrace(); + } + } + +} From 9fdaf26e99cbc3f53341ea68ab4747ec9ec03de7 Mon Sep 17 00:00:00 2001 From: SteveKunG Date: Fri, 22 Sep 2017 23:02:32 +0700 Subject: [PATCH 05/13] Fix entity render in hand --- .../client/event/RenderEntityEvents.java | 481 +++++++++--------- 1 file changed, 234 insertions(+), 247 deletions(-) diff --git a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java index bbdc9df..71d3fa5 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java @@ -4,23 +4,19 @@ import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.AbstractClientPlayer; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.client.model.ModelPlayer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.settings.GameSettings; import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityList; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumHand; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; import net.minecraftforge.client.event.GuiOpenEvent; import net.minecraftforge.client.event.MouseEvent; @@ -31,288 +27,279 @@ import net.minecraftforge.fml.common.gameevent.InputEvent; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import tschipp.carryon.common.handler.RegistrationHandler; -import tschipp.carryon.common.helper.ScriptParseHelper; import tschipp.carryon.common.item.ItemEntity; -import tschipp.carryon.common.scripting.CarryOnOverride; -import tschipp.carryon.common.scripting.ScriptChecker; public class RenderEntityEvents { + /* + * Prevents the Player from scrolling + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onScroll(MouseEvent event) throws IllegalArgumentException, IllegalAccessException + { + if (event.getDwheel() > 0 || event.getDwheel() < 0 || Minecraft.getMinecraft().gameSettings.keyBindPickBlock.isPressed()) + { + ItemStack stack = Minecraft.getMinecraft().player.getHeldItemMainhand(); - /* - * Prevents the Player from scrolling - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void onScroll(MouseEvent event) throws IllegalArgumentException, IllegalAccessException - { - if (event.getDwheel() > 0 || event.getDwheel() < 0) - { - ItemStack stack = Minecraft.getMinecraft().player.getHeldItemMainhand(); - if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity) - { - if (ItemEntity.hasEntityData(stack)) - event.setCanceled(true); - } - } + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity) + { + if (ItemEntity.hasEntityData(stack)) + { + event.setCanceled(true); + } + } + } + } - } + /* + * Prevents the Player from opening Guis + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onGuiOpen(GuiOpenEvent event) + { + if (event.getGui() != null) + { + boolean inventory = event.getGui() instanceof GuiContainer; + EntityPlayer player = Minecraft.getMinecraft().player; - /* - * Prevents the Player from opening Guis - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void onGuiOpen(GuiOpenEvent event) - { - if (event.getGui() != null) - { - boolean inventory = event.getGui() instanceof GuiContainer; - EntityPlayer player = Minecraft.getMinecraft().player; - if (player != null) - { - ItemStack stack = player.getHeldItem(EnumHand.MAIN_HAND); - if (inventory && !stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) - { - event.setCanceled(true); - Minecraft.getMinecraft().currentScreen = null; - } - } - } - } + if (player != null) + { + ItemStack stack = player.getHeldItem(EnumHand.MAIN_HAND); - /* - * Prevents the Player from switching Slots - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void inputEvent(InputEvent event) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InvocationTargetException - { - GameSettings settings = Minecraft.getMinecraft().gameSettings; - Field field = KeyBinding.class.getDeclaredFields()[7]; - field.setAccessible(true); - ItemStack stack = Minecraft.getMinecraft().player.getHeldItemMainhand(); - EntityPlayer player = Minecraft.getMinecraft().player; - if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) - { - if (settings.keyBindDrop.isPressed()) - { - field.set(settings.keyBindDrop, false); - } - if (settings.keyBindSwapHands.isPressed()) - { - field.set(settings.keyBindSwapHands, false); - } - for (KeyBinding keyBind : settings.keyBindsHotbar) - { - if (keyBind.isPressed()) - { - field.set(keyBind, false); - } - } + if (inventory && !stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) + { + event.setCanceled(true); + Minecraft.getMinecraft().currentScreen = null; + } + } + } + } - } + /* + * Prevents the Player from switching Slots + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void inputEvent(InputEvent event) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InvocationTargetException + { + GameSettings settings = Minecraft.getMinecraft().gameSettings; + Field field = KeyBinding.class.getDeclaredFields()[7]; + field.setAccessible(true); + ItemStack stack = Minecraft.getMinecraft().player.getHeldItemMainhand(); + EntityPlayer player = Minecraft.getMinecraft().player; - int current = player.inventory.currentItem; + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) + { + if (settings.keyBindDrop.isPressed()) + { + field.set(settings.keyBindDrop, false); + } + if (settings.keyBindSwapHands.isPressed()) + { + field.set(settings.keyBindSwapHands, false); + } + for (KeyBinding keyBind : settings.keyBindsHotbar) + { + if (keyBind.isPressed()) + { + field.set(keyBind, false); + } + } + } - if (player.getEntityData().hasKey("carrySlot") ? player.getEntityData().getInteger("carrySlot") != current : false) - player.inventory.currentItem = player.getEntityData().getInteger("carrySlot"); - } + int current = player.inventory.currentItem; - /* - * Renders the Entity in First Person - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void renderHand(RenderHandEvent event) - { + if (player.getEntityData().hasKey("carrySlot") ? player.getEntityData().getInteger("carrySlot") != current : false) + { + player.inventory.currentItem = player.getEntityData().getInteger("carrySlot"); + } + } - World world = Minecraft.getMinecraft().world; - EntityPlayer player = Minecraft.getMinecraft().player; - AbstractClientPlayer aplayer = (AbstractClientPlayer) player; - ItemStack stack = player.getHeldItemMainhand(); - int perspective = Minecraft.getMinecraft().gameSettings.thirdPersonView; - float partialticks = event.getPartialTicks(); + /* + * Renders the Entity in First Person + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void renderHand(RenderHandEvent event) + { + World world = Minecraft.getMinecraft().world; + EntityPlayer player = Minecraft.getMinecraft().player; + ItemStack stack = player.getHeldItemMainhand(); + int perspective = Minecraft.getMinecraft().gameSettings.thirdPersonView; + float partialticks = event.getPartialTicks(); - if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) - { - BlockPos pos = player.getPosition(); - Entity entity = ItemEntity.getEntity(stack, world); - if (entity != null) - { - double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) partialticks; - double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) partialticks; - double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) partialticks; + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) + { + Entity entity = ItemEntity.getEntity(stack, world); - entity.setPosition(d0, d1, d2); - entity.rotationYaw = 0.0f; - entity.prevRotationYaw = 0.0f; - entity.setRotationYawHead(0.0f); + if (entity != null) + { + double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialticks; + double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialticks; + double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialticks; - float height = entity.height; - float width = entity.width; - float multiplier = height * width; + entity.setPosition(d0, d1, d2); + entity.rotationYaw = 0.0f; + entity.prevRotationYaw = 0.0f; + entity.setRotationYawHead(0.0f); - GlStateManager.pushMatrix(); - GlStateManager.scale(.8, .8, .8); - GlStateManager.rotate(180, 0, 1, 0); - GlStateManager.translate(0.0, -height - .1, width + 0.1); - GlStateManager.enableAlpha(); + float height = entity.height; + float width = entity.width; + GlStateManager.pushMatrix(); + GlStateManager.scale(.8, .8, .8); + GlStateManager.rotate(180, 0, 1, 0); + GlStateManager.translate(0.0, -height - .1, width + 0.1); + GlStateManager.enableAlpha(); - if (perspective == 0) - { - RenderHelper.enableStandardItemLighting(); - Minecraft.getMinecraft().getRenderManager().setRenderShadow(false); + if (perspective == 0) + { + RenderHelper.enableStandardItemLighting(); + Minecraft.getMinecraft().getRenderManager().setRenderShadow(false); + this.renderEntityStatic(entity); + Minecraft.getMinecraft().getRenderManager().setRenderShadow(true); + } - CarryOnOverride carryOverride = ScriptChecker.inspectEntity(entity); - if (carryOverride != null) - { - double[] translation = ScriptParseHelper.getXYZArray(carryOverride.getRenderTranslation()); - double[] rotation = ScriptParseHelper.getXYZArray(carryOverride.getRenderRotation()); - double[] scale = ScriptParseHelper.getScale(carryOverride.getRenderScale()); - String entityname = carryOverride.getRenderNameEntity(); - if (entityname != null) - { - Entity newEntity = EntityList.createEntityByIDFromName(new ResourceLocation(entityname), world); - if (newEntity != null) - { - NBTTagCompound nbttag = carryOverride.getRenderNBT(); - if (nbttag != null) - newEntity.readFromNBT(nbttag); - entity = newEntity; - entity.setPosition(d0, d1, d2); - entity.rotationYaw = 0.0f; - entity.prevRotationYaw = 0.0f; - entity.setRotationYawHead(0.0f); - } - } + GlStateManager.disableAlpha(); + GlStateManager.scale(1, 1, 1); + GlStateManager.popMatrix(); - GlStateManager.translate(translation[0], translation[1], translation[2]); - GlStateManager.rotate((float) rotation[0], 1, 0, 0); - GlStateManager.rotate((float) rotation[1], 0, 1, 0); - GlStateManager.rotate((float) rotation[2], 0, 0, 1); - GlStateManager.scale(scale[0], scale[1], scale[2]); + RenderHelper.disableStandardItemLighting(); + GlStateManager.disableRescaleNormal(); + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GlStateManager.disableTexture2D(); + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); - } - Minecraft.getMinecraft().getRenderManager().renderEntityStatic(entity, 0.0f, false); - Minecraft.getMinecraft().getRenderManager().setRenderShadow(true); + if (perspective == 0) + { + event.setCanceled(true); + } + } + } + } - } + @SideOnly(Side.CLIENT) + private void renderEntityStatic(Entity entity) + { + if (entity.ticksExisted == 0) + { + entity.lastTickPosX = entity.posX; + entity.lastTickPosY = entity.posY; + entity.lastTickPosZ = entity.posZ; + } - GlStateManager.disableAlpha(); + float f = entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw); + int i = this.getBrightnessForRender(entity, Minecraft.getMinecraft().player); - GlStateManager.scale(1, 1, 1); - GlStateManager.popMatrix(); + if (entity.isBurning()) + { + i = 15728880; + } - RenderHelper.disableStandardItemLighting(); - GlStateManager.disableRescaleNormal(); - GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); - GlStateManager.disableTexture2D(); - GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, j, k); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - if (perspective == 0) - event.setCanceled(true); + this.setLightmapDisabled(false); + Minecraft.getMinecraft().getRenderManager().doRenderEntity(entity, 0.0D, 0.0D, 0.0D, f, 0.0F, true); + this.setLightmapDisabled(true); + } - } - } + @SideOnly(Side.CLIENT) + private int getBrightnessForRender(Entity entity, EntityPlayer player) + { + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(MathHelper.floor(player.posX), 0, MathHelper.floor(player.posZ)); - } + if (entity.world.isBlockLoaded(blockpos$mutableblockpos)) + { + blockpos$mutableblockpos.setY(MathHelper.floor(player.posY + entity.getEyeHeight())); + return entity.world.getCombinedLight(blockpos$mutableblockpos, 0); + } + else + { + return 0; + } + } - /* - * Renders the Block in Third Person - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void onPlayerRenderPost(RenderPlayerEvent.Post event) - { - World world = Minecraft.getMinecraft().world; - EntityPlayer player = event.getEntityPlayer(); - ModelPlayer modelPlayer = event.getRenderer().getMainModel(); - EntityPlayerSP clientPlayer = Minecraft.getMinecraft().player; - ItemStack stack = player.getHeldItemMainhand(); - float partialticks = event.getPartialRenderTick(); - if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) - { - Entity entity = ItemEntity.getEntity(stack, world); + @SideOnly(Side.CLIENT) + private void setLightmapDisabled(boolean disabled) + { + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); - float rotation = -(player.prevRenderYawOffset + (player.renderYawOffset - player.prevRenderYawOffset) * partialticks); + if (disabled) + { + GlStateManager.disableTexture2D(); + } + else + { + GlStateManager.enableTexture2D(); + } - int perspective = Minecraft.getMinecraft().gameSettings.thirdPersonView; + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + } - if (entity != null) - { - double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) partialticks; - double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) partialticks; - double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) partialticks; + /* + * Renders the Block in Third Person + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onPlayerRenderPost(RenderPlayerEvent.Post event) + { + World world = Minecraft.getMinecraft().world; + EntityPlayer player = event.getEntityPlayer(); + event.getRenderer().getMainModel(); + EntityPlayerSP clientPlayer = Minecraft.getMinecraft().player; + ItemStack stack = player.getHeldItemMainhand(); + float partialticks = event.getPartialRenderTick(); - double c0 = clientPlayer.lastTickPosX + (clientPlayer.posX - clientPlayer.lastTickPosX) * (double) partialticks; - double c1 = clientPlayer.lastTickPosY + (clientPlayer.posY - clientPlayer.lastTickPosY) * (double) partialticks; - double c2 = clientPlayer.lastTickPosZ + (clientPlayer.posZ - clientPlayer.lastTickPosZ) * (double) partialticks; + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) + { + Entity entity = ItemEntity.getEntity(stack, world); + float rotation = -(player.prevRenderYawOffset + (player.renderYawOffset - player.prevRenderYawOffset) * partialticks); - double xOffset = d0 - c0; - double yOffset = d1 - c1; - double zOffset = d2 - c2; + if (entity != null) + { + double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialticks; + double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialticks; + double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialticks; - float height = entity.height; - float width = entity.width; - float multiplier = height * width; + double c0 = clientPlayer.lastTickPosX + (clientPlayer.posX - clientPlayer.lastTickPosX) * partialticks; + double c1 = clientPlayer.lastTickPosY + (clientPlayer.posY - clientPlayer.lastTickPosY) * partialticks; + double c2 = clientPlayer.lastTickPosZ + (clientPlayer.posZ - clientPlayer.lastTickPosZ) * partialticks; - entity.setPosition(c0, c1, c2); - entity.rotationYaw = 0.0f; - entity.prevRotationYaw = 0.0f; - entity.setRotationYawHead(0.0f); + double xOffset = d0 - c0; + double yOffset = d1 - c1; + double zOffset = d2 - c2; - GlStateManager.pushMatrix(); - GlStateManager.translate(xOffset, yOffset, zOffset); - GlStateManager.scale((10 - multiplier) * 0.08, (10 - multiplier) * 0.08, (10 - multiplier) * 0.08); - GlStateManager.rotate(rotation, 0, 1f, 0); - GlStateManager.translate(0.0, (height / 2) + -(height / 2) + 1, (width - 0.1) < 0.7 ? (width - 0.1) + (0.7 - (width - 0.1)) : (width - 0.1)); + float height = entity.height; + float width = entity.width; + float multiplier = height * width; - if (player.isSneaking()) - GlStateManager.translate(0, -0.3, 0); + entity.setPosition(c0, c1, c2); + entity.rotationYaw = 0.0f; + entity.prevRotationYaw = 0.0f; + entity.setRotationYawHead(0.0f); - Minecraft.getMinecraft().getRenderManager().setRenderShadow(false); - - CarryOnOverride carryOverride = ScriptChecker.inspectEntity(entity); - if (carryOverride != null) - { - double[] translation = ScriptParseHelper.getXYZArray(carryOverride.getRenderTranslation()); - double[] rot = ScriptParseHelper.getXYZArray(carryOverride.getRenderRotation()); - double[] scale = ScriptParseHelper.getScale(carryOverride.getRenderScale()); - String entityname = carryOverride.getRenderNameEntity(); - if (entityname != null) - { - Entity newEntity = EntityList.createEntityByIDFromName(new ResourceLocation(entityname), world); - if (newEntity != null) - { - NBTTagCompound nbttag = carryOverride.getRenderNBT(); - if (nbttag != null) - newEntity.readFromNBT(nbttag); - entity = newEntity; - entity.setPosition(c0, c1, c2); - entity.rotationYaw = 0.0f; - entity.prevRotationYaw = 0.0f; - entity.setRotationYawHead(0.0f); - } - } + GlStateManager.pushMatrix(); + GlStateManager.translate(xOffset, yOffset, zOffset); + GlStateManager.scale((10 - multiplier) * 0.08, (10 - multiplier) * 0.08, (10 - multiplier) * 0.08); + GlStateManager.rotate(rotation, 0, 1f, 0); + GlStateManager.translate(0.0, height / 2 + -(height / 2) + 1, width - 0.1 < 0.7 ? width - 0.1 + (0.7 - (width - 0.1)) : width - 0.1); - GlStateManager.translate(translation[0], translation[1], translation[2]); - GlStateManager.rotate((float) rot[0], 1, 0, 0); - GlStateManager.rotate((float) rot[1], 0, 1, 0); - GlStateManager.rotate((float) rot[2], 0, 0, 1); - GlStateManager.scale(scale[0], scale[1], scale[2]); + if (player.isSneaking()) + { + GlStateManager.translate(0, -0.3, 0); + } - } - - Minecraft.getMinecraft().getRenderManager().renderEntityStatic(entity, 0.0f, false); - Minecraft.getMinecraft().getRenderManager().setRenderShadow(true); - - GlStateManager.scale(1, 1, 1); - GlStateManager.popMatrix(); - - } - } - - } + Minecraft.getMinecraft().getRenderManager().setRenderShadow(false); + Minecraft.getMinecraft().getRenderManager().renderEntityStatic(entity, 0.0f, false); + Minecraft.getMinecraft().getRenderManager().setRenderShadow(true); + GlStateManager.scale(1, 1, 1); + GlStateManager.popMatrix(); + } + } + } } From a49d01f170f01c892d3eb1189d2cca877e2ac501 Mon Sep 17 00:00:00 2001 From: SteveKunG Date: Fri, 22 Sep 2017 23:02:56 +0700 Subject: [PATCH 06/13] Fix tile entity render in hand --- .../carryon/client/event/RenderEvents.java | 876 +++++++++--------- 1 file changed, 441 insertions(+), 435 deletions(-) diff --git a/src/main/java/tschipp/carryon/client/event/RenderEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEvents.java index 21ae56f..1a718e3 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEvents.java @@ -12,6 +12,7 @@ import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.model.ModelPlayer; import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.block.model.IBakedModel; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.entity.RenderPlayer; @@ -27,6 +28,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumHand; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; import net.minecraftforge.client.event.GuiOpenEvent; import net.minecraftforge.client.event.MouseEvent; @@ -43,12 +45,8 @@ import tschipp.carryon.client.keybinds.CarryOnKeybinds; import tschipp.carryon.common.config.CarryOnConfig; import tschipp.carryon.common.handler.ModelOverridesHandler; import tschipp.carryon.common.handler.RegistrationHandler; -import tschipp.carryon.common.helper.ScriptParseHelper; -import tschipp.carryon.common.helper.StringParser; import tschipp.carryon.common.item.ItemEntity; import tschipp.carryon.common.item.ItemTile; -import tschipp.carryon.common.scripting.CarryOnOverride; -import tschipp.carryon.common.scripting.ScriptChecker; import tschipp.carryon.network.server.SyncKeybindPacket; public class RenderEvents @@ -59,495 +57,503 @@ public class RenderEvents private ModelRenderer fakeLeftArmwear; private ModelRenderer fakeRightArmwear; - /* - * Prevents the Player from scrolling - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void onScroll(MouseEvent event) - { - if (event.getDwheel() > 0 || event.getDwheel() < 0) - { - ItemStack stack = Minecraft.getMinecraft().player.getHeldItemMainhand(); - if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile) - { - if (ItemTile.hasTileData(stack)) - event.setCanceled(true); - } - } + /* + * Prevents the Player from scrolling + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onScroll(MouseEvent event) + { + if (event.getDwheel() > 0 || event.getDwheel() < 0 || Minecraft.getMinecraft().gameSettings.keyBindPickBlock.isPressed()) + { + ItemStack stack = Minecraft.getMinecraft().player.getHeldItemMainhand(); - } + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile) + { + if (ItemTile.hasTileData(stack)) + { + event.setCanceled(true); + } + } + } + } - @SubscribeEvent - @SideOnly(Side.CLIENT) - public void onPlayerTick(PlayerTickEvent event) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException - { - EntityPlayer player = event.player; - if (player != null && event.side == Side.CLIENT) - { + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void onPlayerTick(PlayerTickEvent event) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException + { + EntityPlayer player = event.player; - boolean keyPressed = CarryOnKeybinds.carryKey.isKeyDown(); - boolean playerKeyPressed = CarryOnKeybinds.isKeyPressed(player); + if (player != null && event.side == Side.CLIENT) + { + boolean keyPressed = CarryOnKeybinds.carryKey.isKeyDown(); + boolean playerKeyPressed = CarryOnKeybinds.isKeyPressed(player); - if (keyPressed && !playerKeyPressed) - { - CarryOnKeybinds.setKeyPressed(player, true); - CarryOn.network.sendToServer(new SyncKeybindPacket(true)); - } - else if (!keyPressed && playerKeyPressed) - { - CarryOnKeybinds.setKeyPressed(player, false); - CarryOn.network.sendToServer(new SyncKeybindPacket(false)); - } + if (keyPressed && !playerKeyPressed) + { + CarryOnKeybinds.setKeyPressed(player, true); + CarryOn.network.sendToServer(new SyncKeybindPacket(true)); + } + else if (!keyPressed && playerKeyPressed) + { + CarryOnKeybinds.setKeyPressed(player, false); + CarryOn.network.sendToServer(new SyncKeybindPacket(false)); + } + } + } - } - } + /* + * Prevents the Player from opening Guis + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onGuiOpen(GuiOpenEvent event) + { + if (event.getGui() != null) + { + boolean inventory = event.getGui() instanceof GuiContainer; + EntityPlayer player = Minecraft.getMinecraft().player; - /* - * Prevents the Player from opening Guis - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void onGuiOpen(GuiOpenEvent event) - { - if (event.getGui() != null) - { - boolean inventory = event.getGui() instanceof GuiContainer; - EntityPlayer player = Minecraft.getMinecraft().player; - if (player != null) - { - ItemStack stack = player.getHeldItem(EnumHand.MAIN_HAND); - if (inventory && !stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) - { - event.setCanceled(true); - Minecraft.getMinecraft().currentScreen = null; - } - } - } - } + if (player != null) + { + ItemStack stack = player.getHeldItem(EnumHand.MAIN_HAND); - /* - * Prevents the Player from switching Slots - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void inputEvent(InputEvent event) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException - { - GameSettings settings = Minecraft.getMinecraft().gameSettings; - Field field = KeyBinding.class.getDeclaredFields()[7]; - field.setAccessible(true); - ItemStack stack = Minecraft.getMinecraft().player.getHeldItemMainhand(); - EntityPlayer player = Minecraft.getMinecraft().player; - if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) - { - if (settings.keyBindDrop.isPressed()) - { - field.set(settings.keyBindDrop, false); - } - if (settings.keyBindSwapHands.isPressed()) - { - field.set(settings.keyBindSwapHands, false); - } - for (KeyBinding keyBind : settings.keyBindsHotbar) - { - if (keyBind.isPressed()) - { - field.set(keyBind, false); - } - } + if (inventory && !stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) + { + event.setCanceled(true); + Minecraft.getMinecraft().currentScreen = null; + } + } + } + } - } + /* + * Prevents the Player from switching Slots + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void inputEvent(InputEvent event) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException + { + GameSettings settings = Minecraft.getMinecraft().gameSettings; + Field field = KeyBinding.class.getDeclaredFields()[7]; + field.setAccessible(true); + ItemStack stack = Minecraft.getMinecraft().player.getHeldItemMainhand(); + EntityPlayer player = Minecraft.getMinecraft().player; - int current = player.inventory.currentItem; + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) + { + if (settings.keyBindDrop.isPressed()) + { + field.set(settings.keyBindDrop, false); + } + if (settings.keyBindSwapHands.isPressed()) + { + field.set(settings.keyBindSwapHands, false); + } + for (KeyBinding keyBind : settings.keyBindsHotbar) + { + if (keyBind.isPressed()) + { + field.set(keyBind, false); + } + } + } - if (player.getEntityData().hasKey("carrySlot") ? player.getEntityData().getInteger("carrySlot") != current : false) - player.inventory.currentItem = player.getEntityData().getInteger("carrySlot"); + int current = player.inventory.currentItem; - } + if (player.getEntityData().hasKey("carrySlot") ? player.getEntityData().getInteger("carrySlot") != current : false) + { + player.inventory.currentItem = player.getEntityData().getInteger("carrySlot"); + } + } - /* - * Renders the Block in First Person - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void renderHand(RenderHandEvent event) - { - World world = Minecraft.getMinecraft().world; - EntityPlayer player = Minecraft.getMinecraft().player; - AbstractClientPlayer aplayer = (AbstractClientPlayer) player; - ItemStack stack = player.getHeldItemMainhand(); - int perspective = Minecraft.getMinecraft().gameSettings.thirdPersonView; + /* + * Renders the Block in First Person + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void renderHand(RenderHandEvent event) + { + World world = Minecraft.getMinecraft().world; + EntityPlayer player = Minecraft.getMinecraft().player; + AbstractClientPlayer aplayer = (AbstractClientPlayer) player; + ItemStack stack = player.getHeldItemMainhand(); + int perspective = Minecraft.getMinecraft().gameSettings.thirdPersonView; - if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) - { - Block block = ItemTile.getBlock(stack); - BlockPos pos = player.getPosition(); - NBTTagCompound tag = ItemTile.getTileData(stack); - IBlockState state = ItemTile.getBlockState(stack); - ItemStack tileStack = ItemTile.getItemStack(stack); + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) + { + Block block = ItemTile.getBlock(stack); + NBTTagCompound tag = ItemTile.getTileData(stack); + IBlockState state = ItemTile.getBlockState(stack); + ItemStack tileStack = ItemTile.getItemStack(stack); - GlStateManager.pushMatrix(); - GlStateManager.scale(2.5, 2.5, 2.5); - GlStateManager.translate(0, -0.6, -1); + GlStateManager.pushMatrix(); + GlStateManager.scale(2.5, 2.5, 2.5); + GlStateManager.translate(0, -0.6, -1); - if (CarryOnConfig.settings.facePlayer ? !isChest(block) : isChest(block)) - { - GlStateManager.rotate(180, 0, 1f, 0); - GlStateManager.rotate(-8, 1f, 0, 0); - } - else - GlStateManager.rotate(8, 1f, 0, 0); + if (CarryOnConfig.settings.facePlayer ? !isChest(block) : isChest(block)) + { + GlStateManager.rotate(180, 0, 1f, 0); + GlStateManager.rotate(-8, 1f, 0, 0); + } + else + { + GlStateManager.rotate(8, 1f, 0, 0); + } - if (perspective == 0) - { - IBakedModel model = ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag, world, player) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileStack, world, player); + if (perspective == 0) + { + IBakedModel model = ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag, world, player) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileStack, world, player); - CarryOnOverride carryOverride = ScriptChecker.inspectBlock(state, world, pos, tag); - if (carryOverride != null) - { - double[] translation = ScriptParseHelper.getXYZArray(carryOverride.getRenderTranslation()); - double[] rotation = ScriptParseHelper.getXYZArray(carryOverride.getRenderRotation()); - double[] scale = ScriptParseHelper.getScale(carryOverride.getRenderScale()); - Block b = StringParser.getBlock(carryOverride.getRenderNameBlock()); - if (b != null) - { - ItemStack s = new ItemStack(b, 1, carryOverride.getRenderMeta()); - s.setTagCompound(carryOverride.getRenderNBT()); - model = Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(s, world, player); - } + if (ModelOverridesHandler.hasCustomOverrideModel(state, tag)) + { + Object override = ModelOverridesHandler.getOverrideObject(state, tag); - GlStateManager.translate(translation[0], translation[1], translation[2]); - GlStateManager.rotate((float) rotation[0], 1, 0, 0); - GlStateManager.rotate((float) rotation[1], 0, 1, 0); - GlStateManager.rotate((float) rotation[2], 0, 0, 1); - GlStateManager.scale(scale[0], scale[1], scale[2]); + if (override instanceof ItemStack) + { + Minecraft.getMinecraft().getRenderItem().renderItem((ItemStack) override, model); + } + else + { + Minecraft.getMinecraft().getRenderItem().renderItem(tileStack.isEmpty() ? stack : tileStack, model); + } + } + else + { + int i = this.getBrightnessForRender(Minecraft.getMinecraft().player); + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, j, k); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.setLightmapDisabled(false); + Minecraft.getMinecraft().getRenderItem().renderItem(tileStack.isEmpty() ? stack : tileStack, model); + this.setLightmapDisabled(true); + } + } - } + GlStateManager.scale(1, 1, 1); + GlStateManager.popMatrix(); - if (ModelOverridesHandler.hasCustomOverrideModel(state, tag)) - { - Object override = ModelOverridesHandler.getOverrideObject(state, tag); - if (override instanceof ItemStack) - { - Minecraft.getMinecraft().getRenderItem().renderItem((ItemStack) override, model); - } - else - Minecraft.getMinecraft().getRenderItem().renderItem(tileStack.isEmpty() ? stack : tileStack, model); - } - else - Minecraft.getMinecraft().getRenderItem().renderItem(tileStack.isEmpty() ? stack : tileStack, model); - } - GlStateManager.scale(1, 1, 1); - GlStateManager.popMatrix(); + if (perspective == 0) + { + event.setCanceled(true); + } + } + else + { + if (stack.isEmpty() ? true : stack.getItem() != RegistrationHandler.itemEntity) + { + event.setCanceled(false); + Minecraft mc = Minecraft.getMinecraft(); + RenderManager manager = mc.getRenderManager(); + RenderPlayer renderPlayer = manager.getSkinMap().get(aplayer.getSkinType()); + ModelPlayer modelPlayer = renderPlayer.getMainModel(); + modelPlayer.bipedLeftArm.isHidden = false; + modelPlayer.bipedRightArm.isHidden = false; + modelPlayer.bipedLeftArmwear.isHidden = false; + modelPlayer.bipedRightArmwear.isHidden = false; + } + } + } - if (perspective == 0) - event.setCanceled(true); - } - else - { - if (stack.isEmpty() ? true : stack.getItem() != RegistrationHandler.itemEntity) - { - event.setCanceled(false); - Minecraft mc = Minecraft.getMinecraft(); - RenderManager manager = mc.getRenderManager(); - RenderPlayer renderPlayer = manager.getSkinMap().get(aplayer.getSkinType()); - ModelPlayer modelPlayer = renderPlayer.getMainModel(); - modelPlayer.bipedLeftArm.isHidden = false; - modelPlayer.bipedRightArm.isHidden = false; - modelPlayer.bipedLeftArmwear.isHidden = false; - modelPlayer.bipedRightArmwear.isHidden = false; - } - } - } + @SideOnly(Side.CLIENT) + private int getBrightnessForRender(EntityPlayer player) + { + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(MathHelper.floor(player.posX), 0, MathHelper.floor(player.posZ)); - /* - * Renders the Block in Third Person - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void onPlayerRenderPost(RenderPlayerEvent.Post event) - { - World world = Minecraft.getMinecraft().world; - EntityPlayer player = event.getEntityPlayer(); - ModelPlayer modelPlayer = event.getRenderer().getMainModel(); - EntityPlayerSP clientPlayer = Minecraft.getMinecraft().player; - ItemStack stack = player.getHeldItemMainhand(); - float partialticks = event.getPartialRenderTick(); - if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) - { - Block block = ItemTile.getBlock(stack); - IBlockState state = ItemTile.getBlockState(stack); - NBTTagCompound tag = ItemTile.getTileData(stack); + if (player.world.isBlockLoaded(blockpos$mutableblockpos)) + { + blockpos$mutableblockpos.setY(MathHelper.floor(player.posY + player.getEyeHeight())); + return player.world.getCombinedLight(blockpos$mutableblockpos, 0); + } + else + { + return 0; + } + } - ItemStack tileItem = ItemTile.getItemStack(stack); + @SideOnly(Side.CLIENT) + private void setLightmapDisabled(boolean disabled) + { + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); - float rotation = -(player.prevRenderYawOffset + (player.renderYawOffset - player.prevRenderYawOffset) * partialticks); - int perspective = Minecraft.getMinecraft().gameSettings.thirdPersonView; + if (disabled) + { + GlStateManager.disableTexture2D(); + } + else + { + GlStateManager.enableTexture2D(); + } - double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) partialticks; - double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) partialticks; - double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) partialticks; + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + } - double c0 = clientPlayer.lastTickPosX + (clientPlayer.posX - clientPlayer.lastTickPosX) * (double) partialticks; - double c1 = clientPlayer.lastTickPosY + (clientPlayer.posY - clientPlayer.lastTickPosY) * (double) partialticks; - double c2 = clientPlayer.lastTickPosZ + (clientPlayer.posZ - clientPlayer.lastTickPosZ) * (double) partialticks; + /* + * Renders the Block in Third Person + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onPlayerRenderPost(RenderPlayerEvent.Post event) + { + World world = Minecraft.getMinecraft().world; + EntityPlayer player = event.getEntityPlayer(); + EntityPlayerSP clientPlayer = Minecraft.getMinecraft().player; + ItemStack stack = player.getHeldItemMainhand(); + float partialticks = event.getPartialRenderTick(); - double xOffset = d0 - c0; - double yOffset = d1 - c1; - double zOffset = d2 - c2; + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) + { + Block block = ItemTile.getBlock(stack); + IBlockState state = ItemTile.getBlockState(stack); + NBTTagCompound tag = ItemTile.getTileData(stack); + ItemStack tileItem = ItemTile.getItemStack(stack); - GlStateManager.pushMatrix(); - GlStateManager.translate(xOffset, yOffset, zOffset); - GlStateManager.scale(0.6, 0.6, 0.6); + float rotation = -(player.prevRenderYawOffset + (player.renderYawOffset - player.prevRenderYawOffset) * partialticks); - if (CarryOnConfig.settings.facePlayer ? !isChest(block) : isChest(block)) - { - GlStateManager.rotate(rotation, 0, 1.0f, 0); - GlStateManager.translate(0, 1.6, 0.65); - } - else - { - GlStateManager.rotate(rotation + 180, 0, 1.0f, 0); - GlStateManager.translate(0, 1.6, -0.65); - } + double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialticks; + double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialticks; + double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialticks; - if (player.isSneaking()) - GlStateManager.translate(0, -0.3, 0); + double c0 = clientPlayer.lastTickPosX + (clientPlayer.posX - clientPlayer.lastTickPosX) * partialticks; + double c1 = clientPlayer.lastTickPosY + (clientPlayer.posY - clientPlayer.lastTickPosY) * partialticks; + double c2 = clientPlayer.lastTickPosZ + (clientPlayer.posZ - clientPlayer.lastTickPosZ) * partialticks; - IBakedModel model = ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag, world, player) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileItem, world, player); + double xOffset = d0 - c0; + double yOffset = d1 - c1; + double zOffset = d2 - c2; - CarryOnOverride carryOverride = ScriptChecker.inspectBlock(state, world, player.getPosition(), tag); - if (carryOverride != null) - { - double[] translation = ScriptParseHelper.getXYZArray(carryOverride.getRenderTranslation()); - double[] rot = ScriptParseHelper.getXYZArray(carryOverride.getRenderRotation()); - double[] scale = ScriptParseHelper.getScale(carryOverride.getRenderScale()); - Block b = StringParser.getBlock(carryOverride.getRenderNameBlock()); - if (b != null) - { - ItemStack s = new ItemStack(b, 1, carryOverride.getRenderMeta()); - s.setTagCompound(carryOverride.getRenderNBT()); - model = Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(s, world, player); - } - - - GlStateManager.translate(translation[0], translation[1], translation[2]); - GlStateManager.rotate((float) rot[0], 1, 0, 0); - GlStateManager.rotate((float) rot[1], 0, 1, 0); - GlStateManager.rotate((float) rot[2], 0, 0, 1); - GlStateManager.scale(scale[0], scale[1], scale[2]); + GlStateManager.pushMatrix(); + GlStateManager.translate(xOffset, yOffset, zOffset); + GlStateManager.scale(0.6, 0.6, 0.6); - } + if (CarryOnConfig.settings.facePlayer ? !isChest(block) : isChest(block)) + { + GlStateManager.rotate(rotation, 0, 1.0f, 0); + GlStateManager.translate(0, 1.6, 0.65); + } + else + { + GlStateManager.rotate(rotation + 180, 0, 1.0f, 0); + GlStateManager.translate(0, 1.6, -0.65); + } - if (ModelOverridesHandler.hasCustomOverrideModel(state, tag)) - { - Object override = ModelOverridesHandler.getOverrideObject(state, tag); - if (override instanceof ItemStack) - { - Minecraft.getMinecraft().getRenderItem().renderItem((ItemStack) override, model); - } - else - Minecraft.getMinecraft().getRenderItem().renderItem(tileItem.isEmpty() ? stack : tileItem, model); - } - else - Minecraft.getMinecraft().getRenderItem().renderItem(tileItem.isEmpty() ? stack : tileItem, model); - GlStateManager.scale(1, 1, 1); + if (player.isSneaking()) + { + GlStateManager.translate(0, -0.3, 0); + } - GlStateManager.popMatrix(); - } + IBakedModel model = ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag, world, player) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileItem, world, player); - } + if (ModelOverridesHandler.hasCustomOverrideModel(state, tag)) + { + Object override = ModelOverridesHandler.getOverrideObject(state, tag); - /* - * Renders correct arm rotation - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void onPlayerRenderPre(RenderPlayerEvent.Pre event) - { - if (!Loader.isModLoaded("mobends") && CarryOnConfig.settings.renderArms) - { - EntityPlayer player = event.getEntityPlayer(); - AbstractClientPlayer aplayer = (AbstractClientPlayer) player; - ItemStack stack = player.getHeldItemMainhand(); - ModelPlayer model = event.getRenderer().getMainModel(); - ResourceLocation skinLoc = DefaultPlayerSkin.getDefaultSkin(player.getPersistentID()); + if (override instanceof ItemStack) + { + Minecraft.getMinecraft().getRenderItem().renderItem((ItemStack) override, model); + } + else + { + Minecraft.getMinecraft().getRenderItem().renderItem(tileItem.isEmpty() ? stack : tileItem, model); + } + } + else + { + Minecraft.getMinecraft().getRenderItem().renderItem(tileItem.isEmpty() ? stack : tileItem, model); + } - if (!initModels) - { - fakeLeftArm = new ModelRenderer(model, 32, 48); - fakeRightArm = new ModelRenderer(model, 40, 16); - fakeLeftArmwear = new ModelRenderer(model, 48, 48); - fakeRightArmwear = new ModelRenderer(model, 40, 32); - initModels = true; - } + GlStateManager.scale(1, 1, 1); + GlStateManager.popMatrix(); + } + } - player.setArrowCountInEntity(0); // TODO Temporary Fix + /* + * Renders correct arm rotation + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onPlayerRenderPre(RenderPlayerEvent.Pre event) + { + if (!Loader.isModLoaded("mobends") && CarryOnConfig.settings.renderArms) + { + EntityPlayer player = event.getEntityPlayer(); + AbstractClientPlayer aplayer = (AbstractClientPlayer) player; + ItemStack stack = player.getHeldItemMainhand(); + ModelPlayer model = event.getRenderer().getMainModel(); + ResourceLocation skinLoc = DefaultPlayerSkin.getDefaultSkin(player.getPersistentID()); - if (!stack.isEmpty() && (stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) || (stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack))) - { - if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) - { + if (!initModels) + { + this.fakeLeftArm = new ModelRenderer(model, 32, 48); + this.fakeRightArm = new ModelRenderer(model, 40, 16); + this.fakeLeftArmwear = new ModelRenderer(model, 48, 48); + this.fakeRightArmwear = new ModelRenderer(model, 40, 32); + initModels = true; + } - for (int k = 0; k < model.bipedBody.childModels.size(); k++) - { - float chkRot = model.bipedBody.childModels.get(k).rotateAngleX; - if (chkRot == -0.9001F || chkRot == -1.2001F || chkRot == -1.4001F || chkRot == -1.7001F) - { - model.bipedBody.childModels.remove(k); - k = k - 1; - } - } + player.setArrowCountInEntity(0); // TODO Temporary Fix - } + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack) || stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) + { + if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) + { + for (int k = 0; k < model.bipedBody.childModels.size(); k++) + { + float chkRot = model.bipedBody.childModels.get(k).rotateAngleX; - Item item = stack.getItem(); + if (chkRot == -0.9001F || chkRot == -1.2001F || chkRot == -1.4001F || chkRot == -1.7001F) + { + model.bipedBody.childModels.remove(k); + k = k - 1; + } + } + } - model.bipedLeftArm.isHidden = true; - model.bipedRightArm.isHidden = true; - model.bipedLeftArmwear.isHidden = true; - model.bipedRightArmwear.isHidden = true; + Item item = stack.getItem(); - Minecraft.getMinecraft().getTextureManager().bindTexture(skinLoc); - float rotation = -player.renderYawOffset; + model.bipedLeftArm.isHidden = true; + model.bipedRightArm.isHidden = true; + model.bipedLeftArmwear.isHidden = true; + model.bipedRightArmwear.isHidden = true; - if (aplayer.getSkinType().equals("default")) - { - fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 4, 12, 4, .08F); - fakeLeftArmwear.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 4, 12, 4, .08F + 0.25F); - } - else - { - fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 3, 12, 4, .08F); - fakeLeftArmwear.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 3, 12, 4, .08F + 0.25F); - } + Minecraft.getMinecraft().getTextureManager().bindTexture(skinLoc); - if (aplayer.getSkinType().equals("default")) - { - fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.9F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 4, 12, 4, .08F); - fakeRightArmwear.addBox(model.bipedRightArm.offsetX - 7.9F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 4, 12, 4, .08F + 0.25F); - } - else - { - fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.2F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 3, 12, 4, .08F); - fakeRightArmwear.addBox(model.bipedRightArm.offsetX - 7.2F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 3, 12, 4, .08F + 0.25F); - } + if (aplayer.getSkinType().equals("default")) + { + this.fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 4, 12, 4, .08F); + this.fakeLeftArmwear.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 4, 12, 4, .08F + 0.25F); + } + else + { + this.fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 3, 12, 4, .08F); + this.fakeLeftArmwear.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 3, 12, 4, .08F + 0.25F); + } - if (item == RegistrationHandler.itemTile) - { - if (!player.isSneaking()) - { - fakeRightArm.rotateAngleX = -.9001F; - fakeLeftArm.rotateAngleX = -.9001F; - fakeLeftArmwear.rotateAngleX = -.9001F; - fakeRightArmwear.rotateAngleX = -.9001F; - } - else - { - fakeRightArm.rotateAngleX = -1.4001F; - fakeLeftArm.rotateAngleX = -1.4001F; - fakeLeftArmwear.rotateAngleX = -1.4001F; - fakeRightArmwear.rotateAngleX = -1.4001F; - } - } - else - { - if (!player.isSneaking()) - { - fakeRightArm.rotateAngleX = -1.2001F; - fakeLeftArm.rotateAngleX = -1.2001F; - fakeLeftArmwear.rotateAngleX = -1.2001F; - fakeRightArmwear.rotateAngleX = -1.2001F; - } - else - { - fakeRightArm.rotateAngleX = -1.7001F; - fakeLeftArm.rotateAngleX = -1.7001F; - fakeLeftArmwear.rotateAngleX = -1.7001F; - fakeRightArmwear.rotateAngleX = -1.7001F; - } + if (aplayer.getSkinType().equals("default")) + { + this.fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.9F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 4, 12, 4, .08F); + this.fakeRightArmwear.addBox(model.bipedRightArm.offsetX - 7.9F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 4, 12, 4, .08F + 0.25F); + } + else + { + this.fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.2F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 3, 12, 4, .08F); + this.fakeRightArmwear.addBox(model.bipedRightArm.offsetX - 7.2F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 3, 12, 4, .08F + 0.25F); + } - fakeRightArm.rotateAngleY = -0.15f; - fakeLeftArm.rotateAngleY = 0.15f; - fakeLeftArmwear.rotateAngleY = 0.15f; - fakeRightArmwear.rotateAngleY = -0.15f; + if (item == RegistrationHandler.itemTile) + { + if (!player.isSneaking()) + { + this.fakeRightArm.rotateAngleX = -.9001F; + this.fakeLeftArm.rotateAngleX = -.9001F; + this.fakeLeftArmwear.rotateAngleX = -.9001F; + this.fakeRightArmwear.rotateAngleX = -.9001F; + } + else + { + this.fakeRightArm.rotateAngleX = -1.4001F; + this.fakeLeftArm.rotateAngleX = -1.4001F; + this.fakeLeftArmwear.rotateAngleX = -1.4001F; + this.fakeRightArmwear.rotateAngleX = -1.4001F; + } + } + else + { + if (!player.isSneaking()) + { + this.fakeRightArm.rotateAngleX = -1.2001F; + this.fakeLeftArm.rotateAngleX = -1.2001F; + this.fakeLeftArmwear.rotateAngleX = -1.2001F; + this.fakeRightArmwear.rotateAngleX = -1.2001F; + } + else + { + this.fakeRightArm.rotateAngleX = -1.7001F; + this.fakeLeftArm.rotateAngleX = -1.7001F; + this.fakeLeftArmwear.rotateAngleX = -1.7001F; + this.fakeRightArmwear.rotateAngleX = -1.7001F; + } - } - model.bipedBody.addChild(fakeLeftArm); - model.bipedBody.addChild(fakeRightArm); + this.fakeRightArm.rotateAngleY = -0.15f; + this.fakeLeftArm.rotateAngleY = 0.15f; + this.fakeLeftArmwear.rotateAngleY = 0.15f; + this.fakeRightArmwear.rotateAngleY = -0.15f; + } - if (player.isWearing(EnumPlayerModelParts.LEFT_SLEEVE)) - { - model.bipedBody.addChild(fakeLeftArmwear); - } - if (player.isWearing(EnumPlayerModelParts.RIGHT_SLEEVE)) - { - model.bipedBody.addChild(fakeRightArmwear); - } + model.bipedBody.addChild(this.fakeLeftArm); + model.bipedBody.addChild(this.fakeRightArm); - } - else - { - model.bipedLeftArm.isHidden = false; - model.bipedRightArm.isHidden = false; - model.bipedLeftArmwear.isHidden = false; - model.bipedRightArmwear.isHidden = false; + if (player.isWearing(EnumPlayerModelParts.LEFT_SLEEVE)) + { + model.bipedBody.addChild(this.fakeLeftArmwear); + } + if (player.isWearing(EnumPlayerModelParts.RIGHT_SLEEVE)) + { + model.bipedBody.addChild(this.fakeRightArmwear); + } + } + else + { + model.bipedLeftArm.isHidden = false; + model.bipedRightArm.isHidden = false; + model.bipedLeftArmwear.isHidden = false; + model.bipedRightArmwear.isHidden = false; - if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) - { - for (int k = 0; k < model.bipedBody.childModels.size(); k++) - { - float chkRot = model.bipedBody.childModels.get(k).rotateAngleX; - if (chkRot == -0.9001F || chkRot == -1.2001F || chkRot == -1.4001F || chkRot == -1.7001F) - { - model.bipedBody.childModels.remove(k); - k = k - 1; - } - } - } - } + if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) + { + for (int k = 0; k < model.bipedBody.childModels.size(); k++) + { + float chkRot = model.bipedBody.childModels.get(k).rotateAngleX; - if (stack.isEmpty() || (stack.getItem() != RegistrationHandler.itemTile && stack.getItem() != RegistrationHandler.itemEntity)) - { - model.bipedLeftArm.isHidden = false; - model.bipedRightArm.isHidden = false; - model.bipedLeftArmwear.isHidden = false; - model.bipedRightArmwear.isHidden = false; - } - } + if (chkRot == -0.9001F || chkRot == -1.2001F || chkRot == -1.4001F || chkRot == -1.7001F) + { + model.bipedBody.childModels.remove(k); + k = k - 1; + } + } + } + } - } + if (stack.isEmpty() || stack.getItem() != RegistrationHandler.itemTile && stack.getItem() != RegistrationHandler.itemEntity) + { + model.bipedLeftArm.isHidden = false; + model.bipedRightArm.isHidden = false; + model.bipedLeftArmwear.isHidden = false; + model.bipedRightArmwear.isHidden = false; + } + } + } - public static boolean isChest(Block block) - { - return block == Blocks.CHEST || block == Blocks.ENDER_CHEST || block == Blocks.TRAPPED_CHEST; - } + public static boolean isChest(Block block) + { + return block == Blocks.CHEST || block == Blocks.ENDER_CHEST || block == Blocks.TRAPPED_CHEST; + } - @SideOnly(Side.CLIENT) - private static RenderPlayer getRenderPlayer(AbstractClientPlayer player) - { - Minecraft mc = Minecraft.getMinecraft(); - RenderManager manager = mc.getRenderManager(); - return manager.getSkinMap().get(player.getSkinType()); - } + @SideOnly(Side.CLIENT) + private static RenderPlayer getRenderPlayer(AbstractClientPlayer player) + { + Minecraft mc = Minecraft.getMinecraft(); + RenderManager manager = mc.getRenderManager(); + return manager.getSkinMap().get(player.getSkinType()); + } - @SideOnly(Side.CLIENT) - private static ModelPlayer getPlayerModel(AbstractClientPlayer player) - { - return getRenderPlayer(player).getMainModel(); - } + @SideOnly(Side.CLIENT) + private static ModelPlayer getPlayerModel(AbstractClientPlayer player) + { + return getRenderPlayer(player).getMainModel(); + } - @SubscribeEvent - @SideOnly(Side.CLIENT) - public void hideItems(RenderPlayerEvent.Specials.Pre event) - { - EntityPlayer player = event.getEntityPlayer(); - ItemStack stack = player.getHeldItemMainhand(); - - if (stack != null && (stack.getItem() == RegistrationHandler.itemTile || stack.getItem() == RegistrationHandler.itemEntity)) - { - event.setRenderItem(false); - } - } + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void hideItems(RenderPlayerEvent.Specials.Pre event) + { + EntityPlayer player = event.getEntityPlayer(); + ItemStack stack = player.getHeldItemMainhand(); + if (stack != null && (stack.getItem() == RegistrationHandler.itemTile || stack.getItem() == RegistrationHandler.itemEntity)) + { + event.setRenderItem(false); + } + } } From 703e7d9a23f3ad00bd476c4288b8eb42881d3569 Mon Sep 17 00:00:00 2001 From: SteveKunG Date: Fri, 22 Sep 2017 23:56:47 +0700 Subject: [PATCH 07/13] Model initialization/lighting optimize --- .../carryon/client/event/RenderEvents.java | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/main/java/tschipp/carryon/client/event/RenderEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEvents.java index 1a718e3..af128b6 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEvents.java @@ -211,11 +211,25 @@ public class RenderEvents if (override instanceof ItemStack) { + int i = this.getBrightnessForRender(Minecraft.getMinecraft().player); + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, j, k); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.setLightmapDisabled(false); Minecraft.getMinecraft().getRenderItem().renderItem((ItemStack) override, model); + this.setLightmapDisabled(true); } else { + int i = this.getBrightnessForRender(Minecraft.getMinecraft().player); + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, j, k); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.setLightmapDisabled(false); Minecraft.getMinecraft().getRenderItem().renderItem(tileStack.isEmpty() ? stack : tileStack, model); + this.setLightmapDisabled(true); } } else @@ -421,22 +435,21 @@ public class RenderEvents if (aplayer.getSkinType().equals("default")) { + //left arm this.fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 4, 12, 4, .08F); this.fakeLeftArmwear.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 4, 12, 4, .08F + 0.25F); - } - else - { - this.fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 3, 12, 4, .08F); - this.fakeLeftArmwear.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 3, 12, 4, .08F + 0.25F); - } - if (aplayer.getSkinType().equals("default")) - { + //right arm this.fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.9F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 4, 12, 4, .08F); this.fakeRightArmwear.addBox(model.bipedRightArm.offsetX - 7.9F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 4, 12, 4, .08F + 0.25F); } else { + //left arm + this.fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 3, 12, 4, .08F); + this.fakeLeftArmwear.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 3, 12, 4, .08F + 0.25F); + + //right arm this.fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.2F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 3, 12, 4, .08F); this.fakeRightArmwear.addBox(model.bipedRightArm.offsetX - 7.2F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 3, 12, 4, .08F + 0.25F); } From ec04f72cc6a7380c7e1dca2091ec10f33f581a18 Mon Sep 17 00:00:00 2001 From: Tschipp Date: Thu, 28 Sep 2017 16:51:55 +0200 Subject: [PATCH 08/13] Script Checker Entity/Block Conditional --- .../common/scripting/CarryOnOverride.java | 20 ++++++- .../common/scripting/ScriptChecker.java | 52 ++++++++++--------- .../common/scripting/ScriptReader.java | 2 + 3 files changed, 49 insertions(+), 25 deletions(-) diff --git a/src/main/java/tschipp/carryon/common/scripting/CarryOnOverride.java b/src/main/java/tschipp/carryon/common/scripting/CarryOnOverride.java index a807f4e..7d6ef3c 100644 --- a/src/main/java/tschipp/carryon/common/scripting/CarryOnOverride.java +++ b/src/main/java/tschipp/carryon/common/scripting/CarryOnOverride.java @@ -36,13 +36,31 @@ public class CarryOnOverride private String renderRotation; private String renderScale; + private boolean isBlock; + private boolean isEntity; + - + public boolean isBlock() + { + return isBlock; + } + public void setBlock(boolean isBlock) + { + this.isBlock = isBlock; + } + public boolean isEntity() + { + return isEntity; + } + public void setEntity(boolean isEntity) + { + this.isEntity = isEntity; + } public NBTTagCompound getTypeBlockTag() { return typeBlockTag; diff --git a/src/main/java/tschipp/carryon/common/scripting/ScriptChecker.java b/src/main/java/tschipp/carryon/common/scripting/ScriptChecker.java index 102889c..ccf3707 100644 --- a/src/main/java/tschipp/carryon/common/scripting/ScriptChecker.java +++ b/src/main/java/tschipp/carryon/common/scripting/ScriptChecker.java @@ -23,49 +23,53 @@ public class ScriptChecker @Nullable public static CarryOnOverride inspectBlock(IBlockState state, World world, BlockPos pos, @Nullable NBTTagCompound tag) { - if(!CarryOnConfig.settings.useScripts) + if (!CarryOnConfig.settings.useScripts) return null; - + Block block = state.getBlock(); int meta = block.getMetaFromState(state); Material material = state.getMaterial(); float hardness = state.getBlockHardness(world, pos); float resistance = block.getExplosionResistance(null); NBTTagCompound nbt = tag; - - for(CarryOnOverride override : ScriptReader.OVERRIDES) + + for (CarryOnOverride override : ScriptReader.OVERRIDES) { - if(matchesAll(override, block, meta, material, hardness, resistance, nbt)) - return override; + if (override.isBlock()) + { + if (matchesAll(override, block, meta, material, hardness, resistance, nbt)) + return override; + } } - + return null; } - - + @Nullable public static CarryOnOverride inspectEntity(Entity entity) { - if(!CarryOnConfig.settings.useScripts) + if (!CarryOnConfig.settings.useScripts) return null; - + String name = EntityList.getKey(entity).toString(); float height = entity.height; float width = entity.width; float health = entity instanceof EntityLivingBase ? ((EntityLivingBase) entity).getHealth() : 0.0f; NBTTagCompound tag = new NBTTagCompound(); entity.writeToNBT(tag); - - for(CarryOnOverride override : ScriptReader.OVERRIDES) + + for (CarryOnOverride override : ScriptReader.OVERRIDES) { - if(matchesAll(override, name, height, width, health, tag)) - return override; + if (override.isEntity()) + { + if (matchesAll(override, name, height, width, health, tag)) + return override; + } } - + return null; } - - + public static boolean matchesAll(CarryOnOverride override, String name, float height, float width, float health, NBTTagCompound tag) { boolean matchname = name == null ? true : name.equals(override.getTypeNameEntity()); @@ -73,10 +77,10 @@ public class ScriptChecker boolean matchwidth = ScriptParseHelper.matches(width, override.getTypeWidth()); boolean matchhealth = ScriptParseHelper.matches(health, override.getTypeHealth()); boolean matchnbt = ScriptParseHelper.matches(tag, override.getTypeEntityTag()); - + return (matchname && matchheight && matchwidth && matchhealth && matchnbt); } - + public static boolean matchesAll(CarryOnOverride override, Block block, int meta, Material material, float hardness, float resistance, NBTTagCompound nbt) { boolean matchnbt = ScriptParseHelper.matches(nbt, override.getTypeBlockTag()); @@ -85,19 +89,19 @@ public class ScriptChecker boolean matchmaterial = ScriptParseHelper.matches(material, override.getTypeMaterial()); boolean matchhardness = ScriptParseHelper.matches(hardness, override.getTypeHardness()); boolean matchresistance = ScriptParseHelper.matches(resistance, override.getTypeResistance()); - + return (matchnbt && matchblock && matchmeta && matchmaterial && matchhardness && matchresistance); } - + public static boolean fulfillsConditions(CarryOnOverride override, EntityPlayer player) { boolean achievement = ScriptParseHelper.getAchievementFromString(override.getConditionAchievement()) == null ? true : player.hasAchievement(ScriptParseHelper.getAchievementFromString(override.getConditionAchievement())); - boolean gamemode = ScriptParseHelper.matches(((EntityPlayerMP)player).interactionManager.getGameType().getID(), override.getConditionGamemode()); + boolean gamemode = ScriptParseHelper.matches(((EntityPlayerMP) player).interactionManager.getGameType().getID(), override.getConditionGamemode()); boolean gamestage = Loader.isModLoaded("gamestages") ? (override.getConditionGamestage() != null ? PlayerDataHandler.getStageData(player).hasUnlockedStage(override.getConditionGamestage()) : true) : true; boolean position = ScriptParseHelper.matches(player.getPosition(), override.getConditionPosition()); boolean xp = ScriptParseHelper.matches(player.experienceLevel, override.getConditionXp()); boolean scoreboard = ScriptParseHelper.matchesScore(player, override.getConditionScoreboard()); - + return (achievement && gamemode && gamestage && position && xp && scoreboard); } } diff --git a/src/main/java/tschipp/carryon/common/scripting/ScriptReader.java b/src/main/java/tschipp/carryon/common/scripting/ScriptReader.java index 3202767..cdc63da 100644 --- a/src/main/java/tschipp/carryon/common/scripting/ScriptReader.java +++ b/src/main/java/tschipp/carryon/common/scripting/ScriptReader.java @@ -71,6 +71,7 @@ public class ScriptReader if (block != null) { + override.setBlock(true); JsonElement name = block.get("name"); JsonElement meta = block.get("meta"); JsonElement material = block.get("material"); @@ -93,6 +94,7 @@ public class ScriptReader } else { + override.setEntity(true); JsonElement name = entity.get("name"); JsonElement health = entity.get("health"); JsonElement height = entity.get("height"); From 604a8fe8e1b64a5b422d98c66c7609c4d246f7fd Mon Sep 17 00:00:00 2001 From: Tschipp Date: Thu, 28 Sep 2017 17:09:51 +0200 Subject: [PATCH 09/13] Added Scripting Again .-. --- .../client/event/RenderEntityEvents.java | 539 +++++----- .../carryon/client/event/RenderEvents.java | 950 +++++++++--------- 2 files changed, 800 insertions(+), 689 deletions(-) diff --git a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java index 71d3fa5..49e53a7 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java @@ -12,9 +12,12 @@ import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.settings.GameSettings; import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; @@ -27,279 +30,349 @@ import net.minecraftforge.fml.common.gameevent.InputEvent; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import tschipp.carryon.common.handler.RegistrationHandler; +import tschipp.carryon.common.helper.ScriptParseHelper; import tschipp.carryon.common.item.ItemEntity; +import tschipp.carryon.common.scripting.CarryOnOverride; +import tschipp.carryon.common.scripting.ScriptChecker; public class RenderEntityEvents { - /* - * Prevents the Player from scrolling - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void onScroll(MouseEvent event) throws IllegalArgumentException, IllegalAccessException - { - if (event.getDwheel() > 0 || event.getDwheel() < 0 || Minecraft.getMinecraft().gameSettings.keyBindPickBlock.isPressed()) - { - ItemStack stack = Minecraft.getMinecraft().player.getHeldItemMainhand(); + /* + * Prevents the Player from scrolling + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onScroll(MouseEvent event) throws IllegalArgumentException, IllegalAccessException + { + if (event.getDwheel() > 0 || event.getDwheel() < 0 || Minecraft.getMinecraft().gameSettings.keyBindPickBlock.isPressed()) + { + ItemStack stack = Minecraft.getMinecraft().player.getHeldItemMainhand(); - if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity) - { - if (ItemEntity.hasEntityData(stack)) - { - event.setCanceled(true); - } - } - } - } + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity) + { + if (ItemEntity.hasEntityData(stack)) + { + event.setCanceled(true); + } + } + } + } - /* - * Prevents the Player from opening Guis - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void onGuiOpen(GuiOpenEvent event) - { - if (event.getGui() != null) - { - boolean inventory = event.getGui() instanceof GuiContainer; - EntityPlayer player = Minecraft.getMinecraft().player; + /* + * Prevents the Player from opening Guis + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onGuiOpen(GuiOpenEvent event) + { + if (event.getGui() != null) + { + boolean inventory = event.getGui() instanceof GuiContainer; + EntityPlayer player = Minecraft.getMinecraft().player; - if (player != null) - { - ItemStack stack = player.getHeldItem(EnumHand.MAIN_HAND); + if (player != null) + { + ItemStack stack = player.getHeldItem(EnumHand.MAIN_HAND); - if (inventory && !stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) - { - event.setCanceled(true); - Minecraft.getMinecraft().currentScreen = null; - } - } - } - } + if (inventory && !stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) + { + event.setCanceled(true); + Minecraft.getMinecraft().currentScreen = null; + } + } + } + } - /* - * Prevents the Player from switching Slots - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void inputEvent(InputEvent event) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InvocationTargetException - { - GameSettings settings = Minecraft.getMinecraft().gameSettings; - Field field = KeyBinding.class.getDeclaredFields()[7]; - field.setAccessible(true); - ItemStack stack = Minecraft.getMinecraft().player.getHeldItemMainhand(); - EntityPlayer player = Minecraft.getMinecraft().player; + /* + * Prevents the Player from switching Slots + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void inputEvent(InputEvent event) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InvocationTargetException + { + GameSettings settings = Minecraft.getMinecraft().gameSettings; + Field field = KeyBinding.class.getDeclaredFields()[7]; + field.setAccessible(true); + ItemStack stack = Minecraft.getMinecraft().player.getHeldItemMainhand(); + EntityPlayer player = Minecraft.getMinecraft().player; - if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) - { - if (settings.keyBindDrop.isPressed()) - { - field.set(settings.keyBindDrop, false); - } - if (settings.keyBindSwapHands.isPressed()) - { - field.set(settings.keyBindSwapHands, false); - } - for (KeyBinding keyBind : settings.keyBindsHotbar) - { - if (keyBind.isPressed()) - { - field.set(keyBind, false); - } - } - } + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) + { + if (settings.keyBindDrop.isPressed()) + { + field.set(settings.keyBindDrop, false); + } + if (settings.keyBindSwapHands.isPressed()) + { + field.set(settings.keyBindSwapHands, false); + } + for (KeyBinding keyBind : settings.keyBindsHotbar) + { + if (keyBind.isPressed()) + { + field.set(keyBind, false); + } + } + } - int current = player.inventory.currentItem; + int current = player.inventory.currentItem; - if (player.getEntityData().hasKey("carrySlot") ? player.getEntityData().getInteger("carrySlot") != current : false) - { - player.inventory.currentItem = player.getEntityData().getInteger("carrySlot"); - } - } + if (player.getEntityData().hasKey("carrySlot") ? player.getEntityData().getInteger("carrySlot") != current : false) + { + player.inventory.currentItem = player.getEntityData().getInteger("carrySlot"); + } + } - /* - * Renders the Entity in First Person - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void renderHand(RenderHandEvent event) - { - World world = Minecraft.getMinecraft().world; - EntityPlayer player = Minecraft.getMinecraft().player; - ItemStack stack = player.getHeldItemMainhand(); - int perspective = Minecraft.getMinecraft().gameSettings.thirdPersonView; - float partialticks = event.getPartialTicks(); + /* + * Renders the Entity in First Person + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void renderHand(RenderHandEvent event) + { + World world = Minecraft.getMinecraft().world; + EntityPlayer player = Minecraft.getMinecraft().player; + ItemStack stack = player.getHeldItemMainhand(); + int perspective = Minecraft.getMinecraft().gameSettings.thirdPersonView; + float partialticks = event.getPartialTicks(); - if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) - { - Entity entity = ItemEntity.getEntity(stack, world); + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) + { + Entity entity = ItemEntity.getEntity(stack, world); - if (entity != null) - { - double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialticks; - double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialticks; - double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialticks; + if (entity != null) + { + double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialticks; + double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialticks; + double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialticks; - entity.setPosition(d0, d1, d2); - entity.rotationYaw = 0.0f; - entity.prevRotationYaw = 0.0f; - entity.setRotationYawHead(0.0f); + entity.setPosition(d0, d1, d2); + entity.rotationYaw = 0.0f; + entity.prevRotationYaw = 0.0f; + entity.setRotationYawHead(0.0f); - float height = entity.height; - float width = entity.width; - GlStateManager.pushMatrix(); - GlStateManager.scale(.8, .8, .8); - GlStateManager.rotate(180, 0, 1, 0); - GlStateManager.translate(0.0, -height - .1, width + 0.1); - GlStateManager.enableAlpha(); + float height = entity.height; + float width = entity.width; + GlStateManager.pushMatrix(); + GlStateManager.scale(.8, .8, .8); + GlStateManager.rotate(180, 0, 1, 0); + GlStateManager.translate(0.0, -height - .1, width + 0.1); + GlStateManager.enableAlpha(); - if (perspective == 0) - { - RenderHelper.enableStandardItemLighting(); - Minecraft.getMinecraft().getRenderManager().setRenderShadow(false); - this.renderEntityStatic(entity); - Minecraft.getMinecraft().getRenderManager().setRenderShadow(true); - } + if (perspective == 0) + { + RenderHelper.enableStandardItemLighting(); + Minecraft.getMinecraft().getRenderManager().setRenderShadow(false); - GlStateManager.disableAlpha(); - GlStateManager.scale(1, 1, 1); - GlStateManager.popMatrix(); + CarryOnOverride carryOverride = ScriptChecker.inspectEntity(entity); + if (carryOverride != null) + { + double[] translation = ScriptParseHelper.getXYZArray(carryOverride.getRenderTranslation()); + double[] rotation = ScriptParseHelper.getXYZArray(carryOverride.getRenderRotation()); + double[] scale = ScriptParseHelper.getScale(carryOverride.getRenderScale()); + String entityname = carryOverride.getRenderNameEntity(); + if (entityname != null) + { + Entity newEntity = EntityList.createEntityByIDFromName(new ResourceLocation(entityname), world); + if (newEntity != null) + { + NBTTagCompound nbttag = carryOverride.getRenderNBT(); + if (nbttag != null) + newEntity.readFromNBT(nbttag); + entity = newEntity; + entity.setPosition(d0, d1, d2); + entity.rotationYaw = 0.0f; + entity.prevRotationYaw = 0.0f; + entity.setRotationYawHead(0.0f); + } + } - RenderHelper.disableStandardItemLighting(); - GlStateManager.disableRescaleNormal(); - GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); - GlStateManager.disableTexture2D(); - GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + GlStateManager.translate(translation[0], translation[1], translation[2]); + GlStateManager.rotate((float) rotation[0], 1, 0, 0); + GlStateManager.rotate((float) rotation[1], 0, 1, 0); + GlStateManager.rotate((float) rotation[2], 0, 0, 1); + GlStateManager.scale(scale[0], scale[1], scale[2]); - if (perspective == 0) - { - event.setCanceled(true); - } - } - } - } + } - @SideOnly(Side.CLIENT) - private void renderEntityStatic(Entity entity) - { - if (entity.ticksExisted == 0) - { - entity.lastTickPosX = entity.posX; - entity.lastTickPosY = entity.posY; - entity.lastTickPosZ = entity.posZ; - } + this.renderEntityStatic(entity); + Minecraft.getMinecraft().getRenderManager().setRenderShadow(true); + } - float f = entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw); - int i = this.getBrightnessForRender(entity, Minecraft.getMinecraft().player); + GlStateManager.disableAlpha(); + GlStateManager.scale(1, 1, 1); + GlStateManager.popMatrix(); - if (entity.isBurning()) - { - i = 15728880; - } + RenderHelper.disableStandardItemLighting(); + GlStateManager.disableRescaleNormal(); + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GlStateManager.disableTexture2D(); + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); - int j = i % 65536; - int k = i / 65536; - OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, j, k); - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + if (perspective == 0) + { + event.setCanceled(true); + } + } + } + } - this.setLightmapDisabled(false); - Minecraft.getMinecraft().getRenderManager().doRenderEntity(entity, 0.0D, 0.0D, 0.0D, f, 0.0F, true); - this.setLightmapDisabled(true); - } + @SideOnly(Side.CLIENT) + private void renderEntityStatic(Entity entity) + { + if (entity.ticksExisted == 0) + { + entity.lastTickPosX = entity.posX; + entity.lastTickPosY = entity.posY; + entity.lastTickPosZ = entity.posZ; + } - @SideOnly(Side.CLIENT) - private int getBrightnessForRender(Entity entity, EntityPlayer player) - { - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(MathHelper.floor(player.posX), 0, MathHelper.floor(player.posZ)); + float f = entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw); + int i = this.getBrightnessForRender(entity, Minecraft.getMinecraft().player); - if (entity.world.isBlockLoaded(blockpos$mutableblockpos)) - { - blockpos$mutableblockpos.setY(MathHelper.floor(player.posY + entity.getEyeHeight())); - return entity.world.getCombinedLight(blockpos$mutableblockpos, 0); - } - else - { - return 0; - } - } + if (entity.isBurning()) + { + i = 15728880; + } - @SideOnly(Side.CLIENT) - private void setLightmapDisabled(boolean disabled) - { - GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, j, k); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - if (disabled) - { - GlStateManager.disableTexture2D(); - } - else - { - GlStateManager.enableTexture2D(); - } + this.setLightmapDisabled(false); + + + + Minecraft.getMinecraft().getRenderManager().doRenderEntity(entity, 0.0D, 0.0D, 0.0D, f, 0.0F, true); + this.setLightmapDisabled(true); + } - GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); - } + @SideOnly(Side.CLIENT) + private int getBrightnessForRender(Entity entity, EntityPlayer player) + { + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(MathHelper.floor(player.posX), 0, MathHelper.floor(player.posZ)); - /* - * Renders the Block in Third Person - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void onPlayerRenderPost(RenderPlayerEvent.Post event) - { - World world = Minecraft.getMinecraft().world; - EntityPlayer player = event.getEntityPlayer(); - event.getRenderer().getMainModel(); - EntityPlayerSP clientPlayer = Minecraft.getMinecraft().player; - ItemStack stack = player.getHeldItemMainhand(); - float partialticks = event.getPartialRenderTick(); + if (entity.world.isBlockLoaded(blockpos$mutableblockpos)) + { + blockpos$mutableblockpos.setY(MathHelper.floor(player.posY + entity.getEyeHeight())); + return entity.world.getCombinedLight(blockpos$mutableblockpos, 0); + } + else + { + return 0; + } + } - if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) - { - Entity entity = ItemEntity.getEntity(stack, world); - float rotation = -(player.prevRenderYawOffset + (player.renderYawOffset - player.prevRenderYawOffset) * partialticks); + @SideOnly(Side.CLIENT) + private void setLightmapDisabled(boolean disabled) + { + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); - if (entity != null) - { - double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialticks; - double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialticks; - double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialticks; + if (disabled) + { + GlStateManager.disableTexture2D(); + } + else + { + GlStateManager.enableTexture2D(); + } - double c0 = clientPlayer.lastTickPosX + (clientPlayer.posX - clientPlayer.lastTickPosX) * partialticks; - double c1 = clientPlayer.lastTickPosY + (clientPlayer.posY - clientPlayer.lastTickPosY) * partialticks; - double c2 = clientPlayer.lastTickPosZ + (clientPlayer.posZ - clientPlayer.lastTickPosZ) * partialticks; + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + } - double xOffset = d0 - c0; - double yOffset = d1 - c1; - double zOffset = d2 - c2; + /* + * Renders the Block in Third Person + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onPlayerRenderPost(RenderPlayerEvent.Post event) + { + World world = Minecraft.getMinecraft().world; + EntityPlayer player = event.getEntityPlayer(); + event.getRenderer().getMainModel(); + EntityPlayerSP clientPlayer = Minecraft.getMinecraft().player; + ItemStack stack = player.getHeldItemMainhand(); + float partialticks = event.getPartialRenderTick(); - float height = entity.height; - float width = entity.width; - float multiplier = height * width; + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) + { + Entity entity = ItemEntity.getEntity(stack, world); + float rotation = -(player.prevRenderYawOffset + (player.renderYawOffset - player.prevRenderYawOffset) * partialticks); - entity.setPosition(c0, c1, c2); - entity.rotationYaw = 0.0f; - entity.prevRotationYaw = 0.0f; - entity.setRotationYawHead(0.0f); + if (entity != null) + { + double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialticks; + double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialticks; + double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialticks; - GlStateManager.pushMatrix(); - GlStateManager.translate(xOffset, yOffset, zOffset); - GlStateManager.scale((10 - multiplier) * 0.08, (10 - multiplier) * 0.08, (10 - multiplier) * 0.08); - GlStateManager.rotate(rotation, 0, 1f, 0); - GlStateManager.translate(0.0, height / 2 + -(height / 2) + 1, width - 0.1 < 0.7 ? width - 0.1 + (0.7 - (width - 0.1)) : width - 0.1); + double c0 = clientPlayer.lastTickPosX + (clientPlayer.posX - clientPlayer.lastTickPosX) * partialticks; + double c1 = clientPlayer.lastTickPosY + (clientPlayer.posY - clientPlayer.lastTickPosY) * partialticks; + double c2 = clientPlayer.lastTickPosZ + (clientPlayer.posZ - clientPlayer.lastTickPosZ) * partialticks; - if (player.isSneaking()) - { - GlStateManager.translate(0, -0.3, 0); - } + double xOffset = d0 - c0; + double yOffset = d1 - c1; + double zOffset = d2 - c2; - Minecraft.getMinecraft().getRenderManager().setRenderShadow(false); - Minecraft.getMinecraft().getRenderManager().renderEntityStatic(entity, 0.0f, false); - Minecraft.getMinecraft().getRenderManager().setRenderShadow(true); + float height = entity.height; + float width = entity.width; + float multiplier = height * width; - GlStateManager.scale(1, 1, 1); - GlStateManager.popMatrix(); - } - } - } + entity.setPosition(c0, c1, c2); + entity.rotationYaw = 0.0f; + entity.prevRotationYaw = 0.0f; + entity.setRotationYawHead(0.0f); + + GlStateManager.pushMatrix(); + GlStateManager.translate(xOffset, yOffset, zOffset); + GlStateManager.scale((10 - multiplier) * 0.08, (10 - multiplier) * 0.08, (10 - multiplier) * 0.08); + GlStateManager.rotate(rotation, 0, 1f, 0); + GlStateManager.translate(0.0, height / 2 + -(height / 2) + 1, width - 0.1 < 0.7 ? width - 0.1 + (0.7 - (width - 0.1)) : width - 0.1); + + if (player.isSneaking()) + { + GlStateManager.translate(0, -0.3, 0); + } + + Minecraft.getMinecraft().getRenderManager().setRenderShadow(false); + + CarryOnOverride carryOverride = ScriptChecker.inspectEntity(entity); + if (carryOverride != null) + { + double[] translation = ScriptParseHelper.getXYZArray(carryOverride.getRenderTranslation()); + double[] rot = ScriptParseHelper.getXYZArray(carryOverride.getRenderRotation()); + double[] scale = ScriptParseHelper.getScale(carryOverride.getRenderScale()); + String entityname = carryOverride.getRenderNameEntity(); + if (entityname != null) + { + Entity newEntity = EntityList.createEntityByIDFromName(new ResourceLocation(entityname), world); + if (newEntity != null) + { + NBTTagCompound nbttag = carryOverride.getRenderNBT(); + if (nbttag != null) + newEntity.readFromNBT(nbttag); + entity = newEntity; + entity.setPosition(d0, d1, d2); + entity.rotationYaw = 0.0f; + entity.prevRotationYaw = 0.0f; + entity.setRotationYawHead(0.0f); + } + } + + GlStateManager.translate(translation[0], translation[1], translation[2]); + GlStateManager.rotate((float) rot[0], 1, 0, 0); + GlStateManager.rotate((float) rot[1], 0, 1, 0); + GlStateManager.rotate((float) rot[2], 0, 0, 1); + GlStateManager.scale(scale[0], scale[1], scale[2]); + + } + + Minecraft.getMinecraft().getRenderManager().renderEntityStatic(entity, 0.0f, false); + Minecraft.getMinecraft().getRenderManager().setRenderShadow(true); + + GlStateManager.scale(1, 1, 1); + GlStateManager.popMatrix(); + } + } + } } diff --git a/src/main/java/tschipp/carryon/client/event/RenderEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEvents.java index af128b6..293042a 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEvents.java @@ -45,528 +45,566 @@ import tschipp.carryon.client.keybinds.CarryOnKeybinds; import tschipp.carryon.common.config.CarryOnConfig; import tschipp.carryon.common.handler.ModelOverridesHandler; import tschipp.carryon.common.handler.RegistrationHandler; +import tschipp.carryon.common.helper.ScriptParseHelper; +import tschipp.carryon.common.helper.StringParser; import tschipp.carryon.common.item.ItemEntity; import tschipp.carryon.common.item.ItemTile; +import tschipp.carryon.common.scripting.CarryOnOverride; +import tschipp.carryon.common.scripting.ScriptChecker; import tschipp.carryon.network.server.SyncKeybindPacket; public class RenderEvents { - private static boolean initModels; - private ModelRenderer fakeLeftArm; - private ModelRenderer fakeRightArm; - private ModelRenderer fakeLeftArmwear; - private ModelRenderer fakeRightArmwear; + private static boolean initModels; + private ModelRenderer fakeLeftArm; + private ModelRenderer fakeRightArm; + private ModelRenderer fakeLeftArmwear; + private ModelRenderer fakeRightArmwear; - /* - * Prevents the Player from scrolling - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void onScroll(MouseEvent event) - { - if (event.getDwheel() > 0 || event.getDwheel() < 0 || Minecraft.getMinecraft().gameSettings.keyBindPickBlock.isPressed()) - { - ItemStack stack = Minecraft.getMinecraft().player.getHeldItemMainhand(); + /* + * Prevents the Player from scrolling + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onScroll(MouseEvent event) + { + if (event.getDwheel() > 0 || event.getDwheel() < 0 || Minecraft.getMinecraft().gameSettings.keyBindPickBlock.isPressed()) + { + ItemStack stack = Minecraft.getMinecraft().player.getHeldItemMainhand(); - if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile) - { - if (ItemTile.hasTileData(stack)) - { - event.setCanceled(true); - } - } - } - } + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile) + { + if (ItemTile.hasTileData(stack)) + { + event.setCanceled(true); + } + } + } + } - @SubscribeEvent - @SideOnly(Side.CLIENT) - public void onPlayerTick(PlayerTickEvent event) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException - { - EntityPlayer player = event.player; + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void onPlayerTick(PlayerTickEvent event) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException + { + EntityPlayer player = event.player; - if (player != null && event.side == Side.CLIENT) - { - boolean keyPressed = CarryOnKeybinds.carryKey.isKeyDown(); - boolean playerKeyPressed = CarryOnKeybinds.isKeyPressed(player); + if (player != null && event.side == Side.CLIENT) + { + boolean keyPressed = CarryOnKeybinds.carryKey.isKeyDown(); + boolean playerKeyPressed = CarryOnKeybinds.isKeyPressed(player); - if (keyPressed && !playerKeyPressed) - { - CarryOnKeybinds.setKeyPressed(player, true); - CarryOn.network.sendToServer(new SyncKeybindPacket(true)); - } - else if (!keyPressed && playerKeyPressed) - { - CarryOnKeybinds.setKeyPressed(player, false); - CarryOn.network.sendToServer(new SyncKeybindPacket(false)); - } - } - } + if (keyPressed && !playerKeyPressed) + { + CarryOnKeybinds.setKeyPressed(player, true); + CarryOn.network.sendToServer(new SyncKeybindPacket(true)); + } + else if (!keyPressed && playerKeyPressed) + { + CarryOnKeybinds.setKeyPressed(player, false); + CarryOn.network.sendToServer(new SyncKeybindPacket(false)); + } + } + } - /* - * Prevents the Player from opening Guis - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void onGuiOpen(GuiOpenEvent event) - { - if (event.getGui() != null) - { - boolean inventory = event.getGui() instanceof GuiContainer; - EntityPlayer player = Minecraft.getMinecraft().player; + /* + * Prevents the Player from opening Guis + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onGuiOpen(GuiOpenEvent event) + { + if (event.getGui() != null) + { + boolean inventory = event.getGui() instanceof GuiContainer; + EntityPlayer player = Minecraft.getMinecraft().player; - if (player != null) - { - ItemStack stack = player.getHeldItem(EnumHand.MAIN_HAND); + if (player != null) + { + ItemStack stack = player.getHeldItem(EnumHand.MAIN_HAND); - if (inventory && !stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) - { - event.setCanceled(true); - Minecraft.getMinecraft().currentScreen = null; - } - } - } - } + if (inventory && !stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) + { + event.setCanceled(true); + Minecraft.getMinecraft().currentScreen = null; + } + } + } + } - /* - * Prevents the Player from switching Slots - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void inputEvent(InputEvent event) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException - { - GameSettings settings = Minecraft.getMinecraft().gameSettings; - Field field = KeyBinding.class.getDeclaredFields()[7]; - field.setAccessible(true); - ItemStack stack = Minecraft.getMinecraft().player.getHeldItemMainhand(); - EntityPlayer player = Minecraft.getMinecraft().player; + /* + * Prevents the Player from switching Slots + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void inputEvent(InputEvent event) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException + { + GameSettings settings = Minecraft.getMinecraft().gameSettings; + Field field = KeyBinding.class.getDeclaredFields()[7]; + field.setAccessible(true); + ItemStack stack = Minecraft.getMinecraft().player.getHeldItemMainhand(); + EntityPlayer player = Minecraft.getMinecraft().player; - if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) - { - if (settings.keyBindDrop.isPressed()) - { - field.set(settings.keyBindDrop, false); - } - if (settings.keyBindSwapHands.isPressed()) - { - field.set(settings.keyBindSwapHands, false); - } - for (KeyBinding keyBind : settings.keyBindsHotbar) - { - if (keyBind.isPressed()) - { - field.set(keyBind, false); - } - } - } + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) + { + if (settings.keyBindDrop.isPressed()) + { + field.set(settings.keyBindDrop, false); + } + if (settings.keyBindSwapHands.isPressed()) + { + field.set(settings.keyBindSwapHands, false); + } + for (KeyBinding keyBind : settings.keyBindsHotbar) + { + if (keyBind.isPressed()) + { + field.set(keyBind, false); + } + } + } - int current = player.inventory.currentItem; + int current = player.inventory.currentItem; - if (player.getEntityData().hasKey("carrySlot") ? player.getEntityData().getInteger("carrySlot") != current : false) - { - player.inventory.currentItem = player.getEntityData().getInteger("carrySlot"); - } - } + if (player.getEntityData().hasKey("carrySlot") ? player.getEntityData().getInteger("carrySlot") != current : false) + { + player.inventory.currentItem = player.getEntityData().getInteger("carrySlot"); + } + } - /* - * Renders the Block in First Person - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void renderHand(RenderHandEvent event) - { - World world = Minecraft.getMinecraft().world; - EntityPlayer player = Minecraft.getMinecraft().player; - AbstractClientPlayer aplayer = (AbstractClientPlayer) player; - ItemStack stack = player.getHeldItemMainhand(); - int perspective = Minecraft.getMinecraft().gameSettings.thirdPersonView; + /* + * Renders the Block in First Person + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void renderHand(RenderHandEvent event) + { + World world = Minecraft.getMinecraft().world; + EntityPlayer player = Minecraft.getMinecraft().player; + AbstractClientPlayer aplayer = (AbstractClientPlayer) player; + ItemStack stack = player.getHeldItemMainhand(); + int perspective = Minecraft.getMinecraft().gameSettings.thirdPersonView; - if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) - { - Block block = ItemTile.getBlock(stack); - NBTTagCompound tag = ItemTile.getTileData(stack); - IBlockState state = ItemTile.getBlockState(stack); - ItemStack tileStack = ItemTile.getItemStack(stack); + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) + { + Block block = ItemTile.getBlock(stack); + NBTTagCompound tag = ItemTile.getTileData(stack); + IBlockState state = ItemTile.getBlockState(stack); + ItemStack tileStack = ItemTile.getItemStack(stack); - GlStateManager.pushMatrix(); - GlStateManager.scale(2.5, 2.5, 2.5); - GlStateManager.translate(0, -0.6, -1); + GlStateManager.pushMatrix(); + GlStateManager.scale(2.5, 2.5, 2.5); + GlStateManager.translate(0, -0.6, -1); - if (CarryOnConfig.settings.facePlayer ? !isChest(block) : isChest(block)) - { - GlStateManager.rotate(180, 0, 1f, 0); - GlStateManager.rotate(-8, 1f, 0, 0); - } - else - { - GlStateManager.rotate(8, 1f, 0, 0); - } + if (CarryOnConfig.settings.facePlayer ? !isChest(block) : isChest(block)) + { + GlStateManager.rotate(180, 0, 1f, 0); + GlStateManager.rotate(-8, 1f, 0, 0); + } + else + { + GlStateManager.rotate(8, 1f, 0, 0); + } - if (perspective == 0) - { - IBakedModel model = ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag, world, player) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileStack, world, player); + if (perspective == 0) + { + IBakedModel model = ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag, world, player) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileStack, world, player); - if (ModelOverridesHandler.hasCustomOverrideModel(state, tag)) - { - Object override = ModelOverridesHandler.getOverrideObject(state, tag); + CarryOnOverride carryOverride = ScriptChecker.inspectBlock(state, world, player.getPosition(), tag); + if (carryOverride != null) + { + double[] translation = ScriptParseHelper.getXYZArray(carryOverride.getRenderTranslation()); + double[] rotation = ScriptParseHelper.getXYZArray(carryOverride.getRenderRotation()); + double[] scale = ScriptParseHelper.getScale(carryOverride.getRenderScale()); + Block b = StringParser.getBlock(carryOverride.getRenderNameBlock()); + if (b != null) + { + ItemStack s = new ItemStack(b, 1, carryOverride.getRenderMeta()); + s.setTagCompound(carryOverride.getRenderNBT()); + model = Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(s, world, player); + } - if (override instanceof ItemStack) - { - int i = this.getBrightnessForRender(Minecraft.getMinecraft().player); - int j = i % 65536; - int k = i / 65536; - OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, j, k); - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - this.setLightmapDisabled(false); - Minecraft.getMinecraft().getRenderItem().renderItem((ItemStack) override, model); - this.setLightmapDisabled(true); - } - else - { - int i = this.getBrightnessForRender(Minecraft.getMinecraft().player); - int j = i % 65536; - int k = i / 65536; - OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, j, k); - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - this.setLightmapDisabled(false); - Minecraft.getMinecraft().getRenderItem().renderItem(tileStack.isEmpty() ? stack : tileStack, model); - this.setLightmapDisabled(true); - } - } - else - { - int i = this.getBrightnessForRender(Minecraft.getMinecraft().player); - int j = i % 65536; - int k = i / 65536; - OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, j, k); - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - this.setLightmapDisabled(false); - Minecraft.getMinecraft().getRenderItem().renderItem(tileStack.isEmpty() ? stack : tileStack, model); - this.setLightmapDisabled(true); - } - } + GlStateManager.translate(translation[0], translation[1], translation[2]); + GlStateManager.rotate((float) rotation[0], 1, 0, 0); + GlStateManager.rotate((float) rotation[1], 0, 1, 0); + GlStateManager.rotate((float) rotation[2], 0, 0, 1); + GlStateManager.scale(scale[0], scale[1], scale[2]); - GlStateManager.scale(1, 1, 1); - GlStateManager.popMatrix(); + } - if (perspective == 0) - { - event.setCanceled(true); - } - } - else - { - if (stack.isEmpty() ? true : stack.getItem() != RegistrationHandler.itemEntity) - { - event.setCanceled(false); - Minecraft mc = Minecraft.getMinecraft(); - RenderManager manager = mc.getRenderManager(); - RenderPlayer renderPlayer = manager.getSkinMap().get(aplayer.getSkinType()); - ModelPlayer modelPlayer = renderPlayer.getMainModel(); - modelPlayer.bipedLeftArm.isHidden = false; - modelPlayer.bipedRightArm.isHidden = false; - modelPlayer.bipedLeftArmwear.isHidden = false; - modelPlayer.bipedRightArmwear.isHidden = false; - } - } - } + int i = this.getBrightnessForRender(Minecraft.getMinecraft().player); + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, j, k); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.setLightmapDisabled(false); - @SideOnly(Side.CLIENT) - private int getBrightnessForRender(EntityPlayer player) - { - BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(MathHelper.floor(player.posX), 0, MathHelper.floor(player.posZ)); + if (ModelOverridesHandler.hasCustomOverrideModel(state, tag)) + { + Object override = ModelOverridesHandler.getOverrideObject(state, tag); - if (player.world.isBlockLoaded(blockpos$mutableblockpos)) - { - blockpos$mutableblockpos.setY(MathHelper.floor(player.posY + player.getEyeHeight())); - return player.world.getCombinedLight(blockpos$mutableblockpos, 0); - } - else - { - return 0; - } - } + if (override instanceof ItemStack) + { - @SideOnly(Side.CLIENT) - private void setLightmapDisabled(boolean disabled) - { - GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + Minecraft.getMinecraft().getRenderItem().renderItem((ItemStack) override, model); + } + else + { + Minecraft.getMinecraft().getRenderItem().renderItem(tileStack.isEmpty() ? stack : tileStack, model); + } + } + else + { + Minecraft.getMinecraft().getRenderItem().renderItem(tileStack.isEmpty() ? stack : tileStack, model); + } - if (disabled) - { - GlStateManager.disableTexture2D(); - } - else - { - GlStateManager.enableTexture2D(); - } + this.setLightmapDisabled(true); - GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); - } + } - /* - * Renders the Block in Third Person - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void onPlayerRenderPost(RenderPlayerEvent.Post event) - { - World world = Minecraft.getMinecraft().world; - EntityPlayer player = event.getEntityPlayer(); - EntityPlayerSP clientPlayer = Minecraft.getMinecraft().player; - ItemStack stack = player.getHeldItemMainhand(); - float partialticks = event.getPartialRenderTick(); + GlStateManager.scale(1, 1, 1); + GlStateManager.popMatrix(); - if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) - { - Block block = ItemTile.getBlock(stack); - IBlockState state = ItemTile.getBlockState(stack); - NBTTagCompound tag = ItemTile.getTileData(stack); - ItemStack tileItem = ItemTile.getItemStack(stack); + if (perspective == 0) + { + event.setCanceled(true); + } + } + else + { + if (stack.isEmpty() ? true : stack.getItem() != RegistrationHandler.itemEntity) + { + event.setCanceled(false); + Minecraft mc = Minecraft.getMinecraft(); + RenderManager manager = mc.getRenderManager(); + RenderPlayer renderPlayer = manager.getSkinMap().get(aplayer.getSkinType()); + ModelPlayer modelPlayer = renderPlayer.getMainModel(); + modelPlayer.bipedLeftArm.isHidden = false; + modelPlayer.bipedRightArm.isHidden = false; + modelPlayer.bipedLeftArmwear.isHidden = false; + modelPlayer.bipedRightArmwear.isHidden = false; + } + } + } - float rotation = -(player.prevRenderYawOffset + (player.renderYawOffset - player.prevRenderYawOffset) * partialticks); + @SideOnly(Side.CLIENT) + private int getBrightnessForRender(EntityPlayer player) + { + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(MathHelper.floor(player.posX), 0, MathHelper.floor(player.posZ)); - double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialticks; - double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialticks; - double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialticks; + if (player.world.isBlockLoaded(blockpos$mutableblockpos)) + { + blockpos$mutableblockpos.setY(MathHelper.floor(player.posY + player.getEyeHeight())); + return player.world.getCombinedLight(blockpos$mutableblockpos, 0); + } + else + { + return 0; + } + } - double c0 = clientPlayer.lastTickPosX + (clientPlayer.posX - clientPlayer.lastTickPosX) * partialticks; - double c1 = clientPlayer.lastTickPosY + (clientPlayer.posY - clientPlayer.lastTickPosY) * partialticks; - double c2 = clientPlayer.lastTickPosZ + (clientPlayer.posZ - clientPlayer.lastTickPosZ) * partialticks; + @SideOnly(Side.CLIENT) + private void setLightmapDisabled(boolean disabled) + { + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); - double xOffset = d0 - c0; - double yOffset = d1 - c1; - double zOffset = d2 - c2; + if (disabled) + { + GlStateManager.disableTexture2D(); + } + else + { + GlStateManager.enableTexture2D(); + } - GlStateManager.pushMatrix(); - GlStateManager.translate(xOffset, yOffset, zOffset); - GlStateManager.scale(0.6, 0.6, 0.6); + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + } - if (CarryOnConfig.settings.facePlayer ? !isChest(block) : isChest(block)) - { - GlStateManager.rotate(rotation, 0, 1.0f, 0); - GlStateManager.translate(0, 1.6, 0.65); - } - else - { - GlStateManager.rotate(rotation + 180, 0, 1.0f, 0); - GlStateManager.translate(0, 1.6, -0.65); - } + /* + * Renders the Block in Third Person + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onPlayerRenderPost(RenderPlayerEvent.Post event) + { + World world = Minecraft.getMinecraft().world; + EntityPlayer player = event.getEntityPlayer(); + EntityPlayerSP clientPlayer = Minecraft.getMinecraft().player; + ItemStack stack = player.getHeldItemMainhand(); + float partialticks = event.getPartialRenderTick(); - if (player.isSneaking()) - { - GlStateManager.translate(0, -0.3, 0); - } + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack)) + { + Block block = ItemTile.getBlock(stack); + IBlockState state = ItemTile.getBlockState(stack); + NBTTagCompound tag = ItemTile.getTileData(stack); + ItemStack tileItem = ItemTile.getItemStack(stack); - IBakedModel model = ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag, world, player) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileItem, world, player); + float rotation = -(player.prevRenderYawOffset + (player.renderYawOffset - player.prevRenderYawOffset) * partialticks); - if (ModelOverridesHandler.hasCustomOverrideModel(state, tag)) - { - Object override = ModelOverridesHandler.getOverrideObject(state, tag); + double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialticks; + double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialticks; + double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialticks; - if (override instanceof ItemStack) - { - Minecraft.getMinecraft().getRenderItem().renderItem((ItemStack) override, model); - } - else - { - Minecraft.getMinecraft().getRenderItem().renderItem(tileItem.isEmpty() ? stack : tileItem, model); - } - } - else - { - Minecraft.getMinecraft().getRenderItem().renderItem(tileItem.isEmpty() ? stack : tileItem, model); - } + double c0 = clientPlayer.lastTickPosX + (clientPlayer.posX - clientPlayer.lastTickPosX) * partialticks; + double c1 = clientPlayer.lastTickPosY + (clientPlayer.posY - clientPlayer.lastTickPosY) * partialticks; + double c2 = clientPlayer.lastTickPosZ + (clientPlayer.posZ - clientPlayer.lastTickPosZ) * partialticks; - GlStateManager.scale(1, 1, 1); - GlStateManager.popMatrix(); - } - } + double xOffset = d0 - c0; + double yOffset = d1 - c1; + double zOffset = d2 - c2; - /* - * Renders correct arm rotation - */ - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void onPlayerRenderPre(RenderPlayerEvent.Pre event) - { - if (!Loader.isModLoaded("mobends") && CarryOnConfig.settings.renderArms) - { - EntityPlayer player = event.getEntityPlayer(); - AbstractClientPlayer aplayer = (AbstractClientPlayer) player; - ItemStack stack = player.getHeldItemMainhand(); - ModelPlayer model = event.getRenderer().getMainModel(); - ResourceLocation skinLoc = DefaultPlayerSkin.getDefaultSkin(player.getPersistentID()); + GlStateManager.pushMatrix(); + GlStateManager.translate(xOffset, yOffset, zOffset); + GlStateManager.scale(0.6, 0.6, 0.6); - if (!initModels) - { - this.fakeLeftArm = new ModelRenderer(model, 32, 48); - this.fakeRightArm = new ModelRenderer(model, 40, 16); - this.fakeLeftArmwear = new ModelRenderer(model, 48, 48); - this.fakeRightArmwear = new ModelRenderer(model, 40, 32); - initModels = true; - } + if (CarryOnConfig.settings.facePlayer ? !isChest(block) : isChest(block)) + { + GlStateManager.rotate(rotation, 0, 1.0f, 0); + GlStateManager.translate(0, 1.6, 0.65); + } + else + { + GlStateManager.rotate(rotation + 180, 0, 1.0f, 0); + GlStateManager.translate(0, 1.6, -0.65); + } - player.setArrowCountInEntity(0); // TODO Temporary Fix + if (player.isSneaking()) + { + GlStateManager.translate(0, -0.3, 0); + } - if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack) || stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) - { - if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) - { - for (int k = 0; k < model.bipedBody.childModels.size(); k++) - { - float chkRot = model.bipedBody.childModels.get(k).rotateAngleX; + IBakedModel model = ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag, world, player) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileItem, world, player); - if (chkRot == -0.9001F || chkRot == -1.2001F || chkRot == -1.4001F || chkRot == -1.7001F) - { - model.bipedBody.childModels.remove(k); - k = k - 1; - } - } - } + CarryOnOverride carryOverride = ScriptChecker.inspectBlock(state, world, player.getPosition(), tag); + if (carryOverride != null) + { + double[] translation = ScriptParseHelper.getXYZArray(carryOverride.getRenderTranslation()); + double[] rot = ScriptParseHelper.getXYZArray(carryOverride.getRenderRotation()); + double[] scale = ScriptParseHelper.getScale(carryOverride.getRenderScale()); + Block b = StringParser.getBlock(carryOverride.getRenderNameBlock()); + if (b != null) + { + ItemStack s = new ItemStack(b, 1, carryOverride.getRenderMeta()); + s.setTagCompound(carryOverride.getRenderNBT()); + model = Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(s, world, player); + } - Item item = stack.getItem(); + GlStateManager.translate(translation[0], translation[1], translation[2]); + GlStateManager.rotate((float) rot[0], 1, 0, 0); + GlStateManager.rotate((float) rot[1], 0, 1, 0); + GlStateManager.rotate((float) rot[2], 0, 0, 1); + GlStateManager.scale(scale[0], scale[1], scale[2]); - model.bipedLeftArm.isHidden = true; - model.bipedRightArm.isHidden = true; - model.bipedLeftArmwear.isHidden = true; - model.bipedRightArmwear.isHidden = true; + } + + if (ModelOverridesHandler.hasCustomOverrideModel(state, tag)) + { + Object override = ModelOverridesHandler.getOverrideObject(state, tag); - Minecraft.getMinecraft().getTextureManager().bindTexture(skinLoc); + if (override instanceof ItemStack) + { + Minecraft.getMinecraft().getRenderItem().renderItem((ItemStack) override, model); + } + else + { + Minecraft.getMinecraft().getRenderItem().renderItem(tileItem.isEmpty() ? stack : tileItem, model); + } + } + else + { + Minecraft.getMinecraft().getRenderItem().renderItem(tileItem.isEmpty() ? stack : tileItem, model); + } - if (aplayer.getSkinType().equals("default")) - { - //left arm - this.fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 4, 12, 4, .08F); - this.fakeLeftArmwear.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 4, 12, 4, .08F + 0.25F); + GlStateManager.scale(1, 1, 1); + GlStateManager.popMatrix(); + } + } - //right arm - this.fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.9F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 4, 12, 4, .08F); - this.fakeRightArmwear.addBox(model.bipedRightArm.offsetX - 7.9F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 4, 12, 4, .08F + 0.25F); - } - else - { - //left arm - this.fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 3, 12, 4, .08F); - this.fakeLeftArmwear.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 3, 12, 4, .08F + 0.25F); + /* + * Renders correct arm rotation + */ + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onPlayerRenderPre(RenderPlayerEvent.Pre event) + { + if (!Loader.isModLoaded("mobends") && CarryOnConfig.settings.renderArms) + { + EntityPlayer player = event.getEntityPlayer(); + AbstractClientPlayer aplayer = (AbstractClientPlayer) player; + ItemStack stack = player.getHeldItemMainhand(); + ModelPlayer model = event.getRenderer().getMainModel(); + ResourceLocation skinLoc = DefaultPlayerSkin.getDefaultSkin(player.getPersistentID()); - //right arm - this.fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.2F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 3, 12, 4, .08F); - this.fakeRightArmwear.addBox(model.bipedRightArm.offsetX - 7.2F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 3, 12, 4, .08F + 0.25F); - } + if (!initModels) + { + this.fakeLeftArm = new ModelRenderer(model, 32, 48); + this.fakeRightArm = new ModelRenderer(model, 40, 16); + this.fakeLeftArmwear = new ModelRenderer(model, 48, 48); + this.fakeRightArmwear = new ModelRenderer(model, 40, 32); + initModels = true; + } - if (item == RegistrationHandler.itemTile) - { - if (!player.isSneaking()) - { - this.fakeRightArm.rotateAngleX = -.9001F; - this.fakeLeftArm.rotateAngleX = -.9001F; - this.fakeLeftArmwear.rotateAngleX = -.9001F; - this.fakeRightArmwear.rotateAngleX = -.9001F; - } - else - { - this.fakeRightArm.rotateAngleX = -1.4001F; - this.fakeLeftArm.rotateAngleX = -1.4001F; - this.fakeLeftArmwear.rotateAngleX = -1.4001F; - this.fakeRightArmwear.rotateAngleX = -1.4001F; - } - } - else - { - if (!player.isSneaking()) - { - this.fakeRightArm.rotateAngleX = -1.2001F; - this.fakeLeftArm.rotateAngleX = -1.2001F; - this.fakeLeftArmwear.rotateAngleX = -1.2001F; - this.fakeRightArmwear.rotateAngleX = -1.2001F; - } - else - { - this.fakeRightArm.rotateAngleX = -1.7001F; - this.fakeLeftArm.rotateAngleX = -1.7001F; - this.fakeLeftArmwear.rotateAngleX = -1.7001F; - this.fakeRightArmwear.rotateAngleX = -1.7001F; - } + player.setArrowCountInEntity(0); // TODO Temporary Fix - this.fakeRightArm.rotateAngleY = -0.15f; - this.fakeLeftArm.rotateAngleY = 0.15f; - this.fakeLeftArmwear.rotateAngleY = 0.15f; - this.fakeRightArmwear.rotateAngleY = -0.15f; - } + if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack) || stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) + { + if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) + { + for (int k = 0; k < model.bipedBody.childModels.size(); k++) + { + float chkRot = model.bipedBody.childModels.get(k).rotateAngleX; - model.bipedBody.addChild(this.fakeLeftArm); - model.bipedBody.addChild(this.fakeRightArm); + if (chkRot == -0.9001F || chkRot == -1.2001F || chkRot == -1.4001F || chkRot == -1.7001F) + { + model.bipedBody.childModels.remove(k); + k = k - 1; + } + } + } - if (player.isWearing(EnumPlayerModelParts.LEFT_SLEEVE)) - { - model.bipedBody.addChild(this.fakeLeftArmwear); - } - if (player.isWearing(EnumPlayerModelParts.RIGHT_SLEEVE)) - { - model.bipedBody.addChild(this.fakeRightArmwear); - } - } - else - { - model.bipedLeftArm.isHidden = false; - model.bipedRightArm.isHidden = false; - model.bipedLeftArmwear.isHidden = false; - model.bipedRightArmwear.isHidden = false; + Item item = stack.getItem(); - if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) - { - for (int k = 0; k < model.bipedBody.childModels.size(); k++) - { - float chkRot = model.bipedBody.childModels.get(k).rotateAngleX; + model.bipedLeftArm.isHidden = true; + model.bipedRightArm.isHidden = true; + model.bipedLeftArmwear.isHidden = true; + model.bipedRightArmwear.isHidden = true; - if (chkRot == -0.9001F || chkRot == -1.2001F || chkRot == -1.4001F || chkRot == -1.7001F) - { - model.bipedBody.childModels.remove(k); - k = k - 1; - } - } - } - } + Minecraft.getMinecraft().getTextureManager().bindTexture(skinLoc); - if (stack.isEmpty() || stack.getItem() != RegistrationHandler.itemTile && stack.getItem() != RegistrationHandler.itemEntity) - { - model.bipedLeftArm.isHidden = false; - model.bipedRightArm.isHidden = false; - model.bipedLeftArmwear.isHidden = false; - model.bipedRightArmwear.isHidden = false; - } - } - } + if (aplayer.getSkinType().equals("default")) + { + // left arm + this.fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 4, 12, 4, .08F); + this.fakeLeftArmwear.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 4, 12, 4, .08F + 0.25F); - public static boolean isChest(Block block) - { - return block == Blocks.CHEST || block == Blocks.ENDER_CHEST || block == Blocks.TRAPPED_CHEST; - } + // right arm + this.fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.9F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 4, 12, 4, .08F); + this.fakeRightArmwear.addBox(model.bipedRightArm.offsetX - 7.9F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 4, 12, 4, .08F + 0.25F); + } + else + { + // left arm + this.fakeLeftArm.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 3, 12, 4, .08F); + this.fakeLeftArmwear.addBox(model.bipedLeftArm.offsetX + 4.2F, model.bipedLeftArm.offsetY, model.bipedLeftArm.offsetZ, 3, 12, 4, .08F + 0.25F); - @SideOnly(Side.CLIENT) - private static RenderPlayer getRenderPlayer(AbstractClientPlayer player) - { - Minecraft mc = Minecraft.getMinecraft(); - RenderManager manager = mc.getRenderManager(); - return manager.getSkinMap().get(player.getSkinType()); - } + // right arm + this.fakeRightArm.addBox(model.bipedRightArm.offsetX - 7.2F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 3, 12, 4, .08F); + this.fakeRightArmwear.addBox(model.bipedRightArm.offsetX - 7.2F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 3, 12, 4, .08F + 0.25F); + } - @SideOnly(Side.CLIENT) - private static ModelPlayer getPlayerModel(AbstractClientPlayer player) - { - return getRenderPlayer(player).getMainModel(); - } + if (item == RegistrationHandler.itemTile) + { + if (!player.isSneaking()) + { + this.fakeRightArm.rotateAngleX = -.9001F; + this.fakeLeftArm.rotateAngleX = -.9001F; + this.fakeLeftArmwear.rotateAngleX = -.9001F; + this.fakeRightArmwear.rotateAngleX = -.9001F; + } + else + { + this.fakeRightArm.rotateAngleX = -1.4001F; + this.fakeLeftArm.rotateAngleX = -1.4001F; + this.fakeLeftArmwear.rotateAngleX = -1.4001F; + this.fakeRightArmwear.rotateAngleX = -1.4001F; + } + } + else + { + if (!player.isSneaking()) + { + this.fakeRightArm.rotateAngleX = -1.2001F; + this.fakeLeftArm.rotateAngleX = -1.2001F; + this.fakeLeftArmwear.rotateAngleX = -1.2001F; + this.fakeRightArmwear.rotateAngleX = -1.2001F; + } + else + { + this.fakeRightArm.rotateAngleX = -1.7001F; + this.fakeLeftArm.rotateAngleX = -1.7001F; + this.fakeLeftArmwear.rotateAngleX = -1.7001F; + this.fakeRightArmwear.rotateAngleX = -1.7001F; + } - @SubscribeEvent - @SideOnly(Side.CLIENT) - public void hideItems(RenderPlayerEvent.Specials.Pre event) - { - EntityPlayer player = event.getEntityPlayer(); - ItemStack stack = player.getHeldItemMainhand(); + this.fakeRightArm.rotateAngleY = -0.15f; + this.fakeLeftArm.rotateAngleY = 0.15f; + this.fakeLeftArmwear.rotateAngleY = 0.15f; + this.fakeRightArmwear.rotateAngleY = -0.15f; + } - if (stack != null && (stack.getItem() == RegistrationHandler.itemTile || stack.getItem() == RegistrationHandler.itemEntity)) - { - event.setRenderItem(false); - } - } + model.bipedBody.addChild(this.fakeLeftArm); + model.bipedBody.addChild(this.fakeRightArm); + + if (player.isWearing(EnumPlayerModelParts.LEFT_SLEEVE)) + { + model.bipedBody.addChild(this.fakeLeftArmwear); + } + if (player.isWearing(EnumPlayerModelParts.RIGHT_SLEEVE)) + { + model.bipedBody.addChild(this.fakeRightArmwear); + } + } + else + { + model.bipedLeftArm.isHidden = false; + model.bipedRightArm.isHidden = false; + model.bipedLeftArmwear.isHidden = false; + model.bipedRightArmwear.isHidden = false; + + if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) + { + for (int k = 0; k < model.bipedBody.childModels.size(); k++) + { + float chkRot = model.bipedBody.childModels.get(k).rotateAngleX; + + if (chkRot == -0.9001F || chkRot == -1.2001F || chkRot == -1.4001F || chkRot == -1.7001F) + { + model.bipedBody.childModels.remove(k); + k = k - 1; + } + } + } + } + + if (stack.isEmpty() || stack.getItem() != RegistrationHandler.itemTile && stack.getItem() != RegistrationHandler.itemEntity) + { + model.bipedLeftArm.isHidden = false; + model.bipedRightArm.isHidden = false; + model.bipedLeftArmwear.isHidden = false; + model.bipedRightArmwear.isHidden = false; + } + } + } + + public static boolean isChest(Block block) + { + return block == Blocks.CHEST || block == Blocks.ENDER_CHEST || block == Blocks.TRAPPED_CHEST; + } + + @SideOnly(Side.CLIENT) + private static RenderPlayer getRenderPlayer(AbstractClientPlayer player) + { + Minecraft mc = Minecraft.getMinecraft(); + RenderManager manager = mc.getRenderManager(); + return manager.getSkinMap().get(player.getSkinType()); + } + + @SideOnly(Side.CLIENT) + private static ModelPlayer getPlayerModel(AbstractClientPlayer player) + { + return getRenderPlayer(player).getMainModel(); + } + + @SubscribeEvent + @SideOnly(Side.CLIENT) + public void hideItems(RenderPlayerEvent.Specials.Pre event) + { + EntityPlayer player = event.getEntityPlayer(); + ItemStack stack = player.getHeldItemMainhand(); + + if (stack != null && (stack.getItem() == RegistrationHandler.itemTile || stack.getItem() == RegistrationHandler.itemEntity)) + { + event.setRenderItem(false); + } + } } From 33066df231dfe92c04e443f30a0826bab3fa8d7c Mon Sep 17 00:00:00 2001 From: Tschipp Date: Thu, 28 Sep 2017 17:27:56 +0200 Subject: [PATCH 10/13] Significantly increased load time when using many mods --- .../carryon/common/handler/ListHandler.java | 86 +++++++++++-------- 1 file changed, 49 insertions(+), 37 deletions(-) diff --git a/src/main/java/tschipp/carryon/common/handler/ListHandler.java b/src/main/java/tschipp/carryon/common/handler/ListHandler.java index efacc80..83a23bc 100644 --- a/src/main/java/tschipp/carryon/common/handler/ListHandler.java +++ b/src/main/java/tschipp/carryon/common/handler/ListHandler.java @@ -18,7 +18,23 @@ public class ListHandler public static boolean isForbidden(Block block) { - return FORBIDDEN_TILES.contains(block.getRegistryName().toString()); + String name = block.getRegistryName().toString(); + if (FORBIDDEN_TILES.contains(name)) + return true; + else + { + boolean contains = false; + for (String s : FORBIDDEN_TILES) + { + if (s.contains("*")) + { + if(name.contains(s.replace("*", ""))) + contains = true; + } + } + + return contains; + } } public static boolean isForbidden(Entity entity) @@ -32,7 +48,8 @@ public class ListHandler return true; } - public static boolean isAllowed(Entity entity){ + public static boolean isAllowed(Entity entity) + { if (EntityList.getKey(entity) != null) { String name = EntityList.getKey(entity).toString(); @@ -41,12 +58,28 @@ public class ListHandler } return true; } - + public static boolean isAllowed(Block block) { - return ALLOWED_TILES.contains(block.getRegistryName().toString()); + String name = block.getRegistryName().toString(); + if (ALLOWED_TILES.contains(name)) + return true; + else + { + boolean contains = false; + for (String s : ALLOWED_TILES) + { + if (s.contains("*")) + { + if(name.contains(s.replace("*", ""))) + contains = true; + } + } + return contains; + } + } - + public static void initForbiddenTiles() { String[] forbidden = CarryOnConfig.blacklist.forbiddenTiles; @@ -54,17 +87,6 @@ public class ListHandler for (int i = 0; i < forbidden.length; i++) { - if (forbidden[i].contains("*")) - { - String modid = forbidden[i].replace("*", ""); - for (int k = 0; k < Block.REGISTRY.getKeys().size(); k++) - { - if (Block.REGISTRY.getKeys().toArray()[k].toString().contains(modid)) - { - FORBIDDEN_TILES.add(Block.REGISTRY.getKeys().toArray()[k].toString()); - } - } - } FORBIDDEN_TILES.add(forbidden[i]); } @@ -86,39 +108,29 @@ public class ListHandler } FORBIDDEN_ENTITIES.add(forbiddenEntity[i]); } - - String [] allowedEntities=CarryOnConfig.whitelist.allowedEntities; - ALLOWED_ENTITIES=new ArrayList(); - for(int i=0;i(); + for (int i = 0; i < allowedEntities.length; i++) + { + if (allowedEntities[i].contains("*")) { - String modid=allowedEntities[i].replace("*", ""); - for(int k=0;k(); - for (int i = 0; i < allowedBlocks.length; i++) { - if (allowedBlocks[i].contains("*")) - { - String modid = allowedBlocks[i].replace("*", ""); - for (int k = 0; k < Block.REGISTRY.getKeys().size(); k++) - { - if (Block.REGISTRY.getKeys().toArray()[k].toString().contains(modid)) - { - ALLOWED_TILES.add(Block.REGISTRY.getKeys().toArray()[k].toString()); - } - } - } ALLOWED_TILES.add(allowedBlocks[i]); } } From 99709703d8f552ad124d2699bc9bc597b6f55e30 Mon Sep 17 00:00:00 2001 From: Tschipp Date: Sun, 1 Oct 2017 17:57:08 +0200 Subject: [PATCH 11/13] Added Arm rotation for scripting and increased script performance --- .../client/event/RenderEntityEvents.java | 2 +- .../carryon/client/event/RenderEvents.java | 255 +++++++++++--- .../common/command/CommandCarryOn.java | 5 - .../common/event/ItemEntityEvents.java | 10 +- .../carryon/common/event/ItemEvents.java | 10 +- .../carryon/common/item/ItemEntity.java | 1 + .../tschipp/carryon/common/item/ItemTile.java | 1 + .../common/scripting/CarryOnOverride.java | 323 +++++++++++++++++- .../common/scripting/ScriptChecker.java | 28 +- .../common/scripting/ScriptReader.java | 15 +- .../network/client/CarrySlotPacket.java | 19 +- .../client/CarrySlotPacketHandler.java | 11 + 12 files changed, 609 insertions(+), 71 deletions(-) diff --git a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java index 49e53a7..fabf50d 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java @@ -164,7 +164,7 @@ public class RenderEntityEvents RenderHelper.enableStandardItemLighting(); Minecraft.getMinecraft().getRenderManager().setRenderShadow(false); - CarryOnOverride carryOverride = ScriptChecker.inspectEntity(entity); + CarryOnOverride carryOverride = ScriptChecker.getOverride(player); if (carryOverride != null) { double[] translation = ScriptParseHelper.getXYZArray(carryOverride.getRenderTranslation()); diff --git a/src/main/java/tschipp/carryon/client/event/RenderEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEvents.java index 293042a..94ef9b5 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEvents.java @@ -209,7 +209,7 @@ public class RenderEvents { IBakedModel model = ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag, world, player) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileStack, world, player); - CarryOnOverride carryOverride = ScriptChecker.inspectBlock(state, world, player.getPosition(), tag); + CarryOnOverride carryOverride = ScriptChecker.getOverride(player); if (carryOverride != null) { double[] translation = ScriptParseHelper.getXYZArray(carryOverride.getRenderTranslation()); @@ -396,7 +396,7 @@ public class RenderEvents GlStateManager.scale(scale[0], scale[1], scale[2]); } - + if (ModelOverridesHandler.hasCustomOverrideModel(state, tag)) { Object override = ModelOverridesHandler.getOverrideObject(state, tag); @@ -448,16 +448,41 @@ public class RenderEvents if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack) || stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack)) { - if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) + CarryOnOverride overrider = ScriptChecker.getOverride(player); + if (overrider != null) { - for (int k = 0; k < model.bipedBody.childModels.size(); k++) + if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) { - float chkRot = model.bipedBody.childModels.get(k).rotateAngleX; - - if (chkRot == -0.9001F || chkRot == -1.2001F || chkRot == -1.4001F || chkRot == -1.7001F) + for (int k = 0; k < model.bipedBody.childModels.size(); k++) { - model.bipedBody.childModels.remove(k); - k = k - 1; + double[] rotLeft1 = ScriptParseHelper.getXYZArray(overrider.getRenderRotationLeftArm()); + double[] rotRight1 = ScriptParseHelper.getXYZArray(overrider.getRenderRotationRightArm()); + + float rotX = model.bipedBody.childModels.get(k).rotateAngleX; + float rotY = model.bipedBody.childModels.get(k).rotateAngleY; + float rotZ = model.bipedBody.childModels.get(k).rotateAngleZ; + + if (rotLeft1[0] == rotX || rotLeft1[1] == rotY || rotRight1[2] == rotZ || rotRight1[0] == rotX || rotRight1[1] == rotY || rotRight1[2] == rotZ || rotX == rotLeft1[0] -0.5f || rotX == rotRight1[0] -0.5f) + { + model.bipedBody.childModels.remove(k); + k = k - 1; + } + } + } + } + else + { + if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) + { + for (int k = 0; k < model.bipedBody.childModels.size(); k++) + { + float chkRot = model.bipedBody.childModels.get(k).rotateAngleX; + + if (chkRot == -0.9001F || chkRot == -1.2001F || chkRot == -1.4001F || chkRot == -1.7001F) + { + model.bipedBody.childModels.remove(k); + k = k - 1; + } } } } @@ -492,44 +517,169 @@ public class RenderEvents this.fakeRightArmwear.addBox(model.bipedRightArm.offsetX - 7.2F, model.bipedRightArm.offsetY, model.bipedRightArm.offsetZ, 3, 12, 4, .08F + 0.25F); } - if (item == RegistrationHandler.itemTile) + CarryOnOverride override = ScriptChecker.getOverride(player); + if (override != null) { - if (!player.isSneaking()) + double[] rotLeft = null; + double[] rotRight = null; + if (override.getRenderRotationLeftArm() != null) + rotLeft = ScriptParseHelper.getXYZArray(override.getRenderRotationLeftArm()); + if (override.getRenderRotationRightArm() != null) + rotRight = ScriptParseHelper.getXYZArray(override.getRenderRotationRightArm()); + + if (rotLeft != null) { - this.fakeRightArm.rotateAngleX = -.9001F; - this.fakeLeftArm.rotateAngleX = -.9001F; - this.fakeLeftArmwear.rotateAngleX = -.9001F; - this.fakeRightArmwear.rotateAngleX = -.9001F; + if (!player.isSneaking()) + { + this.fakeLeftArm.rotateAngleX = (float) rotLeft[0]; + this.fakeLeftArmwear.rotateAngleX = (float) rotLeft[0]; + } + else + { + this.fakeLeftArm.rotateAngleX = (float) rotLeft[0] - 0.5f; + this.fakeLeftArmwear.rotateAngleX = (float) rotLeft[0] - 0.5f; + } + + this.fakeLeftArmwear.rotateAngleY = (float) rotLeft[1]; + this.fakeLeftArmwear.rotateAngleZ = (float) rotLeft[2]; + this.fakeLeftArm.rotateAngleY = (float) rotLeft[1]; + this.fakeLeftArm.rotateAngleZ = (float) rotLeft[2]; } else { - this.fakeRightArm.rotateAngleX = -1.4001F; - this.fakeLeftArm.rotateAngleX = -1.4001F; - this.fakeLeftArmwear.rotateAngleX = -1.4001F; - this.fakeRightArmwear.rotateAngleX = -1.4001F; + if (item == RegistrationHandler.itemTile) + { + if (!player.isSneaking()) + { + this.fakeLeftArm.rotateAngleX = -.9001F; + this.fakeLeftArmwear.rotateAngleX = -.9001F; + } + else + { + this.fakeLeftArm.rotateAngleX = -1.4001F; + this.fakeLeftArmwear.rotateAngleX = -1.4001F; + } + } + else + { + if (!player.isSneaking()) + { + this.fakeLeftArm.rotateAngleX = -1.2001F; + this.fakeLeftArmwear.rotateAngleX = -1.2001F; + } + else + { + this.fakeLeftArm.rotateAngleX = -1.7001F; + this.fakeLeftArmwear.rotateAngleX = -1.7001F; + } + + this.fakeLeftArm.rotateAngleY = 0.15f; + this.fakeLeftArmwear.rotateAngleY = 0.15f; + } + } + + if (rotRight != null) + { + if (!player.isSneaking()) + { + this.fakeRightArm.rotateAngleX = (float) rotRight[0]; + this.fakeRightArmwear.rotateAngleX = (float) rotRight[0]; + } + else + { + this.fakeRightArm.rotateAngleX = (float) rotRight[0] - 0.5f; + this.fakeRightArmwear.rotateAngleX = (float) rotRight[0] - 0.5f; + } + + this.fakeRightArmwear.rotateAngleY = (float) rotRight[1]; + this.fakeRightArmwear.rotateAngleZ = (float) rotRight[2]; + this.fakeRightArm.rotateAngleY = (float) rotRight[1]; + this.fakeRightArm.rotateAngleZ = (float) rotRight[2]; + } + else + { + if (item == RegistrationHandler.itemTile) + { + if (!player.isSneaking()) + { + this.fakeRightArm.rotateAngleX = -.9001F; + this.fakeRightArmwear.rotateAngleX = -.9001F; + } + else + { + this.fakeRightArm.rotateAngleX = -1.4001F; + this.fakeRightArmwear.rotateAngleX = -1.4001F; + } + } + else + { + if (!player.isSneaking()) + { + this.fakeRightArm.rotateAngleX = -1.2001F; + this.fakeRightArmwear.rotateAngleX = -1.2001F; + } + else + { + this.fakeRightArm.rotateAngleX = -1.7001F; + this.fakeRightArmwear.rotateAngleX = -1.7001F; + } + + this.fakeRightArm.rotateAngleY = -0.15f; + this.fakeRightArmwear.rotateAngleY = -0.15f; + } } } else { - if (!player.isSneaking()) + if (item == RegistrationHandler.itemTile) { - this.fakeRightArm.rotateAngleX = -1.2001F; - this.fakeLeftArm.rotateAngleX = -1.2001F; - this.fakeLeftArmwear.rotateAngleX = -1.2001F; - this.fakeRightArmwear.rotateAngleX = -1.2001F; + if (!player.isSneaking()) + { + this.fakeRightArm.rotateAngleX = -.9001F; + this.fakeLeftArm.rotateAngleX = -.9001F; + this.fakeLeftArmwear.rotateAngleX = -.9001F; + this.fakeRightArmwear.rotateAngleX = -.9001F; + } + else + { + this.fakeRightArm.rotateAngleX = -1.4001F; + this.fakeLeftArm.rotateAngleX = -1.4001F; + this.fakeLeftArmwear.rotateAngleX = -1.4001F; + this.fakeRightArmwear.rotateAngleX = -1.4001F; + } + + this.fakeRightArm.rotateAngleY = 0f; + this.fakeLeftArm.rotateAngleY = 0f; + this.fakeLeftArmwear.rotateAngleY = 0f; + this.fakeRightArmwear.rotateAngleY = 0f; } else { - this.fakeRightArm.rotateAngleX = -1.7001F; - this.fakeLeftArm.rotateAngleX = -1.7001F; - this.fakeLeftArmwear.rotateAngleX = -1.7001F; - this.fakeRightArmwear.rotateAngleX = -1.7001F; - } + if (!player.isSneaking()) + { + this.fakeRightArm.rotateAngleX = -1.2001F; + this.fakeLeftArm.rotateAngleX = -1.2001F; + this.fakeLeftArmwear.rotateAngleX = -1.2001F; + this.fakeRightArmwear.rotateAngleX = -1.2001F; + } + else + { + this.fakeRightArm.rotateAngleX = -1.7001F; + this.fakeLeftArm.rotateAngleX = -1.7001F; + this.fakeLeftArmwear.rotateAngleX = -1.7001F; + this.fakeRightArmwear.rotateAngleX = -1.7001F; + } - this.fakeRightArm.rotateAngleY = -0.15f; - this.fakeLeftArm.rotateAngleY = 0.15f; - this.fakeLeftArmwear.rotateAngleY = 0.15f; - this.fakeRightArmwear.rotateAngleY = -0.15f; + this.fakeRightArm.rotateAngleY = -0.15f; + this.fakeLeftArm.rotateAngleY = 0.15f; + this.fakeLeftArmwear.rotateAngleY = 0.15f; + this.fakeRightArmwear.rotateAngleY = -0.15f; + } + + this.fakeRightArm.rotateAngleZ = 0F; + this.fakeLeftArm.rotateAngleZ = 0F; + this.fakeLeftArmwear.rotateAngleZ = 0F; + this.fakeRightArmwear.rotateAngleZ = 0F; } model.bipedBody.addChild(this.fakeLeftArm); @@ -551,16 +701,41 @@ public class RenderEvents model.bipedLeftArmwear.isHidden = false; model.bipedRightArmwear.isHidden = false; - if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) + CarryOnOverride overrider = ScriptChecker.getOverride(player); + if (overrider != null) { - for (int k = 0; k < model.bipedBody.childModels.size(); k++) + if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) { - float chkRot = model.bipedBody.childModels.get(k).rotateAngleX; - - if (chkRot == -0.9001F || chkRot == -1.2001F || chkRot == -1.4001F || chkRot == -1.7001F) + for (int k = 0; k < model.bipedBody.childModels.size(); k++) { - model.bipedBody.childModels.remove(k); - k = k - 1; + double[] rotLeft1 = ScriptParseHelper.getXYZArray(overrider.getRenderRotationLeftArm()); + double[] rotRight1 = ScriptParseHelper.getXYZArray(overrider.getRenderRotationRightArm()); + + float rotX = model.bipedBody.childModels.get(k).rotateAngleX; + float rotY = model.bipedBody.childModels.get(k).rotateAngleY; + float rotZ = model.bipedBody.childModels.get(k).rotateAngleZ; + + if (rotLeft1[0] == rotX || rotLeft1[1] == rotY || rotRight1[2] == rotZ || rotRight1[0] == rotX || rotRight1[1] == rotY || rotRight1[2] == rotZ || rotX == rotLeft1[0] -0.5f || rotX == rotRight1[0] -0.5f) + { + model.bipedBody.childModels.remove(k); + k = k - 1; + } + } + } + } + else + { + if (model.bipedBody.childModels != null && !model.bipedBody.childModels.isEmpty()) + { + for (int k = 0; k < model.bipedBody.childModels.size(); k++) + { + float chkRot = model.bipedBody.childModels.get(k).rotateAngleX; + + if (chkRot == -0.9001F || chkRot == -1.2001F || chkRot == -1.4001F || chkRot == -1.7001F) + { + model.bipedBody.childModels.remove(k); + k = k - 1; + } } } } diff --git a/src/main/java/tschipp/carryon/common/command/CommandCarryOn.java b/src/main/java/tschipp/carryon/common/command/CommandCarryOn.java index 81d316b..fc574a8 100644 --- a/src/main/java/tschipp/carryon/common/command/CommandCarryOn.java +++ b/src/main/java/tschipp/carryon/common/command/CommandCarryOn.java @@ -136,11 +136,6 @@ public class CommandCarryOn extends CommandBase implements ICommand } } } - else if (args[0].toLowerCase().equals("reload")) - { - ScriptReader.reloadScripts(); - sender.sendMessage(new TextComponentString("Successfully reloaded Scripts!")); - } else { throw new WrongUsageException(this.getUsage(sender)); diff --git a/src/main/java/tschipp/carryon/common/event/ItemEntityEvents.java b/src/main/java/tschipp/carryon/common/event/ItemEntityEvents.java index a025b33..7c9cc7f 100644 --- a/src/main/java/tschipp/carryon/common/event/ItemEntityEvents.java +++ b/src/main/java/tschipp/carryon/common/event/ItemEntityEvents.java @@ -25,6 +25,8 @@ import tschipp.carryon.client.keybinds.CarryOnKeybinds; import tschipp.carryon.common.handler.PickupHandler; import tschipp.carryon.common.handler.RegistrationHandler; import tschipp.carryon.common.item.ItemEntity; +import tschipp.carryon.common.scripting.CarryOnOverride; +import tschipp.carryon.common.scripting.ScriptChecker; import tschipp.carryon.network.client.CarrySlotPacket; public class ItemEntityEvents @@ -97,7 +99,13 @@ public class ItemEntityEvents handler.extractItem(i, 64, false); } } - CarryOn.network.sendTo(new CarrySlotPacket(player.inventory.currentItem), (EntityPlayerMP) player); + + CarryOnOverride override = ScriptChecker.inspectEntity(entity); + int overrideHash = 0; + if(override != null) + overrideHash = override.hashCode(); + + CarryOn.network.sendTo(new CarrySlotPacket(player.inventory.currentItem, overrideHash), (EntityPlayerMP) player); entity.setDead(); player.setHeldItem(EnumHand.MAIN_HAND, stack); event.setCanceled(true); diff --git a/src/main/java/tschipp/carryon/common/event/ItemEvents.java b/src/main/java/tschipp/carryon/common/event/ItemEvents.java index e0e09a2..667446e 100644 --- a/src/main/java/tschipp/carryon/common/event/ItemEvents.java +++ b/src/main/java/tschipp/carryon/common/event/ItemEvents.java @@ -29,6 +29,8 @@ import tschipp.carryon.common.handler.ListHandler; import tschipp.carryon.common.handler.PickupHandler; import tschipp.carryon.common.handler.RegistrationHandler; import tschipp.carryon.common.item.ItemTile; +import tschipp.carryon.common.scripting.CarryOnOverride; +import tschipp.carryon.common.scripting.ScriptChecker; import tschipp.carryon.network.client.CarrySlotPacket; public class ItemEvents @@ -114,10 +116,14 @@ public class ItemEvents IBlockState statee = world.getBlockState(pos); NBTTagCompound tag = new NBTTagCompound(); tag = world.getTileEntity(pos) != null ? world.getTileEntity(pos).writeToNBT(tag) : new NBTTagCompound(); - + CarryOnOverride override = ScriptChecker.inspectBlock(state, world, pos, tag); + int overrideHash = 0; + if(override != null) + overrideHash = override.hashCode(); + try { - CarryOn.network.sendTo(new CarrySlotPacket(player.inventory.currentItem), (EntityPlayerMP) player); + CarryOn.network.sendTo(new CarrySlotPacket(player.inventory.currentItem, overrideHash), (EntityPlayerMP) player); world.removeTileEntity(pos); world.setBlockToAir(pos); player.setHeldItem(EnumHand.MAIN_HAND, stack); diff --git a/src/main/java/tschipp/carryon/common/item/ItemEntity.java b/src/main/java/tschipp/carryon/common/item/ItemEntity.java index 55f1f9e..707faa5 100644 --- a/src/main/java/tschipp/carryon/common/item/ItemEntity.java +++ b/src/main/java/tschipp/carryon/common/item/ItemEntity.java @@ -110,6 +110,7 @@ public class ItemEntity extends Item clearEntityData(stack); player.setHeldItem(hand, ItemStack.EMPTY); } + player.getEntityData().removeTag("overrideKey"); return EnumActionResult.SUCCESS; } } diff --git a/src/main/java/tschipp/carryon/common/item/ItemTile.java b/src/main/java/tschipp/carryon/common/item/ItemTile.java index 1b197b6..ba90146 100644 --- a/src/main/java/tschipp/carryon/common/item/ItemTile.java +++ b/src/main/java/tschipp/carryon/common/item/ItemTile.java @@ -141,6 +141,7 @@ public class ItemTile extends Item clearTileData(stack); player.playSound(containedblock.getSoundType().getPlaceSound(), 1.0f, 0.5f); player.setHeldItem(hand, ItemStack.EMPTY); + player.getEntityData().removeTag("overrideKey"); return EnumActionResult.SUCCESS; } diff --git a/src/main/java/tschipp/carryon/common/scripting/CarryOnOverride.java b/src/main/java/tschipp/carryon/common/scripting/CarryOnOverride.java index 7d6ef3c..4ca6d08 100644 --- a/src/main/java/tschipp/carryon/common/scripting/CarryOnOverride.java +++ b/src/main/java/tschipp/carryon/common/scripting/CarryOnOverride.java @@ -4,7 +4,7 @@ import net.minecraft.nbt.NBTTagCompound; public class CarryOnOverride { - //BLOCKS + // BLOCKS private NBTTagCompound typeBlockTag; private String typeMeta; private String typeNameBlock; @@ -12,14 +12,14 @@ public class CarryOnOverride private String typeHardness; private String typeResistance; - //ENTITIES + // ENTITIES private NBTTagCompound typeEntityTag; private String typeNameEntity; private String typeHeight; private String typeWidth; private String typeHealth; - - //CONDITIONS + + // CONDITIONS private String conditionGamestage; private String conditionAchievement; private String conditionXp; @@ -27,7 +27,7 @@ public class CarryOnOverride private String conditionScoreboard; private String conditionPosition; - //RENDER + // RENDER private String renderNameBlock; private String renderNameEntity; private int renderMeta; @@ -35,225 +35,520 @@ public class CarryOnOverride private String renderTranslation; private String renderRotation; private String renderScale; - + private String renderRotationLeftArm; + private String renderRotationRightArm; + private boolean isBlock; private boolean isEntity; - - - - - - + public String getRenderRotationLeftArm() + { + return renderRotationLeftArm; + } + + public void setRenderRotationLeftArm(String renderRotationLeftArm) + { + this.renderRotationLeftArm = renderRotationLeftArm; + } + + public String getRenderRotationRightArm() + { + return renderRotationRightArm; + } + + public void setRenderRotationRightArm(String renderRotationRightArm) + { + this.renderRotationRightArm = renderRotationRightArm; + } + + @Override + public int hashCode() + { + final int prime = 31; + int result = 1; + result = prime * result + ((conditionAchievement == null) ? 0 : conditionAchievement.hashCode()); + result = prime * result + ((conditionGamemode == null) ? 0 : conditionGamemode.hashCode()); + result = prime * result + ((conditionGamestage == null) ? 0 : conditionGamestage.hashCode()); + result = prime * result + ((conditionPosition == null) ? 0 : conditionPosition.hashCode()); + result = prime * result + ((conditionScoreboard == null) ? 0 : conditionScoreboard.hashCode()); + result = prime * result + ((conditionXp == null) ? 0 : conditionXp.hashCode()); + result = prime * result + (isBlock ? 1231 : 1237); + result = prime * result + (isEntity ? 1231 : 1237); + result = prime * result + renderMeta; + result = prime * result + ((renderNBT == null) ? 0 : renderNBT.hashCode()); + result = prime * result + ((renderNameBlock == null) ? 0 : renderNameBlock.hashCode()); + result = prime * result + ((renderNameEntity == null) ? 0 : renderNameEntity.hashCode()); + result = prime * result + ((renderRotation == null) ? 0 : renderRotation.hashCode()); + result = prime * result + ((renderRotationLeftArm == null) ? 0 : renderRotationLeftArm.hashCode()); + result = prime * result + ((renderRotationRightArm == null) ? 0 : renderRotationRightArm.hashCode()); + result = prime * result + ((renderScale == null) ? 0 : renderScale.hashCode()); + result = prime * result + ((renderTranslation == null) ? 0 : renderTranslation.hashCode()); + result = prime * result + ((typeBlockTag == null) ? 0 : typeBlockTag.hashCode()); + result = prime * result + ((typeEntityTag == null) ? 0 : typeEntityTag.hashCode()); + result = prime * result + ((typeHardness == null) ? 0 : typeHardness.hashCode()); + result = prime * result + ((typeHealth == null) ? 0 : typeHealth.hashCode()); + result = prime * result + ((typeHeight == null) ? 0 : typeHeight.hashCode()); + result = prime * result + ((typeMaterial == null) ? 0 : typeMaterial.hashCode()); + result = prime * result + ((typeMeta == null) ? 0 : typeMeta.hashCode()); + result = prime * result + ((typeNameBlock == null) ? 0 : typeNameBlock.hashCode()); + result = prime * result + ((typeNameEntity == null) ? 0 : typeNameEntity.hashCode()); + result = prime * result + ((typeResistance == null) ? 0 : typeResistance.hashCode()); + result = prime * result + ((typeWidth == null) ? 0 : typeWidth.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) + { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + CarryOnOverride other = (CarryOnOverride) obj; + if (conditionAchievement == null) + { + if (other.conditionAchievement != null) + return false; + } + else if (!conditionAchievement.equals(other.conditionAchievement)) + return false; + if (conditionGamemode == null) + { + if (other.conditionGamemode != null) + return false; + } + else if (!conditionGamemode.equals(other.conditionGamemode)) + return false; + if (conditionGamestage == null) + { + if (other.conditionGamestage != null) + return false; + } + else if (!conditionGamestage.equals(other.conditionGamestage)) + return false; + if (conditionPosition == null) + { + if (other.conditionPosition != null) + return false; + } + else if (!conditionPosition.equals(other.conditionPosition)) + return false; + if (conditionScoreboard == null) + { + if (other.conditionScoreboard != null) + return false; + } + else if (!conditionScoreboard.equals(other.conditionScoreboard)) + return false; + if (conditionXp == null) + { + if (other.conditionXp != null) + return false; + } + else if (!conditionXp.equals(other.conditionXp)) + return false; + if (isBlock != other.isBlock) + return false; + if (isEntity != other.isEntity) + return false; + if (renderMeta != other.renderMeta) + return false; + if (renderNBT == null) + { + if (other.renderNBT != null) + return false; + } + else if (!renderNBT.equals(other.renderNBT)) + return false; + if (renderNameBlock == null) + { + if (other.renderNameBlock != null) + return false; + } + else if (!renderNameBlock.equals(other.renderNameBlock)) + return false; + if (renderNameEntity == null) + { + if (other.renderNameEntity != null) + return false; + } + else if (!renderNameEntity.equals(other.renderNameEntity)) + return false; + if (renderRotation == null) + { + if (other.renderRotation != null) + return false; + } + else if (!renderRotation.equals(other.renderRotation)) + return false; + if (renderRotationLeftArm == null) + { + if (other.renderRotationLeftArm != null) + return false; + } + else if (!renderRotationLeftArm.equals(other.renderRotationLeftArm)) + return false; + if (renderRotationRightArm == null) + { + if (other.renderRotationRightArm != null) + return false; + } + else if (!renderRotationRightArm.equals(other.renderRotationRightArm)) + return false; + if (renderScale == null) + { + if (other.renderScale != null) + return false; + } + else if (!renderScale.equals(other.renderScale)) + return false; + if (renderTranslation == null) + { + if (other.renderTranslation != null) + return false; + } + else if (!renderTranslation.equals(other.renderTranslation)) + return false; + if (typeBlockTag == null) + { + if (other.typeBlockTag != null) + return false; + } + else if (!typeBlockTag.equals(other.typeBlockTag)) + return false; + if (typeEntityTag == null) + { + if (other.typeEntityTag != null) + return false; + } + else if (!typeEntityTag.equals(other.typeEntityTag)) + return false; + if (typeHardness == null) + { + if (other.typeHardness != null) + return false; + } + else if (!typeHardness.equals(other.typeHardness)) + return false; + if (typeHealth == null) + { + if (other.typeHealth != null) + return false; + } + else if (!typeHealth.equals(other.typeHealth)) + return false; + if (typeHeight == null) + { + if (other.typeHeight != null) + return false; + } + else if (!typeHeight.equals(other.typeHeight)) + return false; + if (typeMaterial == null) + { + if (other.typeMaterial != null) + return false; + } + else if (!typeMaterial.equals(other.typeMaterial)) + return false; + if (typeMeta == null) + { + if (other.typeMeta != null) + return false; + } + else if (!typeMeta.equals(other.typeMeta)) + return false; + if (typeNameBlock == null) + { + if (other.typeNameBlock != null) + return false; + } + else if (!typeNameBlock.equals(other.typeNameBlock)) + return false; + if (typeNameEntity == null) + { + if (other.typeNameEntity != null) + return false; + } + else if (!typeNameEntity.equals(other.typeNameEntity)) + return false; + if (typeResistance == null) + { + if (other.typeResistance != null) + return false; + } + else if (!typeResistance.equals(other.typeResistance)) + return false; + if (typeWidth == null) + { + if (other.typeWidth != null) + return false; + } + else if (!typeWidth.equals(other.typeWidth)) + return false; + return true; + } + public boolean isBlock() { return isBlock; } + public void setBlock(boolean isBlock) { this.isBlock = isBlock; } + public boolean isEntity() { return isEntity; } + public void setEntity(boolean isEntity) { this.isEntity = isEntity; } + public NBTTagCompound getTypeBlockTag() { return typeBlockTag; } + public String getTypeMeta() { return typeMeta; } + public String getTypeNameBlock() { return typeNameBlock; } + public String getTypeMaterial() { return typeMaterial; } + public String getTypeHardness() { return typeHardness; } + public String getTypeResistance() { return typeResistance; } + public NBTTagCompound getTypeEntityTag() { return typeEntityTag; } + public String getTypeNameEntity() { return typeNameEntity; } + public String getTypeHeight() { return typeHeight; } + public String getTypeWidth() { return typeWidth; } + public String getTypeHealth() { return typeHealth; } + public String getConditionGamestage() { return conditionGamestage; } + public String getConditionAchievement() { return conditionAchievement; } + public String getConditionXp() { return conditionXp; } + public String getConditionGamemode() { return conditionGamemode; } + public String getConditionScoreboard() { return conditionScoreboard; } + public String getConditionPosition() { return conditionPosition; } + public String getRenderNameBlock() { return renderNameBlock; } + public String getRenderNameEntity() { return renderNameEntity; } + public int getRenderMeta() { return renderMeta; } + public NBTTagCompound getRenderNBT() { return renderNBT; } + public String getRenderTranslation() { return renderTranslation; } + public String getRenderRotation() { return renderRotation; } + public String getRenderScale() { return renderScale; } + public void setTypeBlockTag(NBTTagCompound typeBlockTag) { this.typeBlockTag = typeBlockTag; } + public void setTypeMeta(String typeMeta) { this.typeMeta = typeMeta; } + public void setTypeNameBlock(String typeNameBlock) { this.typeNameBlock = typeNameBlock; } + public void setTypeMaterial(String typeMaterial) { this.typeMaterial = typeMaterial; } + public void setTypeHardness(String typeHardness) { this.typeHardness = typeHardness; } + public void setTypeResistance(String typeResistance) { this.typeResistance = typeResistance; } + public void setTypeEntityTag(NBTTagCompound typeEntityTag) { this.typeEntityTag = typeEntityTag; } + public void setTypeNameEntity(String typeNameEntity) { this.typeNameEntity = typeNameEntity; } + public void setTypeHeight(String typeHeight) { this.typeHeight = typeHeight; } + public void setTypeWidth(String typeWidth) { this.typeWidth = typeWidth; } + public void setTypeHealth(String typeHealth) { this.typeHealth = typeHealth; } + public void setConditionGamestage(String conditionGamestage) { this.conditionGamestage = conditionGamestage; } + public void setConditionAchievement(String conditionAchievement) { this.conditionAchievement = conditionAchievement; } + public void setConditionXp(String conditionXp) { this.conditionXp = conditionXp; } + public void setConditionGamemode(String conditionGamemode) { this.conditionGamemode = conditionGamemode; } + public void setConditionScoreboard(String conditionScoreboard) { this.conditionScoreboard = conditionScoreboard; } + public void setConditionPosition(String conditionPosition) { this.conditionPosition = conditionPosition; } + public void setRenderNameBlock(String renderNameBlock) { this.renderNameBlock = renderNameBlock; } + public void setRenderNameEntity(String renderNameEntity) { this.renderNameEntity = renderNameEntity; } + public void setRenderMeta(int renderMeta) { this.renderMeta = renderMeta; } + public void setRenderNBT(NBTTagCompound renderNBT) { this.renderNBT = renderNBT; } + public void setRenderTranslation(String renderTranslation) { this.renderTranslation = renderTranslation; } + public void setRenderRotation(String renderRotation) { this.renderRotation = renderRotation; } + public void setRenderScale(String renderScale) { this.renderScale = renderScale; } - - } diff --git a/src/main/java/tschipp/carryon/common/scripting/ScriptChecker.java b/src/main/java/tschipp/carryon/common/scripting/ScriptChecker.java index ccf3707..02f24ed 100644 --- a/src/main/java/tschipp/carryon/common/scripting/ScriptChecker.java +++ b/src/main/java/tschipp/carryon/common/scripting/ScriptChecker.java @@ -33,7 +33,7 @@ public class ScriptChecker float resistance = block.getExplosionResistance(null); NBTTagCompound nbt = tag; - for (CarryOnOverride override : ScriptReader.OVERRIDES) + for (CarryOnOverride override : ScriptReader.OVERRIDES.values()) { if (override.isBlock()) { @@ -58,7 +58,7 @@ public class ScriptChecker NBTTagCompound tag = new NBTTagCompound(); entity.writeToNBT(tag); - for (CarryOnOverride override : ScriptReader.OVERRIDES) + for (CarryOnOverride override : ScriptReader.OVERRIDES.values()) { if (override.isEntity()) { @@ -104,4 +104,28 @@ public class ScriptChecker return (achievement && gamemode && gamestage && position && xp && scoreboard); } + + @Nullable + public static CarryOnOverride getOverride(EntityPlayer player) + { + NBTTagCompound tag = player.getEntityData(); + + if (tag != null && tag.hasKey("overrideKey")) + { + int key = tag.getInteger("overrideKey"); + + return ScriptReader.OVERRIDES.get(key); + } + + return null; + } + + public static void setCarryOnOverride(EntityPlayer player, int i) + { + NBTTagCompound tag = player.getEntityData(); + + if (tag != null) + tag.setInteger("overrideKey", i); + } + } diff --git a/src/main/java/tschipp/carryon/common/scripting/ScriptReader.java b/src/main/java/tschipp/carryon/common/scripting/ScriptReader.java index cdc63da..a69f329 100644 --- a/src/main/java/tschipp/carryon/common/scripting/ScriptReader.java +++ b/src/main/java/tschipp/carryon/common/scripting/ScriptReader.java @@ -15,7 +15,6 @@ import com.google.gson.JsonSyntaxException; import net.minecraft.nbt.JsonToNBT; import net.minecraft.nbt.NBTException; -import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import tschipp.carryon.CarryOn; import tschipp.carryon.common.config.CarryOnConfig; @@ -23,8 +22,9 @@ import tschipp.carryon.common.config.CarryOnConfig; public class ScriptReader { private static ArrayList scripts = new ArrayList(); - - public static HashSet OVERRIDES = new HashSet(); + public static HashMap OVERRIDES = new HashMap(); + + //public static HashSet OVERRIDES = new HashSet(); public static void preInit(FMLPreInitializationEvent event) { @@ -145,6 +145,8 @@ public class ScriptReader JsonElement translation = render.get("translation"); JsonElement rotation = render.get("rotation"); JsonElement scale = render.get("scale"); + JsonElement rotationLeftArm = render.get("rotation_left_arm"); + JsonElement rotationRightArm = render.get("rotation_right_arm"); if(name_block != null) override.setRenderNameBlock(name_block.getAsString()); @@ -160,9 +162,14 @@ public class ScriptReader override.setRenderScale(scale.getAsString()); if (nbt != null) override.setRenderNBT(JsonToNBT.getTagFromJson(nbt.toString())); + if(rotationLeftArm != null) + override.setRenderRotationLeftArm(rotationLeftArm.getAsString()); + if(rotationRightArm != null) + override.setRenderRotationRightArm(rotationRightArm.getAsString()); + } - OVERRIDES.add(override); + OVERRIDES.put(override.hashCode(), override); } } diff --git a/src/main/java/tschipp/carryon/network/client/CarrySlotPacket.java b/src/main/java/tschipp/carryon/network/client/CarrySlotPacket.java index 1f53e07..ca9fb2f 100644 --- a/src/main/java/tschipp/carryon/network/client/CarrySlotPacket.java +++ b/src/main/java/tschipp/carryon/network/client/CarrySlotPacket.java @@ -1,12 +1,14 @@ package tschipp.carryon.network.client; import io.netty.buffer.ByteBuf; +import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; public class CarrySlotPacket implements IMessage { public int slot; + public int carryOverride = 0; public CarrySlotPacket() { @@ -16,17 +18,30 @@ public class CarrySlotPacket implements IMessage { this.slot = slot; } + + public CarrySlotPacket(int slot, int carryOverride) + { + this.slot = slot; + this.carryOverride = carryOverride; + } @Override public void fromBytes(ByteBuf buf) { - this.slot = ByteBufUtils.readVarInt(buf, 4); + NBTTagCompound tag = ByteBufUtils.readTag(buf); + + this.slot = tag.getInteger("slot"); + this.carryOverride = tag.getInteger("override"); } @Override public void toBytes(ByteBuf buf) { - ByteBufUtils.writeVarInt(buf, slot, 4); + NBTTagCompound tag = new NBTTagCompound(); + tag.setInteger("slot", slot); + tag.setInteger("override", carryOverride); + ByteBufUtils.writeTag(buf, tag); + } } diff --git a/src/main/java/tschipp/carryon/network/client/CarrySlotPacketHandler.java b/src/main/java/tschipp/carryon/network/client/CarrySlotPacketHandler.java index 6acdadb..7e7ff43 100644 --- a/src/main/java/tschipp/carryon/network/client/CarrySlotPacketHandler.java +++ b/src/main/java/tschipp/carryon/network/client/CarrySlotPacketHandler.java @@ -7,6 +7,7 @@ import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; import tschipp.carryon.client.keybinds.CarryOnKeybinds; +import tschipp.carryon.common.scripting.ScriptChecker; public class CarrySlotPacketHandler implements IMessageHandler { @@ -24,9 +25,19 @@ public class CarrySlotPacketHandler implements IMessageHandler= 9) + { player.getEntityData().removeTag("carrySlot"); + player.getEntityData().removeTag("overrideKey"); + } else + { player.getEntityData().setInteger("carrySlot", message.slot); + if(message.carryOverride != 0) + ScriptChecker.setCarryOnOverride(player, message.carryOverride); + } + + + } }); From 816b0350a2e1a7f13a6a025f77a1f80e5ef6de6c Mon Sep 17 00:00:00 2001 From: Tschipp Date: Sun, 1 Oct 2017 19:19:19 +0200 Subject: [PATCH 12/13] Added option to not render arms at all --- .../client/event/RenderEntityEvents.java | 2 +- .../carryon/client/event/RenderEvents.java | 58 ++++++++++++++----- .../common/helper/ScriptParseHelper.java | 8 +-- .../common/scripting/CarryOnOverride.java | 25 ++++++++ .../common/scripting/ScriptChecker.java | 2 +- .../common/scripting/ScriptReader.java | 7 ++- 6 files changed, 79 insertions(+), 23 deletions(-) diff --git a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java index fabf50d..b161527 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java @@ -336,7 +336,7 @@ public class RenderEntityEvents Minecraft.getMinecraft().getRenderManager().setRenderShadow(false); - CarryOnOverride carryOverride = ScriptChecker.inspectEntity(entity); + CarryOnOverride carryOverride = ScriptChecker.getOverride(player); if (carryOverride != null) { double[] translation = ScriptParseHelper.getXYZArray(carryOverride.getRenderTranslation()); diff --git a/src/main/java/tschipp/carryon/client/event/RenderEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEvents.java index 94ef9b5..fbe5878 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEvents.java @@ -259,15 +259,16 @@ public class RenderEvents this.setLightmapDisabled(true); + if (perspective == 0) + { + event.setCanceled(true); + } + } GlStateManager.scale(1, 1, 1); GlStateManager.popMatrix(); - if (perspective == 0) - { - event.setCanceled(true); - } } else { @@ -375,7 +376,7 @@ public class RenderEvents IBakedModel model = ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag, world, player) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileItem, world, player); - CarryOnOverride carryOverride = ScriptChecker.inspectBlock(state, world, player.getPosition(), tag); + CarryOnOverride carryOverride = ScriptChecker.getOverride(player); if (carryOverride != null) { double[] translation = ScriptParseHelper.getXYZArray(carryOverride.getRenderTranslation()); @@ -462,7 +463,7 @@ public class RenderEvents float rotY = model.bipedBody.childModels.get(k).rotateAngleY; float rotZ = model.bipedBody.childModels.get(k).rotateAngleZ; - if (rotLeft1[0] == rotX || rotLeft1[1] == rotY || rotRight1[2] == rotZ || rotRight1[0] == rotX || rotRight1[1] == rotY || rotRight1[2] == rotZ || rotX == rotLeft1[0] -0.5f || rotX == rotRight1[0] -0.5f) + if (rotLeft1[0] == rotX || rotLeft1[1] == rotY || rotRight1[2] == rotZ || rotRight1[0] == rotX || rotRight1[1] == rotY || rotRight1[2] == rotZ || rotX == rotLeft1[0] - 0.5f || rotX == rotRight1[0] - 0.5f) { model.bipedBody.childModels.remove(k); k = k - 1; @@ -493,7 +494,11 @@ public class RenderEvents model.bipedRightArm.isHidden = true; model.bipedLeftArmwear.isHidden = true; model.bipedRightArmwear.isHidden = true; - + this.fakeLeftArm.isHidden = false; + this.fakeLeftArmwear.isHidden = false; + this.fakeRightArm.isHidden = false; + this.fakeRightArmwear.isHidden = false; + Minecraft.getMinecraft().getTextureManager().bindTexture(skinLoc); if (aplayer.getSkinType().equals("default")) @@ -527,19 +532,40 @@ public class RenderEvents if (override.getRenderRotationRightArm() != null) rotRight = ScriptParseHelper.getXYZArray(override.getRenderRotationRightArm()); + boolean renderRight = override.isRenderRightArm(); + boolean renderLeft = override.isRenderLeftArm(); + + if (!renderRight) + { + this.fakeRightArm.isHidden = true; + this.fakeRightArmwear.isHidden = true; + model.bipedRightArm.isHidden = false; + model.bipedRightArmwear.isHidden = false; + } + + + if (!renderLeft) + { + this.fakeLeftArm.isHidden = true; + this.fakeLeftArmwear.isHidden = true; + model.bipedLeftArm.isHidden = false; + model.bipedLeftArmwear.isHidden = false; + } + + if (rotLeft != null) { if (!player.isSneaking()) { this.fakeLeftArm.rotateAngleX = (float) rotLeft[0]; - this.fakeLeftArmwear.rotateAngleX = (float) rotLeft[0]; + this.fakeLeftArmwear.rotateAngleX = (float) rotLeft[0]; } else { this.fakeLeftArm.rotateAngleX = (float) rotLeft[0] - 0.5f; - this.fakeLeftArmwear.rotateAngleX = (float) rotLeft[0] - 0.5f; + this.fakeLeftArmwear.rotateAngleX = (float) rotLeft[0] - 0.5f; } - + this.fakeLeftArmwear.rotateAngleY = (float) rotLeft[1]; this.fakeLeftArmwear.rotateAngleZ = (float) rotLeft[2]; this.fakeLeftArm.rotateAngleY = (float) rotLeft[1]; @@ -583,14 +609,14 @@ public class RenderEvents if (!player.isSneaking()) { this.fakeRightArm.rotateAngleX = (float) rotRight[0]; - this.fakeRightArmwear.rotateAngleX = (float) rotRight[0]; + this.fakeRightArmwear.rotateAngleX = (float) rotRight[0]; } else { this.fakeRightArm.rotateAngleX = (float) rotRight[0] - 0.5f; - this.fakeRightArmwear.rotateAngleX = (float) rotRight[0] - 0.5f; + this.fakeRightArmwear.rotateAngleX = (float) rotRight[0] - 0.5f; } - + this.fakeRightArmwear.rotateAngleY = (float) rotRight[1]; this.fakeRightArmwear.rotateAngleZ = (float) rotRight[2]; this.fakeRightArm.rotateAngleY = (float) rotRight[1]; @@ -647,7 +673,7 @@ public class RenderEvents this.fakeLeftArmwear.rotateAngleX = -1.4001F; this.fakeRightArmwear.rotateAngleX = -1.4001F; } - + this.fakeRightArm.rotateAngleY = 0f; this.fakeLeftArm.rotateAngleY = 0f; this.fakeLeftArmwear.rotateAngleY = 0f; @@ -675,7 +701,7 @@ public class RenderEvents this.fakeLeftArmwear.rotateAngleY = 0.15f; this.fakeRightArmwear.rotateAngleY = -0.15f; } - + this.fakeRightArm.rotateAngleZ = 0F; this.fakeLeftArm.rotateAngleZ = 0F; this.fakeLeftArmwear.rotateAngleZ = 0F; @@ -715,7 +741,7 @@ public class RenderEvents float rotY = model.bipedBody.childModels.get(k).rotateAngleY; float rotZ = model.bipedBody.childModels.get(k).rotateAngleZ; - if (rotLeft1[0] == rotX || rotLeft1[1] == rotY || rotRight1[2] == rotZ || rotRight1[0] == rotX || rotRight1[1] == rotY || rotRight1[2] == rotZ || rotX == rotLeft1[0] -0.5f || rotX == rotRight1[0] -0.5f) + if (rotLeft1[0] == rotX || rotLeft1[1] == rotY || rotRight1[2] == rotZ || rotRight1[0] == rotX || rotRight1[1] == rotY || rotRight1[2] == rotZ || rotX == rotLeft1[0] - 0.5f || rotX == rotRight1[0] - 0.5f) { model.bipedBody.childModels.remove(k); k = k - 1; diff --git a/src/main/java/tschipp/carryon/common/helper/ScriptParseHelper.java b/src/main/java/tschipp/carryon/common/helper/ScriptParseHelper.java index 4c54cd3..73dc2a5 100644 --- a/src/main/java/tschipp/carryon/common/helper/ScriptParseHelper.java +++ b/src/main/java/tschipp/carryon/common/helper/ScriptParseHelper.java @@ -26,19 +26,19 @@ public class ScriptParseHelper { if (cond.contains("<=")) { - return number >= Double.parseDouble(cond.replace("<=", "")); + return number <= Double.parseDouble(cond.replace("<=", "")); } if (cond.contains(">=")) { - return number <= Double.parseDouble(cond.replace(">=", "")); + return number >= Double.parseDouble(cond.replace(">=", "")); } if (cond.contains("<")) { - return number > Double.parseDouble(cond.replace("<", "")); + return number < Double.parseDouble(cond.replace("<", "")); } if (cond.contains(">")) { - return number < Double.parseDouble(cond.replace(">", "")); + return number > Double.parseDouble(cond.replace(">", "")); } if (cond.contains("=")) { diff --git a/src/main/java/tschipp/carryon/common/scripting/CarryOnOverride.java b/src/main/java/tschipp/carryon/common/scripting/CarryOnOverride.java index 4ca6d08..b3bda35 100644 --- a/src/main/java/tschipp/carryon/common/scripting/CarryOnOverride.java +++ b/src/main/java/tschipp/carryon/common/scripting/CarryOnOverride.java @@ -40,6 +40,9 @@ public class CarryOnOverride private boolean isBlock; private boolean isEntity; + + private boolean renderLeftArm = true; + private boolean renderRightArm = true; public String getRenderRotationLeftArm() { @@ -61,6 +64,26 @@ public class CarryOnOverride this.renderRotationRightArm = renderRotationRightArm; } + public boolean isRenderLeftArm() + { + return renderLeftArm; + } + + public void setRenderLeftArm(boolean renderLeftArm) + { + this.renderLeftArm = renderLeftArm; + } + + public boolean isRenderRightArm() + { + return renderRightArm; + } + + public void setRenderRightArm(boolean renderRightArm) + { + this.renderRightArm = renderRightArm; + } + @Override public int hashCode() { @@ -74,6 +97,8 @@ public class CarryOnOverride result = prime * result + ((conditionXp == null) ? 0 : conditionXp.hashCode()); result = prime * result + (isBlock ? 1231 : 1237); result = prime * result + (isEntity ? 1231 : 1237); + result = prime * result + (renderLeftArm ? 1231 : 1237); + result = prime * result + (renderRightArm ? 1231 : 1237); result = prime * result + renderMeta; result = prime * result + ((renderNBT == null) ? 0 : renderNBT.hashCode()); result = prime * result + ((renderNameBlock == null) ? 0 : renderNameBlock.hashCode()); diff --git a/src/main/java/tschipp/carryon/common/scripting/ScriptChecker.java b/src/main/java/tschipp/carryon/common/scripting/ScriptChecker.java index 02f24ed..9ba7cc8 100644 --- a/src/main/java/tschipp/carryon/common/scripting/ScriptChecker.java +++ b/src/main/java/tschipp/carryon/common/scripting/ScriptChecker.java @@ -72,7 +72,7 @@ public class ScriptChecker public static boolean matchesAll(CarryOnOverride override, String name, float height, float width, float health, NBTTagCompound tag) { - boolean matchname = name == null ? true : name.equals(override.getTypeNameEntity()); + boolean matchname = override.getTypeNameEntity() == null ? true : name.equals(override.getTypeNameEntity()); boolean matchheight = ScriptParseHelper.matches(height, override.getTypeHeight()); boolean matchwidth = ScriptParseHelper.matches(width, override.getTypeWidth()); boolean matchhealth = ScriptParseHelper.matches(health, override.getTypeHealth()); diff --git a/src/main/java/tschipp/carryon/common/scripting/ScriptReader.java b/src/main/java/tschipp/carryon/common/scripting/ScriptReader.java index a69f329..fc3e54c 100644 --- a/src/main/java/tschipp/carryon/common/scripting/ScriptReader.java +++ b/src/main/java/tschipp/carryon/common/scripting/ScriptReader.java @@ -147,6 +147,8 @@ public class ScriptReader JsonElement scale = render.get("scale"); JsonElement rotationLeftArm = render.get("rotation_left_arm"); JsonElement rotationRightArm = render.get("rotation_right_arm"); + JsonElement renderLeftArm = render.get("render_left_arm"); + JsonElement renderRightArm = render.get("render_right_arm"); if(name_block != null) override.setRenderNameBlock(name_block.getAsString()); @@ -166,7 +168,10 @@ public class ScriptReader override.setRenderRotationLeftArm(rotationLeftArm.getAsString()); if(rotationRightArm != null) override.setRenderRotationRightArm(rotationRightArm.getAsString()); - + if(renderLeftArm != null) + override.setRenderLeftArm(renderLeftArm.getAsBoolean()); + if(renderRightArm != null) + override.setRenderRightArm(renderRightArm.getAsBoolean()); } OVERRIDES.put(override.hashCode(), override); From 7d8ade14eced6c8a26ec7c2dcc46e9b39bd5e7c2 Mon Sep 17 00:00:00 2001 From: Tschipp Date: Sun, 1 Oct 2017 19:27:50 +0200 Subject: [PATCH 13/13] Version Number --- src/main/java/tschipp/carryon/CarryOn.java | 2 +- src/main/resources/mcmod.info | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/tschipp/carryon/CarryOn.java b/src/main/java/tschipp/carryon/CarryOn.java index 566cc57..394c8b9 100644 --- a/src/main/java/tschipp/carryon/CarryOn.java +++ b/src/main/java/tschipp/carryon/CarryOn.java @@ -34,7 +34,7 @@ public class CarryOn { public static CarryOn instance; public static final String MODID = "carryon"; - public static final String VERSION = "1.5.1"; + public static final String VERSION = "1.6"; public static final String NAME = "Carry On"; public static final String UPDATE_JSON = "https://gist.githubusercontent.com/Tschipp/dccadee7c90d7a34e6e76a35d9d6fa2e/raw/"; public static final Logger LOGGER = LogManager.getFormatterLogger("CarryOn"); diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 0b81080..06566ab 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -2,7 +2,7 @@ { "modid" : "carryon", "name" : "Carry On", - "version" : "1.5.1", "mcversion" : "1.11.2", + "version" : "1.6", "mcversion" : "1.11.2", "url" : "", "credits" : "Tschipp, Purplicious_Cow, cy4n", "authorList" : ["Tschipp, Purplicious_Cow, cy4n"],