Attempted to make autocrafting
This commit is contained in:
parent
91d48f4628
commit
c4105e06bf
6 changed files with 208 additions and 38 deletions
|
@ -1,6 +1,10 @@
|
||||||
# Assembly Line Language Properties
|
# Assembly Line Language Properties
|
||||||
# @author Calclavia
|
# @author Calclavia
|
||||||
|
|
||||||
|
# Gui
|
||||||
|
assemblyline.gui.crafting=Crafting
|
||||||
|
|
||||||
|
|
||||||
# Blocks
|
# Blocks
|
||||||
tile.crate.name=Crate
|
tile.crate.name=Crate
|
||||||
tile.conveyorBelt.name=Conveyor Belt
|
tile.conveyorBelt.name=Conveyor Belt
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.8 KiB |
|
@ -28,6 +28,7 @@ public class GuiStamper extends GuiContainer
|
||||||
protected void drawGuiContainerForegroundLayer(int par1, int par2)
|
protected void drawGuiContainerForegroundLayer(int par1, int par2)
|
||||||
{
|
{
|
||||||
this.fontRenderer.drawString(TranslationHelper.getLocal("tile.stamper.name"), 68, 6, 4210752);
|
this.fontRenderer.drawString(TranslationHelper.getLocal("tile.stamper.name"), 68, 6, 4210752);
|
||||||
|
this.fontRenderer.drawString(TranslationHelper.getLocal("assemblyline.gui.crafting")+":", 25, 55, 4210752);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -8,26 +8,35 @@ import net.minecraft.inventory.Container;
|
||||||
import net.minecraft.inventory.IInventory;
|
import net.minecraft.inventory.IInventory;
|
||||||
import net.minecraft.inventory.Slot;
|
import net.minecraft.inventory.Slot;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.item.crafting.CraftingManager;
|
||||||
|
import net.minecraft.item.crafting.IRecipe;
|
||||||
|
import net.minecraft.item.crafting.ShapedRecipes;
|
||||||
|
import net.minecraft.item.crafting.ShapelessRecipes;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import universalelectricity.core.vector.Vector3;
|
import universalelectricity.core.vector.Vector3;
|
||||||
|
|
||||||
public class ContainerStamper extends Container implements IInventory
|
public class ContainerStamper extends Container implements IInventory
|
||||||
{
|
{
|
||||||
private ItemStack[] containingItems = new ItemStack[3];
|
private ItemStack[] containingItems = new ItemStack[5];
|
||||||
private World worldObj;
|
private World worldObj;
|
||||||
private Vector3 position;
|
private Vector3 position;
|
||||||
|
private InventoryPlayer inventoryPlayer;
|
||||||
|
|
||||||
public ContainerStamper(InventoryPlayer par1InventoryPlayer, World worldObj, Vector3 position)
|
public ContainerStamper(InventoryPlayer inventoryPlayer, World worldObj, Vector3 position)
|
||||||
{
|
{
|
||||||
this.worldObj = worldObj;
|
this.worldObj = worldObj;
|
||||||
this.position = position;
|
this.position = position;
|
||||||
|
this.inventoryPlayer = inventoryPlayer;
|
||||||
|
|
||||||
// Paper Input
|
// Paper Input
|
||||||
this.addSlotToContainer(new SlotFilter(this, 0, 30, 35));
|
this.addSlotToContainer(new SlotFilter(this, 0, 42, 24));
|
||||||
// Item Stamp
|
// Item Stamp
|
||||||
this.addSlotToContainer(new Slot(this, 1, 66, 35));
|
this.addSlotToContainer(new Slot(this, 1, 78, 24));
|
||||||
// Output Filter
|
// Output Filter
|
||||||
this.addSlotToContainer(new SlotFilterResult(this, 2, 124, 35));
|
this.addSlotToContainer(new SlotFilterResult(this, 2, 136, 24));
|
||||||
|
// Crafting Slot
|
||||||
|
this.addSlotToContainer(new SlotFilter(this, 3, 78, 53));
|
||||||
|
this.addSlotToContainer(new SlotCraftingResult(this, this, 4, 136, 53));
|
||||||
|
|
||||||
int var3;
|
int var3;
|
||||||
|
|
||||||
|
@ -35,13 +44,13 @@ public class ContainerStamper extends Container implements IInventory
|
||||||
{
|
{
|
||||||
for (int var4 = 0; var4 < 9; ++var4)
|
for (int var4 = 0; var4 < 9; ++var4)
|
||||||
{
|
{
|
||||||
this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18));
|
this.addSlotToContainer(new Slot(inventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var3 = 0; var3 < 9; ++var3)
|
for (var3 = 0; var3 < 9; ++var3)
|
||||||
{
|
{
|
||||||
this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142));
|
this.addSlotToContainer(new Slot(inventoryPlayer, var3, 8 + var3 * 18, 142));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,32 +59,6 @@ public class ContainerStamper extends Container implements IInventory
|
||||||
{
|
{
|
||||||
super.updateCraftingResults();
|
super.updateCraftingResults();
|
||||||
|
|
||||||
if (this.getStackInSlot(0) != null && this.getStackInSlot(1) != null)
|
|
||||||
{
|
|
||||||
if (this.getStackInSlot(0).getItem() instanceof ItemFilter)
|
|
||||||
{
|
|
||||||
ItemStack outputStack = this.getStackInSlot(0).copy();
|
|
||||||
outputStack.stackSize = 1;
|
|
||||||
ArrayList<ItemStack> filters = ItemFilter.getFilters(outputStack);
|
|
||||||
|
|
||||||
for (ItemStack filteredStack : filters)
|
|
||||||
{
|
|
||||||
if (filteredStack.isItemEqual(this.getStackInSlot(1)))
|
|
||||||
{
|
|
||||||
this.setInventorySlotContents(2, null);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
filters.add(this.getStackInSlot(1));
|
|
||||||
ItemFilter.setFilters(outputStack, filters);
|
|
||||||
this.setInventorySlotContents(2, outputStack);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.setInventorySlotContents(2, null);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -98,7 +81,7 @@ public class ContainerStamper extends Container implements IInventory
|
||||||
ItemStack itemStack2 = itemStack.getStack();
|
ItemStack itemStack2 = itemStack.getStack();
|
||||||
itemStack3 = itemStack2.copy();
|
itemStack3 = itemStack2.copy();
|
||||||
|
|
||||||
if (par1 > 2)
|
if (par1 > 4)
|
||||||
{
|
{
|
||||||
if (this.getSlot(0).isItemValid(itemStack2))
|
if (this.getSlot(0).isItemValid(itemStack2))
|
||||||
{
|
{
|
||||||
|
@ -106,7 +89,7 @@ public class ContainerStamper extends Container implements IInventory
|
||||||
}
|
}
|
||||||
else if (!this.mergeItemStack(itemStack2, 1, 2, false)) { return null; }
|
else if (!this.mergeItemStack(itemStack2, 1, 2, false)) { return null; }
|
||||||
}
|
}
|
||||||
else if (!this.mergeItemStack(itemStack2, 3, 37, false)) { return null; }
|
else if (!this.mergeItemStack(itemStack2, this.containingItems.length, 37, false)) { return null; }
|
||||||
|
|
||||||
if (itemStack2.stackSize == 0)
|
if (itemStack2.stackSize == 0)
|
||||||
{
|
{
|
||||||
|
@ -200,7 +183,137 @@ public class ContainerStamper extends Container implements IInventory
|
||||||
@Override
|
@Override
|
||||||
public void onInventoryChanged()
|
public void onInventoryChanged()
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Makes the stamping recipe for filters
|
||||||
|
*/
|
||||||
|
boolean didStamp = false;
|
||||||
|
|
||||||
|
if (this.getStackInSlot(0) != null && this.getStackInSlot(1) != null)
|
||||||
|
{
|
||||||
|
if (this.getStackInSlot(0).getItem() instanceof ItemFilter)
|
||||||
|
{
|
||||||
|
ItemStack outputStack = this.getStackInSlot(0).copy();
|
||||||
|
outputStack.stackSize = 1;
|
||||||
|
ArrayList<ItemStack> filters = ItemFilter.getFilters(outputStack);
|
||||||
|
boolean failedCheck = false;
|
||||||
|
|
||||||
|
for (ItemStack filteredStack : filters)
|
||||||
|
{
|
||||||
|
if (filteredStack.isItemEqual(this.getStackInSlot(1)))
|
||||||
|
{
|
||||||
|
failedCheck = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!failedCheck)
|
||||||
|
{
|
||||||
|
filters.add(this.getStackInSlot(1));
|
||||||
|
ItemFilter.setFilters(outputStack, filters);
|
||||||
|
this.setInventorySlotContents(2, outputStack);
|
||||||
|
didStamp = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!didStamp)
|
||||||
|
{
|
||||||
|
this.setInventorySlotContents(2, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO WORK IN PROGRESS. Make filters able to autocraft into its item based on what is in the player's inventory
|
||||||
|
|
||||||
|
boolean didCraft = false;
|
||||||
|
|
||||||
|
if (this.getStackInSlot(3) != null)
|
||||||
|
{
|
||||||
|
if (this.getStackInSlot(3).getItem() instanceof ItemFilter)
|
||||||
|
{
|
||||||
|
ArrayList<ItemStack> filters = ItemFilter.getFilters(this.getStackInSlot(3));
|
||||||
|
|
||||||
|
if (filters.size() > 0)
|
||||||
|
{
|
||||||
|
ItemStack outputStack = filters.get(0);
|
||||||
|
|
||||||
|
if (outputStack != null)
|
||||||
|
{
|
||||||
|
if (this.getIdealRecipe(outputStack) != null)
|
||||||
|
{
|
||||||
|
this.setInventorySlotContents(4, outputStack);
|
||||||
|
didCraft = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!didCraft)
|
||||||
|
{
|
||||||
|
this.setInventorySlotContents(4, null);
|
||||||
|
} */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Does this player's inventory contain the required resources to craft this item?
|
||||||
|
*
|
||||||
|
* @return Required Items
|
||||||
|
*/
|
||||||
|
public ItemStack[] getIdealRecipe(ItemStack outputItem)
|
||||||
|
{
|
||||||
|
for (Object object : CraftingManager.getInstance().getRecipeList())
|
||||||
|
{
|
||||||
|
if (object instanceof IRecipe)
|
||||||
|
{
|
||||||
|
if (((IRecipe) object).getRecipeOutput() != null)
|
||||||
|
{
|
||||||
|
if (outputItem.isItemEqual(((IRecipe) object).getRecipeOutput()))
|
||||||
|
{
|
||||||
|
if (object instanceof ShapedRecipes)
|
||||||
|
{
|
||||||
|
if (this.doesMatch(((ShapedRecipes) object).recipeItems, outputItem)) { return ((ShapedRecipes) object).recipeItems; }
|
||||||
|
}
|
||||||
|
else if (object instanceof ShapelessRecipes)
|
||||||
|
{
|
||||||
|
if (this.doesMatch(((ShapelessRecipes) object).recipeItems.toArray(), outputItem)) { return (ItemStack[]) ((ShapelessRecipes) object).recipeItems.toArray(); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean doesMatch(Object[] recipeItems, ItemStack outputItem)
|
||||||
|
{
|
||||||
|
int itemMatch = 0;
|
||||||
|
|
||||||
|
for (Object obj : recipeItems)
|
||||||
|
{
|
||||||
|
if (obj instanceof ItemStack)
|
||||||
|
{
|
||||||
|
ItemStack recipeItem = (ItemStack) obj;
|
||||||
|
|
||||||
|
if (recipeItem != null)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < this.inventoryPlayer.getSizeInventory(); i++)
|
||||||
|
{
|
||||||
|
ItemStack checkStack = this.inventoryPlayer.getStackInSlot(i);
|
||||||
|
|
||||||
|
if (checkStack != null)
|
||||||
|
{
|
||||||
|
if (recipeItem.isItemEqual(checkStack))
|
||||||
|
{
|
||||||
|
// TODO Do NBT CHecking
|
||||||
|
itemMatch++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return itemMatch >= recipeItems.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -28,8 +28,6 @@ public class ItemFilter extends Item
|
||||||
|
|
||||||
if (filterItems.size() > 0)
|
if (filterItems.size() > 0)
|
||||||
{
|
{
|
||||||
list.add("Filters:");
|
|
||||||
|
|
||||||
for (ItemStack filterItem : filterItems)
|
for (ItemStack filterItem : filterItems)
|
||||||
{
|
{
|
||||||
list.add(filterItem.getDisplayName());
|
list.add(filterItem.getDisplayName());
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
package assemblyline.common.machine.filter;
|
||||||
|
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.inventory.IInventory;
|
||||||
|
import net.minecraft.inventory.Slot;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
|
public class SlotCraftingResult extends Slot
|
||||||
|
{
|
||||||
|
private ContainerStamper container;
|
||||||
|
|
||||||
|
public SlotCraftingResult(ContainerStamper container, IInventory par1iInventory, int par2, int par3, int par4)
|
||||||
|
{
|
||||||
|
super(par1iInventory, par2, par3, par4);
|
||||||
|
this.container = container;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isItemValid(ItemStack par1ItemStack)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPickupFromSlot(EntityPlayer entityPlayer, ItemStack par2ItemStack)
|
||||||
|
{
|
||||||
|
super.onPickupFromSlot(entityPlayer, par2ItemStack);
|
||||||
|
|
||||||
|
if (this.getStack() != null)
|
||||||
|
{
|
||||||
|
ItemStack[] requiredItems = this.container.getIdealRecipe(this.getStack()).clone();
|
||||||
|
|
||||||
|
if (requiredItems != null)
|
||||||
|
{
|
||||||
|
for (ItemStack searchStack : requiredItems)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < entityPlayer.inventory.getSizeInventory(); i++)
|
||||||
|
{
|
||||||
|
ItemStack checkStack = entityPlayer.inventory.getStackInSlot(i);
|
||||||
|
|
||||||
|
if (checkStack != null)
|
||||||
|
{
|
||||||
|
if (searchStack.isItemEqual(checkStack))
|
||||||
|
{
|
||||||
|
entityPlayer.inventory.decrStackSize(i, 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue