New fancy machine icon renderer - rotates top and bottom icon based on facing, also adds support for resource pack-based side textures
|
@ -16,6 +16,7 @@ import mekanism.client.render.tileentity.RenderPortableTank;
|
||||||
import mekanism.client.render.tileentity.RenderSalinationController;
|
import mekanism.client.render.tileentity.RenderSalinationController;
|
||||||
import mekanism.common.ObfuscatedNames;
|
import mekanism.common.ObfuscatedNames;
|
||||||
import mekanism.common.base.ISpecialBounds;
|
import mekanism.common.base.ISpecialBounds;
|
||||||
|
import mekanism.common.block.BlockMachine.MachineType;
|
||||||
import mekanism.common.util.MekanismUtils;
|
import mekanism.common.util.MekanismUtils;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
@ -25,6 +26,7 @@ import net.minecraft.client.renderer.RenderBlocks;
|
||||||
import net.minecraft.client.renderer.RenderHelper;
|
import net.minecraft.client.renderer.RenderHelper;
|
||||||
import net.minecraft.client.renderer.Tessellator;
|
import net.minecraft.client.renderer.Tessellator;
|
||||||
import net.minecraft.client.renderer.entity.RenderManager;
|
import net.minecraft.client.renderer.entity.RenderManager;
|
||||||
|
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||||
import net.minecraft.client.renderer.texture.TextureManager;
|
import net.minecraft.client.renderer.texture.TextureManager;
|
||||||
import net.minecraft.client.renderer.texture.TextureMap;
|
import net.minecraft.client.renderer.texture.TextureMap;
|
||||||
import net.minecraft.init.Blocks;
|
import net.minecraft.init.Blocks;
|
||||||
|
@ -61,8 +63,12 @@ public class MekanismRenderer
|
||||||
private static float lightmapLastY;
|
private static float lightmapLastY;
|
||||||
private static boolean optifineBreak = false;
|
private static boolean optifineBreak = false;
|
||||||
|
|
||||||
|
public static int[] directionMap = new int[] {3, 0, 1, 2};
|
||||||
|
|
||||||
public static RenderConfigurableMachine machineRenderer = new RenderConfigurableMachine();
|
public static RenderConfigurableMachine machineRenderer = new RenderConfigurableMachine();
|
||||||
|
|
||||||
|
private static String[] simpleSides = new String[] {"Down", "Up", "Front", "Back", "Left", "Right"};
|
||||||
|
|
||||||
public static void init()
|
public static void init()
|
||||||
{
|
{
|
||||||
MinecraftForge.EVENT_BUS.register(new MekanismRenderer());
|
MinecraftForge.EVENT_BUS.register(new MekanismRenderer());
|
||||||
|
@ -132,6 +138,45 @@ public class MekanismRenderer
|
||||||
RenderPortableTank.resetDisplayInts();
|
RenderPortableTank.resetDisplayInts();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean blockIconExists(String texture) //Credit to CoFHCore
|
||||||
|
{
|
||||||
|
String[] split = texture.split(":");
|
||||||
|
texture = split[0] + ":textures/blocks/" + split[1] + ".png";
|
||||||
|
|
||||||
|
try {
|
||||||
|
Minecraft.getMinecraft().getResourceManager().getAllResources(new ResourceLocation(texture));
|
||||||
|
return true;
|
||||||
|
} catch(Throwable t) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void loadDynamicTextures(IIconRegister register, MachineType type, IIcon def, IIcon[] textures)
|
||||||
|
{
|
||||||
|
for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
|
||||||
|
{
|
||||||
|
String tex = "mekanism:" + type.name + simpleSides[side.ordinal()];
|
||||||
|
String texOn = tex + "On";
|
||||||
|
|
||||||
|
if(blockIconExists(tex))
|
||||||
|
{
|
||||||
|
textures[side.ordinal()] = register.registerIcon(tex);
|
||||||
|
|
||||||
|
if(blockIconExists(texOn))
|
||||||
|
{
|
||||||
|
textures[side.ordinal()+6] = register.registerIcon(texOn);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
textures[side.ordinal()+6] = register.registerIcon(tex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
textures[side.ordinal()] = def;
|
||||||
|
textures[side.ordinal()+6] = def;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class Model3D
|
public static class Model3D
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,11 +20,13 @@ import mekanism.client.model.ModelRotaryCondensentrator;
|
||||||
import mekanism.client.model.ModelSeismicVibrator;
|
import mekanism.client.model.ModelSeismicVibrator;
|
||||||
import mekanism.client.render.MekanismRenderer;
|
import mekanism.client.render.MekanismRenderer;
|
||||||
import mekanism.common.block.BlockMachine.MachineType;
|
import mekanism.common.block.BlockMachine.MachineType;
|
||||||
|
import mekanism.common.tile.TileEntityBasicBlock;
|
||||||
import mekanism.common.util.MekanismUtils;
|
import mekanism.common.util.MekanismUtils;
|
||||||
import mekanism.common.util.MekanismUtils.ResourceType;
|
import mekanism.common.util.MekanismUtils.ResourceType;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.RenderBlocks;
|
import net.minecraft.client.renderer.RenderBlocks;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.world.IBlockAccess;
|
import net.minecraft.world.IBlockAccess;
|
||||||
import net.minecraftforge.client.model.AdvancedModelLoader;
|
import net.minecraftforge.client.model.AdvancedModelLoader;
|
||||||
|
@ -240,6 +242,17 @@ public class MachineRenderingHandler implements ISimpleBlockRenderingHandler
|
||||||
{
|
{
|
||||||
if(!MachineType.get(block, metadata).hasModel)
|
if(!MachineType.get(block, metadata).hasModel)
|
||||||
{
|
{
|
||||||
|
TileEntity tile = world.getTileEntity(x, y, z);
|
||||||
|
|
||||||
|
if(tile instanceof TileEntityBasicBlock)
|
||||||
|
{
|
||||||
|
if(((TileEntityBasicBlock)tile).getFacing() >= 2)
|
||||||
|
{
|
||||||
|
renderer.uvRotateTop = MekanismRenderer.directionMap[((TileEntityBasicBlock)tile).getFacing()-2];
|
||||||
|
renderer.uvRotateBottom = MekanismRenderer.directionMap[((TileEntityBasicBlock)tile).getFacing()-2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
renderer.renderStandardBlock(block, x, y, z);
|
renderer.renderStandardBlock(block, x, y, z);
|
||||||
renderer.setRenderBoundsFromBlock(block);
|
renderer.setRenderBoundsFromBlock(block);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -14,6 +14,7 @@ import mekanism.api.MekanismConfig.machines;
|
||||||
import mekanism.api.MekanismConfig.usage;
|
import mekanism.api.MekanismConfig.usage;
|
||||||
import mekanism.api.energy.IEnergizedItem;
|
import mekanism.api.energy.IEnergizedItem;
|
||||||
import mekanism.api.energy.IStrictEnergyStorage;
|
import mekanism.api.energy.IStrictEnergyStorage;
|
||||||
|
import mekanism.client.render.MekanismRenderer;
|
||||||
import mekanism.common.ItemAttacher;
|
import mekanism.common.ItemAttacher;
|
||||||
import mekanism.common.Mekanism;
|
import mekanism.common.Mekanism;
|
||||||
import mekanism.common.MekanismBlocks;
|
import mekanism.common.MekanismBlocks;
|
||||||
|
@ -102,7 +103,6 @@ import net.minecraftforge.fluids.FluidContainerRegistry;
|
||||||
import net.minecraftforge.fluids.FluidRegistry;
|
import net.minecraftforge.fluids.FluidRegistry;
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import buildcraft.api.tools.IToolWrench;
|
import buildcraft.api.tools.IToolWrench;
|
||||||
import cpw.mods.fml.common.ModAPIManager;
|
|
||||||
import cpw.mods.fml.common.Optional.Interface;
|
import cpw.mods.fml.common.Optional.Interface;
|
||||||
import cpw.mods.fml.common.Optional.Method;
|
import cpw.mods.fml.common.Optional.Method;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
|
@ -179,18 +179,10 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer
|
||||||
switch(blockType)
|
switch(blockType)
|
||||||
{
|
{
|
||||||
case MACHINE_BLOCK_1:
|
case MACHINE_BLOCK_1:
|
||||||
icons[0][0] = register.registerIcon("mekanism:EnrichmentChamberFrontOff");
|
MekanismRenderer.loadDynamicTextures(register, MachineType.ENRICHMENT_CHAMBER, BASE_ICON, icons[0]);
|
||||||
icons[0][1] = register.registerIcon("mekanism:EnrichmentChamberFrontOn");
|
MekanismRenderer.loadDynamicTextures(register, MachineType.OSMIUM_COMPRESSOR, BASE_ICON, icons[1]);
|
||||||
icons[0][2] = BASE_ICON;
|
MekanismRenderer.loadDynamicTextures(register, MachineType.COMBINER, BASE_ICON, icons[2]);
|
||||||
icons[1][0] = register.registerIcon("mekanism:OsmiumCompressorFrontOff");
|
MekanismRenderer.loadDynamicTextures(register, MachineType.CRUSHER, BASE_ICON, icons[3]);
|
||||||
icons[1][1] = register.registerIcon("mekanism:OsmiumCompressorFrontOn");
|
|
||||||
icons[1][2] = BASE_ICON;
|
|
||||||
icons[2][0] = register.registerIcon("mekanism:CombinerFrontOff");
|
|
||||||
icons[2][1] = register.registerIcon("mekanism:CombinerFrontOn");
|
|
||||||
icons[2][2] = BASE_ICON;
|
|
||||||
icons[3][0] = register.registerIcon("mekanism:CrusherFrontOff");
|
|
||||||
icons[3][1] = register.registerIcon("mekanism:CrusherFrontOn");
|
|
||||||
icons[3][2] = BASE_ICON;
|
|
||||||
icons[5][0] = register.registerIcon("mekanism:BasicFactoryFront");
|
icons[5][0] = register.registerIcon("mekanism:BasicFactoryFront");
|
||||||
icons[5][1] = register.registerIcon("mekanism:BasicFactorySide");
|
icons[5][1] = register.registerIcon("mekanism:BasicFactorySide");
|
||||||
icons[5][2] = register.registerIcon("mekanism:BasicFactoryTop");
|
icons[5][2] = register.registerIcon("mekanism:BasicFactoryTop");
|
||||||
|
@ -200,21 +192,13 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer
|
||||||
icons[7][0] = register.registerIcon("mekanism:EliteFactoryFront");
|
icons[7][0] = register.registerIcon("mekanism:EliteFactoryFront");
|
||||||
icons[7][1] = register.registerIcon("mekanism:EliteFactorySide");
|
icons[7][1] = register.registerIcon("mekanism:EliteFactorySide");
|
||||||
icons[7][2] = register.registerIcon("mekanism:EliteFactoryTop");
|
icons[7][2] = register.registerIcon("mekanism:EliteFactoryTop");
|
||||||
icons[9][0] = register.registerIcon("mekanism:PurificationChamberFrontOff");
|
MekanismRenderer.loadDynamicTextures(register, MachineType.PURIFICATION_CHAMBER, BASE_ICON, icons[9]);
|
||||||
icons[9][1] = register.registerIcon("mekanism:PurificationChamberFrontOn");
|
MekanismRenderer.loadDynamicTextures(register, MachineType.ENERGIZED_SMELTER, BASE_ICON, icons[10]);
|
||||||
icons[9][2] = BASE_ICON;
|
|
||||||
icons[10][0] = register.registerIcon("mekanism:EnergizedSmelterFrontOff");
|
|
||||||
icons[10][1] = register.registerIcon("mekanism:EnergizedSmelterFrontOn");
|
|
||||||
icons[10][2] = register.registerIcon("mekanism:SteelCasing");
|
|
||||||
icons[11][0] = register.registerIcon("mekanism:Teleporter");
|
icons[11][0] = register.registerIcon("mekanism:Teleporter");
|
||||||
break;
|
break;
|
||||||
case MACHINE_BLOCK_2:
|
case MACHINE_BLOCK_2:
|
||||||
icons[3][0] = register.registerIcon("mekanism:ChemicalInjectionChamberFrontOff");
|
MekanismRenderer.loadDynamicTextures(register, MachineType.CHEMICAL_INJECTION_CHAMBER, BASE_ICON, icons[3]);
|
||||||
icons[3][1] = register.registerIcon("mekanism:ChemicalInjectionChamberFrontOn");
|
MekanismRenderer.loadDynamicTextures(register, MachineType.PRECISION_SAWMILL, BASE_ICON, icons[5]);
|
||||||
icons[3][2] = BASE_ICON;
|
|
||||||
icons[5][0] = register.registerIcon("mekanism:PrecisionSawmillFrontOff");
|
|
||||||
icons[5][1] = register.registerIcon("mekanism:PrecisionSawmillFrontOn");
|
|
||||||
icons[5][2] = BASE_ICON;
|
|
||||||
break;
|
break;
|
||||||
case MACHINE_BLOCK_3:
|
case MACHINE_BLOCK_3:
|
||||||
icons[0][0] = register.registerIcon("mekanism:AmbientAccumulator");
|
icons[0][0] = register.registerIcon("mekanism:AmbientAccumulator");
|
||||||
|
@ -387,13 +371,7 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer
|
||||||
case 3:
|
case 3:
|
||||||
case 9:
|
case 9:
|
||||||
case 10:
|
case 10:
|
||||||
if(side == 3)
|
return icons[meta][side == 3 ? 2 : (side == 2 ? 3 : side)];
|
||||||
{
|
|
||||||
return icons[meta][0];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return icons[meta][2];
|
|
||||||
}
|
|
||||||
case 5:
|
case 5:
|
||||||
case 6:
|
case 6:
|
||||||
case 7:
|
case 7:
|
||||||
|
@ -416,13 +394,7 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer
|
||||||
{
|
{
|
||||||
case 3:
|
case 3:
|
||||||
case 5:
|
case 5:
|
||||||
if(side == 3)
|
return icons[meta][side == 3 ? 2 : (side == 2 ? 3 : side)];
|
||||||
{
|
|
||||||
return icons[meta][0];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return icons[meta][2];
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
return icons[meta][0] != null ? icons[meta][0] : BASE_ICON;
|
return icons[meta][0] != null ? icons[meta][0] : BASE_ICON;
|
||||||
}
|
}
|
||||||
|
@ -471,13 +443,8 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer
|
||||||
case 3:
|
case 3:
|
||||||
case 9:
|
case 9:
|
||||||
case 10:
|
case 10:
|
||||||
if(side == tileEntity.facing)
|
boolean active = MekanismUtils.isActive(world, x, y, z);
|
||||||
{
|
return icons[meta][MekanismUtils.getBaseOrientation(side, tileEntity.facing)+(active ? 6 : 0)];
|
||||||
return MekanismUtils.isActive(world, x, y, z) ? icons[meta][1] : icons[meta][0];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return icons[meta][2];
|
|
||||||
}
|
|
||||||
case 5:
|
case 5:
|
||||||
case 6:
|
case 6:
|
||||||
case 7:
|
case 7:
|
||||||
|
@ -500,13 +467,8 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer
|
||||||
{
|
{
|
||||||
case 3:
|
case 3:
|
||||||
case 5:
|
case 5:
|
||||||
if(side == tileEntity.facing)
|
boolean active = MekanismUtils.isActive(world, x, y, z);
|
||||||
{
|
return icons[meta][MekanismUtils.getBaseOrientation(side, tileEntity.facing)+(active ? 6 : 0)];
|
||||||
return MekanismUtils.isActive(world, x, y, z) ? icons[meta][1] : icons[meta][0];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return icons[meta][2];
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
return icons[meta][0];
|
return icons[meta][0];
|
||||||
}
|
}
|
||||||
|
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |