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

@ -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();
}
}
}

View File

@ -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);
}
}
}

View File

@ -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",

View File

@ -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<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()
{
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);
}

View File

@ -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());

Binary file not shown.

Before

Width:  |  Height:  |  Size: 194 B

After

Width:  |  Height:  |  Size: 198 B