Got imprinter to work primarily
This commit is contained in:
parent
f544a3d99b
commit
805f3ba9ba
2 changed files with 131 additions and 39 deletions
|
@ -78,7 +78,6 @@ public class RenderCrate extends TileEntitySpecialRenderer
|
|||
GL11.glRotatef(180, 0, 0, 1);
|
||||
|
||||
RenderEngine renderEngine = Minecraft.getMinecraft().renderEngine;
|
||||
EntityItem ei = new EntityItem(tileEntity.worldObj, 0.0, 0.0, 0.0, itemStack);
|
||||
|
||||
GL11.glDisable(2896);
|
||||
if (!ForgeHooksClient.renderInventoryItem(this.renderBlocks, renderEngine, itemStack, true, 0.0F, 0.0F, 0.0F))
|
||||
|
|
|
@ -16,6 +16,8 @@ import net.minecraft.nbt.NBTTagCompound;
|
|||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import net.minecraftforge.common.ISidedInventory;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.entity.player.PlayerDestroyItemEvent;
|
||||
import net.minecraftforge.oredict.ShapedOreRecipe;
|
||||
import net.minecraftforge.oredict.ShapelessOreRecipe;
|
||||
import universalelectricity.prefab.TranslationHelper;
|
||||
|
@ -25,6 +27,7 @@ import assemblyline.api.IArmbotUseable;
|
|||
import assemblyline.common.AssemblyLine;
|
||||
import assemblyline.common.Pair;
|
||||
import assemblyline.common.machine.armbot.TileEntityArmbot;
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import cpw.mods.fml.relauncher.ReflectionHelper;
|
||||
|
||||
public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInventory, IArmbotUseable
|
||||
|
@ -74,7 +77,8 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
|
|||
}
|
||||
|
||||
/**
|
||||
* Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections).
|
||||
* Sets the given item stack to the specified slot in the inventory (can be crafting or armor
|
||||
* sections).
|
||||
*/
|
||||
@Override
|
||||
public void setInventorySlotContents(int slot, ItemStack itemStack)
|
||||
|
@ -114,7 +118,8 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
|
|||
}
|
||||
|
||||
/**
|
||||
* Removes from an inventory slot (first arg) up to a specified number (second arg) of items and returns them in a new stack.
|
||||
* Removes from an inventory slot (first arg) up to a specified number (second arg) of items and
|
||||
* returns them in a new stack.
|
||||
*/
|
||||
@Override
|
||||
public ItemStack decrStackSize(int i, int amount)
|
||||
|
@ -148,7 +153,8 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
|
|||
}
|
||||
|
||||
/**
|
||||
* When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem - like when you close a workbench GUI.
|
||||
* When some containers are closed they call this on each slot, then drop whatever it returns as
|
||||
* an EntityItem - like when you close a workbench GUI.
|
||||
*/
|
||||
@Override
|
||||
public ItemStack getStackInSlotOnClosing(int slot)
|
||||
|
@ -194,17 +200,65 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
|
|||
}
|
||||
|
||||
/**
|
||||
* Updates all the output slots.
|
||||
* Construct an InventoryCrafting Matrix on the fly.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public InventoryCrafting getCraftingMatrix()
|
||||
{
|
||||
if (this.container != null)
|
||||
{
|
||||
InventoryCrafting inventoryCrafting = new InventoryCrafting(this.container, 3, 3);
|
||||
|
||||
for (int i = 0; i < this.craftingMatrix.length; i++)
|
||||
{
|
||||
inventoryCrafting.setInventorySlotContents(i, this.craftingMatrix[i]);
|
||||
}
|
||||
|
||||
return inventoryCrafting;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public void replaceCraftingMatrix(InventoryCrafting inventoryCrafting)
|
||||
{
|
||||
for (int i = 0; i < this.craftingMatrix.length; i++)
|
||||
{
|
||||
this.craftingMatrix[i] = inventoryCrafting.getStackInSlot(i);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates all the output slots. Call this to update the Imprinter.
|
||||
*/
|
||||
@Override
|
||||
public void onInventoryChanged()
|
||||
{
|
||||
/**
|
||||
* Simulate an Inventory Crafting Instance
|
||||
*/
|
||||
InventoryCrafting inventoryCrafting = this.getCraftingMatrix();
|
||||
|
||||
/**
|
||||
* Makes the stamping recipe for filters
|
||||
*/
|
||||
boolean didStamp = false;
|
||||
|
||||
if (this.imprinterMatrix[0] != null && this.imprinterMatrix[1] != null)
|
||||
/**
|
||||
* Check crafting matrix. Only allow imprinting if the matrix is clean.
|
||||
*/
|
||||
boolean cleanCraftingMatrix = true;
|
||||
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
if (inventoryCrafting.getStackInSlot(i) != null)
|
||||
{
|
||||
cleanCraftingMatrix = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (cleanCraftingMatrix && this.imprinterMatrix[0] != null && this.imprinterMatrix[1] != null)
|
||||
{
|
||||
if (this.imprinterMatrix[0].getItem() instanceof ItemImprinter)
|
||||
{
|
||||
|
@ -243,19 +297,8 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
|
|||
*/
|
||||
boolean didCraft = false;
|
||||
|
||||
/**
|
||||
* Simulate an Inventory Crafting Instance
|
||||
*/
|
||||
|
||||
if (this.container != null)
|
||||
if (inventoryCrafting != null)
|
||||
{
|
||||
InventoryCrafting inventoryCrafting = new InventoryCrafting(this.container, 3, 3);
|
||||
|
||||
for (int i = 0; i < this.craftingMatrix.length; i++)
|
||||
{
|
||||
inventoryCrafting.setInventorySlotContents(i, this.craftingMatrix[i]);
|
||||
}
|
||||
|
||||
ItemStack matrixOutput = CraftingManager.getInstance().findMatchingRecipe(inventoryCrafting, this.worldObj);
|
||||
|
||||
if (matrixOutput != null)
|
||||
|
@ -283,7 +326,7 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
|
|||
|
||||
if (recipeOutput != null & recipeOutput.stackSize > 0)
|
||||
{
|
||||
this.imprinterMatrix[2] = null;
|
||||
this.imprinterMatrix[2] = recipeOutput;
|
||||
didCraft = true;
|
||||
break;
|
||||
}
|
||||
|
@ -303,6 +346,11 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
|
|||
public void onPickUpFromResult(EntityPlayer entityPlayer, ItemStack itemStack)
|
||||
{
|
||||
if (itemStack != null)
|
||||
{
|
||||
/**
|
||||
* Try to consume resource from the inventory.
|
||||
*/
|
||||
if (this.getIdealRecipe(itemStack) != null)
|
||||
{
|
||||
ItemStack[] requiredItems = this.getIdealRecipe(itemStack).getValue().clone();
|
||||
|
||||
|
@ -310,15 +358,15 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
|
|||
{
|
||||
for (ItemStack searchStack : requiredItems)
|
||||
{
|
||||
for (int i = 0; i < this.getSizeInventory(); i++)
|
||||
for (int i = 0; i < this.containingItems.length; i++)
|
||||
{
|
||||
ItemStack checkStack = this.getStackInSlot(i);
|
||||
ItemStack checkStack = this.containingItems[i];
|
||||
|
||||
if (checkStack != null)
|
||||
{
|
||||
if (searchStack.isItemEqual(checkStack) || (searchStack.itemID == checkStack.itemID && searchStack.getItemDamage() < 0))
|
||||
{
|
||||
this.decrStackSize(i, 1);
|
||||
this.decrStackSize(i + INVENTORY_START, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -326,6 +374,50 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
|
|||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/**
|
||||
* Fail to, hence consume from crafting grid.
|
||||
*/
|
||||
InventoryCrafting inventoryCrafting = this.getCraftingMatrix();
|
||||
GameRegistry.onItemCrafted(entityPlayer, itemStack, inventoryCrafting);
|
||||
|
||||
for (int var3 = 0; var3 < inventoryCrafting.getSizeInventory(); ++var3)
|
||||
{
|
||||
ItemStack var4 = inventoryCrafting.getStackInSlot(var3);
|
||||
|
||||
if (var4 != null)
|
||||
{
|
||||
inventoryCrafting.decrStackSize(var3, 1);
|
||||
|
||||
if (var4.getItem().hasContainerItem())
|
||||
{
|
||||
ItemStack var5 = var4.getItem().getContainerItemStack(var4);
|
||||
|
||||
if (var5.isItemStackDamageable() && var5.getItemDamage() > var5.getMaxDamage())
|
||||
{
|
||||
MinecraftForge.EVENT_BUS.post(new PlayerDestroyItemEvent(entityPlayer, var5));
|
||||
var5 = null;
|
||||
}
|
||||
|
||||
if (var5 != null && (!var4.getItem().doesContainerItemLeaveCraftingGrid(var4) || !entityPlayer.inventory.addItemStackToInventory(var5)))
|
||||
{
|
||||
if (inventoryCrafting.getStackInSlot(var3) == null)
|
||||
{
|
||||
inventoryCrafting.setInventorySlotContents(var3, var5);
|
||||
}
|
||||
else
|
||||
{
|
||||
entityPlayer.dropPlayerItem(var5);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.replaceCraftingMatrix(inventoryCrafting);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -409,7 +501,7 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
|
|||
|
||||
if (recipeItem != null)
|
||||
{
|
||||
for (int i = this.containingItems.length; i < this.containingItems.length; i++)
|
||||
for (int i = 0; i < this.containingItems.length; i++)
|
||||
{
|
||||
ItemStack checkStack = this.containingItems[i];
|
||||
|
||||
|
@ -418,7 +510,7 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
|
|||
if (recipeItem.isItemEqual(checkStack) || (recipeItem.itemID == checkStack.itemID && recipeItem.getItemDamage() < 0))
|
||||
{
|
||||
// TODO Do NBT Checking
|
||||
dummyImprinter.decrStackSize(i, 1);
|
||||
dummyImprinter.decrStackSize(i + INVENTORY_START, 1);
|
||||
itemMatch++;
|
||||
break;
|
||||
}
|
||||
|
@ -441,7 +533,7 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
|
|||
|
||||
if (recipeItem != null)
|
||||
{
|
||||
for (int i = this.containingItems.length; i < this.containingItems.length; i++)
|
||||
for (int i = 0; i < this.containingItems.length; i++)
|
||||
{
|
||||
ItemStack checkStack = this.containingItems[i];
|
||||
|
||||
|
@ -450,7 +542,7 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
|
|||
if (recipeItem.isItemEqual(checkStack) || (recipeItem.itemID == checkStack.itemID && recipeItem.getItemDamage() < 0))
|
||||
{
|
||||
// TODO Do NBT CHecking
|
||||
dummyImprinter.decrStackSize(i, 1);
|
||||
dummyImprinter.decrStackSize(i + INVENTORY_START, 1);
|
||||
itemMatch++;
|
||||
break optionsLoop;
|
||||
}
|
||||
|
@ -474,8 +566,9 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
|
|||
super.readFromNBT(nbt);
|
||||
|
||||
NBTTagList var2 = nbt.getTagList("Items");
|
||||
|
||||
this.containingItems = new ItemStack[this.getSizeInventory()];
|
||||
this.craftingMatrix = new ItemStack[9];
|
||||
this.imprinterMatrix = new ItemStack[3];
|
||||
this.containingItems = new ItemStack[18];
|
||||
|
||||
for (int i = 0; i < var2.tagCount(); ++i)
|
||||
{
|
||||
|
@ -484,7 +577,7 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
|
|||
|
||||
if (var5 >= 0 && var5 < this.getSizeInventory())
|
||||
{
|
||||
this.setInventorySlotContents(i, ItemStack.loadItemStackFromNBT(var4));
|
||||
this.setInventorySlotContents(var5, ItemStack.loadItemStackFromNBT(var4));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue