From f187d6295f16199e7082a9eb44434dfb1d6463c8 Mon Sep 17 00:00:00 2001 From: Tschipp Date: Wed, 16 Aug 2017 22:25:56 +0200 Subject: [PATCH] Biome Color Rendering, Change to model overrides --- .../client/event/RenderEntityEvents.java | 75 +++++++++++---- .../carryon/client/event/RenderEvents.java | 52 +++++++++-- .../carryon/common/config/Configs.java | 18 +++- .../common/handler/ModelOverridesHandler.java | 88 ++++++++++++++---- .../carryon/common/item/ItemEntity.java | 4 +- .../tschipp/carryon/common/item/ItemTile.java | 19 +++- .../assets/carryon/textures/items/tile.png | Bin 194 -> 198 bytes 7 files changed, 207 insertions(+), 49 deletions(-) diff --git a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java index 22d6290..8066f60 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEntityEvents.java @@ -132,28 +132,29 @@ public class RenderEntityEvents 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; - + 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; float multiplier = height * width; - + GlStateManager.pushMatrix(); GlStateManager.scale(1, 1, 1); GlStateManager.rotate(180, 0, 1, 0); GlStateManager.translate(0.0, -height, width + 0.1); - GlStateManager.disableLighting(); GlStateManager.enableAlpha(); - GlStateManager.color(0, 0, 0, 0); - - if (perspective == 0) + + if (perspective == 0) + { + Minecraft.getMinecraft().getRenderManager().setRenderShadow(false); Minecraft.getMinecraft().getRenderManager().renderEntityStatic(entity, 0.0f, false); - - GlStateManager.enableLighting(); + Minecraft.getMinecraft().getRenderManager().setRenderShadow(true); + } + GlStateManager.disableAlpha(); GlStateManager.scale(1, 1, 1); GlStateManager.popMatrix(); @@ -162,7 +163,7 @@ public class RenderEntityEvents event.setCanceled(true); } } - + } /* @@ -194,20 +195,20 @@ public class RenderEntityEvents 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; - + double xOffset = d0 - c0; double yOffset = d1 - c1; double zOffset = d2 - c2; - + float height = entity.height; float width = entity.width; float multiplier = height * width; - + 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); @@ -217,16 +218,58 @@ public class RenderEntityEvents if (player.isSneaking()) GlStateManager.translate(0, -0.3, 0); + 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(); } } - } - + public void renderEntityStatic(Entity entityIn, float partialTicks, boolean p_188388_3_) + { + Field fieldX = RenderManager.class.getDeclaredFields()[4]; + Field fieldY = RenderManager.class.getDeclaredFields()[5]; + Field fieldZ = RenderManager.class.getDeclaredFields()[6]; + fieldX.setAccessible(true); + fieldY.setAccessible(true); + fieldZ.setAccessible(true); + + RenderManager manager = Minecraft.getMinecraft().getRenderManager(); + + if (entityIn.ticksExisted == 0) + { + entityIn.lastTickPosX = entityIn.posX; + entityIn.lastTickPosY = entityIn.posY; + entityIn.lastTickPosZ = entityIn.posZ; + } + + double d0 = entityIn.lastTickPosX + (entityIn.posX - entityIn.lastTickPosX) * (double) partialTicks; + double d1 = entityIn.lastTickPosY + (entityIn.posY - entityIn.lastTickPosY) * (double) partialTicks; + double d2 = entityIn.lastTickPosZ + (entityIn.posZ - entityIn.lastTickPosZ) * (double) partialTicks; + float f = entityIn.prevRotationYaw + (entityIn.rotationYaw - entityIn.prevRotationYaw) * partialTicks; + int i = entityIn.getBrightnessForRender(partialTicks); + + if (entityIn.isBurning()) + { + i = 15728880; + } + + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) j, (float) k); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + try + { + manager.doRenderEntity(entityIn, d0 - fieldX.getDouble(manager), d1 - fieldY.getDouble(manager), d2 - fieldZ.getDouble(manager), f, partialTicks, p_188388_3_); + } + catch (IllegalArgumentException | IllegalAccessException e) + { + e.printStackTrace(); + } + } } diff --git a/src/main/java/tschipp/carryon/client/event/RenderEvents.java b/src/main/java/tschipp/carryon/client/event/RenderEvents.java index 3adf604..4b24ac9 100644 --- a/src/main/java/tschipp/carryon/client/event/RenderEvents.java +++ b/src/main/java/tschipp/carryon/client/event/RenderEvents.java @@ -150,8 +150,21 @@ public class RenderEvents GlStateManager.rotate(8, 1f, 0, 0); if (perspective == 0) - Minecraft.getMinecraft().getRenderItem().renderItem(tileStack.isEmpty() ? stack : tileStack, ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileStack, world, player)); - + { + 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); + 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(); @@ -231,14 +244,23 @@ public class RenderEvents if (player.isSneaking()) GlStateManager.translate(0, -0.3, 0); - IBakedModel model = ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileItem, world, player); - Minecraft.getMinecraft().getRenderItem().renderItem(tileItem.isEmpty() ? stack : tileItem, model); - + 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); + 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); GlStateManager.popMatrix(); } - } @@ -269,7 +291,6 @@ public class RenderEvents model.bipedLeftArm.isHidden = true; model.bipedRightArm.isHidden = true; - Minecraft.getMinecraft().getTextureManager().bindTexture(skinLoc); float rotation = -player.renderYawOffset; if (aplayer.getSkinType().equals("default")) @@ -315,7 +336,7 @@ public class RenderEvents fakeRightArm.rotateAngleX = -1.7F; fakeLeftArm.rotateAngleX = -1.7F; } - + fakeRightArm.rotateAngleY = -0.15f; fakeLeftArm.rotateAngleY = 0.15f; @@ -334,7 +355,7 @@ public class RenderEvents } } - if (stack.isEmpty() || (stack.getItem() != RegistrationHandler.itemTile && stack.getItem() != RegistrationHandler.itemEntity)) + if (stack.isEmpty() || (stack.getItem() != RegistrationHandler.itemTile && stack.getItem() != RegistrationHandler.itemEntity)) { model.bipedLeftArm.isHidden = false; model.bipedRightArm.isHidden = false; @@ -361,4 +382,17 @@ public class RenderEvents 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); + } + } + } diff --git a/src/main/java/tschipp/carryon/common/config/Configs.java b/src/main/java/tschipp/carryon/common/config/Configs.java index 8f58edb..f4e94cf 100644 --- a/src/main/java/tschipp/carryon/common/config/Configs.java +++ b/src/main/java/tschipp/carryon/common/config/Configs.java @@ -63,6 +63,13 @@ public class Configs { "minecraft:end_gateway", "minecraft:double_plant", "minecraft:bed", + "minecraft:wooden_door", + "minecraft:iron_door", + "minecraft:spruce_door", + "minecraft:birch_door", + "minecraft:jungle_door", + "minecraft:acacia_door", + "minecraft:dark_oak_door", "animania:block_trough", "animania:block_invisiblock", "colossalchests:*", @@ -95,7 +102,16 @@ public class Configs { public String[] modelOverrides = new String[] { "minecraft:lit_furnace->minecraft:furnace", - "minecraft:bed->minecraft:bed", + "minecraft:hopper->(block)minecraft:hopper", + "minecraft:unpowered_comparator->(block)minecraft:unpowered_comparator", + "minecraft:unpowered_repeater->(block)minecraft:unpowered_repeater", + "minecraft:powered_comparator->(block)minecraft:powered_comparator", + "minecraft:powered_repeater->(block)minecraft:powered_repeater", + "minecraft:cauldron->(block)minecraft:cauldron", + "minecraft:brewing_stand->(item)minecraft:brewing_stand", + "minecraft:tallgrass;1->(item)minecraft:tallgrass;1", + "minecraft:tallgrass;2->(item)minecraft:tallgrass;2", + "minecraft:flower_pot->(block)minecraft:flower_pot", "quark:custom_chest{type:\"spruce\"}->quark:custom_chest;0", "quark:custom_chest{type:\"birch\"}->quark:custom_chest;1", "quark:custom_chest{type:\"jungle\"}->quark:custom_chest;2", diff --git a/src/main/java/tschipp/carryon/common/handler/ModelOverridesHandler.java b/src/main/java/tschipp/carryon/common/handler/ModelOverridesHandler.java index 1f3bfda..2d8885c 100644 --- a/src/main/java/tschipp/carryon/common/handler/ModelOverridesHandler.java +++ b/src/main/java/tschipp/carryon/common/handler/ModelOverridesHandler.java @@ -4,26 +4,21 @@ import java.util.HashMap; import java.util.Set; import org.apache.commons.lang3.StringUtils; -import org.apache.logging.log4j.Level; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.block.model.IBakedModel; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.JsonToNBT; import net.minecraft.nbt.NBTException; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTUtil; -import net.minecraft.util.IntHashMap; +import net.minecraft.world.World; import net.minecraftforge.fml.common.Loader; -import net.minecraftforge.fml.common.registry.IForgeRegistryEntry; -import net.minecraftforge.fml.common.registry.IForgeRegistryEntry.Impl; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import tschipp.carryon.CarryOn; import tschipp.carryon.common.config.CarryOnConfig; import tschipp.carryon.common.helper.InvalidConfigException; import tschipp.carryon.common.helper.StringParser; @@ -43,14 +38,14 @@ public class ModelOverridesHandler for (int i = 0; i < overrides.length; i++) { boolean errored = false; - + Object toOverrideObject; Object overrideObject; NBTTagCompound tag = new NBTTagCompound(); String currentline = overrides[i]; if (StringUtils.isEmpty(currentline) || !StringUtils.contains(currentline, "->")) - new InvalidConfigException("Missing Override Model at line " + i + " : " + currentline).printException(); + new InvalidConfigException("Missing Override Model at line " + i + " : " + currentline).printException(); String[] sa = currentline.split("->"); String toOverride = ""; @@ -63,7 +58,7 @@ public class ModelOverridesHandler catch (ArrayIndexOutOfBoundsException e) { errored = true; - new InvalidConfigException("Missing Override Model at line " + i + " : " + currentline).printException(); + new InvalidConfigException("Missing Override Model at line " + i + " : " + currentline).printException(); } if (toOverride.contains("{")) @@ -71,7 +66,7 @@ public class ModelOverridesHandler if (!toOverride.contains("}")) { errored = true; - new InvalidConfigException("Missing } at line " + i + " : " + currentline).printException(); + new InvalidConfigException("Missing } at line " + i + " : " + currentline).printException(); } String nbt = toOverride.substring(toOverride.indexOf("{")); @@ -83,14 +78,35 @@ public class ModelOverridesHandler catch (NBTException e) { errored = true; - new InvalidConfigException("Error while parsing NBT at line " + i + " : " + e.getMessage()).printException(); + new InvalidConfigException("Error while parsing NBT at line " + i + " : " + e.getMessage()).printException(); } } else if (toOverride.contains("}")) { errored = true; - new InvalidConfigException("Missing { at line " + i + " : " + currentline).printException(); + new InvalidConfigException("Missing { at line " + i + " : " + currentline).printException(); + } + + String overridetype = "item"; + if (override.contains("(")) + { + if (!override.contains(")")) + { + errored = true; + new InvalidConfigException("Missing ) at line " + i + " : " + currentline).printException(); + } + + overridetype = override.substring(0, override.indexOf(")") + 1); + override =override.replace(overridetype, ""); + overridetype = overridetype.replace("(", ""); + overridetype = overridetype.replace(")", ""); + + } + else if (override.contains(")")) + { + errored = true; + new InvalidConfigException("Missing ( at line " + i + " : " + currentline).printException(); } String modidToOverride = "minecraft"; @@ -113,12 +129,10 @@ public class ModelOverridesHandler if (toOverrideObject != null) { - overrideObject = StringParser.getItem(override); - - if (Block.getBlockFromItem((Item) overrideObject) != Blocks.AIR) - overrideObject = StringParser.getItemStack(override); - else + if (overridetype.equals("block")) overrideObject = StringParser.getBlockState(override); + else + overrideObject = StringParser.getItemStack(override); if (overrideObject != null) { @@ -176,7 +190,7 @@ public class ModelOverridesHandler } @SideOnly(Side.CLIENT) - public static IBakedModel getCustomOverrideModel(IBlockState state, NBTTagCompound tag) + public static IBakedModel getCustomOverrideModel(IBlockState state, NBTTagCompound tag, World world, EntityPlayer player) { int stateid = Block.getStateId(state); NBTTagCompound[] keys = new NBTTagCompound[OVERRIDE_OBJECTS.size()]; @@ -209,7 +223,7 @@ public class ModelOverridesHandler if (override instanceof IBlockState) return Minecraft.getMinecraft().getBlockRendererDispatcher().getModelForState((IBlockState) override); else - return Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getItemModel((ItemStack) override); + return Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides((ItemStack) override, world, player); } } } @@ -217,5 +231,39 @@ public class ModelOverridesHandler return null; } + + public static Object getOverrideObject(IBlockState state, NBTTagCompound tag) + { + int stateid = Block.getStateId(state); + NBTTagCompound[] keys = new NBTTagCompound[OVERRIDE_OBJECTS.size()]; + OVERRIDE_OBJECTS.keySet().toArray(keys); + for (NBTTagCompound key : keys) + { + int id = key.getInteger("stateid"); + Block block = StringParser.getBlock(key.getString("block")); + if (id == 0 ? block == state.getBlock() : id == stateid) + { + NBTTagCompound toCheckForCompound = key.getCompoundTag("nbttag"); + Set kSetToCheck = toCheckForCompound.getKeySet(); + Set kSetTile = tag.getKeySet(); + + boolean flag = true; + if (kSetTile.containsAll(kSetToCheck)) + { + for (String skey : kSetToCheck) + { + if (!NBTUtil.areNBTEquals(tag.getTag(skey), toCheckForCompound.getTag(skey), true)) + flag = false; + } + if (flag) + { + Object override = OVERRIDE_OBJECTS.get(key); + return override; + } + } + } + } + return null; + } } diff --git a/src/main/java/tschipp/carryon/common/item/ItemEntity.java b/src/main/java/tschipp/carryon/common/item/ItemEntity.java index 91b907b..c7a3649 100644 --- a/src/main/java/tschipp/carryon/common/item/ItemEntity.java +++ b/src/main/java/tschipp/carryon/common/item/ItemEntity.java @@ -31,8 +31,8 @@ public class ItemEntity extends Item public ItemEntity() { - this.setUnlocalizedName("tile_entity"); - this.setRegistryName(CarryOn.MODID, "tile_entity"); + this.setUnlocalizedName("entity_item"); + this.setRegistryName(CarryOn.MODID, "entity_item"); GameRegistry.register(this); this.setMaxStackSize(1); } diff --git a/src/main/java/tschipp/carryon/common/item/ItemTile.java b/src/main/java/tschipp/carryon/common/item/ItemTile.java index d5143c9..c2827ed 100644 --- a/src/main/java/tschipp/carryon/common/item/ItemTile.java +++ b/src/main/java/tschipp/carryon/common/item/ItemTile.java @@ -31,6 +31,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.common.registry.GameRegistry; import tschipp.carryon.CarryOn; import tschipp.carryon.common.config.CarryOnConfig; +import tschipp.carryon.common.handler.ModelOverridesHandler; public class ItemTile extends Item { @@ -50,6 +51,22 @@ public class ItemTile extends Item { if (hasTileData(stack)) { + IBlockState state = getBlockState(stack); + NBTTagCompound nbt = getTileData(stack); + + if(ModelOverridesHandler.hasCustomOverrideModel(state, nbt)) + { + Object override = ModelOverridesHandler.getOverrideObject(state, nbt); + if(override instanceof ItemStack) + return ((ItemStack)override).getDisplayName(); + else + { + IBlockState ostate = (IBlockState) override; + ItemStack itemstack = new ItemStack(ostate.getBlock().getItemDropped(ostate, this.itemRand, 0), 1, state.getBlock().damageDropped(ostate)); + return itemstack.getDisplayName(); + } + } + return getItemStack(stack).getDisplayName(); } @@ -176,7 +193,7 @@ public class ItemTile extends Item tag.setTag(TILE_DATA_KEY, chest); - ItemStack drop = state.getBlock().getItem(world, pos, state); + ItemStack drop = new ItemStack(state.getBlock().getItemDropped(state, itemRand, 0), 1, state.getBlock().damageDropped(state)); tag.setString("block", state.getBlock().getRegistryName().toString()); Item item = Item.getItemFromBlock(state.getBlock()); diff --git a/src/main/resources/assets/carryon/textures/items/tile.png b/src/main/resources/assets/carryon/textures/items/tile.png index 98a62941974e35c32ac3ee9a7b3096a8e8df281b..8241ee753f473bfcf609b90f253a94d177b53454 100644 GIT binary patch delta 170 zcmX@ac#Ls^NGZx^prw85kH?(j9#r85lP9bN@+X1@buyJR*x37)1YoFr&Qr z=2oDfWQl7;NpOBzNqJ&XDnmhHW?qS2UTTSgiJpO;p_xnO`maDmW}YsNAr}5iPiz!q zP+(wI{2p(m=kRboD{uO3@w9_FGgvn#h@EMQG*IS7@P6h!XF9s}ul$R?)9-*rFnGH9 KxvXS?=U~&qt&h!s>O?^5oQqNuOEUBG6hbm{QyDDuE%Xh| zD~_!<2ASjO;uvDloBZehe|u)thEAos@{8GeqztkSC>Sv?B+p`&-DYF53#gF6)78&q Iol`;+0AUw1y#N3J