More imprinter tweakin
This commit is contained in:
parent
805f3ba9ba
commit
6ea1b0ec3a
2 changed files with 82 additions and 75 deletions
|
@ -83,7 +83,7 @@ public class ContainerImprinter extends Container implements ISlotWatcher
|
||||||
ItemStack slotStack = slotObj.getStack();
|
ItemStack slotStack = slotObj.getStack();
|
||||||
copyStack = slotStack.copy();
|
copyStack = slotStack.copy();
|
||||||
|
|
||||||
if (slot == 2)
|
if (slot == this.tileEntity.INVENTORY_START - 1)
|
||||||
{
|
{
|
||||||
// Prevents filter from being duplicated
|
// Prevents filter from being duplicated
|
||||||
this.tileEntity.setInventorySlotContents(0, null);
|
this.tileEntity.setInventorySlotContents(0, null);
|
||||||
|
@ -91,11 +91,11 @@ public class ContainerImprinter extends Container implements ISlotWatcher
|
||||||
|
|
||||||
if (slot > this.tileEntity.getSizeInventory())
|
if (slot > this.tileEntity.getSizeInventory())
|
||||||
{
|
{
|
||||||
if (this.getSlot(0).isItemValid(slotStack))
|
if (this.getSlot(this.tileEntity.IMPRINTER_MATRIX_START).isItemValid(slotStack))
|
||||||
{
|
{
|
||||||
if (!this.mergeItemStack(slotStack, 0, 1, false)) { return null; }
|
if (!this.mergeItemStack(slotStack, this.tileEntity.IMPRINTER_MATRIX_START, this.tileEntity.IMPRINTER_MATRIX_START + 1, true)) { return null; }
|
||||||
}
|
}
|
||||||
else if (!this.mergeItemStack(slotStack, this.tileEntity.imprinterMatrix.length, this.tileEntity.getSizeInventory(), false)) { return null; }
|
else if (!this.mergeItemStack(slotStack, this.tileEntity.INVENTORY_START, this.tileEntity.getSizeInventory(), false)) { return null; }
|
||||||
}
|
}
|
||||||
else if (!this.mergeItemStack(slotStack, this.tileEntity.getSizeInventory(), this.tileEntity.getSizeInventory() + 36, false)) { return null; }
|
else if (!this.mergeItemStack(slotStack, this.tileEntity.getSizeInventory(), this.tileEntity.getSizeInventory() + 36, false)) { return null; }
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,7 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
|
||||||
public ItemStack[] containingItems = new ItemStack[18];
|
public ItemStack[] containingItems = new ItemStack[18];
|
||||||
|
|
||||||
public ContainerImprinter container;
|
public ContainerImprinter container;
|
||||||
|
private boolean isImprinting = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canUpdate()
|
public boolean canUpdate()
|
||||||
|
@ -229,36 +230,30 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isMatrixEmpty()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 9; i++)
|
||||||
|
{
|
||||||
|
if (this.craftingMatrix[i] != null)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates all the output slots. Call this to update the Imprinter.
|
* Updates all the output slots. Call this to update the Imprinter.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onInventoryChanged()
|
public void onInventoryChanged()
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Simulate an Inventory Crafting Instance
|
|
||||||
*/
|
|
||||||
InventoryCrafting inventoryCrafting = this.getCraftingMatrix();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Makes the stamping recipe for filters
|
* Makes the stamping recipe for filters
|
||||||
*/
|
*/
|
||||||
boolean didStamp = false;
|
this.isImprinting = false;
|
||||||
|
|
||||||
/**
|
if (this.isMatrixEmpty() && 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)
|
if (this.imprinterMatrix[0].getItem() instanceof ItemImprinter)
|
||||||
{
|
{
|
||||||
|
@ -284,11 +279,11 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
|
||||||
|
|
||||||
ItemImprinter.setFilters(outputStack, filters);
|
ItemImprinter.setFilters(outputStack, filters);
|
||||||
this.imprinterMatrix[2] = outputStack;
|
this.imprinterMatrix[2] = outputStack;
|
||||||
didStamp = true;
|
this.isImprinting = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!didStamp)
|
if (!this.isImprinting)
|
||||||
{
|
{
|
||||||
this.imprinterMatrix[2] = null;
|
this.imprinterMatrix[2] = null;
|
||||||
|
|
||||||
|
@ -297,6 +292,11 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
|
||||||
*/
|
*/
|
||||||
boolean didCraft = false;
|
boolean didCraft = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simulate an Inventory Crafting Instance
|
||||||
|
*/
|
||||||
|
InventoryCrafting inventoryCrafting = this.getCraftingMatrix();
|
||||||
|
|
||||||
if (inventoryCrafting != null)
|
if (inventoryCrafting != null)
|
||||||
{
|
{
|
||||||
ItemStack matrixOutput = CraftingManager.getInstance().findMatchingRecipe(inventoryCrafting, this.worldObj);
|
ItemStack matrixOutput = CraftingManager.getInstance().findMatchingRecipe(inventoryCrafting, this.worldObj);
|
||||||
|
@ -347,75 +347,82 @@ public class TileEntityImprinter extends TileEntityAdvanced implements ISidedInv
|
||||||
{
|
{
|
||||||
if (itemStack != null)
|
if (itemStack != null)
|
||||||
{
|
{
|
||||||
/**
|
if (this.isImprinting)
|
||||||
* Try to consume resource from the inventory.
|
|
||||||
*/
|
|
||||||
if (this.getIdealRecipe(itemStack) != null)
|
|
||||||
{
|
{
|
||||||
ItemStack[] requiredItems = this.getIdealRecipe(itemStack).getValue().clone();
|
this.imprinterMatrix[0] = null;
|
||||||
|
|
||||||
if (requiredItems != null)
|
|
||||||
{
|
|
||||||
for (ItemStack searchStack : requiredItems)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < this.containingItems.length; i++)
|
|
||||||
{
|
|
||||||
ItemStack checkStack = this.containingItems[i];
|
|
||||||
|
|
||||||
if (checkStack != null)
|
|
||||||
{
|
|
||||||
if (searchStack.isItemEqual(checkStack) || (searchStack.itemID == checkStack.itemID && searchStack.getItemDamage() < 0))
|
|
||||||
{
|
|
||||||
this.decrStackSize(i + INVENTORY_START, 1);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Fail to, hence consume from crafting grid.
|
* Try to consume resource from the inventory.
|
||||||
*/
|
*/
|
||||||
InventoryCrafting inventoryCrafting = this.getCraftingMatrix();
|
if (this.getIdealRecipe(itemStack) != null)
|
||||||
GameRegistry.onItemCrafted(entityPlayer, itemStack, inventoryCrafting);
|
|
||||||
|
|
||||||
for (int var3 = 0; var3 < inventoryCrafting.getSizeInventory(); ++var3)
|
|
||||||
{
|
{
|
||||||
ItemStack var4 = inventoryCrafting.getStackInSlot(var3);
|
ItemStack[] requiredItems = this.getIdealRecipe(itemStack).getValue().clone();
|
||||||
|
|
||||||
if (var4 != null)
|
if (requiredItems != null)
|
||||||
{
|
{
|
||||||
inventoryCrafting.decrStackSize(var3, 1);
|
for (ItemStack searchStack : requiredItems)
|
||||||
|
|
||||||
if (var4.getItem().hasContainerItem())
|
|
||||||
{
|
{
|
||||||
ItemStack var5 = var4.getItem().getContainerItemStack(var4);
|
for (int i = 0; i < this.containingItems.length; i++)
|
||||||
|
|
||||||
if (var5.isItemStackDamageable() && var5.getItemDamage() > var5.getMaxDamage())
|
|
||||||
{
|
{
|
||||||
MinecraftForge.EVENT_BUS.post(new PlayerDestroyItemEvent(entityPlayer, var5));
|
ItemStack checkStack = this.containingItems[i];
|
||||||
var5 = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (var5 != null && (!var4.getItem().doesContainerItemLeaveCraftingGrid(var4) || !entityPlayer.inventory.addItemStackToInventory(var5)))
|
if (checkStack != null)
|
||||||
{
|
|
||||||
if (inventoryCrafting.getStackInSlot(var3) == null)
|
|
||||||
{
|
{
|
||||||
inventoryCrafting.setInventorySlotContents(var3, var5);
|
if (searchStack.isItemEqual(checkStack) || (searchStack.itemID == checkStack.itemID && searchStack.getItemDamage() < 0))
|
||||||
}
|
{
|
||||||
else
|
this.decrStackSize(i + INVENTORY_START, 1);
|
||||||
{
|
break;
|
||||||
entityPlayer.dropPlayerItem(var5);
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Fail to, hence consume from crafting grid.
|
||||||
|
*/
|
||||||
|
InventoryCrafting inventoryCrafting = this.getCraftingMatrix();
|
||||||
|
GameRegistry.onItemCrafted(entityPlayer, itemStack, inventoryCrafting);
|
||||||
|
|
||||||
this.replaceCraftingMatrix(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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue