diff --git a/resources/assets/tinker/lang/en_US.xml b/resources/assets/tinker/lang/en_US.xml
index 2edaca8a..cc68df01 100644
--- a/resources/assets/tinker/lang/en_US.xml
+++ b/resources/assets/tinker/lang/en_US.xml
@@ -186,6 +186,11 @@
Alumite Nugget
Steel Nugget
+ Helmet Cast
+ Chestplate Cast
+ Leggings Cast
+ Boots Cast
+
Beef Jerky
Bacon Jerky
Chicken Jerky
diff --git a/resources/assets/tinker/textures/items/materials/armor_cast.png b/resources/assets/tinker/textures/items/materials/armor_cast.png
new file mode 100644
index 00000000..3b0fc0a9
Binary files /dev/null and b/resources/assets/tinker/textures/items/materials/armor_cast.png differ
diff --git a/resources/assets/tinker/textures/items/materials/armorcast_boots.png b/resources/assets/tinker/textures/items/materials/armorcast_boots.png
new file mode 100644
index 00000000..ffd0e001
Binary files /dev/null and b/resources/assets/tinker/textures/items/materials/armorcast_boots.png differ
diff --git a/resources/assets/tinker/textures/items/materials/armorcast_chestplate.png b/resources/assets/tinker/textures/items/materials/armorcast_chestplate.png
new file mode 100644
index 00000000..4e1afda7
Binary files /dev/null and b/resources/assets/tinker/textures/items/materials/armorcast_chestplate.png differ
diff --git a/resources/assets/tinker/textures/items/materials/armorcast_helmet.png b/resources/assets/tinker/textures/items/materials/armorcast_helmet.png
new file mode 100644
index 00000000..ea624be4
Binary files /dev/null and b/resources/assets/tinker/textures/items/materials/armorcast_helmet.png differ
diff --git a/resources/assets/tinker/textures/items/materials/armorcast_leggings.png b/resources/assets/tinker/textures/items/materials/armorcast_leggings.png
new file mode 100644
index 00000000..e907951b
Binary files /dev/null and b/resources/assets/tinker/textures/items/materials/armorcast_leggings.png differ
diff --git a/src/tconstruct/TConstruct.java b/src/tconstruct/TConstruct.java
index d249b838..c7334c8a 100644
--- a/src/tconstruct/TConstruct.java
+++ b/src/tconstruct/TConstruct.java
@@ -1,46 +1,27 @@
package tconstruct;
+import cpw.mods.fml.common.*;
+import cpw.mods.fml.common.Mod.EventHandler;
+import cpw.mods.fml.common.Mod.Instance;
+import cpw.mods.fml.common.event.*;
+import cpw.mods.fml.common.network.*;
+import cpw.mods.fml.common.registry.*;
+import cpw.mods.fml.relauncher.Side;
import net.minecraft.crash.CallableMinecraftVersion;
import net.minecraft.world.gen.structure.MapGenStructureIO;
import net.minecraftforge.common.MinecraftForge;
import tconstruct.client.event.EventCloakRender;
-import tconstruct.common.TContent;
-import tconstruct.common.TProxyCommon;
+import tconstruct.common.*;
import tconstruct.library.TConstructRegistry;
-import tconstruct.library.crafting.Detailing;
-import tconstruct.library.crafting.LiquidCasting;
+import tconstruct.library.crafting.*;
import tconstruct.library.util.TabTools;
-import tconstruct.util.TCraftingHandler;
-import tconstruct.util.TEventHandler;
-import tconstruct.util.config.BOPConfig;
-import tconstruct.util.config.DimensionBlacklist;
-import tconstruct.util.config.PHConstruct;
-import tconstruct.util.config.TwilightForestConfig;
+import tconstruct.util.*;
+import tconstruct.util.config.*;
import tconstruct.util.landmine.behavior.Behavior;
import tconstruct.util.landmine.behavior.stackCombo.SpecialStackHandler;
import tconstruct.util.player.TPlayerHandler;
-import tconstruct.worldgen.SlimeIslandGen;
-import tconstruct.worldgen.TBaseWorldGenerator;
-import tconstruct.worldgen.TerrainGenEventHandler;
-import tconstruct.worldgen.village.ComponentSmeltery;
-import tconstruct.worldgen.village.ComponentToolWorkshop;
-import tconstruct.worldgen.village.TVillageTrades;
-import tconstruct.worldgen.village.VillageSmelteryHandler;
-import tconstruct.worldgen.village.VillageToolStationHandler;
-import cpw.mods.fml.common.Loader;
-import cpw.mods.fml.common.Mod;
-import cpw.mods.fml.common.Mod.EventHandler;
-import cpw.mods.fml.common.Mod.Instance;
-import cpw.mods.fml.common.SidedProxy;
-import cpw.mods.fml.common.event.FMLInitializationEvent;
-import cpw.mods.fml.common.event.FMLPostInitializationEvent;
-import cpw.mods.fml.common.event.FMLPreInitializationEvent;
-import cpw.mods.fml.common.network.NetworkMod;
-import cpw.mods.fml.common.network.NetworkRegistry;
-import cpw.mods.fml.common.registry.GameRegistry;
-import cpw.mods.fml.common.registry.VillagerRegistry;
-import cpw.mods.fml.common.versioning.ComparableVersion;
-import cpw.mods.fml.relauncher.Side;
+import tconstruct.worldgen.*;
+import tconstruct.worldgen.village.*;
/** TConstruct, the tool mod.
* Craft your tools with style, then modify until the original is gone!
@@ -163,6 +144,7 @@ public class TConstruct
@EventHandler
public void postInit (FMLPostInitializationEvent evt)
{
+ proxy.postInit();
Behavior.registerBuiltInBehaviors();
SpecialStackHandler.registerBuiltInStackHandlers();
content.modIntegration();
diff --git a/src/tconstruct/client/TProxyClient.java b/src/tconstruct/client/TProxyClient.java
index 8a1f39c6..d15ca902 100644
--- a/src/tconstruct/client/TProxyClient.java
+++ b/src/tconstruct/client/TProxyClient.java
@@ -27,6 +27,7 @@ import org.lwjgl.opengl.GL11;
import org.w3c.dom.Document;
import tconstruct.TConstruct;
import tconstruct.blocks.logic.*;
+import tconstruct.client.armor.RenderArmorCast;
import tconstruct.client.block.*;
import tconstruct.client.entity.*;
import tconstruct.client.entity.projectile.*;
@@ -939,4 +940,10 @@ public class TProxyClient extends TProxyCommon
return null;
}
}
+
+ @Override
+ public void postInit() {
+ MinecraftForgeClient.registerItemRenderer(TContent.armorPattern.itemID, new RenderArmorCast());
+ }
+
}
diff --git a/src/tconstruct/client/armor/RenderArmorCast.java b/src/tconstruct/client/armor/RenderArmorCast.java
new file mode 100644
index 00000000..d103f728
--- /dev/null
+++ b/src/tconstruct/client/armor/RenderArmorCast.java
@@ -0,0 +1,231 @@
+package tconstruct.client.armor;
+
+import java.util.*;
+
+import org.lwjgl.opengl.*;
+
+import tconstruct.items.ArmorPattern;
+
+import net.minecraft.block.Block;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.*;
+import net.minecraft.client.renderer.texture.TextureManager;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.Icon;
+import net.minecraftforge.client.IItemRenderer;
+import net.minecraftforge.common.ForgeDirection;
+
+public class RenderArmorCast implements IItemRenderer {
+
+ @Override
+ public boolean handleRenderType(ItemStack item, ItemRenderType type) {
+ return type != ItemRenderType.FIRST_PERSON_MAP;
+ }
+
+ @Override
+ public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
+ switch (helper) {
+ case BLOCK_3D:
+ return true;
+ case ENTITY_BOBBING:
+ return true;
+ case ENTITY_ROTATION:
+ return true;
+ case EQUIPPED_BLOCK:
+ return true;
+ case INVENTORY_BLOCK:
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ @Override
+ public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
+ RenderBlocks renderer = Minecraft.getMinecraft().renderGlobal.globalRenderBlocks;
+ Tessellator tessellator = Tessellator.instance;
+ Icon baseIcon = item.getItem() instanceof ArmorPattern ? ((ArmorPattern) item.getItem()).getBaseIcon() : item.getIconIndex();
+ GL11.glPushMatrix();
+ switch (type) {
+ case ENTITY:
+ GL11.glScalef(0.8F, 0.33F, 0.8F);
+ GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
+ break;
+ case INVENTORY:
+ GL11.glScalef(1F, 0.6F, 1F);
+ GL11.glTranslatef(0F, -0.1F, 0F);
+ break;
+ case EQUIPPED:
+ GL11.glScalef(1F, 0.6F, 1F);
+ break;
+ case EQUIPPED_FIRST_PERSON:
+ GL11.glScalef(1F, 0.6F, 1F);
+ break;
+ default:
+ break;
+ }
+ renderer.setRenderBounds(0.1F, 0.1F, 0.1F, 0.9F, 0.83F, 0.9F);
+ renderCube(tessellator, renderer, baseIcon);
+ renderer.setRenderBounds(0.1F, 0.1F, 0.1F, 0.9F, 1.0F, 0.9F);
+ ArrayList sides = new ArrayList();
+ sides.add(ForgeDirection.NORTH);
+ sides.add(ForgeDirection.SOUTH);
+ sides.add(ForgeDirection.EAST);
+ sides.add(ForgeDirection.WEST);
+ renderSelectedCube(tessellator, renderer, baseIcon, sides);
+ renderCastTop(item, type);
+
+ GL11.glPopMatrix();
+ }
+
+ public void renderCube(Tessellator tessellator, RenderBlocks renderer, Icon icon) {
+ tessellator.startDrawingQuads();
+ tessellator.setNormal(-1F, 0F, 0F);
+ renderer.renderFaceXNeg((Block) null, 0F, 0F, 0F, icon);
+ tessellator.setNormal(1F, 0F, 0F);
+ renderer.renderFaceXPos((Block) null, 0F, 0F, 0F, icon);
+ tessellator.setNormal(0F, -1F, 0F);
+ renderer.renderFaceYNeg((Block) null, 0F, 0F, 0F, icon);
+ tessellator.setNormal(0F, 1F, 0F);
+ renderer.renderFaceYPos((Block) null, 0F, 0F, 0F, icon);
+ tessellator.setNormal(0F, 0F, -1F);
+ renderer.renderFaceZNeg((Block) null, 0F, 0F, 0F, icon);
+ tessellator.setNormal(0F, 0F, 1F);
+ renderer.renderFaceZPos((Block) null, 0F, 0F, 0F, icon);
+ tessellator.draw();
+ }
+
+ public void renderSelectedCube(Tessellator tessellator, RenderBlocks renderer, Icon icon, List sidesToRender) {
+ tessellator.startDrawingQuads();
+ tessellator.setNormal(-1F, 0F, 0F);
+ if (sidesToRender.contains(ForgeDirection.WEST))
+ renderer.renderFaceXNeg((Block) null, 0F, 0F, 0F, icon);
+ tessellator.setNormal(1F, 0F, 0F);
+ if (sidesToRender.contains(ForgeDirection.EAST))
+ renderer.renderFaceXPos((Block) null, 0F, 0F, 0F, icon);
+ tessellator.setNormal(0F, -1F, 0F);
+ if (sidesToRender.contains(ForgeDirection.DOWN))
+ renderer.renderFaceYNeg((Block) null, 0F, 0F, 0F, icon);
+ tessellator.setNormal(0F, 1F, 0F);
+ if (sidesToRender.contains(ForgeDirection.UP))
+ renderer.renderFaceYPos((Block) null, 0F, 0F, 0F, icon);
+ tessellator.setNormal(0F, 0F, -1F);
+ if (sidesToRender.contains(ForgeDirection.SOUTH))
+ renderer.renderFaceZNeg((Block) null, 0F, 0F, 0F, icon);
+ tessellator.setNormal(0F, 0F, 1F);
+ if (sidesToRender.contains(ForgeDirection.NORTH))
+ renderer.renderFaceZPos((Block) null, 0F, 0F, 0F, icon);
+ tessellator.draw();
+ }
+
+ public void renderCastTop(ItemStack par1ItemStack, ItemRenderType type) {
+ GL11.glPushMatrix();
+ Icon icon = par1ItemStack.getIconIndex();
+
+ if (icon == null) {
+ GL11.glPopMatrix();
+ return;
+ }
+ TextureManager texturemanager = Minecraft.getMinecraft().renderEngine;
+ texturemanager.bindTexture(texturemanager.getResourceLocation(par1ItemStack.getItemSpriteNumber()));
+ Tessellator tessellator = Tessellator.instance;
+ float f = icon.getMinU();
+ float f1 = icon.getMaxU();
+ float f2 = icon.getMinV();
+ float f3 = icon.getMaxV();
+ float f4 = 0.0F;
+ float f5 = 0.3F;
+ GL11.glTranslatef(-f4, -f5, 0.0F);
+ float f6 = 1.5F;
+ GL11.glRotatef(90F, 90F, 0F, 0F);
+ GL11.glScalef(0.9F, 0.9F, 2F);
+ GL11.glTranslatef(0.05F, 0.05F, -0.6F);
+ renderItemIn2D(tessellator, f1, f2, f, f3, icon.getIconWidth(), icon.getIconHeight(), 0.0625F);
+ GL11.glScalef(0.8F, 0.8F, 0.9F);
+ GL11.glTranslatef(0.125F, 0.125F, 0.05F);
+ renderItemIn2D(tessellator, f1, f2, f, f3, icon.getIconWidth(), icon.getIconHeight(), 0.0625F);
+ GL11.glScalef(0.6F, 0.6F, 0.6F);
+ GL11.glTranslatef(0.335F, 0.335F, 0.05F);
+ renderItemIn2D(tessellator, f1, f2, f, f3, icon.getIconWidth(), icon.getIconHeight(), 0.0625F);
+
+ GL11.glPopMatrix();
+ }
+
+ public static void renderItemIn2D(Tessellator par0Tessellator, float par1, float par2, float par3, float par4, float par5, float par6, float par7) {
+ par0Tessellator.startDrawingQuads();
+ par0Tessellator.setNormal(0.0F, 0.0F, 1.0F);
+ par0Tessellator.addVertexWithUV(0.0D, 0.0D, 0.0D, (double) par1, (double) par4);
+ par0Tessellator.addVertexWithUV(1.0D, 0.0D, 0.0D, (double) par3, (double) par4);
+ par0Tessellator.addVertexWithUV(1.0D, 1.0D, 0.0D, (double) par3, (double) par2);
+ par0Tessellator.addVertexWithUV(0.0D, 1.0D, 0.0D, (double) par1, (double) par2);
+ par0Tessellator.draw();
+ par0Tessellator.startDrawingQuads();
+ par0Tessellator.setNormal(0.0F, 0.0F, -1.0F);
+ par0Tessellator.addVertexWithUV(0.0D, 1.0D, (double) (0.0F - par7), (double) par1, (double) par2);
+ par0Tessellator.addVertexWithUV(1.0D, 1.0D, (double) (0.0F - par7), (double) par3, (double) par2);
+ par0Tessellator.addVertexWithUV(1.0D, 0.0D, (double) (0.0F - par7), (double) par3, (double) par4);
+ par0Tessellator.addVertexWithUV(0.0D, 0.0D, (double) (0.0F - par7), (double) par1, (double) par4);
+ par0Tessellator.draw();
+ float f5 = 0.5F * (par1 - par3) / (float) par5;
+ float f6 = 0.5F * (par4 - par2) / (float) par6;
+ par0Tessellator.startDrawingQuads();
+ par0Tessellator.setNormal(-1.0F, 0.0F, 0.0F);
+ int k;
+ float f7;
+ float f8;
+
+ for (k = 0; k < par5; ++k) {
+ f7 = (float) k / (float) par5;
+ f8 = par1 + (par3 - par1) * f7 - f5;
+ par0Tessellator.addVertexWithUV((double) f7, 0.0D, (double) (0.0F - par7), (double) f8, (double) par4);
+ par0Tessellator.addVertexWithUV((double) f7, 0.0D, 0.0D, (double) f8, (double) par4);
+ par0Tessellator.addVertexWithUV((double) f7, 1.0D, 0.0D, (double) f8, (double) par2);
+ par0Tessellator.addVertexWithUV((double) f7, 1.0D, (double) (0.0F - par7), (double) f8, (double) par2);
+ }
+
+ par0Tessellator.draw();
+ par0Tessellator.startDrawingQuads();
+ par0Tessellator.setNormal(1.0F, 0.0F, 0.0F);
+ float f9;
+
+ for (k = 0; k < par5; ++k) {
+ f7 = (float) k / (float) par5;
+ f8 = par1 + (par3 - par1) * f7 - f5;
+ f9 = f7 + 1.0F / (float) par5;
+ par0Tessellator.addVertexWithUV((double) f9, 1.0D, (double) (0.0F - par7), (double) f8, (double) par2);
+ par0Tessellator.addVertexWithUV((double) f9, 1.0D, 0.0D, (double) f8, (double) par2);
+ par0Tessellator.addVertexWithUV((double) f9, 0.0D, 0.0D, (double) f8, (double) par4);
+ par0Tessellator.addVertexWithUV((double) f9, 0.0D, (double) (0.0F - par7), (double) f8, (double) par4);
+ }
+
+ par0Tessellator.draw();
+ par0Tessellator.startDrawingQuads();
+ par0Tessellator.setNormal(0.0F, 1.0F, 0.0F);
+
+ for (k = 0; k < par6; ++k) {
+ f7 = (float) k / (float) par6;
+ f8 = par4 + (par2 - par4) * f7 - f6;
+ f9 = f7 + 1.0F / (float) par6;
+ par0Tessellator.addVertexWithUV(0.0D, (double) f9, 0.0D, (double) par1, (double) f8);
+ par0Tessellator.addVertexWithUV(1.0D, (double) f9, 0.0D, (double) par3, (double) f8);
+ par0Tessellator.addVertexWithUV(1.0D, (double) f9, (double) (0.0F - par7), (double) par3, (double) f8);
+ par0Tessellator.addVertexWithUV(0.0D, (double) f9, (double) (0.0F - par7), (double) par1, (double) f8);
+ }
+
+ par0Tessellator.draw();
+ par0Tessellator.startDrawingQuads();
+ par0Tessellator.setNormal(0.0F, -1.0F, 0.0F);
+
+ for (k = 0; k < par6; ++k) {
+ f7 = (float) k / (float) par6;
+ f8 = par4 + (par2 - par4) * f7 - f6;
+ par0Tessellator.addVertexWithUV(1.0D, (double) f7, 0.0D, (double) par3, (double) f8);
+ par0Tessellator.addVertexWithUV(0.0D, (double) f7, 0.0D, (double) par1, (double) f8);
+ par0Tessellator.addVertexWithUV(0.0D, (double) f7, (double) (0.0F - par7), (double) par1, (double) f8);
+ par0Tessellator.addVertexWithUV(1.0D, (double) f7, (double) (0.0F - par7), (double) par3, (double) f8);
+ }
+
+ par0Tessellator.draw();
+ }
+
+}
\ No newline at end of file
diff --git a/src/tconstruct/client/block/CastingBasinSpecialRender.java b/src/tconstruct/client/block/CastingBasinSpecialRender.java
index 263fd3cd..22d3456d 100644
--- a/src/tconstruct/client/block/CastingBasinSpecialRender.java
+++ b/src/tconstruct/client/block/CastingBasinSpecialRender.java
@@ -1,19 +1,14 @@
package tconstruct.client.block;
-import net.minecraft.client.renderer.entity.RenderItem;
-import net.minecraft.client.renderer.entity.RenderManager;
+import cpw.mods.fml.relauncher.*;
+import net.minecraft.client.renderer.entity.*;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
-import net.minecraft.item.ItemBlock;
-import net.minecraft.item.ItemStack;
+import net.minecraft.item.*;
import net.minecraft.tileentity.TileEntity;
-
import org.lwjgl.opengl.GL11;
-
import tconstruct.blocks.logic.CastingBasinLogic;
import tconstruct.entity.FancyEntityItem;
-
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
+import tconstruct.library.ItemBlocklike;
/* Special renderer, only used for drawing tools */
@@ -58,7 +53,12 @@ public class CastingBasinSpecialRender extends TileEntitySpecialRenderer
{
GL11.glScalef(1.6F, 1.6F, 1.6F);
GL11.glTranslatef(0F, 0.045F, 0.0f);
- }
+ } else if (!(stack.getItem() instanceof ItemBlocklike)) {
+ GL11.glRotatef(90F, 1F, 0F, 0F);
+ GL11.glRotatef(90F, 0F, 0F, 1F);
+ GL11.glScalef(0.75F, 0.75F, 0.75F);
+ GL11.glTranslatef(0F, -0.235F, -0.36F);
+ }
RenderItem.renderInFrame = true;
RenderManager.instance.renderEntityWithPosYaw(entityitem, 0.0D, 0.0D, 0.0D, 0.0F, 0.0F);
diff --git a/src/tconstruct/client/block/CastingTableSpecialRenderer.java b/src/tconstruct/client/block/CastingTableSpecialRenderer.java
index 24a83ef0..7fdcf608 100644
--- a/src/tconstruct/client/block/CastingTableSpecialRenderer.java
+++ b/src/tconstruct/client/block/CastingTableSpecialRenderer.java
@@ -1,19 +1,14 @@
package tconstruct.client.block;
-import net.minecraft.client.renderer.entity.RenderItem;
-import net.minecraft.client.renderer.entity.RenderManager;
+import cpw.mods.fml.relauncher.*;
+import net.minecraft.client.renderer.entity.*;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
-import net.minecraft.item.ItemBlock;
-import net.minecraft.item.ItemStack;
+import net.minecraft.item.*;
import net.minecraft.tileentity.TileEntity;
-
import org.lwjgl.opengl.GL11;
-
import tconstruct.blocks.logic.CastingTableLogic;
import tconstruct.entity.FancyEntityItem;
-
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
+import tconstruct.library.ItemBlocklike;
/* Special renderer, only used for drawing tools */
@@ -60,7 +55,7 @@ public class CastingTableSpecialRenderer extends TileEntitySpecialRenderer
GL11.glTranslatef(1F, 1.48F, 0.55F);
GL11.glRotatef(90F, 1, 0F, 0F);
GL11.glScalef(2F, 2F, 2F);
- if (stack.getItem() instanceof ItemBlock)
+ if (stack.getItem() instanceof ItemBlock || stack.getItem() instanceof ItemBlocklike)
{
GL11.glRotatef(90F, -1, 0F, 0F);
GL11.glTranslatef(0F, -0.1F, 0.2275F);
diff --git a/src/tconstruct/client/block/SearedRender.java b/src/tconstruct/client/block/SearedRender.java
index c6ece04f..7c71e5dd 100644
--- a/src/tconstruct/client/block/SearedRender.java
+++ b/src/tconstruct/client/block/SearedRender.java
@@ -1,17 +1,16 @@
package tconstruct.client.block;
-import tconstruct.blocks.logic.CastingBasinLogic;
-import tconstruct.blocks.logic.CastingTableLogic;
-import tconstruct.blocks.logic.FaucetLogic;
-import tconstruct.client.TProxyClient;
-import tconstruct.common.TContent;
+import cpw.mods.fml.client.registry.*;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
-import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.fluids.Fluid;
-import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
-import cpw.mods.fml.client.registry.RenderingRegistry;
+import tconstruct.TConstruct;
+import tconstruct.blocks.logic.*;
+import tconstruct.client.TProxyClient;
+import tconstruct.common.TContent;
+import tconstruct.library.crafting.CastingRecipe;
public class SearedRender implements ISimpleBlockRenderingHandler
{
@@ -163,8 +162,30 @@ public class SearedRender implements ISimpleBlockRenderingHandler
CastingTableLogic logic = (CastingTableLogic) world.getBlockTileEntity(x, y, z);
if (logic.liquid != null)
{
+ float minHeight = 0.9375F;
+ float maxHeight = 1F;
+
+ float minX = 0.0625F;
+ float maxX = 0.9375F;
+ float minZ = 0.0625F;
+ float maxZ = 0.9375F;
+
+ ItemStack it = logic.getStackInSlot(0);
+ if(it != null){
+ CastingRecipe rec = TConstruct.tableCasting.getCastingRecipe(logic.liquid, it);
+ if(rec != null){
+ minHeight = rec.fluidRenderProperties.minHeight;
+ maxHeight = rec.fluidRenderProperties.maxHeight;
+
+ minX = rec.fluidRenderProperties.minX;
+ maxX = rec.fluidRenderProperties.maxX;
+ minZ = rec.fluidRenderProperties.minZ;
+ maxZ = rec.fluidRenderProperties.maxZ;
+ }
+ }
+
float height = logic.getLiquidAmount() / (logic.getCapacity() * 1.03F) / 16F;
- renderer.setRenderBounds(0.0625F, 0.9375F, 0.0625F, 0.9375F, 0.9375F + height, 0.9375F);
+ renderer.setRenderBounds(minX, minHeight, minZ, maxX, minHeight + height, maxZ);
Fluid fluid = logic.liquid.getFluid();
BlockSkinRenderHelper.renderLiquidBlock(fluid.getStillIcon(), fluid.getFlowingIcon(), x, y, z, renderer, world);
@@ -356,8 +377,29 @@ public class SearedRender implements ISimpleBlockRenderingHandler
CastingBasinLogic logic = (CastingBasinLogic) world.getBlockTileEntity(x, y, z);
if (logic.liquid != null)
{
- float height = logic.getLiquidAmount() / (logic.getCapacity() * 1.05F) * 0.6875F;
- renderer.setRenderBounds(0.0625F, 0.25f, 0.0625F, 0.9375F, 0.25f + height, 0.9375F);
+ float minHeight = 0.25F;
+ float maxHeight = 0.95F;
+
+ float minX = 0.0625F;
+ float maxX = 0.9375F;
+ float minZ = 0.0625F;
+ float maxZ = 0.9375F;
+
+ ItemStack it = logic.getStackInSlot(0);
+ if(it != null){
+ CastingRecipe rec = TConstruct.basinCasting.getCastingRecipe(logic.liquid, it);
+ if(rec != null){
+ minHeight = rec.fluidRenderProperties.minHeight;
+ maxHeight = rec.fluidRenderProperties.maxHeight;
+
+ minX = rec.fluidRenderProperties.minX;
+ maxX = rec.fluidRenderProperties.maxX;
+ minZ = rec.fluidRenderProperties.minZ;
+ maxZ = rec.fluidRenderProperties.maxZ;
+ }
+ }
+ float height = (logic.getLiquidAmount() / (logic.getCapacity() * 1.05F) * 0.6875F) / maxHeight;
+ renderer.setRenderBounds(minX, minHeight, minZ, maxX, minHeight + height, maxZ);
Fluid fluid = logic.liquid.getFluid();
BlockSkinRenderHelper.renderLiquidBlock(fluid.getStillIcon(), fluid.getFlowingIcon(), x, y, z, renderer, world);
diff --git a/src/tconstruct/common/TContent.java b/src/tconstruct/common/TContent.java
index 969eb196..a5b98d4e 100644
--- a/src/tconstruct/common/TContent.java
+++ b/src/tconstruct/common/TContent.java
@@ -4,7 +4,6 @@ import cpw.mods.fml.common.*;
import cpw.mods.fml.common.event.FMLInterModComms;
import cpw.mods.fml.common.registry.*;
import java.lang.reflect.Field;
-
import java.util.*;
import net.minecraft.block.*;
import net.minecraft.block.material.*;
@@ -48,6 +47,7 @@ public class TContent implements IFuelHandler
public static Item toolShard;
public static Item woodPattern;
public static Item metalPattern;
+ public static Item armorPattern;
public static Item manualBook;
public static Item buckets;
@@ -264,6 +264,9 @@ public class TContent implements IFuelHandler
public static ChestGenHooks tinkerHouseChest;
public static ChestGenHooks tinkerHousePatterns;
+ //Temporary items
+ //public static Item armorTest = new ArmorStandard(2445, 4, EnumArmorPart.HELMET).setCreativeTab(CreativeTabs.tabAllSearch);
+
public TContent()
{
registerItems();
@@ -765,10 +768,12 @@ public class TContent implements IFuelHandler
toolShard = new ToolShard(PHConstruct.toolShard, "_chunk").setUnlocalizedName("tconstruct.ToolShard");
woodPattern = new Pattern(PHConstruct.woodPattern, "WoodPattern", "pattern_", "materials/").setUnlocalizedName("tconstruct.Pattern");
metalPattern = new MetalPattern(PHConstruct.metalPattern, "MetalPattern", "cast_", "materials/").setUnlocalizedName("tconstruct.MetalPattern");
-
+ armorPattern = new ArmorPattern(PHConstruct.armorPattern, "ArmorPattern", "armorcast_", "materials/").setUnlocalizedName("tconstruct.ArmorPattern");
+
TConstructRegistry.addItemToDirectory("blankPattern", blankPattern);
TConstructRegistry.addItemToDirectory("woodPattern", woodPattern);
TConstructRegistry.addItemToDirectory("metalPattern", metalPattern);
+ TConstructRegistry.addItemToDirectory("armorPattern", armorPattern);
String[] patternTypes = { "ingot", "toolRod", "pickaxeHead", "shovelHead", "hatchetHead", "swordBlade", "wideGuard", "handGuard", "crossbar", "binding", "frypanHead", "signHead",
"knifeBlade", "chiselHead", "toughRod", "toughBinding", "largePlate", "broadAxeHead", "scytheHead", "excavatorHead", "largeBlade", "hammerHead", "fullGuard" };
@@ -781,6 +786,10 @@ public class TContent implements IFuelHandler
{
TConstructRegistry.addItemStackToDirectory(patternTypes[i] + "Cast", new ItemStack(metalPattern, 1, i));
}
+ String[] armorPartTypes = { "helmet", "chestplate", "leggings", "boots" };
+ for (int i = 1; i < armorPartTypes.length; i++) {
+ TConstructRegistry.addItemStackToDirectory(armorPartTypes[i] + "Cast", new ItemStack(armorPattern, 1, i));
+ }
manualBook = new Manual(PHConstruct.manual);
buckets = new FilledBucket(PHConstruct.buckets);
@@ -1261,6 +1270,9 @@ public class TContent implements IFuelHandler
basinCasting.addCastingRecipe(new ItemStack(Block.whiteStone), new FluidStack(moltenEnderFluid, 25), new ItemStack(Block.obsidian), true, 100); //endstone
basinCasting.addCastingRecipe(new ItemStack(metalBlock.blockID, 1, 10), new FluidStack(moltenEnderFluid, 1000), null, true, 100); //ender
+ //TODO TEST
+// basinCasting.addCastingRecipe(new ItemStack(armorTest), new FluidStack(moltenIronFluid, TConstruct.ingotLiquidValue * 24), new ItemStack(armorPattern, 1, 0), false, 100, new FluidRenderProperties(0.5F, 0.575F, 0.15F, 0.85F, 0.15F, 0.85F));
+
//Ore
Smeltery.addMelting(Block.oreIron, 0, 600, new FluidStack(moltenIronFluid, TConstruct.ingotLiquidValue * 2));
Smeltery.addMelting(Block.oreGold, 0, 400, new FluidStack(moltenGoldFluid, TConstruct.ingotLiquidValue * 2));
diff --git a/src/tconstruct/common/TProxyCommon.java b/src/tconstruct/common/TProxyCommon.java
index a8e80d3b..c3097584 100644
--- a/src/tconstruct/common/TProxyCommon.java
+++ b/src/tconstruct/common/TProxyCommon.java
@@ -1,18 +1,15 @@
package tconstruct.common;
-import net.minecraft.entity.Entity;
+import cpw.mods.fml.common.network.IGuiHandler;
+import cpw.mods.fml.common.registry.LanguageRegistry;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import tconstruct.TConstruct;
import tconstruct.blocks.logic.TileEntityLandmine;
-import tconstruct.inventory.ArmorExtendedContainer;
-import tconstruct.inventory.ContainerLandmine;
-import tconstruct.inventory.KnapsackContainer;
+import tconstruct.inventory.*;
import tconstruct.library.blocks.InventoryLogic;
import tconstruct.util.player.TPlayerStats;
-import cpw.mods.fml.common.network.IGuiHandler;
-import cpw.mods.fml.common.registry.LanguageRegistry;
/**
* Common proxy class for InfiTools
@@ -222,4 +219,8 @@ public class TProxyCommon implements IGuiHandler
public static final String[] patternNames = new String[] { "Ingot", "Tool Rod", "Pickaxe Head", "Shovel Head", "Axe Head", "Sword Blade", "Wide Guard", "Hand Guard", "Crossbar", "Tool Binding",
"Pan", "Board", "Knife Blade", "Chisel Head", "Tough Tool Rod", "Tough Binding", "Large Plate", "Broad Axe Head", "Scythe Head", "Broad Shovel Head", "Large Blade", "Hammer Head",
"Full Guard", "Bowstring", "Fletching", "Arrowhead" };
+
+ public void postInit(){
+
+ }
}
diff --git a/src/tconstruct/items/ArmorPattern.java b/src/tconstruct/items/ArmorPattern.java
new file mode 100644
index 00000000..3dddce1c
--- /dev/null
+++ b/src/tconstruct/items/ArmorPattern.java
@@ -0,0 +1,52 @@
+package tconstruct.items;
+
+import java.util.List;
+
+import cpw.mods.fml.relauncher.*;
+
+import tconstruct.library.ItemBlocklike;
+
+import net.minecraft.client.renderer.texture.IconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.Icon;
+
+public class ArmorPattern extends CraftingItem implements ItemBlocklike{
+
+ private Icon baseIcon;
+
+ public ArmorPattern(int id, String partType, String patternType, String folder) {
+ super(id, patternName, getPatternNames(patternType), folder);
+ this.setHasSubtypes(true);
+ this.setMaxDamage(0);
+ this.setContainerItem(this);
+ this.setMaxStackSize(1);
+ }
+
+ protected static String[] getPatternNames (String partType){
+ String[] names = new String[patternName.length];
+ for (int i = 0; i < patternName.length; i++)
+ names[i] = partType + patternName[i];
+ return names;
+ }
+
+ public Icon getBaseIcon(){
+ return baseIcon;
+ }
+
+ @SideOnly(Side.CLIENT)
+ @Override
+ public void registerIcons (IconRegister iconRegister){
+ super.registerIcons(iconRegister);
+ baseIcon = iconRegister.registerIcon("tinker:" + folder + "armor_cast");
+ }
+
+ private static final String[] patternName = new String[] { "helmet", "chestplate", "leggings", "boots" };
+
+ public void getSubItems (int id, CreativeTabs tab, List list){
+ for (int i = 0; i < patternName.length; i++){
+ list.add(new ItemStack(id, 1, i));
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/tconstruct/items/armor/ArmorStandard.java b/src/tconstruct/items/armor/ArmorStandard.java
new file mode 100644
index 00000000..af9ee384
--- /dev/null
+++ b/src/tconstruct/items/armor/ArmorStandard.java
@@ -0,0 +1,25 @@
+package tconstruct.items.armor;
+
+import net.minecraft.entity.Entity;
+import net.minecraft.item.ItemStack;
+
+import net.minecraft.client.renderer.texture.IconRegister;
+import tconstruct.library.armor.*;
+
+public class ArmorStandard extends ArmorCore{
+
+ public ArmorStandard(int par1, int baseProtection, EnumArmorPart armorPart) {
+ super(par1, baseProtection, armorPart);
+ }
+
+ @Override
+ public void registerIcons(IconRegister par1IconRegister){
+ this.itemIcon = par1IconRegister.registerIcon("tinker:armor/wood_helmet");
+ }
+
+ @Override
+ public String getArmorTexture(ItemStack stack, Entity entity, int slot, int layer){
+ return "tinker:textures/armor/wood_" + layer + ".png";
+ }
+
+}
\ No newline at end of file
diff --git a/src/tconstruct/library/ItemBlocklike.java b/src/tconstruct/library/ItemBlocklike.java
new file mode 100644
index 00000000..4e479445
--- /dev/null
+++ b/src/tconstruct/library/ItemBlocklike.java
@@ -0,0 +1,3 @@
+package tconstruct.library;
+
+public interface ItemBlocklike {}
diff --git a/src/tconstruct/library/armor/ArmorCore.java b/src/tconstruct/library/armor/ArmorCore.java
new file mode 100644
index 00000000..74e7ab24
--- /dev/null
+++ b/src/tconstruct/library/armor/ArmorCore.java
@@ -0,0 +1,283 @@
+package tconstruct.library.armor;
+
+import ic2.api.item.*;
+import net.minecraft.block.BlockDispenser;
+import net.minecraft.dispenser.IBehaviorDispenseItem;
+import net.minecraft.entity.*;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.*;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.DamageSource;
+import net.minecraft.world.World;
+import net.minecraftforge.common.ISpecialArmor;
+
+/**
+ * NBTTags
+ * Main tag - InfiArmor
+ */
+public abstract class ArmorCore extends ItemArmor implements ICustomElectricItem, IBoxable, ISpecialArmor {
+
+ public static final String SET_NAME = "InfiArmor";
+ public final EnumArmorPart armorPart;
+ private static final IBehaviorDispenseItem dispenserBehavior = new BehaviorDispenseArmorCopy();
+ public final int baseProtection;
+
+ public ArmorCore(int par1, int baseProtection, EnumArmorPart part) {
+ super(par1, EnumArmorMaterial.CHAIN, 0, 0);
+ this.maxStackSize = 1;
+ this.setMaxDamage(100);
+ this.setUnlocalizedName(SET_NAME);
+ this.armorPart = part;
+ this.baseProtection = baseProtection;
+ BlockDispenser.dispenseBehaviorRegistry.putObject(this, dispenserBehavior);
+ }
+
+ public String getArmorName() {
+ return this.getClass().getSimpleName();
+ }
+
+ public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) {
+ int i = EntityLiving.getArmorPosition(par1ItemStack) - 1;
+ ItemStack itemstack1 = par3EntityPlayer.getCurrentArmor(i);
+
+ if (itemstack1 == null) {
+ par3EntityPlayer.setCurrentItemOrArmor(i + 1, par1ItemStack.copy()); //Forge: Vanilla bug fix associated with fixed setCurrentItemOrArmor indexs for players.
+ par1ItemStack.stackSize = 0;
+ }
+
+ return par1ItemStack;
+ }
+
+ //ISpecialArmor overrides
+ @Override
+ public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, int slot) {
+ NBTTagCompound tags = armor.getTagCompound();
+
+ if (tags == null) {
+ return new ArmorProperties(0, damage / baseProtection, baseProtection);
+ }
+
+ NBTTagCompound data = tags.getCompoundTag(SET_NAME);
+
+ return new ArmorProperties(0, data.getInteger("damageReduction") / damage, data.getInteger("maxAbsorb"));
+ }
+
+ @Override
+ public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) {
+ return armor.getTagCompound() != null && armor.getTagCompound().getCompoundTag(SET_NAME) != null ? armor.getTagCompound().getCompoundTag(SET_NAME).getInteger("maxAbsorb") : this.baseProtection;
+ }
+
+ @Override
+ public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) {
+ NBTTagCompound tags = stack.getTagCompound();
+ NBTTagCompound data;
+
+ if (tags == null) {
+ tags = new NBTTagCompound();
+ stack.setTagCompound(tags);
+ data = new NBTTagCompound();
+ tags.setCompoundTag(SET_NAME, data);
+ data.setInteger("damageReduction", baseProtection);
+ data.setInteger("maxAbsorb", baseProtection);
+ }
+
+ data = tags.getCompoundTag(SET_NAME);
+
+ if (tags.hasKey("charge")) {
+ int charge = tags.getInteger("charge");
+ if (charge > damage) {
+ charge -= damage;
+ tags.setInteger("charge", charge);
+ return;
+ } else {
+ damage -= charge;
+ tags.setInteger("charge", 0);
+ int dmg = data.getInteger("Damage");
+ dmg += damage;
+ data.setInteger("Damage", dmg);
+ }
+
+ } else {
+ int dmg = data.getInteger("Damage");
+ dmg += damage;
+ data.setInteger("Damage", dmg);
+ }
+ }
+
+ /*
+ * IC2 API support
+ */
+
+ @Override
+ public boolean canBeStoredInToolbox(ItemStack stack) {
+ return true;
+ }
+
+ @Override
+ public boolean canProvideEnergy(ItemStack stack) {
+ NBTTagCompound tags = stack.getTagCompound();
+
+ return tags.hasKey("charge");
+ }
+
+ @Override
+ public int getChargedItemId(ItemStack stack) {
+ return this.itemID;
+ }
+
+ @Override
+ public int getEmptyItemId(ItemStack stack) {
+ return this.itemID;
+ }
+
+ @Override
+ public int getMaxCharge(ItemStack stack) {
+ NBTTagCompound tags = stack.getTagCompound();
+ return tags.hasKey("charge") ? 10000 : 0;
+ }
+
+ @Override
+ public int getTier(ItemStack stack) {
+ return 0;
+ }
+
+ @Override
+ public int getTransferLimit(ItemStack stack) {
+ NBTTagCompound tags = stack.getTagCompound();
+
+ return tags.hasKey("charge") ? 32 : 0;
+ }
+
+ @Override
+ public int charge(ItemStack stack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate) {
+ NBTTagCompound tags = stack.getTagCompound();
+ if (!tags.hasKey("charge")) {
+ return 0;
+ }
+
+ if (amount > 0) {
+ if (amount > getTransferLimit(stack) && !ignoreTransferLimit) {
+ amount = getTransferLimit(stack);
+ }
+
+ int charge = tags.getInteger("charge");
+
+ if (amount > getMaxCharge(stack)) {
+ amount = getMaxCharge(stack);
+ }
+
+ charge += amount;
+
+ if (!simulate) {
+ tags.setInteger("charge", charge);
+ stack.setItemDamage(1 + (getMaxCharge(stack) - charge) * (stack.getMaxDamage() - 2) / getMaxCharge(stack));
+ }
+ return amount;
+ }
+
+ else
+ return 0;
+ }
+
+ @Override
+ public int discharge(ItemStack stack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate) {
+ NBTTagCompound tags = stack.getTagCompound();
+ if (!tags.hasKey("charge")) {
+ return 0;
+ }
+
+ if (amount > 0) {
+ if (amount > getTransferLimit(stack)) {
+ amount = getTransferLimit(stack);
+ }
+
+ int charge = tags.getInteger("charge");
+
+ if (amount > charge) {
+ amount = charge;
+ }
+
+ charge -= amount;
+
+ if (!simulate) {
+ tags.setInteger("charge", charge);
+ stack.setItemDamage(1 + (getMaxCharge(stack) - charge) * (stack.getMaxDamage() - 1) / getMaxCharge(stack));
+ }
+
+ return charge;
+ }
+
+ else
+ return 0;
+ }
+
+ @Override
+ public boolean canUse(ItemStack stack, int amount) {
+ return false;
+ }
+
+ @Override
+ public boolean canShowChargeToolTip(ItemStack stack) {
+ return false;
+ }
+
+ // Vanilla overrides
+ public boolean isItemTool(ItemStack par1ItemStack) {
+ return false;
+ }
+
+ @Override
+ public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) {
+ return false;
+ }
+
+ public boolean isRepairable() {
+ return false;
+ }
+
+ public int getItemEnchantability() {
+ return 0;
+ }
+
+ public boolean isFull3D() {
+ return true;
+ }
+
+ public boolean isValidArmor(ItemStack stack, int armorType, Entity entity) {
+ return this.armorPart.getPartId() == armorType;
+ }
+
+ /* Proper stack damage */
+ public int getItemMaxDamageFromStack(ItemStack stack) {
+ NBTTagCompound tags = stack.getTagCompound();
+ if (tags == null) {
+ return 0;
+ }
+
+ if (tags.hasKey("charge")) {
+ int charge = tags.getInteger("charge");
+ if (charge > 0) {
+ return this.getMaxCharge(stack);
+ }
+ }
+
+ return tags.getCompoundTag(SET_NAME).getInteger("TotalDurability");
+ }
+
+ public int getItemMaxDamageFromStackForDisplay(ItemStack stack) {
+ NBTTagCompound tags = stack.getTagCompound();
+ if (tags == null) {
+ return 0;
+ }
+
+ if (tags.hasKey("charge")) {
+ int charge = tags.getInteger("charge");
+ if (charge > 0) {
+ return this.getMaxCharge(stack) - charge;
+ }
+ }
+
+ return tags.getCompoundTag(SET_NAME).getInteger("Damage");
+ }
+
+}
\ No newline at end of file
diff --git a/src/tconstruct/library/armor/BehaviorDispenseArmorCopy.java b/src/tconstruct/library/armor/BehaviorDispenseArmorCopy.java
new file mode 100644
index 00000000..4389496d
--- /dev/null
+++ b/src/tconstruct/library/armor/BehaviorDispenseArmorCopy.java
@@ -0,0 +1,52 @@
+package tconstruct.library.armor;
+
+import java.util.List;
+
+import net.minecraft.block.BlockDispenser;
+import net.minecraft.dispenser.BehaviorDefaultDispenseItem;
+import net.minecraft.dispenser.IBlockSource;
+import net.minecraft.entity.EntityLiving;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.EntitySelectorArmoredMob;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.EnumFacing;
+
+final class BehaviorDispenseArmorCopy extends BehaviorDefaultDispenseItem
+{
+ /**
+ * Dispense the specified stack, play the dispense sound and spawn particles.
+ */
+ protected ItemStack dispenseStack(IBlockSource par1IBlockSource, ItemStack par2ItemStack)
+ {
+ EnumFacing enumfacing = BlockDispenser.getFacing(par1IBlockSource.getBlockMetadata());
+ int i = par1IBlockSource.getXInt() + enumfacing.getFrontOffsetX();
+ int j = par1IBlockSource.getYInt() + enumfacing.getFrontOffsetY();
+ int k = par1IBlockSource.getZInt() + enumfacing.getFrontOffsetZ();
+ AxisAlignedBB axisalignedbb = AxisAlignedBB.getAABBPool().getAABB((double)i, (double)j, (double)k, (double)(i + 1), (double)(j + 1), (double)(k + 1));
+ List list = par1IBlockSource.getWorld().selectEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb, new EntitySelectorArmoredMob(par2ItemStack));
+
+ if (list.size() > 0)
+ {
+ EntityLivingBase entitylivingbase = (EntityLivingBase)list.get(0);
+ int l = entitylivingbase instanceof EntityPlayer ? 1 : 0;
+ int i1 = EntityLiving.getArmorPosition(par2ItemStack);
+ ItemStack itemstack1 = par2ItemStack.copy();
+ itemstack1.stackSize = 1;
+ entitylivingbase.setCurrentItemOrArmor(i1, itemstack1); //BUGFIX Forge: Vanilla bug fix associated with fixed setCurrentItemOrArmor indexs for players.
+
+ if (entitylivingbase instanceof EntityLiving)
+ {
+ ((EntityLiving)entitylivingbase).setEquipmentDropChance(i1, 2.0F);
+ }
+
+ --par2ItemStack.stackSize;
+ return par2ItemStack;
+ }
+ else
+ {
+ return super.dispenseStack(par1IBlockSource, par2ItemStack);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/tconstruct/library/armor/EnumArmorPart.java b/src/tconstruct/library/armor/EnumArmorPart.java
new file mode 100644
index 00000000..d60d6cbc
--- /dev/null
+++ b/src/tconstruct/library/armor/EnumArmorPart.java
@@ -0,0 +1,16 @@
+package tconstruct.library.armor;
+
+public enum EnumArmorPart {
+
+ HELMET(0), CHESTPLATE(1), LEGGINGS(2), BOOTS(3);
+
+ private final int partID;
+
+ private EnumArmorPart(int partID) {
+ this.partID = partID;
+ }
+
+ public int getPartId() {
+ return this.partID;
+ }
+}
\ No newline at end of file
diff --git a/src/tconstruct/library/client/FluidRenderProperties.java b/src/tconstruct/library/client/FluidRenderProperties.java
new file mode 100644
index 00000000..bba9e774
--- /dev/null
+++ b/src/tconstruct/library/client/FluidRenderProperties.java
@@ -0,0 +1,54 @@
+package tconstruct.library.client;
+
+public class FluidRenderProperties {
+
+ //Constant defaults
+ public static final FluidRenderProperties DEFAULT_TABLE = new FluidRenderProperties(Applications.TABLE);
+ public static final FluidRenderProperties DEFAULT_BASIN = new FluidRenderProperties(Applications.BASIN);
+
+ public float minHeight, maxHeight, minX, maxX, minZ, maxZ;
+
+ public FluidRenderProperties(float minHeight, float maxHeight, float minX, float maxX, float minZ, float maxZ) {
+ this.minHeight = minHeight;
+ this.maxHeight = maxHeight;
+ this.minX = minX;
+ this.maxX = maxX;
+ this.minZ = minZ;
+ this.maxZ = maxZ;
+ }
+
+ public FluidRenderProperties(float minHeight, float maxHeight, Applications defaults) {
+ this(minHeight, maxHeight, defaults.minX, defaults.maxX, defaults.minZ, defaults.maxZ);
+ }
+
+ public FluidRenderProperties(float minHeight, float maxHeight, float minX, float maxX, Applications defaults) {
+ this(minHeight, maxHeight, minX, maxX, defaults.minZ, defaults.maxZ);
+ }
+
+ public FluidRenderProperties(Applications defaults, float minX, float maxX) {
+ this(defaults.minHeight, defaults.maxHeight, minX, maxX, defaults.minZ, defaults.maxZ);
+ }
+
+ public FluidRenderProperties(Applications defaults, float minX, float maxX, float minZ, float maxZ) {
+ this(defaults.minHeight, defaults.maxHeight, minX, maxX, minZ, maxZ);
+ }
+
+ public FluidRenderProperties(Applications defaults) {
+ this(defaults.minHeight, defaults.maxHeight, defaults.minX, defaults.maxX, defaults.minZ, defaults.maxZ);
+ }
+
+ public static enum Applications {
+ TABLE(0.9375F, 1F, 0.0625F, 0.9375F, 0.0625F, 0.9375F), BASIN(0.25F, 0.95F, 0.0625F, 0.9375F, 0.0625F, 0.9375F);
+
+ float minHeight, maxHeight, minX, maxX, minZ, maxZ;
+
+ Applications(float minHeight, float maxHeight, float minX, float maxX, float minZ, float maxZ) {
+ this.minHeight = minHeight;
+ this.maxHeight = maxHeight;
+ this.minX = minX;
+ this.maxX = maxX;
+ this.minZ = minZ;
+ this.maxZ = maxZ;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/tconstruct/library/crafting/CastingRecipe.java b/src/tconstruct/library/crafting/CastingRecipe.java
index d2065da7..315e4d3b 100644
--- a/src/tconstruct/library/crafting/CastingRecipe.java
+++ b/src/tconstruct/library/crafting/CastingRecipe.java
@@ -2,6 +2,7 @@ package tconstruct.library.crafting;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
+import tconstruct.library.client.FluidRenderProperties;
public class CastingRecipe
{
@@ -10,14 +11,16 @@ public class CastingRecipe
public ItemStack cast;
public boolean consumeCast;
public int coolTime;
+ public FluidRenderProperties fluidRenderProperties;
- public CastingRecipe(ItemStack replacement, FluidStack metal, ItemStack cast, boolean consume, int delay)
+ public CastingRecipe(ItemStack replacement, FluidStack metal, ItemStack cast, boolean consume, int delay, FluidRenderProperties props)
{
castingMetal = metal;
this.cast = cast;
output = replacement;
consumeCast = consume;
coolTime = delay;
+ fluidRenderProperties = props;
}
public boolean matches (FluidStack metal, ItemStack inputCast)
diff --git a/src/tconstruct/library/crafting/LiquidCasting.java b/src/tconstruct/library/crafting/LiquidCasting.java
index b3bf536f..ab615e79 100644
--- a/src/tconstruct/library/crafting/LiquidCasting.java
+++ b/src/tconstruct/library/crafting/LiquidCasting.java
@@ -1,9 +1,11 @@
package tconstruct.library.crafting;
-import java.util.ArrayList;
+import tconstruct.library.client.FluidRenderProperties.Applications;
+import java.util.ArrayList;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
+import tconstruct.library.client.FluidRenderProperties;
/* Melting becomes hardened */
public class LiquidCasting
@@ -18,10 +20,22 @@ public class LiquidCasting
* @param cast The empty item to cast with. ex Ingot Cast
* @param consume Whether the item should be consumed while casting
* @param delay Time to cast in ticks
+ * @param props The rendering properties for the casting fluid (may be null)
*/
- public void addCastingRecipe (ItemStack output, FluidStack metal, ItemStack cast, boolean consume, int delay)
- {
- casts.add(new CastingRecipe(output, metal, cast, consume, delay));
+ public void addCastingRecipe (ItemStack output, FluidStack metal, ItemStack cast, boolean consume, int delay, FluidRenderProperties props){
+ casts.add(new CastingRecipe(output, metal, cast, consume, delay, props));
+ }
+
+ /** Adds a casting recipe
+ *
+ * @param output Result of the cast
+ * @param metal Liquid to be used in casting. This also decides how much metal is consumed
+ * @param cast The empty item to cast with. ex Ingot Cast
+ * @param consume Whether the item should be consumed while casting
+ * @param delay Time to cast in ticks
+ */
+ public void addCastingRecipe (ItemStack output, FluidStack metal, ItemStack cast, boolean consume, int delay){
+ addCastingRecipe(output, metal, cast, consume, delay, null);
}
/** Adds a casting recipe. Does not consume the cast
@@ -30,10 +44,21 @@ public class LiquidCasting
* @param metal Liquid to be used in casting. This also decides how much metal is consumed
* @param cast The empty item to cast with. ex Ingot Cast
* @param delay Time to cast in ticks
+ * @param props The rendering properties for the casting fluid (may be null)
*/
- public void addCastingRecipe (ItemStack output, FluidStack metal, ItemStack cast, int delay)
- {
- addCastingRecipe(output, metal, cast, false, delay);
+ public void addCastingRecipe (ItemStack output, FluidStack metal, ItemStack cast, int delay, FluidRenderProperties props){
+ addCastingRecipe(output, metal, cast, false, delay, props);
+ }
+
+ /** Adds a casting recipe. Does not consume the cast
+ *
+ * @param output Result of the cast
+ * @param metal Liquid to be used in casting. This also decides how much metal is consumed
+ * @param cast The empty item to cast with. ex Ingot Cast
+ * @param delay Time to cast in ticks
+ */
+ public void addCastingRecipe (ItemStack output, FluidStack metal, ItemStack cast, int delay){
+ addCastingRecipe(output, metal, cast, false, delay, null);
}
/** Adds a casting recipe. Does not consume the cast or have an item to cast against
@@ -41,10 +66,20 @@ public class LiquidCasting
* @param output Result of the cast
* @param metal Liquid to be used in casting. This also decides how much metal is consumed
* @param delay Time to cast in ticks
+ * @param props The rendering properties for the casting fluid (may be null)
*/
- public void addCastingRecipe (ItemStack output, FluidStack metal, int delay)
- {
- addCastingRecipe(output, metal, null, false, delay);
+ public void addCastingRecipe (ItemStack output, FluidStack metal, int delay, FluidRenderProperties props){
+ addCastingRecipe(output, metal, null, false, delay, props);
+ }
+
+ /** Adds a casting recipe. Does not consume the cast or have an item to cast against
+ *
+ * @param output Result of the cast
+ * @param metal Liquid to be used in casting. This also decides how much metal is consumed
+ * @param delay Time to cast in ticks
+ */
+ public void addCastingRecipe (ItemStack output, FluidStack metal, int delay){
+ addCastingRecipe(output, metal, null, false, delay, null);
}
public void addCustomCastingRecipe (CastingRecipe recipe)
@@ -52,24 +87,21 @@ public class LiquidCasting
casts.add(recipe);
}
- public int getCastingDelay (FluidStack metal, ItemStack cast)
- {
+ public int getCastingDelay (FluidStack metal, ItemStack cast){
CastingRecipe recipe = getCastingRecipe(metal, cast);
if (recipe != null)
return recipe.coolTime;
return -1;
}
- public int getCastingAmount (FluidStack metal, ItemStack cast)
- {
+ public int getCastingAmount (FluidStack metal, ItemStack cast){
CastingRecipe recipe = getCastingRecipe(metal, cast);
if (recipe != null)
return recipe.castingMetal.amount;
return 0;
}
- public CastingRecipe getCastingRecipe (FluidStack metal, ItemStack cast)
- {
+ public CastingRecipe getCastingRecipe (FluidStack metal, ItemStack cast){
for (CastingRecipe recipe : casts)
{
if (recipe.matches(metal, cast))
@@ -79,8 +111,7 @@ public class LiquidCasting
}
//Getter for public viewing
- public ArrayList getCastingRecipes ()
- {
+ public ArrayList getCastingRecipes (){
return casts;
}
-}
+}
\ No newline at end of file
diff --git a/src/tconstruct/util/config/PHConstruct.java b/src/tconstruct/util/config/PHConstruct.java
index ba2a2a4d..7773933a 100644
--- a/src/tconstruct/util/config/PHConstruct.java
+++ b/src/tconstruct/util/config/PHConstruct.java
@@ -185,6 +185,7 @@ public class PHConstruct
toolShard = config.getItem("Patterns and Misc", "Tool Shard", 14022).getInt(14022);
woodPattern = config.getItem("Patterns and Misc", "Wood Pattern", 14023).getInt(14023);
metalPattern = config.getItem("Patterns and Misc", "Metal Pattern", 14024).getInt(14024);
+ armorPattern = config.getItem("Patterns and Misc", "Armor Pattern", 14025).getInt(14025);
pickaxeHead = config.getItem("Tool Parts", "Pickaxe Head", 14026).getInt(14026);
shovelHead = config.getItem("Tool Parts", "Shovel Head", 14027).getInt(14027);
@@ -488,6 +489,7 @@ public class PHConstruct
public static int toolShard;
public static int woodPattern;
public static int metalPattern;
+ public static int armorPattern;
public static int manual;
public static int buckets;