From 0427ab89f1753a44b30cbc35ce021cbbdc845109 Mon Sep 17 00:00:00 2001 From: Foghrye4 Date: Thu, 10 Aug 2017 18:52:45 +0300 Subject: fix missing source folder --- .../java/ihl/model/FlexibleCableItemRender.java | 178 +++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 src/main/java/ihl/model/FlexibleCableItemRender.java (limited to 'src/main/java/ihl/model/FlexibleCableItemRender.java') diff --git a/src/main/java/ihl/model/FlexibleCableItemRender.java b/src/main/java/ihl/model/FlexibleCableItemRender.java new file mode 100644 index 0000000..e11a253 --- /dev/null +++ b/src/main/java/ihl/model/FlexibleCableItemRender.java @@ -0,0 +1,178 @@ +package ihl.model; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ihl.items_blocks.FlexibleCableItem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityClientPlayerMP; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.common.util.ForgeDirection; + +@SideOnly(value=Side.CLIENT) +public class FlexibleCableItemRender implements IItemRenderer { + private ModelTube model; + private ModelTube modelThin; + private ModelTube modelLong; + private ModelTube modelThinLong; + private final int segmentsAmount = 19; + private final float spiralStepAngle = 1f; + private final float scale = 1 / 32f; + private final int[] displayListCache = new int[4]; + + public FlexibleCableItemRender() { + float vOffset = 16f; + int longFragmensSize = 24; + model = new ModelTube(null, 0, 0, -2F, -3F, -2F + vOffset, 4, 6, 4, 0f, 0.5f, 0.99f, ForgeDirection.UP); + modelLong = new ModelTube(null, 0, 0, -2F, -3F, -2F + vOffset, 4, longFragmensSize, 4, 0f, 0f, 0.99f, + ForgeDirection.UP); + modelThin = new ModelTube(null, 0, 0, -1F, -3F, -1F + vOffset, 2, 6, 2, 0f, 0.5f, 0.99f, ForgeDirection.UP); + modelThinLong = new ModelTube(null, 0, 0, -1F, -3F, -1F + vOffset, 2, longFragmensSize, 2, 0f, 0.5f, 0.99f, + ForgeDirection.UP); + } + + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + switch (type) { + case ENTITY: + return true; + case EQUIPPED: + return true; + case EQUIPPED_FIRST_PERSON: + return true; + case INVENTORY: + return true; + default: + return false; + } + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + return true; + } + + @Override + public void renderItem(ItemRenderType type, ItemStack stack, Object... data) { + GL11.glPushMatrix(); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glScalef(1F, -1F, -1F); + switch (type) { + case ENTITY: + GL11.glTranslatef(0, -1.0F, 0); + this.rendercoil(stack); + break; + case EQUIPPED: + GL11.glTranslatef(0.25F, -2F, -0.75F); + this.rendercoil(stack); + break; + case EQUIPPED_FIRST_PERSON: + RenderPlayer var25; + EntityClientPlayerMP var3 = Minecraft.getMinecraft().thePlayer; + Minecraft.getMinecraft().getTextureManager().bindTexture(var3.getLocationSkin()); + var25 = (RenderPlayer) RenderManager.instance.getEntityRenderObject(Minecraft.getMinecraft().thePlayer); + GL11.glRotatef(135F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(35F, 0.0F, 1.0F, 0.0F); + var25.renderFirstPersonArm(Minecraft.getMinecraft().thePlayer); + GL11.glRotatef(-35F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-135F, 1.0F, 0.0F, 0.0F); + GL11.glTranslatef(0.0F, 0.2F, 0F); + GL11.glTranslatef(-0.25F, -1.0F, 0F); + this.rendercoil(stack); + break; + case INVENTORY: + GL11.glTranslatef(0.0F, -0.2F, 0F); + this.rendercoil(stack); + break; + default: + } + GL11.glPopMatrix(); + } + + private void rendercoil(ItemStack stack) { + int type = this.getCableType(stack); + if (this.displayListCache[type] != 0) { + GL11.glCallList(displayListCache[type]); + } else { + + this.displayListCache[type] = GLAllocation.generateDisplayLists(1); + GL11.glNewList(displayListCache[type], 4864 /* GL_COMPILE */); + + GL11.glDisable(GL11.GL_TEXTURE_2D); + int saMax = this.segmentsAmount * 2 + this.segmentsAmount / 2; + for (int i = 0; i <= saMax; i++) { + GL11.glRotatef(-spiralStepAngle, 0f, 0f, 1f); + GL11.glRotatef(360f / this.segmentsAmount, 1f, 0f, 0f); + GL11.glTranslatef(0.004f, 0f, 0f); + GL11.glRotatef(spiralStepAngle, 0f, 0f, 1f); + GL11.glColor3f(1f, 1f, 1f); + if (i == 0) { + if (isNoInsulation(stack)) { + if (FlexibleCableItem.instance.yellowColoredWires + .contains(FlexibleCableItem.instance.getMaterial(stack))) { + GL11.glColor3f(1f, 0.75f, 0.1f); + } else { + GL11.glColor3f(0.65f, 0.65f, 0.67f); + } + this.modelThinLong.render(Tessellator.instance, scale); + + } else { + this.modelLong.render(Tessellator.instance, scale); + } + } else if (i == saMax) { + GL11.glTranslatef(0.0F, -0.55F, 0F); + if (isNoInsulation(stack)) { + if (FlexibleCableItem.instance.yellowColoredWires + .contains(FlexibleCableItem.instance.getMaterial(stack))) { + GL11.glColor3f(1f, 0.75f, 0.1f); + } else { + GL11.glColor3f(0.65f, 0.65f, 0.67f); + } + this.modelThinLong.render(Tessellator.instance, scale); + + } else { + this.modelLong.render(Tessellator.instance, scale); + } + GL11.glTranslatef(0.0F, 0.55F, 0F); + } else { + if (isNoInsulation(stack)) { + if (FlexibleCableItem.instance.yellowColoredWires + .contains(FlexibleCableItem.instance.getMaterial(stack))) { + GL11.glColor3f(1f, 0.75f, 0.1f); + } else { + GL11.glColor3f(0.65f, 0.65f, 0.67f); + } + this.modelThin.render(Tessellator.instance, scale); + + } else { + this.model.render(Tessellator.instance, scale); + } + } + } + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glEndList(); + } + } + + private int getCableType(ItemStack stack) { + if (isNoInsulation(stack)) { + if (FlexibleCableItem.instance.yellowColoredWires.contains(FlexibleCableItem.instance.getMaterial(stack))) { + return 1; + } else { + return 2; + } + } + return 0; + } + + private boolean isNoInsulation(ItemStack stack) { + return stack.stackTagCompound != null && FlexibleCableItem.instance.getInsulationMaterial(stack).equals("null"); + } +} \ No newline at end of file -- cgit v1.2.3