aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gtPlusPlus/core/client
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gtPlusPlus/core/client')
-rw-r--r--src/main/java/gtPlusPlus/core/client/CustomTextureSet.java28
-rw-r--r--src/main/java/gtPlusPlus/core/client/model/ModelBatKing.java120
-rw-r--r--src/main/java/gtPlusPlus/core/client/model/ModelDecayChest.java46
-rw-r--r--src/main/java/gtPlusPlus/core/client/model/ModelEggBox.java65
-rw-r--r--src/main/java/gtPlusPlus/core/client/model/ModelGiantChicken.java112
-rw-r--r--src/main/java/gtPlusPlus/core/client/model/ModelSickBlaze.java93
-rw-r--r--src/main/java/gtPlusPlus/core/client/model/ModelStaballoyConstruct.java120
-rw-r--r--src/main/java/gtPlusPlus/core/client/model/tabula/ModelTabulaBase.java38
-rw-r--r--src/main/java/gtPlusPlus/core/client/renderer/CustomItemBlockRenderer.java85
-rw-r--r--src/main/java/gtPlusPlus/core/client/renderer/CustomOreBlockRenderer.java2083
-rw-r--r--src/main/java/gtPlusPlus/core/client/renderer/RenderBatKing.java152
-rw-r--r--src/main/java/gtPlusPlus/core/client/renderer/RenderDecayChest.java82
-rw-r--r--src/main/java/gtPlusPlus/core/client/renderer/RenderGiantChicken.java15
-rw-r--r--src/main/java/gtPlusPlus/core/client/renderer/RenderMiningExplosivesPrimed.java107
-rw-r--r--src/main/java/gtPlusPlus/core/client/renderer/RenderPlasmaBolt.java168
-rw-r--r--src/main/java/gtPlusPlus/core/client/renderer/RenderPotionthrow.java104
-rw-r--r--src/main/java/gtPlusPlus/core/client/renderer/RenderSickBlaze.java99
-rw-r--r--src/main/java/gtPlusPlus/core/client/renderer/RenderStaballoyConstruct.java149
-rw-r--r--src/main/java/gtPlusPlus/core/client/renderer/RenderToxinball.java93
-rw-r--r--src/main/java/gtPlusPlus/core/client/renderer/particle/EntityDropParticleFX.java96
-rw-r--r--src/main/java/gtPlusPlus/core/client/renderer/tabula/RenderTabulaBase.java46
21 files changed, 3901 insertions, 0 deletions
diff --git a/src/main/java/gtPlusPlus/core/client/CustomTextureSet.java b/src/main/java/gtPlusPlus/core/client/CustomTextureSet.java
new file mode 100644
index 0000000000..400503b2fa
--- /dev/null
+++ b/src/main/java/gtPlusPlus/core/client/CustomTextureSet.java
@@ -0,0 +1,28 @@
+package gtPlusPlus.core.client;
+
+import gregtech.api.enums.TextureSet;
+
+public class CustomTextureSet extends TextureSet {
+
+ public static enum TextureSets {
+
+ REFINED(),
+ GEM_A(),
+ ENRICHED(),
+ NUCLEAR;
+
+ private final CustomTextureSet A;
+
+ private TextureSets (){
+ A = new CustomTextureSet(this.name().toUpperCase());
+ }
+ public CustomTextureSet get() {
+ return A;
+ }
+ }
+
+ public CustomTextureSet(String aSetName) {
+ super(aSetName);
+ }
+
+}
diff --git a/src/main/java/gtPlusPlus/core/client/model/ModelBatKing.java b/src/main/java/gtPlusPlus/core/client/model/ModelBatKing.java
new file mode 100644
index 0000000000..ac64dee26a
--- /dev/null
+++ b/src/main/java/gtPlusPlus/core/client/model/ModelBatKing.java
@@ -0,0 +1,120 @@
+package gtPlusPlus.core.client.model;
+
+import org.lwjgl.opengl.GL11;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gtPlusPlus.core.entity.monster.EntityBatKing;
+import net.minecraft.client.model.ModelBase;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.passive.EntityBat;
+import net.minecraft.util.MathHelper;
+
+@SideOnly(Side.CLIENT)
+public class ModelBatKing extends ModelBase
+{
+ private ModelRenderer batHead;
+ /** The body box of the bat model. */
+ private ModelRenderer batBody;
+ /** The inner right wing box of the bat model. */
+ private ModelRenderer batRightWing;
+ /** The inner left wing box of the bat model. */
+ private ModelRenderer batLeftWing;
+ /** The outer right wing box of the bat model. */
+ private ModelRenderer batOuterRightWing;
+ /** The outer left wing box of the bat model. */
+ private ModelRenderer batOuterLeftWing;
+
+ public ModelBatKing()
+ {
+ this.textureWidth = 64;
+ this.textureHeight = 64;
+
+ this.batHead = new ModelRenderer(this, 0, 0);
+ this.batHead.addBox(-3.0F, -3.0F, -3.0F, 6, 6, 6);
+ ModelRenderer modelrenderer = new ModelRenderer(this, 24, 0);
+ modelrenderer.addBox(-4.0F, -6.0F, -2.0F, 3, 4, 1);
+ this.batHead.addChild(modelrenderer);
+ ModelRenderer modelrenderer1 = new ModelRenderer(this, 24, 0);
+ modelrenderer1.mirror = true;
+ modelrenderer1.addBox(1.0F, -6.0F, -2.0F, 3, 4, 1);
+ this.batHead.addChild(modelrenderer1);
+ this.batBody = new ModelRenderer(this, 0, 16);
+ this.batBody.addBox(-3.0F, 4.0F, -3.0F, 6, 12, 6);
+ this.batBody.setTextureOffset(0, 34).addBox(-5.0F, 16.0F, 0.0F, 10, 6, 1);
+ this.batRightWing = new ModelRenderer(this, 42, 0);
+ this.batRightWing.addBox(-12.0F, 1.0F, 1.5F, 10, 16, 1);
+ this.batOuterRightWing = new ModelRenderer(this, 24, 16);
+ this.batOuterRightWing.setRotationPoint(-12.0F, 1.0F, 1.5F);
+ this.batOuterRightWing.addBox(-8.0F, 1.0F, 0.0F, 8, 12, 1);
+ this.batLeftWing = new ModelRenderer(this, 42, 0);
+ this.batLeftWing.mirror = true;
+ this.batLeftWing.addBox(2.0F, 1.0F, 1.5F, 10, 16, 1);
+ this.batOuterLeftWing = new ModelRenderer(this, 24, 16);
+ this.batOuterLeftWing.mirror = true;
+ this.batOuterLeftWing.setRotationPoint(12.0F, 1.0F, 1.5F);
+ this.batOuterLeftWing.addBox(0.0F, 1.0F, 0.0F, 8, 12, 1);
+ this.batBody.addChild(this.batRightWing);
+ this.batBody.addChild(this.batLeftWing);
+ this.batRightWing.addChild(this.batOuterRightWing);
+ this.batLeftWing.addChild(this.batOuterLeftWing);
+ }
+
+ /**
+ * not actually sure this is size, is not used as of now, but the model would be recreated if the value changed and
+ * it seems a good match for a bats size
+ */
+ public int getBatSize()
+ {
+ return 72;
+ }
+
+ /**
+ * Sets the models various rotation angles then renders the model.
+ */
+ public void render(Entity p_78088_1_, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float p_78088_7_)
+ {
+ EntityBatKing entitybat = (EntityBatKing)p_78088_1_;
+ float f6;
+
+ if (entitybat.getIsBatHanging())
+ {
+ f6 = (180F / (float)Math.PI);
+ this.batHead.rotateAngleX = p_78088_6_ / (180F / (float)Math.PI);
+ this.batHead.rotateAngleY = (float)Math.PI - p_78088_5_ / (180F / (float)Math.PI);
+ this.batHead.rotateAngleZ = (float)Math.PI;
+ this.batHead.setRotationPoint(0.0F, -2.0F, 0.0F);
+ this.batRightWing.setRotationPoint(-3.0F, 0.0F, 3.0F);
+ this.batLeftWing.setRotationPoint(3.0F, 0.0F, 3.0F);
+ this.batBody.rotateAngleX = (float)Math.PI;
+ this.batRightWing.rotateAngleX = -0.15707964F;
+ this.batRightWing.rotateAngleY = -((float)Math.PI * 2F / 5F);
+ this.batOuterRightWing.rotateAngleY = -1.7278761F;
+ this.batLeftWing.rotateAngleX = this.batRightWing.rotateAngleX;
+ this.batLeftWing.rotateAngleY = -this.batRightWing.rotateAngleY;
+ this.batOuterLeftWing.rotateAngleY = -this.batOuterRightWing.rotateAngleY;
+ }
+ else
+ {
+ f6 = (180F / (float)Math.PI);
+ this.batHead.rotateAngleX = p_78088_6_ / (180F / (float)Math.PI);
+ this.batHead.rotateAngleY = p_78088_5_ / (180F / (float)Math.PI);
+ this.batHead.rotateAngleZ = 0.0F;
+ this.batHead.setRotationPoint(0.0F, 0.0F, 0.0F);
+ this.batRightWing.setRotationPoint(0.0F, 0.0F, 0.0F);
+ this.batLeftWing.setRotationPoint(0.0F, 0.0F, 0.0F);
+ this.batBody.rotateAngleX = ((float)Math.PI / 4F) + MathHelper.cos(p_78088_4_ * 0.1F) * 0.15F;
+ this.batBody.rotateAngleY = 0.0F;
+ this.batRightWing.rotateAngleY = MathHelper.cos(p_78088_4_ * 1.3F) * (float)Math.PI * 0.25F;
+ this.batLeftWing.rotateAngleY = -this.batRightWing.rotateAngleY;
+ this.batOuterRightWing.rotateAngleY = this.batRightWing.rotateAngleY * 0.5F;
+ this.batOuterLeftWing.rotateAngleY = -this.batRightWing.rotateAngleY * 0.5F;
+ }
+
+
+ GL11.glScalef(4, 4, 4);
+ this.batHead.render(p_78088_7_);
+ this.batBody.render(p_78088_7_);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gtPlusPlus/core/client/model/ModelDecayChest.java b/src/main/java/gtPlusPlus/core/client/model/ModelDecayChest.java
new file mode 100644
index 0000000000..c116dcf115
--- /dev/null
+++ b/src/main/java/gtPlusPlus/core/client/model/ModelDecayChest.java
@@ -0,0 +1,46 @@
+package gtPlusPlus.core.client.model;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import net.minecraft.client.model.ModelBase;
+import net.minecraft.client.model.ModelRenderer;
+
+@SideOnly(Side.CLIENT)
+public class ModelDecayChest extends ModelBase
+{
+ /** The chest lid in the chest's model. */
+ public ModelRenderer chestLid = (new ModelRenderer(this, 0, 0)).setTextureSize(64, 64);
+ /** The model of the bottom of the chest. */
+ public ModelRenderer chestBelow;
+ /** The chest's knob in the chest model. */
+ public ModelRenderer chestKnob;
+
+ public ModelDecayChest()
+ {
+ this.chestLid.addBox(0.0F, -5.0F, -14.0F, 14, 5, 14, 0.0F);
+ this.chestLid.rotationPointX = 1.0F;
+ this.chestLid.rotationPointY = 7.0F;
+ this.chestLid.rotationPointZ = 15.0F;
+ this.chestKnob = (new ModelRenderer(this, 0, 0)).setTextureSize(64, 64);
+ this.chestKnob.addBox(-1.0F, -2.0F, -15.0F, 2, 4, 1, 0.0F);
+ this.chestKnob.rotationPointX = 8.0F;
+ this.chestKnob.rotationPointY = 7.0F;
+ this.chestKnob.rotationPointZ = 15.0F;
+ this.chestBelow = (new ModelRenderer(this, 0, 19)).setTextureSize(64, 64);
+ this.chestBelow.addBox(0.0F, 0.0F, 0.0F, 14, 10, 14, 0.0F);
+ this.chestBelow.rotationPointX = 1.0F;
+ this.chestBelow.rotationPointY = 6.0F;
+ this.chestBelow.rotationPointZ = 1.0F;
+ }
+
+ /**
+ * This method renders out all parts of the chest model.
+ */
+ public void renderAll()
+ {
+ this.chestKnob.rotateAngleX = this.chestLid.rotateAngleX;
+ this.chestLid.render(0.0625F);
+ this.chestKnob.render(0.0625F);
+ this.chestBelow.render(0.0625F);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gtPlusPlus/core/client/model/ModelEggBox.java b/src/main/java/gtPlusPlus/core/client/model/ModelEggBox.java
new file mode 100644
index 0000000000..0aef4eb7b0
--- /dev/null
+++ b/src/main/java/gtPlusPlus/core/client/model/ModelEggBox.java
@@ -0,0 +1,65 @@
+package gtPlusPlus.core.client.model;
+
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.data.AutoMap;
+import gtPlusPlus.api.objects.data.Pair;
+import gtPlusPlus.core.client.model.tabula.ModelTabulaBase;
+import gtPlusPlus.core.client.renderer.tabula.RenderTabulaBase;
+import gtPlusPlus.core.tileentities.general.TileEntityEggBox;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.entity.Entity;
+
+/**
+ * ModelEggBox - Alkalus
+ * Created using Tabula 4.1.1
+ */
+public class ModelEggBox extends ModelTabulaBase {
+
+ private final AutoMap<Pair<ModelRenderer, Float>> mParts = new AutoMap<Pair<ModelRenderer, Float>>();
+
+ private static RenderTabulaBase mRendererInstance;
+
+ public ModelRenderer bottom;
+ //EggBox_full.png
+
+ public ModelEggBox() {
+ super(64, 64);
+ this.textureWidth = 64;
+ this.textureHeight = 64;
+
+ this.bottom = new ModelRenderer(this, 0, 19);
+ this.bottom.setRotationPoint(1.0F, 6.0F, 1.0F);
+ this.bottom.addBox(0.0F, 0.0F, 0.0F, 14, 10, 14, 0.0F);
+ mParts.add(new Pair<ModelRenderer, Float>(bottom, 0f));
+ }
+
+ @Override
+ public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) {
+ //Logger.INFO("Rendering EggBox");
+ this.bottom.render(f5);
+ }
+
+ /**
+ * This is a helper function from Tabula to set the rotation of model parts
+ */
+ public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) {
+ modelRenderer.rotateAngleX = x;
+ modelRenderer.rotateAngleY = y;
+ modelRenderer.rotateAngleZ = z;
+ }
+
+ @Override
+ protected AutoMap<Pair<ModelRenderer, Float>> getModelParts() {
+ AutoMap<Pair<ModelRenderer, Float>> aParts = new AutoMap<Pair<ModelRenderer, Float>>();
+ aParts.add(new Pair<ModelRenderer, Float>(bottom, 0.0625F));
+ return aParts;
+ //return mParts;
+ }
+
+ public static RenderTabulaBase getRenderer() {
+ if (mRendererInstance == null) {
+ mRendererInstance = new RenderTabulaBase(new ModelEggBox(), "textures/blocks/TileEntities/EggBox_full.png", TileEntityEggBox.class);
+ }
+ return mRendererInstance;
+ }
+}
diff --git a/src/main/java/gtPlusPlus/core/client/model/ModelGiantChicken.java b/src/main/java/gtPlusPlus/core/client/model/ModelGiantChicken.java
new file mode 100644
index 0000000000..f7fb92f550
--- /dev/null
+++ b/src/main/java/gtPlusPlus/core/client/model/ModelGiantChicken.java
@@ -0,0 +1,112 @@
+package gtPlusPlus.core.client.model;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+import net.minecraft.client.model.ModelChicken;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.entity.Entity;
+import net.minecraft.util.MathHelper;
+import org.lwjgl.opengl.GL11;
+
+@SideOnly(Side.CLIENT)
+public class ModelGiantChicken extends ModelChicken{
+
+ public ModelGiantChicken()
+ {
+ byte b0 = 16;
+ this.head = new ModelRenderer(this, 0, 0);
+ this.head.addBox(-2.0F, -6.0F, -2.0F, 4, 6, 3, 0.0F);
+ this.head.setRotationPoint(0.0F, (float)(-1 + b0), -4.0F);
+ this.bill = new ModelRenderer(this, 14, 0);
+ this.bill.addBox(-2.0F, -4.0F, -4.0F, 4, 2, 2, 0.0F);
+ this.bill.setRotationPoint(0.0F, (float)(-1 + b0), -4.0F);
+ this.chin = new ModelRenderer(this, 14, 4);
+ this.chin.addBox(-1.0F, -2.0F, -3.0F, 2, 2, 2, 0.0F);
+ this.chin.setRotationPoint(0.0F, (float)(-1 + b0), -4.0F);
+ this.body = new ModelRenderer(this, 0, 9);
+ this.body.addBox(-3.0F, -4.0F, -3.0F, 6, 8, 6, 0.0F);
+ this.body.setRotationPoint(0.0F, (float)b0, 0.0F);
+ this.rightLeg = new ModelRenderer(this, 26, 0);
+ this.rightLeg.addBox(-1.0F, 0.0F, -3.0F, 3, 5, 3);
+ this.rightLeg.setRotationPoint(-2.0F, (float)(3 + b0), 1.0F);
+ this.leftLeg = new ModelRenderer(this, 26, 0);
+ this.leftLeg.addBox(-1.0F, 0.0F, -3.0F, 3, 5, 3);
+ this.leftLeg.setRotationPoint(1.0F, (float)(3 + b0), 1.0F);
+ this.rightWing = new ModelRenderer(this, 24, 13);
+ this.rightWing.addBox(0.0F, 0.0F, -3.0F, 1, 4, 6);
+ this.rightWing.setRotationPoint(-4.0F, (float)(-3 + b0), 0.0F);
+ this.leftWing = new ModelRenderer(this, 24, 13);
+ this.leftWing.addBox(-1.0F, 0.0F, -3.0F, 1, 4, 6);
+ this.leftWing.setRotationPoint(4.0F, (float)(-3 + b0), 0.0F);
+ }
+
+ /**
+ * Sets the models various rotation angles then renders the model.
+ */
+ public void render(Entity p_78088_1_, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float p_78088_7_)
+ {
+ this.setRotationAngles(p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, p_78088_7_, p_78088_1_);
+
+ if (this.isChild)
+ {
+ float f6 = 1.0F;
+ GL11.glPushMatrix();
+ GL11.glTranslatef(0.0F, 0F, 0F);
+ this.head.render(p_78088_7_);
+ this.bill.render(p_78088_7_);
+ this.chin.render(p_78088_7_);
+ GL11.glPopMatrix();
+ GL11.glPushMatrix();
+ GL11.glScalef(1.0F * f6, 1.0F * f6, 1.0F * f6);
+ GL11.glTranslatef(0.0F, 0F, 0.0F);
+ this.body.render(p_78088_7_);
+ this.rightLeg.render(p_78088_7_);
+ this.leftLeg.render(p_78088_7_);
+ this.rightWing.render(p_78088_7_);
+ this.leftWing.render(p_78088_7_);
+ GL11.glPopMatrix();
+ //super.render(p_78088_1_, p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, p_78088_7_);
+ }
+ else
+ {
+ float f6 = 2.0F;
+ GL11.glPushMatrix();
+ GL11.glScalef(1.0F * f6, 1.0F * f6, 1.0F * f6);
+ GL11.glTranslatef(0.0F, -0.85F, 0F);
+ this.head.render(p_78088_7_);
+ this.bill.render(p_78088_7_);
+ this.chin.render(p_78088_7_);
+ GL11.glPopMatrix();
+ GL11.glPushMatrix();
+ GL11.glScalef(1.0F * f6, 1.0F * f6, 1.0F * f6);
+ GL11.glTranslatef(0.0F, -0.75F, 0.0F);
+ this.body.render(p_78088_7_);
+ this.rightLeg.render(p_78088_7_);
+ this.leftLeg.render(p_78088_7_);
+ this.rightWing.render(p_78088_7_);
+ this.leftWing.render(p_78088_7_);
+ GL11.glPopMatrix();
+ }
+ }
+
+ /**
+ * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms
+ * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how
+ * "far" arms and legs can swing at most.
+ */
+ public void setRotationAngles(float p_78087_1_, float p_78087_2_, float p_78087_3_, float p_78087_4_, float p_78087_5_, float p_78087_6_, Entity p_78087_7_)
+ {
+ this.head.rotateAngleX = p_78087_5_ / (180F / (float)Math.PI);
+ this.head.rotateAngleY = p_78087_4_ / (180F / (float)Math.PI);
+ this.bill.rotateAngleX = this.head.rotateAngleX;
+ this.bill.rotateAngleY = this.head.rotateAngleY;
+ this.chin.rotateAngleX = this.head.rotateAngleX;
+ this.chin.rotateAngleY = this.head.rotateAngleY;
+ this.body.rotateAngleX = ((float)Math.PI / 2F);
+ this.rightLeg.rotateAngleX = MathHelper.cos(p_78087_1_ * 0.6662F) * 1.4F * p_78087_2_;
+ this.leftLeg.rotateAngleX = MathHelper.cos(p_78087_1_ * 0.6662F + (float)Math.PI) * 1.4F * p_78087_2_;
+ this.rightWing.rotateAngleZ = p_78087_3_;
+ this.leftWing.rotateAngleZ = -p_78087_3_;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gtPlusPlus/core/client/model/ModelSickBlaze.java b/src/main/java/gtPlusPlus/core/client/model/ModelSickBlaze.java
new file mode 100644
index 0000000000..455df761cb
--- /dev/null
+++ b/src/main/java/gtPlusPlus/core/client/model/ModelSickBlaze.java
@@ -0,0 +1,93 @@
+package gtPlusPlus.core.client.model;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+import net.minecraft.client.model.ModelBlaze;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.entity.Entity;
+import net.minecraft.util.MathHelper;
+
+@SideOnly(Side.CLIENT)
+public class ModelSickBlaze extends ModelBlaze
+{
+ /** The sticks that fly around the Blaze. */
+ private ModelRenderer[] blazeSticks = new ModelRenderer[24];
+ private ModelRenderer blazeHead;
+
+ public ModelSickBlaze()
+ {
+ for (int i = 0; i < this.blazeSticks.length; ++i)
+ {
+ this.blazeSticks[i] = new ModelRenderer(this, 0, 16);
+ this.blazeSticks[i].addBox(0.0F, 0.0F, 0.0F, 2, 8, 2);
+ }
+
+ this.blazeHead = new ModelRenderer(this, 0, 0);
+ this.blazeHead.addBox(-4.0F, -4.0F, -4.0F, 8, 8, 8);
+ }
+
+ @Override
+ public int func_78104_a()
+ {
+ return 8;
+ }
+
+ /**
+ * Sets the models various rotation angles then renders the model.
+ */
+ @Override
+ public void render(Entity p_78088_1_, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float p_78088_7_)
+ {
+ this.setRotationAngles(p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, p_78088_7_, p_78088_1_);
+ this.blazeHead.render(p_78088_7_);
+
+ for (int i = 0; i < this.blazeSticks.length; ++i)
+ {
+ this.blazeSticks[i].render(p_78088_7_);
+ }
+ }
+
+ /**
+ * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms
+ * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how
+ * "far" arms and legs can swing at most.
+ */
+ @Override
+ public void setRotationAngles(float p_78087_1_, float p_78087_2_, float p_78087_3_, float p_78087_4_, float p_78087_5_, float p_78087_6_, Entity p_78087_7_)
+ {
+ float f6 = p_78087_3_ * (float)Math.PI * -0.1F;
+ int i;
+
+ for (i = 0; i < 4; ++i)
+ {
+ this.blazeSticks[i].rotationPointY = -2.0F + MathHelper.cos((i * 2 + p_78087_3_) * 0.25F);
+ this.blazeSticks[i].rotationPointX = MathHelper.cos(f6) * 9.0F;
+ this.blazeSticks[i].rotationPointZ = MathHelper.sin(f6) * 9.0F;
+ ++f6;
+ }
+
+ f6 = ((float)Math.PI / 4F) + p_78087_3_ * (float)Math.PI * 0.03F;
+
+ for (i = 4; i < 8; ++i)
+ {
+ this.blazeSticks[i].rotationPointY = 2.0F + MathHelper.cos((i * 2 + p_78087_3_) * 0.25F);
+ this.blazeSticks[i].rotationPointX = MathHelper.cos(f6) * 7.0F;
+ this.blazeSticks[i].rotationPointZ = MathHelper.sin(f6) * 7.0F;
+ ++f6;
+ }
+
+ f6 = 0.47123894F + p_78087_3_ * (float)Math.PI * -0.05F;
+
+ for (i = 8; i < 12; ++i)
+ {
+ this.blazeSticks[i].rotationPointY = 11.0F + MathHelper.cos((i * 1.5F + p_78087_3_) * 0.5F);
+ this.blazeSticks[i].rotationPointX = MathHelper.cos(f6) * 5.0F;
+ this.blazeSticks[i].rotationPointZ = MathHelper.sin(f6) * 5.0F;
+ ++f6;
+ }
+
+ this.blazeHead.rotateAngleY = p_78087_4_ / (180F / (float)Math.PI);
+ this.blazeHead.rotateAngleX = p_78087_5_ / (180F / (float)Math.PI);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gtPlusPlus/core/client/model/ModelStaballoyConstruct.java b/src/main/java/gtPlusPlus/core/client/model/ModelStaballoyConstruct.java
new file mode 100644
index 0000000000..aa23635b4d
--- /dev/null
+++ b/src/main/java/gtPlusPlus/core/client/model/ModelStaballoyConstruct.java
@@ -0,0 +1,120 @@
+package gtPlusPlus.core.client.model;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+import net.minecraft.client.model.ModelIronGolem;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.monster.EntityIronGolem;
+
+@SideOnly(Side.CLIENT)
+public class ModelStaballoyConstruct extends ModelIronGolem
+{
+
+ public ModelStaballoyConstruct()
+ {
+ this(0.0F);
+ }
+
+ public ModelStaballoyConstruct(float p_i1161_1_)
+ {
+ this(p_i1161_1_, -7.0F);
+ }
+
+ public ModelStaballoyConstruct(float p_i1162_1_, float p_i1162_2_)
+ {
+ short short1 = 128;
+ short short2 = 128;
+ this.ironGolemHead = (new ModelRenderer(this)).setTextureSize(short1, short2);
+ this.ironGolemHead.setRotationPoint(0.0F, 0.0F + p_i1162_2_, -2.0F);
+ this.ironGolemHead.setTextureOffset(0, 0).addBox(-4.0F, -12.0F, -5.5F, 8, 10, 8, p_i1162_1_);
+ this.ironGolemHead.setTextureOffset(24, 0).addBox(-1.0F, -5.0F, -7.5F, 2, 4, 2, p_i1162_1_);
+ this.ironGolemBody = (new ModelRenderer(this)).setTextureSize(short1, short2);
+ this.ironGolemBody.setRotationPoint(0.0F, 0.0F + p_i1162_2_, 0.0F);
+ this.ironGolemBody.setTextureOffset(0, 40).addBox(-9.0F, -2.0F, -6.0F, 18, 12, 11, p_i1162_1_);
+ this.ironGolemBody.setTextureOffset(0, 70).addBox(-4.5F, 10.0F, -3.0F, 9, 5, 6, p_i1162_1_ + 0.5F);
+ this.ironGolemRightArm = (new ModelRenderer(this)).setTextureSize(short1, short2);
+ this.ironGolemRightArm.setRotationPoint(0.0F, -7.0F, 0.0F);
+ this.ironGolemRightArm.setTextureOffset(60, 21).addBox(-13.0F, -2.5F, -3.0F, 4, 30, 6, p_i1162_1_);
+ this.ironGolemLeftArm = (new ModelRenderer(this)).setTextureSize(short1, short2);
+ this.ironGolemLeftArm.setRotationPoint(0.0F, -7.0F, 0.0F);
+ this.ironGolemLeftArm.setTextureOffset(60, 58).addBox(9.0F, -2.5F, -3.0F, 4, 30, 6, p_i1162_1_);
+ this.ironGolemLeftLeg = (new ModelRenderer(this, 0, 22)).setTextureSize(short1, short2);
+ this.ironGolemLeftLeg.setRotationPoint(-4.0F, 18.0F + p_i1162_2_, 0.0F);
+ this.ironGolemLeftLeg.setTextureOffset(37, 0).addBox(-3.5F, -3.0F, -3.0F, 6, 16, 5, p_i1162_1_);
+ this.ironGolemRightLeg = (new ModelRenderer(this, 0, 22)).setTextureSize(short1, short2);
+ this.ironGolemRightLeg.mirror = true;
+ this.ironGolemRightLeg.setTextureOffset(60, 0).setRotationPoint(5.0F, 18.0F + p_i1162_2_, 0.0F);
+ this.ironGolemRightLeg.addBox(-3.5F, -3.0F, -3.0F, 6, 16, 5, p_i1162_1_);
+ }
+
+ /**
+ * Sets the models various rotation angles then renders the model.
+ */
+ @Override
+ public void render(Entity p_78088_1_, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float p_78088_7_)
+ {
+ this.setRotationAngles(p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, p_78088_7_, p_78088_1_);
+ this.ironGolemHead.render(p_78088_7_);
+ this.ironGolemBody.render(p_78088_7_);
+ this.ironGolemLeftLeg.render(p_78088_7_);
+ this.ironGolemRightLeg.render(p_78088_7_);
+ this.ironGolemRightArm.render(p_78088_7_);
+ this.ironGolemLeftArm.render(p_78088_7_);
+ }
+
+ /**
+ * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms
+ * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how
+ * "far" arms and legs can swing at most.
+ */
+ @Override
+ public void setRotationAngles(float p_78087_1_, float p_78087_2_, float p_78087_3_, float p_78087_4_, float p_78087_5_, float p_78087_6_, Entity p_78087_7_)
+ {
+ this.ironGolemHead.rotateAngleY = p_78087_4_ / (180F / (float)Math.PI);
+ this.ironGolemHead.rotateAngleX = p_78087_5_ / (180F / (float)Math.PI);
+ this.ironGolemLeftLeg.rotateAngleX = -1.5F * this.func_78172_a(p_78087_1_, 13.0F) * p_78087_2_;
+ this.ironGolemRightLeg.rotateAngleX = 1.5F * this.func_78172_a(p_78087_1_, 13.0F) * p_78087_2_;
+ this.ironGolemLeftLeg.rotateAngleY = 0.0F;
+ this.ironGolemRightLeg.rotateAngleY = 0.0F;
+ }
+
+ /**
+ * Used for easily adding entity-dependent animations. The second and third float params here are the same second
+ * and third as in the setRotationAngles method.
+ */
+ @Override
+ public void setLivingAnimations(EntityLivingBase p_78086_1_, float p_78086_2_, float p_78086_3_, float p_78086_4_)
+ {
+ EntityIronGolem entityirongolem = (EntityIronGolem)p_78086_1_;
+ int i = entityirongolem.getAttackTimer();
+
+ if (i > 0)
+ {
+ this.ironGolemRightArm.rotateAngleX = -2.0F + 1.5F * this.func_78172_a(i - p_78086_4_, 10.0F);
+ this.ironGolemLeftArm.rotateAngleX = -2.0F + 1.5F * this.func_78172_a(i - p_78086_4_, 10.0F);
+ }
+ else
+ {
+ int j = entityirongolem.getHoldRoseTick();
+
+ if (j > 0)
+ {
+ this.ironGolemRightArm.rotateAngleX = -0.8F + 0.025F * this.func_78172_a(j, 70.0F);
+ this.ironGolemLeftArm.rotateAngleX = 0.0F;
+ }
+ else
+ {
+ this.ironGolemRightArm.rotateAngleX = (-0.2F + 1.5F * this.func_78172_a(p_78086_2_, 13.0F)) * p_78086_3_;
+ this.ironGolemLeftArm.rotateAngleX = (-0.2F - 1.5F * this.func_78172_a(p_78086_2_, 13.0F)) * p_78086_3_;
+ }
+ }
+ }
+
+ private float func_78172_a(float p_78172_1_, float p_78172_2_)
+ {
+ return (Math.abs(p_78172_1_ % p_78172_2_ - p_78172_2_ * 0.5F) - p_78172_2_ * 0.25F) / (p_78172_2_ * 0.25F);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gtPlusPlus/core/client/model/tabula/ModelTabulaBase.java b/src/main/java/gtPlusPlus/core/client/model/tabula/ModelTabulaBase.java
new file mode 100644
index 0000000000..3a0cbb636b
--- /dev/null
+++ b/src/main/java/gtPlusPlus/core/client/model/tabula/ModelTabulaBase.java
@@ -0,0 +1,38 @@
+package gtPlusPlus.core.client.model.tabula;
+
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.data.AutoMap;
+import gtPlusPlus.api.objects.data.Pair;
+import net.minecraft.client.model.ModelBase;
+import net.minecraft.client.model.ModelRenderer;
+
+/**
+ * ModelEggBox - Alkalus
+ * Created using Tabula 4.1.1
+ */
+public abstract class ModelTabulaBase extends ModelBase {
+
+
+ public ModelTabulaBase(int aTexWidth, int aTexHeight) {
+ this.textureWidth = aTexWidth;
+ this.textureHeight = aTexHeight;
+ }
+
+ protected abstract AutoMap<Pair<ModelRenderer, Float>> getModelParts();
+
+ public void renderAll() {
+ for (Pair<ModelRenderer, Float> part : getModelParts()) {
+ //Logger.INFO("Rendering EggBox");
+ part.getKey().render(part.getValue());
+ }
+ }
+
+ /**
+ * This is a helper function from Tabula to set the rotation of model parts
+ */
+ public void setRotateAngle(ModelRenderer modelRenderer, float x, float y, float z) {
+ modelRenderer.rotateAngleX = x;
+ modelRenderer.rotateAngleY = y;
+ modelRenderer.rotateAngleZ = z;
+ }
+}
diff --git a/src/main/java/gtPlusPlus/core/client/renderer/CustomItemBlockRenderer.java b/src/main/java/gtPlusPlus/core/client/renderer/CustomItemBlockRenderer.java
new file mode 100644
index 0000000000..f40357495a
--- /dev/null
+++ b/src/main/java/gtPlusPlus/core/client/renderer/CustomItemBlockRenderer.java
@@ -0,0 +1,85 @@
+package gtPlusPlus.core.client.renderer;
+
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraftforge.client.IItemRenderer;
+
+import org.lwjgl.opengl.GL11;
+
+
+/**
+ * Easy way of rendering an item which should look like a block.
+ * Borrowed.
+ *
+ * @author King Lemming
+ *
+ */
+public class CustomItemBlockRenderer implements IItemRenderer {
+
+ public static CustomItemBlockRenderer instance = new CustomItemBlockRenderer();
+
+ @Override
+ public boolean handleRenderType(ItemStack item, ItemRenderType type) {
+ return true;
+ }
+
+ @Override
+ public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
+ return true;
+ }
+
+ @Override
+ public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
+
+ double offset = -0.5;
+ if (type == ItemRenderType.EQUIPPED || type == ItemRenderType.EQUIPPED_FIRST_PERSON) {
+ offset = 0;
+ } else if (type == ItemRenderType.ENTITY) {
+ GL11.glScalef(0.5F, 0.5F, 0.5F);
+ }
+ renderItemAsBlock((RenderBlocks) data[0], item, offset, offset, offset);
+ }
+
+ public static void renderItemAsBlock(RenderBlocks renderer, ItemStack item, double translateX, double translateY, double translateZ) {
+
+ renderTextureAsBlock(renderer, item.getIconIndex(), translateX, translateY, translateZ);
+ }
+
+ public static void renderTextureAsBlock(RenderBlocks renderer, IIcon texture, double translateX, double translateY, double translateZ) {
+
+ Tessellator tessellator = Tessellator.instance;
+ Block block = Blocks.stone;
+
+ if (texture == null) {
+ return;
+ }
+ renderer.setRenderBoundsFromBlock(block);
+ GL11.glTranslated(translateX, translateY, translateZ);
+ tessellator.startDrawingQuads();
+
+ tessellator.setNormal(0.0F, -1.0F, 0.0F);
+ renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, texture);
+
+ tessellator.setNormal(0.0F, 1.0F, 0.0F);
+ renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, texture);
+
+ tessellator.setNormal(0.0F, 0.0F, -1.0F);
+ renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, texture);
+
+ tessellator.setNormal(0.0F, 0.0F, 1.0F);
+ renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, texture);
+
+ tessellator.setNormal(-1.0F, 0.0F, 0.0F);
+ renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, texture);
+
+ tessellator.setNormal(1.0F, 0.0F, 0.0F);
+ renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, texture);
+
+ tessellator.draw();
+ }
+
+}
diff --git a/src/main/java/gtPlusPlus/core/client/renderer/CustomOreBlockRenderer.java b/src/main/java/gtPlusPlus/core/client/renderer/CustomOreBlockRenderer.java
new file mode 100644
index 0000000000..a0b34d3b0b
--- /dev/null
+++ b/src/main/java/gtPlusPlus/core/client/renderer/CustomOreBlockRenderer.java
@@ -0,0 +1,2083 @@
+package gtPlusPlus.core.client.renderer;