package pneumaticCraft.client.model; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemBlock; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; import pneumaticCraft.api.client.assemblymachine.AssemblyRenderOverriding; import pneumaticCraft.api.client.assemblymachine.AssemblyRenderOverriding.IAssemblyRenderOverriding; import pneumaticCraft.common.tileentity.TileEntityAssemblyPlatform; import pneumaticCraft.lib.Textures; public class ModelAssemblyPlatform extends ModelBase implements IBaseModel{ //fields ModelRenderer Base; ModelRenderer Platform; ModelRenderer Leg1; ModelRenderer Leg2; ModelRenderer Leg3; ModelRenderer Leg4; ModelRenderer Claw1; ModelRenderer Claw2; private final RenderItem customRenderItem; public ModelAssemblyPlatform(){ // EE3 snippet, to initialize an EntityItem which doesn't bob. customRenderItem = new RenderItem(){ @Override public boolean shouldBob(){ return false; }; }; customRenderItem.setRenderManager(RenderManager.instance); textureWidth = 64; textureHeight = 32; Base = new ModelRenderer(this, 0, 15); Base.addBox(0F, 0F, 0F, 16, 1, 16); Base.setRotationPoint(-8F, 23F, -8F); Base.setTextureSize(64, 32); Base.mirror = true; setRotation(Base, 0F, 0F, 0F); Platform = new ModelRenderer(this, 0, 6); Platform.addBox(0F, 0F, 0F, 8, 1, 8); Platform.setRotationPoint(-4F, 18F, -4F); Platform.setTextureSize(64, 32); Platform.mirror = true; setRotation(Platform, 0F, 0F, 0F); Leg1 = new ModelRenderer(this, 34, 0); Leg1.addBox(0F, 0F, 0F, 1, 6, 1); Leg1.setRotationPoint(2.3F, 18F, -3F); Leg1.setTextureSize(64, 32); Leg1.mirror = true; setRotation(Leg1, -0.5585054F, -0.7853982F, 0F); Leg2 = new ModelRenderer(this, 34, 0); Leg2.addBox(0F, 0F, 0F, 1, 6, 1); Leg2.setRotationPoint(-3F, 18F, -2.3F); Leg2.setTextureSize(64, 32); Leg2.mirror = true; setRotation(Leg2, -0.5585054F, 0.7853982F, 0F); Leg3 = new ModelRenderer(this, 34, 0); Leg3.addBox(0F, 0F, 0F, 1, 6, 1); Leg3.setRotationPoint(3F, 18F, 2.3F); Leg3.setTextureSize(64, 32); Leg3.mirror = true; setRotation(Leg3, -0.5585054F, -2.356194F, 0F); Leg4 = new ModelRenderer(this, 34, 0); Leg4.addBox(0F, 0F, 0F, 1, 6, 1); Leg4.setRotationPoint(-2.3F, 18F, 3F); Leg4.setTextureSize(64, 32); Leg4.mirror = true; setRotation(Leg4, -0.5585054F, 2.356194F, 0F); Claw1 = new ModelRenderer(this, 0, 0); Claw1.addBox(0F, 0F, 0F, 2, 1, 1); Claw1.setRotationPoint(-1F, 17F, 0F); Claw1.setTextureSize(64, 32); Claw1.mirror = true; setRotation(Claw1, 0F, 0F, 0F); Claw2 = new ModelRenderer(this, 0, 0); Claw2.addBox(0F, 0F, 0F, 2, 1, 1); Claw2.setRotationPoint(-1F, 17F, -1F); Claw2.setTextureSize(64, 32); Claw2.mirror = true; setRotation(Claw2, 0F, 0F, 0F); } @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5){ super.render(entity, f, f1, f2, f3, f4, f5); setRotationAngles(f, f1, f2, f3, f4, f5, entity); Base.render(f5); Platform.render(f5); Leg1.render(f5); Leg2.render(f5); Leg3.render(f5); Leg4.render(f5); Claw1.render(f5); Claw2.render(f5); } @Override public void renderStatic(float size, TileEntity te){ } public void renderModel(float size, float progress, EntityItem carriedItem){ float clawTrans; float scaleFactor = 0.7F; IAssemblyRenderOverriding renderOverride = null; if(carriedItem != null) { renderOverride = AssemblyRenderOverriding.renderOverrides.get(carriedItem.getEntityItem()); if(renderOverride != null) { clawTrans = renderOverride.getPlatformClawShift(carriedItem.getEntityItem()); } else { if(carriedItem.getEntityItem().getItem() instanceof ItemBlock) { clawTrans = 1.5F / 16F - progress * 0.1F / 16F; } else { clawTrans = 1.5F / 16F - progress * 1.4F / 16F; scaleFactor = 0.4F; } } } else { clawTrans = 1.5F / 16F - progress * 1.5F / 16F; } Base.render(size); Platform.render(size); Leg1.render(size); Leg2.render(size); Leg3.render(size); Leg4.render(size); GL11.glPushMatrix(); GL11.glTranslated(0, 0, clawTrans); Claw1.render(size); GL11.glTranslated(0, 0, -2 * clawTrans); Claw2.render(size); GL11.glPopMatrix(); if(carriedItem != null) { if(renderOverride == null || renderOverride.applyRenderChangePlatform(carriedItem.getEntityItem())) { GL11.glRotated(180, 1, 0, 0); GL11.glTranslated(0, carriedItem.getEntityItem().getItem() instanceof ItemBlock ? -16.5 / 16F : -17.5 / 16F, 0); // GL11.glRotated(-90, 0, 1, 0); GL11.glScalef(scaleFactor, scaleFactor, scaleFactor); customRenderItem.doRender(carriedItem, 0, 0, 0, 0, 0); } } } private void setRotation(ModelRenderer model, float x, float y, float z){ model.rotateAngleX = x; model.rotateAngleY = y; model.rotateAngleZ = z; } @Override public ResourceLocation getModelTexture(TileEntity tile){ return Textures.MODEL_ASSEMBLY_PLATFORM; } @Override public boolean rotateModelBasedOnBlockMeta(){ return false; } @Override public void renderDynamic(float size, TileEntity te, float partialTicks){ if(te instanceof TileEntityAssemblyPlatform) { TileEntityAssemblyPlatform tile = (TileEntityAssemblyPlatform)te; EntityItem ghostEntityItem = null; if(tile.getHeldStack() != null) { ghostEntityItem = new EntityItem(tile.getWorldObj()); ghostEntityItem.hoverStart = 0.0F; ghostEntityItem.setEntityItemStack(tile.getHeldStack()); } boolean fancySetting = RenderManager.instance.options.fancyGraphics; RenderManager.instance.options.fancyGraphics = true; renderModel(size, tile.oldClawProgress + (tile.clawProgress - tile.oldClawProgress) * partialTicks, ghostEntityItem); RenderManager.instance.options.fancyGraphics = fancySetting; } else { renderModel(size, 0, null); } } }