diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFishingNet.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFishingNet.java index 7d2991394..8c9cead91 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFishingNet.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFishingNet.java @@ -11,16 +11,18 @@ package ellpeck.actuallyadditions.tile; import ellpeck.actuallyadditions.util.Util; +import ellpeck.actuallyadditions.util.WorldUtil; import net.minecraft.block.material.Material; import net.minecraft.entity.item.EntityItem; import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.FishingHooks; import net.minecraftforge.common.util.ForgeDirection; +import java.util.ArrayList; + public class TileEntityFishingNet extends TileEntityBase{ public int timeUntilNextDrop; @@ -37,7 +39,9 @@ public class TileEntityFishingNet extends TileEntityBase{ ItemStack fishable = FishingHooks.getRandomFishable(Util.RANDOM, Util.RANDOM.nextFloat()); TileEntity tile = worldObj.getTileEntity(xCoord, yCoord+1, zCoord); if(tile != null && tile instanceof IInventory){ - this.insertIntoInventory((IInventory)tile, fishable); + ArrayList list = new ArrayList(); + list.add(fishable); + WorldUtil.addToInventory((IInventory)tile, list, ForgeDirection.DOWN, true); } else{ EntityItem item = new EntityItem(worldObj, xCoord+0.5, yCoord+0.5, zCoord+0.5, fishable); @@ -48,7 +52,7 @@ public class TileEntityFishingNet extends TileEntityBase{ } else{ int time = 15000; - this.timeUntilNextDrop = time+Util.RANDOM.nextInt(time/2); + this.timeUntilNextDrop = 10;//time+Util.RANDOM.nextInt(time/2); } } } @@ -64,22 +68,4 @@ public class TileEntityFishingNet extends TileEntityBase{ public void readSyncableNBT(NBTTagCompound compound, boolean sync){ this.timeUntilNextDrop = compound.getInteger("TimeUntilNextDrop"); } - - public void insertIntoInventory(IInventory inventory, ItemStack stack){ - for(int i = 0; i < inventory.getSizeInventory(); i++){ - if(inventory.isItemValidForSlot(i, stack)){ - if(!(inventory instanceof ISidedInventory) || ((ISidedInventory)inventory).canInsertItem(i, stack, ForgeDirection.DOWN.flag)){ - ItemStack slot = inventory.getStackInSlot(i); - if(slot == null){ - inventory.setInventorySlotContents(i, stack); - return; - } - if(slot.isItemEqual(stack) && slot.stackSize <= slot.getMaxStackSize()-stack.stackSize && slot.stackSize <= inventory.getInventoryStackLimit()-stack.stackSize){ - slot.stackSize += stack.stackSize; - return; - } - } - } - } - } } diff --git a/src/main/java/ellpeck/actuallyadditions/util/WorldUtil.java b/src/main/java/ellpeck/actuallyadditions/util/WorldUtil.java index a065d4485..64e114d2a 100644 --- a/src/main/java/ellpeck/actuallyadditions/util/WorldUtil.java +++ b/src/main/java/ellpeck/actuallyadditions/util/WorldUtil.java @@ -21,6 +21,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.network.play.client.C07PacketPlayerDigging; import net.minecraft.network.play.server.S23PacketBlockChange; @@ -244,8 +245,16 @@ public class WorldUtil{ return blocks; } + public static boolean addToInventory(IInventory inventory, int start, int end, ArrayList stacks, boolean actuallyDo){ + return addToInventory(inventory, start, end, stacks, ForgeDirection.UNKNOWN, actuallyDo); + } + public static boolean addToInventory(IInventory inventory, ArrayList stacks, boolean actuallyDo){ - return addToInventory(inventory, 0, inventory.getSizeInventory(), stacks, actuallyDo); + return addToInventory(inventory, stacks, ForgeDirection.UNKNOWN, actuallyDo); + } + + public static boolean addToInventory(IInventory inventory, ArrayList stacks, ForgeDirection side, boolean actuallyDo){ + return addToInventory(inventory, 0, inventory.getSizeInventory(), stacks, side, actuallyDo); } /** @@ -253,10 +262,11 @@ public class WorldUtil{ * * @param inventory The inventory to try to put the items into * @param stacks The stacks to be put into the slots (Items don't actually get removed from there!) + * @param side The side to input from (use UNKNOWN if it should always work) * @param actuallyDo Do it or just test if it works? * @return Does it work? */ - public static boolean addToInventory(IInventory inventory, int start, int end, ArrayList stacks, boolean actuallyDo){ + public static boolean addToInventory(IInventory inventory, int start, int end, ArrayList stacks, ForgeDirection side, boolean actuallyDo){ //Copy the slots if just testing to later load them again ItemStack[] backupSlots = null; if(!actuallyDo){ @@ -272,17 +282,19 @@ public class WorldUtil{ int working = 0; for(ItemStack stackToPutIn : stacks){ for(int i = start; i < end; i++){ - ItemStack stackInQuestion = inventory.getStackInSlot(i); - if(stackToPutIn != null && (stackInQuestion == null || (stackInQuestion.isItemEqual(stackToPutIn) && stackInQuestion.getMaxStackSize() >= stackInQuestion.stackSize+stackToPutIn.stackSize))){ - if(stackInQuestion == null){ - inventory.setInventorySlotContents(i, stackToPutIn.copy()); - } - else{ - stackInQuestion.stackSize += stackToPutIn.stackSize; - } - working++; + if(side == ForgeDirection.UNKNOWN || ((!(inventory instanceof ISidedInventory) || ((ISidedInventory)inventory).canInsertItem(i, stackToPutIn, side.ordinal())) && inventory.isItemValidForSlot(i, stackToPutIn))){ + ItemStack stackInQuestion = inventory.getStackInSlot(i); + if(stackToPutIn != null && (stackInQuestion == null || (stackInQuestion.isItemEqual(stackToPutIn) && stackInQuestion.getMaxStackSize() >= stackInQuestion.stackSize+stackToPutIn.stackSize))){ + if(stackInQuestion == null){ + inventory.setInventorySlotContents(i, stackToPutIn.copy()); + } + else{ + stackInQuestion.stackSize += stackToPutIn.stackSize; + } + working++; - break; + break; + } } } }