Updated the Alchemy Table recipe system so that it can provide better custom recipes
This commit is contained in:
parent
a5dee50984
commit
86efa8b1a3
12 changed files with 212 additions and 218 deletions
|
@ -1,15 +1,13 @@
|
|||
package WayofTime.bloodmagic.routing;
|
||||
|
||||
import WayofTime.bloodmagic.util.Utils;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.inventory.ISidedInventory;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import java.util.List;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import WayofTime.bloodmagic.util.Utils;
|
||||
|
||||
/**
|
||||
* This particular implementation of IItemFilter allows any item to be drained
|
||||
|
@ -21,8 +19,8 @@ import java.util.List;
|
|||
*/
|
||||
public class DefaultItemFilter implements IItemFilter
|
||||
{
|
||||
private IInventory accessedInventory;
|
||||
private EnumFacing accessedSide;
|
||||
protected TileEntity accessedTile;
|
||||
protected IItemHandler itemHandler;
|
||||
|
||||
/**
|
||||
* Initializes the filter so that it knows what it wants to fulfill.
|
||||
|
@ -41,10 +39,10 @@ public class DefaultItemFilter implements IItemFilter
|
|||
* initialized as an input filter.
|
||||
*/
|
||||
@Override
|
||||
public void initializeFilter(List<ItemStack> filteredList, IInventory inventory, EnumFacing side, boolean isFilterOutput)
|
||||
public void initializeFilter(List<ItemStack> filteredList, TileEntity tile, IItemHandler itemHandler, boolean isFilterOutput)
|
||||
{
|
||||
accessedInventory = inventory;
|
||||
accessedSide = side;
|
||||
this.accessedTile = tile;
|
||||
this.itemHandler = itemHandler;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -70,15 +68,14 @@ public class DefaultItemFilter implements IItemFilter
|
|||
|
||||
ItemStack testStack = inputStack.copy();
|
||||
testStack.stackSize = allowedAmount;
|
||||
ItemStack remainderStack = Utils.insertStackIntoInventory(testStack, accessedInventory, accessedSide);
|
||||
ItemStack remainderStack = Utils.insertStackIntoTile(testStack, itemHandler);
|
||||
|
||||
int changeAmount = allowedAmount - (remainderStack == null ? 0 : remainderStack.stackSize);
|
||||
testStack = inputStack.copy();
|
||||
testStack.stackSize -= changeAmount;
|
||||
|
||||
TileEntity tile = (TileEntity) accessedInventory;
|
||||
World world = tile.getWorld();
|
||||
BlockPos pos = tile.getPos();
|
||||
World world = accessedTile.getWorld();
|
||||
BlockPos pos = accessedTile.getPos();
|
||||
world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3);
|
||||
|
||||
return testStack;
|
||||
|
@ -91,36 +88,15 @@ public class DefaultItemFilter implements IItemFilter
|
|||
@Override
|
||||
public int transferThroughInputFilter(IItemFilter outputFilter, int maxTransfer)
|
||||
{
|
||||
boolean[] canAccessSlot = new boolean[accessedInventory.getSizeInventory()];
|
||||
if (accessedInventory instanceof ISidedInventory)
|
||||
for (int slot = 0; slot < itemHandler.getSlots(); slot++)
|
||||
{
|
||||
int[] slots = ((ISidedInventory) accessedInventory).getSlotsForFace(accessedSide);
|
||||
for (int slot : slots)
|
||||
{
|
||||
canAccessSlot[slot] = true;
|
||||
}
|
||||
} else
|
||||
{
|
||||
for (int slot = 0; slot < accessedInventory.getSizeInventory(); slot++)
|
||||
{
|
||||
canAccessSlot[slot] = true;
|
||||
}
|
||||
}
|
||||
|
||||
for (int slot = 0; slot < accessedInventory.getSizeInventory(); slot++)
|
||||
{
|
||||
if (!canAccessSlot[slot])
|
||||
ItemStack inputStack = itemHandler.getStackInSlot(slot);
|
||||
if (inputStack == null || itemHandler.extractItem(slot, inputStack.stackSize, true) == null)//(accessedInventory instanceof ISidedInventory && !((ISidedInventory) accessedInventory).canExtractItem(slot, inputStack, accessedSide)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
ItemStack inputStack = accessedInventory.getStackInSlot(slot);
|
||||
if (inputStack == null || (accessedInventory instanceof ISidedInventory && !((ISidedInventory) accessedInventory).canExtractItem(slot, inputStack, accessedSide)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
int allowedAmount = Math.min(inputStack.stackSize, maxTransfer);
|
||||
int allowedAmount = Math.min(itemHandler.extractItem(slot, inputStack.stackSize, true).stackSize, maxTransfer);
|
||||
|
||||
ItemStack testStack = inputStack.copy();
|
||||
testStack.stackSize = allowedAmount;
|
||||
|
@ -133,15 +109,13 @@ public class DefaultItemFilter implements IItemFilter
|
|||
continue;
|
||||
}
|
||||
|
||||
TileEntity tile = (TileEntity) accessedInventory;
|
||||
World world = tile.getWorld();
|
||||
BlockPos pos = tile.getPos();
|
||||
world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3);
|
||||
|
||||
inputStack.stackSize -= changeAmount;
|
||||
maxTransfer -= changeAmount;
|
||||
|
||||
accessedInventory.setInventorySlotContents(slot, inputStack.stackSize <= 0 ? null : inputStack); //Sets the slot in the inventory
|
||||
itemHandler.extractItem(slot, changeAmount, false);
|
||||
|
||||
World world = accessedTile.getWorld();
|
||||
BlockPos pos = accessedTile.getPos();
|
||||
world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3);
|
||||
|
||||
return changeAmount;
|
||||
}
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
package WayofTime.bloodmagic.routing;
|
||||
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
|
||||
public interface IItemFilter
|
||||
{
|
||||
void initializeFilter(List<ItemStack> filteredList, IInventory inventory, EnumFacing side, boolean isFilterOutput);
|
||||
void initializeFilter(List<ItemStack> filteredList, TileEntity tile, IItemHandler itemHandler, boolean isFilterOutput);
|
||||
|
||||
/**
|
||||
* This method is only called when the output inventory this filter is
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
package WayofTime.bloodmagic.routing;
|
||||
|
||||
import WayofTime.bloodmagic.util.Utils;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.inventory.ISidedInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import WayofTime.bloodmagic.util.Utils;
|
||||
|
||||
/**
|
||||
* This particular implementation of IItemFilter checks to make sure that a) as
|
||||
* an output filter it will fill until the requested amount and b) as an input
|
||||
|
@ -26,17 +27,19 @@ public class TestItemFilter implements IItemFilter
|
|||
* filter, it keeps track of how many can be removed.
|
||||
*/
|
||||
protected List<ItemStack> requestList;
|
||||
protected IInventory accessedInventory;
|
||||
protected EnumFacing accessedSide;
|
||||
protected TileEntity accessedTile;
|
||||
protected IItemHandler itemHandler;
|
||||
|
||||
/**
|
||||
* Initializes the filter so that it knows what it wants to fulfill.
|
||||
*
|
||||
* @param filteredList
|
||||
* - The list of ItemStacks that the filter is set to.
|
||||
* @param inventory
|
||||
* @param tile
|
||||
* - The inventory that is being accessed. This inventory is either
|
||||
* being pulled from or pushed to.
|
||||
* @param itemHandler
|
||||
* - The item handler
|
||||
* @param side
|
||||
* - The side that the inventory is being accessed from. Used for
|
||||
* pulling/pushing from/to the inventory.
|
||||
|
@ -46,37 +49,17 @@ public class TestItemFilter implements IItemFilter
|
|||
* initialized as an input filter.
|
||||
*/
|
||||
@Override
|
||||
public void initializeFilter(List<ItemStack> filteredList, IInventory inventory, EnumFacing side, boolean isFilterOutput)
|
||||
public void initializeFilter(List<ItemStack> filteredList, TileEntity tile, IItemHandler itemHandler, boolean isFilterOutput)
|
||||
{
|
||||
this.accessedInventory = inventory;
|
||||
this.accessedSide = side;
|
||||
this.accessedTile = tile;
|
||||
this.itemHandler = itemHandler;
|
||||
if (isFilterOutput)
|
||||
{
|
||||
requestList = filteredList;
|
||||
boolean[] canAccessSlot = new boolean[inventory.getSizeInventory()];
|
||||
if (inventory instanceof ISidedInventory)
|
||||
{
|
||||
int[] slots = ((ISidedInventory) inventory).getSlotsForFace(side);
|
||||
for (int slot : slots)
|
||||
{
|
||||
canAccessSlot[slot] = true;
|
||||
}
|
||||
} else
|
||||
{
|
||||
for (int slot = 0; slot < inventory.getSizeInventory(); slot++)
|
||||
{
|
||||
canAccessSlot[slot] = true;
|
||||
}
|
||||
}
|
||||
|
||||
for (int slot = 0; slot < inventory.getSizeInventory(); slot++)
|
||||
for (int slot = 0; slot < itemHandler.getSlots(); slot++)
|
||||
{
|
||||
if (!canAccessSlot[slot])
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
ItemStack checkedStack = inventory.getStackInSlot(slot);
|
||||
ItemStack checkedStack = itemHandler.getStackInSlot(slot);
|
||||
if (checkedStack == null)
|
||||
{
|
||||
continue;
|
||||
|
@ -105,30 +88,9 @@ public class TestItemFilter implements IItemFilter
|
|||
filterStack.stackSize *= -1; //Invert the stack size so that
|
||||
}
|
||||
|
||||
boolean[] canAccessSlot = new boolean[inventory.getSizeInventory()];
|
||||
if (inventory instanceof ISidedInventory)
|
||||
for (int slot = 0; slot < itemHandler.getSlots(); slot++)
|
||||
{
|
||||
int[] slots = ((ISidedInventory) inventory).getSlotsForFace(side);
|
||||
for (int slot : slots)
|
||||
{
|
||||
canAccessSlot[slot] = true;
|
||||
}
|
||||
} else
|
||||
{
|
||||
for (int slot = 0; slot < inventory.getSizeInventory(); slot++)
|
||||
{
|
||||
canAccessSlot[slot] = true;
|
||||
}
|
||||
}
|
||||
|
||||
for (int slot = 0; slot < inventory.getSizeInventory(); slot++)
|
||||
{
|
||||
if (!canAccessSlot[slot])
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
ItemStack checkedStack = inventory.getStackInSlot(slot);
|
||||
ItemStack checkedStack = itemHandler.getStackInSlot(slot);
|
||||
if (checkedStack == null)
|
||||
{
|
||||
continue;
|
||||
|
@ -144,7 +106,6 @@ public class TestItemFilter implements IItemFilter
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Iterator<ItemStack> iterator = requestList.iterator();
|
||||
|
@ -188,7 +149,7 @@ public class TestItemFilter implements IItemFilter
|
|||
|
||||
ItemStack testStack = inputStack.copy();
|
||||
testStack.stackSize = allowedAmount;
|
||||
ItemStack remainderStack = Utils.insertStackIntoInventory(testStack, accessedInventory, accessedSide);
|
||||
ItemStack remainderStack = Utils.insertStackIntoTile(testStack, itemHandler);
|
||||
|
||||
int changeAmount = allowedAmount - (remainderStack == null ? 0 : remainderStack.stackSize);
|
||||
testStack = inputStack.copy();
|
||||
|
@ -208,6 +169,10 @@ public class TestItemFilter implements IItemFilter
|
|||
}
|
||||
}
|
||||
|
||||
World world = accessedTile.getWorld();
|
||||
BlockPos pos = accessedTile.getPos();
|
||||
world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3);
|
||||
|
||||
return testStack;
|
||||
}
|
||||
|
||||
|
@ -218,31 +183,10 @@ public class TestItemFilter implements IItemFilter
|
|||
@Override
|
||||
public int transferThroughInputFilter(IItemFilter outputFilter, int maxTransfer)
|
||||
{
|
||||
boolean[] canAccessSlot = new boolean[accessedInventory.getSizeInventory()];
|
||||
if (accessedInventory instanceof ISidedInventory)
|
||||
for (int slot = 0; slot < itemHandler.getSlots(); slot++)
|
||||
{
|
||||
int[] slots = ((ISidedInventory) accessedInventory).getSlotsForFace(accessedSide);
|
||||
for (int slot : slots)
|
||||
{
|
||||
canAccessSlot[slot] = true;
|
||||
}
|
||||
} else
|
||||
{
|
||||
for (int slot = 0; slot < accessedInventory.getSizeInventory(); slot++)
|
||||
{
|
||||
canAccessSlot[slot] = true;
|
||||
}
|
||||
}
|
||||
|
||||
for (int slot = 0; slot < accessedInventory.getSizeInventory(); slot++)
|
||||
{
|
||||
if (!canAccessSlot[slot])
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
ItemStack inputStack = accessedInventory.getStackInSlot(slot);
|
||||
if (inputStack == null || (accessedInventory instanceof ISidedInventory && !((ISidedInventory) accessedInventory).canExtractItem(slot, inputStack, accessedSide)))
|
||||
ItemStack inputStack = itemHandler.getStackInSlot(slot);
|
||||
if (inputStack == null || itemHandler.extractItem(slot, inputStack.stackSize, true) == null)//(accessedInventory instanceof ISidedInventory && !((ISidedInventory) accessedInventory).canExtractItem(slot, inputStack, accessedSide)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
@ -252,7 +196,7 @@ public class TestItemFilter implements IItemFilter
|
|||
{
|
||||
if (doStacksMatch(filterStack, inputStack))
|
||||
{
|
||||
allowedAmount = Math.min(maxTransfer, Math.min(filterStack.stackSize, inputStack.stackSize));
|
||||
allowedAmount = Math.min(maxTransfer, Math.min(filterStack.stackSize, itemHandler.extractItem(slot, inputStack.stackSize, true).stackSize));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -273,10 +217,9 @@ public class TestItemFilter implements IItemFilter
|
|||
continue;
|
||||
}
|
||||
|
||||
inputStack.stackSize -= changeAmount;
|
||||
maxTransfer -= changeAmount;
|
||||
|
||||
accessedInventory.setInventorySlotContents(slot, inputStack.stackSize <= 0 ? null : inputStack); //Sets the slot in the inventory
|
||||
itemHandler.extractItem(slot, changeAmount, false);
|
||||
|
||||
Iterator<ItemStack> itr = requestList.iterator();
|
||||
while (itr.hasNext())
|
||||
|
@ -292,6 +235,10 @@ public class TestItemFilter implements IItemFilter
|
|||
}
|
||||
}
|
||||
|
||||
World world = accessedTile.getWorld();
|
||||
BlockPos pos = accessedTile.getPos();
|
||||
world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3);
|
||||
|
||||
return changeAmount;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue