Biome Color Rendering, Change to model overrides

This commit is contained in:
Tschipp 2017-08-16 22:25:56 +02:00
parent ecbc1e1fcf
commit f187d6295f
7 changed files with 207 additions and 49 deletions

View File

@ -146,14 +146,15 @@ public class RenderEntityEvents
GlStateManager.scale(1, 1, 1); GlStateManager.scale(1, 1, 1);
GlStateManager.rotate(180, 0, 1, 0); GlStateManager.rotate(180, 0, 1, 0);
GlStateManager.translate(0.0, -height, width + 0.1); GlStateManager.translate(0.0, -height, width + 0.1);
GlStateManager.disableLighting();
GlStateManager.enableAlpha(); 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); Minecraft.getMinecraft().getRenderManager().renderEntityStatic(entity, 0.0f, false);
Minecraft.getMinecraft().getRenderManager().setRenderShadow(true);
}
GlStateManager.enableLighting();
GlStateManager.disableAlpha(); GlStateManager.disableAlpha();
GlStateManager.scale(1, 1, 1); GlStateManager.scale(1, 1, 1);
GlStateManager.popMatrix(); GlStateManager.popMatrix();
@ -217,16 +218,58 @@ public class RenderEntityEvents
if (player.isSneaking()) if (player.isSneaking())
GlStateManager.translate(0, -0.3, 0); GlStateManager.translate(0, -0.3, 0);
Minecraft.getMinecraft().getRenderManager().setRenderShadow(false);
Minecraft.getMinecraft().getRenderManager().renderEntityStatic(entity, 0.0f, false); Minecraft.getMinecraft().getRenderManager().renderEntityStatic(entity, 0.0f, false);
Minecraft.getMinecraft().getRenderManager().setRenderShadow(true);
GlStateManager.scale(1, 1, 1); GlStateManager.scale(1, 1, 1);
GlStateManager.popMatrix(); 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();
}
}
} }

View File

@ -150,8 +150,21 @@ public class RenderEvents
GlStateManager.rotate(8, 1f, 0, 0); GlStateManager.rotate(8, 1f, 0, 0);
if (perspective == 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.scale(1, 1, 1);
GlStateManager.popMatrix(); GlStateManager.popMatrix();
@ -231,15 +244,24 @@ public class RenderEvents
if (player.isSneaking()) if (player.isSneaking())
GlStateManager.translate(0, -0.3, 0); GlStateManager.translate(0, -0.3, 0);
IBakedModel model = ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileItem, world, player); IBakedModel model = ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag, world, player) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileItem, world, player);
Minecraft.getMinecraft().getRenderItem().renderItem(tileItem.isEmpty() ? stack : tileItem, model); 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.scale(1, 1, 1);
GlStateManager.popMatrix(); GlStateManager.popMatrix();
} }
} }
/* /*
@ -269,7 +291,6 @@ public class RenderEvents
model.bipedLeftArm.isHidden = true; model.bipedLeftArm.isHidden = true;
model.bipedRightArm.isHidden = true; model.bipedRightArm.isHidden = true;
Minecraft.getMinecraft().getTextureManager().bindTexture(skinLoc); Minecraft.getMinecraft().getTextureManager().bindTexture(skinLoc);
float rotation = -player.renderYawOffset; float rotation = -player.renderYawOffset;
if (aplayer.getSkinType().equals("default")) if (aplayer.getSkinType().equals("default"))
@ -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.bipedLeftArm.isHidden = false;
model.bipedRightArm.isHidden = false; model.bipedRightArm.isHidden = false;
@ -361,4 +382,17 @@ public class RenderEvents
return getRenderPlayer(player).getMainModel(); 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);
}
}
} }

View File

@ -63,6 +63,13 @@ public class Configs {
"minecraft:end_gateway", "minecraft:end_gateway",
"minecraft:double_plant", "minecraft:double_plant",
"minecraft:bed", "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_trough",
"animania:block_invisiblock", "animania:block_invisiblock",
"colossalchests:*", "colossalchests:*",
@ -95,7 +102,16 @@ public class Configs {
public String[] modelOverrides = new String[] public String[] modelOverrides = new String[]
{ {
"minecraft:lit_furnace->minecraft:furnace", "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:\"spruce\"}->quark:custom_chest;0",
"quark:custom_chest{type:\"birch\"}->quark:custom_chest;1", "quark:custom_chest{type:\"birch\"}->quark:custom_chest;1",
"quark:custom_chest{type:\"jungle\"}->quark:custom_chest;2", "quark:custom_chest{type:\"jungle\"}->quark:custom_chest;2",

View File

@ -4,26 +4,21 @@ import java.util.HashMap;
import java.util.Set; import java.util.Set;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.Level;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.IBakedModel; import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.init.Blocks; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.JsonToNBT; import net.minecraft.nbt.JsonToNBT;
import net.minecraft.nbt.NBTException; import net.minecraft.nbt.NBTException;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTUtil; 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.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.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
import tschipp.carryon.CarryOn;
import tschipp.carryon.common.config.CarryOnConfig; import tschipp.carryon.common.config.CarryOnConfig;
import tschipp.carryon.common.helper.InvalidConfigException; import tschipp.carryon.common.helper.InvalidConfigException;
import tschipp.carryon.common.helper.StringParser; import tschipp.carryon.common.helper.StringParser;
@ -50,7 +45,7 @@ public class ModelOverridesHandler
String currentline = overrides[i]; String currentline = overrides[i];
if (StringUtils.isEmpty(currentline) || !StringUtils.contains(currentline, "->")) 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[] sa = currentline.split("->");
String toOverride = ""; String toOverride = "";
@ -63,7 +58,7 @@ public class ModelOverridesHandler
catch (ArrayIndexOutOfBoundsException e) catch (ArrayIndexOutOfBoundsException e)
{ {
errored = true; 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("{")) if (toOverride.contains("{"))
@ -71,7 +66,7 @@ public class ModelOverridesHandler
if (!toOverride.contains("}")) if (!toOverride.contains("}"))
{ {
errored = true; errored = true;
new InvalidConfigException("Missing } at line " + i + " : " + currentline).printException(); new InvalidConfigException("Missing } at line " + i + " : " + currentline).printException();
} }
String nbt = toOverride.substring(toOverride.indexOf("{")); String nbt = toOverride.substring(toOverride.indexOf("{"));
@ -83,14 +78,35 @@ public class ModelOverridesHandler
catch (NBTException e) catch (NBTException e)
{ {
errored = true; 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("}")) else if (toOverride.contains("}"))
{ {
errored = true; 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"; String modidToOverride = "minecraft";
@ -113,12 +129,10 @@ public class ModelOverridesHandler
if (toOverrideObject != null) if (toOverrideObject != null)
{ {
overrideObject = StringParser.getItem(override); if (overridetype.equals("block"))
if (Block.getBlockFromItem((Item) overrideObject) != Blocks.AIR)
overrideObject = StringParser.getItemStack(override);
else
overrideObject = StringParser.getBlockState(override); overrideObject = StringParser.getBlockState(override);
else
overrideObject = StringParser.getItemStack(override);
if (overrideObject != null) if (overrideObject != null)
{ {
@ -176,7 +190,7 @@ public class ModelOverridesHandler
} }
@SideOnly(Side.CLIENT) @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); int stateid = Block.getStateId(state);
NBTTagCompound[] keys = new NBTTagCompound[OVERRIDE_OBJECTS.size()]; NBTTagCompound[] keys = new NBTTagCompound[OVERRIDE_OBJECTS.size()];
@ -209,7 +223,7 @@ public class ModelOverridesHandler
if (override instanceof IBlockState) if (override instanceof IBlockState)
return Minecraft.getMinecraft().getBlockRendererDispatcher().getModelForState((IBlockState) override); return Minecraft.getMinecraft().getBlockRendererDispatcher().getModelForState((IBlockState) override);
else else
return Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getItemModel((ItemStack) override); return Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides((ItemStack) override, world, player);
} }
} }
} }
@ -218,4 +232,38 @@ public class ModelOverridesHandler
} }
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<String> kSetToCheck = toCheckForCompound.getKeySet();
Set<String> 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;
}
} }

View File

@ -31,8 +31,8 @@ public class ItemEntity extends Item
public ItemEntity() public ItemEntity()
{ {
this.setUnlocalizedName("tile_entity"); this.setUnlocalizedName("entity_item");
this.setRegistryName(CarryOn.MODID, "tile_entity"); this.setRegistryName(CarryOn.MODID, "entity_item");
GameRegistry.register(this); GameRegistry.register(this);
this.setMaxStackSize(1); this.setMaxStackSize(1);
} }

View File

@ -31,6 +31,7 @@ import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.common.registry.GameRegistry;
import tschipp.carryon.CarryOn; import tschipp.carryon.CarryOn;
import tschipp.carryon.common.config.CarryOnConfig; import tschipp.carryon.common.config.CarryOnConfig;
import tschipp.carryon.common.handler.ModelOverridesHandler;
public class ItemTile extends Item public class ItemTile extends Item
{ {
@ -50,6 +51,22 @@ public class ItemTile extends Item
{ {
if (hasTileData(stack)) 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(); return getItemStack(stack).getDisplayName();
} }
@ -176,7 +193,7 @@ public class ItemTile extends Item
tag.setTag(TILE_DATA_KEY, chest); 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()); tag.setString("block", state.getBlock().getRegistryName().toString());
Item item = Item.getItemFromBlock(state.getBlock()); Item item = Item.getItemFromBlock(state.getBlock());

Binary file not shown.

Before

Width:  |  Height:  |  Size: 194 B

After

Width:  |  Height:  |  Size: 198 B