package mekanism.generators.client.render.item; import java.util.LinkedList; import java.util.List; import javax.vecmath.Matrix4f; import mekanism.client.render.MekanismRenderer; import mekanism.client.render.ctm.CTMModelFactory; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; import mekanism.generators.client.model.ModelAdvancedSolarGenerator; import mekanism.generators.client.model.ModelBioGenerator; import mekanism.generators.client.model.ModelGasGenerator; import mekanism.generators.client.model.ModelHeatGenerator; import mekanism.generators.client.model.ModelSolarGenerator; import mekanism.generators.client.model.ModelWindGenerator; import mekanism.generators.common.block.states.BlockStateGenerator.GeneratorType; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.block.model.IBakedModel; import net.minecraft.client.renderer.block.model.ItemCameraTransforms; import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; import net.minecraft.client.renderer.block.model.ItemOverrideList; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.vertex.VertexFormat; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraftforge.client.model.IPerspectiveAwareModel; import org.apache.commons.lang3.tuple.Pair; import org.lwjgl.opengl.GL11; import com.google.common.collect.ImmutableList; public class BakedGeneratorItemModel implements IBakedModel, IPerspectiveAwareModel { private IBakedModel baseModel; private ItemStack stack; private TransformType prevTransform; private Minecraft mc = Minecraft.getMinecraft(); public static ModelAdvancedSolarGenerator advancedSolarGenerator = new ModelAdvancedSolarGenerator(); public static ModelSolarGenerator solarGenerator = new ModelSolarGenerator(); public static ModelBioGenerator bioGenerator = new ModelBioGenerator(); public static ModelHeatGenerator heatGenerator = new ModelHeatGenerator(); public static ModelGasGenerator gasGenerator = new ModelGasGenerator(); public static ModelWindGenerator windGenerator = new ModelWindGenerator(); public BakedGeneratorItemModel(IBakedModel model, ItemStack s) { baseModel = model; stack = s; } private void doRender(TransformType type) { GeneratorType generatorType = GeneratorType.get(stack); if(generatorType != null) { if(generatorType == GeneratorType.BIO_GENERATOR) { GlStateManager.rotate(180F, 0.0F, 0.0F, 1.0F); GL11.glTranslated(0.0F, -1.0F, 0.0F); mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "BioGenerator.png")); bioGenerator.render(0.0625F); } else if(generatorType == GeneratorType.ADVANCED_SOLAR_GENERATOR) { GlStateManager.rotate(180F, 0.0F, 0.0F, 1.0F); GlStateManager.rotate(90F, 0.0F, 1.0F, 0.0F); GlStateManager.translate(0.0F, 0.2F, 0.0F); mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "AdvancedSolarGenerator.png")); advancedSolarGenerator.render(0.022F); } else if(generatorType == GeneratorType.SOLAR_GENERATOR) { GlStateManager.rotate(180F, 0.0F, 0.0F, 1.0F); GlStateManager.rotate(90F, 0.0F, -1.0F, 0.0F); GL11.glTranslated(0.0F, -1.0F, 0.0F); mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "SolarGenerator.png")); solarGenerator.render(0.0625F); } else if(generatorType == GeneratorType.HEAT_GENERATOR) { GlStateManager.rotate(180F, 0.0F, 0.0F, 1.0F); GL11.glTranslated(0.0F, -1.0F, 0.0F); mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "HeatGenerator.png")); heatGenerator.render(0.0625F, false, mc.renderEngine); } else if(generatorType == GeneratorType.GAS_GENERATOR) { GlStateManager.rotate(180F, 0.0F, 1.0F, 1.0F); GlStateManager.rotate(90F, -1.0F, 0.0F, 0.0F); GL11.glTranslated(0.0F, -1.0F, 0.0F); GlStateManager.rotate(180F, 0.0F, 1.0F, 0.0F); mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "GasGenerator.png")); gasGenerator.render(0.0625F); } else if(generatorType == GeneratorType.WIND_GENERATOR) { GlStateManager.rotate(180F, 0.0F, 0.0F, 1.0F); GlStateManager.rotate(180F, 0.0F, 1.0F, 0.0F); GlStateManager.translate(0.0F, 0.4F, 0.0F); mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "WindGenerator.png")); windGenerator.render(0.016F, 0); } return; } } @Override public List<BakedQuad> getQuads(IBlockState state, EnumFacing side, long rand) { if(side != null) { return ImmutableList.of(); } Tessellator tessellator = Tessellator.getInstance(); VertexFormat prevFormat = null; MekanismRenderer.pauseRenderer(tessellator); List<BakedQuad> generalQuads = new LinkedList<BakedQuad>(); GlStateManager.pushMatrix(); GlStateManager.translate(0.5F, 0.5F, 0.5F); GlStateManager.rotate(180, 0.0F, 1.0F, 0.0F); doRender(prevTransform); GlStateManager.enableLighting(); GlStateManager.enableLight(0); GlStateManager.enableLight(1); GlStateManager.enableColorMaterial(); GlStateManager.colorMaterial(1032, 5634); Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); GlStateManager.popMatrix(); MekanismRenderer.resumeRenderer(tessellator); if(Block.getBlockFromItem(stack.getItem()) != null) { generalQuads.addAll(baseModel.getQuads(state, side, rand)); } return generalQuads; } @Override public boolean isAmbientOcclusion() { return baseModel.isAmbientOcclusion(); } @Override public boolean isGui3d() { return baseModel.isGui3d(); } @Override public boolean isBuiltInRenderer() { return baseModel.isBuiltInRenderer(); } @Override public TextureAtlasSprite getParticleTexture() { return baseModel.getParticleTexture(); } @Override public ItemCameraTransforms getItemCameraTransforms() { return baseModel.getItemCameraTransforms(); } @Override public Pair<? extends IPerspectiveAwareModel, Matrix4f> handlePerspective(ItemCameraTransforms.TransformType cameraTransformType) { prevTransform = cameraTransformType; return Pair.of(this, CTMModelFactory.transforms.get(cameraTransformType).getMatrix()); } @Override public ItemOverrideList getOverrides() { return ItemOverrideList.NONE; } }