Made upgrades stackable

This commit is contained in:
Raoul Van den Berge
2016-12-04 01:19:37 +01:00
parent 0b6bae0f60
commit d6cf79264d
21 changed files with 149 additions and 42 deletions

View File

@@ -2,6 +2,7 @@
### 1.3.1
- Updated Forge to 2180 (raoulvdberge)
- Made Upgrades stackable (raoulvdberge)
- Fixed Disk Drive not noticing a Storage Disk being shift clicked out of the GUI (raoulvdberge)
### 1.3

View File

@@ -30,6 +30,95 @@ public abstract class ContainerBase extends Container {
return tile;
}
// @todo Forge issue #3498
@Override
protected boolean mergeItemStack(ItemStack stack, int startIndex, int endIndex, boolean reverseDirection) {
boolean flag = false;
int i = startIndex;
if (reverseDirection) {
i = endIndex - 1;
}
if (stack.isStackable()) {
while (!stack.isEmpty()) {
if (reverseDirection) {
if (i < startIndex) {
break;
}
} else if (i >= endIndex) {
break;
}
Slot slot = (Slot) this.inventorySlots.get(i);
ItemStack itemstack = slot.getStack();
if (!itemstack.isEmpty() && itemstack.getItem() == stack.getItem() && (!stack.getHasSubtypes() || stack.getMetadata() == itemstack.getMetadata()) && ItemStack.areItemStackTagsEqual(stack, itemstack)) {
int j = itemstack.getCount() + stack.getCount();
if (j <= slot.getSlotStackLimit()) {
stack.setCount(0);
itemstack.setCount(j);
slot.onSlotChanged();
flag = true;
} else if (itemstack.getCount() < slot.getSlotStackLimit()) {
stack.shrink(slot.getSlotStackLimit() - itemstack.getCount());
itemstack.setCount(slot.getSlotStackLimit());
slot.onSlotChanged();
flag = true;
}
}
if (reverseDirection) {
--i;
} else {
++i;
}
}
}
if (!stack.isEmpty()) {
if (reverseDirection) {
i = endIndex - 1;
} else {
i = startIndex;
}
while (true) {
if (reverseDirection) {
if (i < startIndex) {
break;
}
} else if (i >= endIndex) {
break;
}
Slot slot1 = (Slot) this.inventorySlots.get(i);
ItemStack itemstack1 = slot1.getStack();
if (itemstack1.isEmpty() && slot1.isItemValid(stack)) {
if (stack.getCount() > slot1.getSlotStackLimit()) {
slot1.putStack(stack.splitStack(slot1.getSlotStackLimit()));
} else {
slot1.putStack(stack.splitStack(stack.getCount()));
}
slot1.onSlotChanged();
flag = true;
break;
}
if (reverseDirection) {
--i;
} else {
++i;
}
}
}
return flag;
}
protected void addPlayerInventory(int xInventory, int yInventory) {
int id = 0;

View File

@@ -1,18 +1,18 @@
package com.raoulvdberge.refinedstorage.container;
import com.raoulvdberge.refinedstorage.container.slot.SlotBase;
import com.raoulvdberge.refinedstorage.container.slot.SlotFilterType;
import com.raoulvdberge.refinedstorage.tile.TileConstructor;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
public class ContainerConstructor extends ContainerBase {
public ContainerConstructor(TileConstructor constructor, EntityPlayer player) {
super(constructor, player);
for (int i = 0; i < 4; ++i) {
addSlotToContainer(new SlotItemHandler(constructor.getUpgrades(), i, 187, 6 + (i * 18)));
addSlotToContainer(new SlotBase(constructor.getUpgrades(), i, 187, 6 + (i * 18)));
}
addSlotToContainer(new SlotFilterType(constructor, 0, 80, 20));

View File

@@ -1,21 +1,21 @@
package com.raoulvdberge.refinedstorage.container;
import com.raoulvdberge.refinedstorage.container.slot.SlotBase;
import com.raoulvdberge.refinedstorage.tile.TileCrafter;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
public class ContainerCrafter extends ContainerBase {
public ContainerCrafter(TileCrafter crafter, EntityPlayer player) {
super(crafter, player);
for (int i = 0; i < 9; ++i) {
addSlotToContainer(new SlotItemHandler(crafter.getPatternItems(), i, 8 + (18 * i), 20));
addSlotToContainer(new SlotBase(crafter.getPatternItems(), i, 8 + (18 * i), 20));
}
for (int i = 0; i < 4; ++i) {
addSlotToContainer(new SlotItemHandler(crafter.getUpgrades(), i, 187, 6 + (i * 18)));
addSlotToContainer(new SlotBase(crafter.getUpgrades(), i, 187, 6 + (i * 18)));
}
addPlayerInventory(8, 55);

View File

@@ -1,18 +1,18 @@
package com.raoulvdberge.refinedstorage.container;
import com.raoulvdberge.refinedstorage.container.slot.SlotBase;
import com.raoulvdberge.refinedstorage.container.slot.SlotFilterType;
import com.raoulvdberge.refinedstorage.tile.TileDestructor;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
public class ContainerDestructor extends ContainerBase {
public ContainerDestructor(TileDestructor destructor, EntityPlayer player) {
super(destructor, player);
for (int i = 0; i < 4; ++i) {
addSlotToContainer(new SlotItemHandler(destructor.getUpgrades(), i, 187, 6 + (i * 18)));
addSlotToContainer(new SlotBase(destructor.getUpgrades(), i, 187, 6 + (i * 18)));
}
for (int i = 0; i < 9; ++i) {

View File

@@ -1,11 +1,11 @@
package com.raoulvdberge.refinedstorage.container;
import com.raoulvdberge.refinedstorage.container.slot.SlotBase;
import com.raoulvdberge.refinedstorage.container.slot.SlotFilterType;
import com.raoulvdberge.refinedstorage.tile.TileDiskDrive;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
public class ContainerDiskDrive extends ContainerBase {
public ContainerDiskDrive(TileDiskDrive drive, EntityPlayer player) {
@@ -15,7 +15,7 @@ public class ContainerDiskDrive extends ContainerBase {
int y = 54;
for (int i = 0; i < 8; ++i) {
addSlotToContainer(new SlotItemHandler(drive.getDisks(), i, x + ((i % 2) * 18), y + Math.floorDiv(i, 2) * 18));
addSlotToContainer(new SlotBase(drive.getDisks(), i, x + ((i % 2) * 18), y + Math.floorDiv(i, 2) * 18));
}
for (int i = 0; i < 9; ++i) {

View File

@@ -1,26 +1,26 @@
package com.raoulvdberge.refinedstorage.container;
import com.raoulvdberge.refinedstorage.container.slot.SlotBase;
import com.raoulvdberge.refinedstorage.container.slot.SlotFilterType;
import com.raoulvdberge.refinedstorage.tile.TileDiskManipulator;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
public class ContainerDiskManipulator extends ContainerBase {
public ContainerDiskManipulator(TileDiskManipulator manipulator, EntityPlayer player) {
super(manipulator, player);
for (int i = 0; i < 4; ++i) {
addSlotToContainer(new SlotItemHandler(manipulator.getUpgrades(), i, 187, 6 + (i * 18)));
addSlotToContainer(new SlotBase(manipulator.getUpgrades(), i, 187, 6 + (i * 18)));
}
for (int i = 0; i < 3; ++i) {
addSlotToContainer(new SlotItemHandler(manipulator.getInputDisks(), i, 44, 57 + (i * 18)));
addSlotToContainer(new SlotBase(manipulator.getInputDisks(), i, 44, 57 + (i * 18)));
}
for (int i = 0; i < 3; ++i) {
addSlotToContainer(new SlotItemHandler(manipulator.getOutputDisks(), i, 116, 57 + (i * 18)));
addSlotToContainer(new SlotBase(manipulator.getOutputDisks(), i, 116, 57 + (i * 18)));
}
for (int i = 0; i < 9; ++i) {

View File

@@ -1,18 +1,18 @@
package com.raoulvdberge.refinedstorage.container;
import com.raoulvdberge.refinedstorage.container.slot.SlotBase;
import com.raoulvdberge.refinedstorage.container.slot.SlotFilterType;
import com.raoulvdberge.refinedstorage.tile.TileExporter;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
public class ContainerExporter extends ContainerBase {
public ContainerExporter(TileExporter exporter, EntityPlayer player) {
super(exporter, player);
for (int i = 0; i < 4; ++i) {
addSlotToContainer(new SlotItemHandler(exporter.getUpgrades(), i, 187, 6 + (i * 18)));
addSlotToContainer(new SlotBase(exporter.getUpgrades(), i, 187, 6 + (i * 18)));
}
for (int i = 0; i < 9; ++i) {

View File

@@ -1,21 +1,21 @@
package com.raoulvdberge.refinedstorage.container;
import com.raoulvdberge.refinedstorage.container.slot.SlotBase;
import com.raoulvdberge.refinedstorage.container.slot.SlotFilterFluid;
import com.raoulvdberge.refinedstorage.tile.TileFluidInterface;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
public class ContainerFluidInterface extends ContainerBase {
public ContainerFluidInterface(TileFluidInterface fluidInterface, EntityPlayer player) {
super(fluidInterface, player);
for (int i = 0; i < 4; ++i) {
addSlotToContainer(new SlotItemHandler(fluidInterface.getUpgrades(), i, 187, 6 + (i * 18)));
addSlotToContainer(new SlotBase(fluidInterface.getUpgrades(), i, 187, 6 + (i * 18)));
}
addSlotToContainer(new SlotItemHandler(fluidInterface.getIn(), 0, 44, 32));
addSlotToContainer(new SlotBase(fluidInterface.getIn(), 0, 44, 32));
addSlotToContainer(new SlotFilterFluid(!fluidInterface.getWorld().isRemote, fluidInterface.getOut(), 0, 116, 32));
addPlayerInventory(8, 122);

View File

@@ -12,7 +12,6 @@ import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.inventory.IContainerListener;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
public class ContainerGrid extends ContainerBase {
private IGrid grid;
@@ -60,13 +59,13 @@ public class ContainerGrid extends ContainerBase {
addSlotToContainer(patternResultSlot = new SlotDisabled(((TileGrid) grid).getResult(), 0, 112 + 4, 110 + 4));
addSlotToContainer(new SlotItemHandler(((TileGrid) grid).getPatterns(), 0, 152, 96));
addSlotToContainer(new SlotBase(((TileGrid) grid).getPatterns(), 0, 152, 96));
addSlotToContainer(new SlotOutput(((TileGrid) grid).getPatterns(), 1, 152, 132));
}
if (grid.getType() != EnumGridType.FLUID) {
for (int i = 0; i < 4; ++i) {
addSlotToContainer(new SlotItemHandler(grid.getFilter(), i, 204, 6 + (18 * i)));
addSlotToContainer(new SlotBase(grid.getFilter(), i, 204, 6 + (18 * i)));
}
}
}

View File

@@ -1,18 +1,18 @@
package com.raoulvdberge.refinedstorage.container;
import com.raoulvdberge.refinedstorage.container.slot.SlotBase;
import com.raoulvdberge.refinedstorage.container.slot.SlotFilterType;
import com.raoulvdberge.refinedstorage.tile.TileImporter;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
public class ContainerImporter extends ContainerBase {
public ContainerImporter(TileImporter importer, EntityPlayer player) {
super(importer, player);
for (int i = 0; i < 4; ++i) {
addSlotToContainer(new SlotItemHandler(importer.getUpgrades(), i, 187, 6 + (i * 18)));
addSlotToContainer(new SlotBase(importer.getUpgrades(), i, 187, 6 + (i * 18)));
}
for (int i = 0; i < 9; ++i) {

View File

@@ -1,19 +1,19 @@
package com.raoulvdberge.refinedstorage.container;
import com.raoulvdberge.refinedstorage.container.slot.SlotBase;
import com.raoulvdberge.refinedstorage.container.slot.SlotFilter;
import com.raoulvdberge.refinedstorage.container.slot.SlotOutput;
import com.raoulvdberge.refinedstorage.tile.TileInterface;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
public class ContainerInterface extends ContainerBase {
public ContainerInterface(TileInterface tile, EntityPlayer player) {
super(tile, player);
for (int i = 0; i < 9; ++i) {
addSlotToContainer(new SlotItemHandler(tile.getImportItems(), i, 8 + (18 * i), 20));
addSlotToContainer(new SlotBase(tile.getImportItems(), i, 8 + (18 * i), 20));
}
for (int i = 0; i < 9; ++i) {
@@ -25,7 +25,7 @@ public class ContainerInterface extends ContainerBase {
}
for (int i = 0; i < 4; ++i) {
addSlotToContainer(new SlotItemHandler(tile.getUpgrades(), i, 187, 6 + (i * 18)));
addSlotToContainer(new SlotBase(tile.getUpgrades(), i, 187, 6 + (i * 18)));
}
addPlayerInventory(8, 134);

View File

@@ -1,18 +1,18 @@
package com.raoulvdberge.refinedstorage.container;
import com.raoulvdberge.refinedstorage.container.slot.SlotBase;
import com.raoulvdberge.refinedstorage.tile.TileNetworkTransmitter;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
public class ContainerNetworkTransmitter extends ContainerBase {
public ContainerNetworkTransmitter(TileNetworkTransmitter networkTransmitter, EntityPlayer player) {
super(networkTransmitter, player);
addSlotToContainer(new SlotItemHandler(networkTransmitter.getNetworkCard(), 0, 8, 20));
addSlotToContainer(new SlotBase(networkTransmitter.getNetworkCard(), 0, 8, 20));
addSlotToContainer(new SlotItemHandler(networkTransmitter.getUpgrades(), 0, 187, 6));
addSlotToContainer(new SlotBase(networkTransmitter.getUpgrades(), 0, 187, 6));
addPlayerInventory(8, 55);
}

View File

@@ -1,12 +1,12 @@
package com.raoulvdberge.refinedstorage.container;
import com.raoulvdberge.refinedstorage.container.slot.SlotBase;
import com.raoulvdberge.refinedstorage.container.slot.SlotFilter;
import com.raoulvdberge.refinedstorage.container.slot.SlotOutput;
import com.raoulvdberge.refinedstorage.tile.TileProcessingPatternEncoder;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
import java.util.Collection;
@@ -14,7 +14,7 @@ public class ContainerProcessingPatternEncoder extends ContainerBase {
public ContainerProcessingPatternEncoder(TileProcessingPatternEncoder encoder, EntityPlayer player) {
super(encoder, player);
addSlotToContainer(new SlotItemHandler(encoder.getPatterns(), 0, 152, 18));
addSlotToContainer(new SlotBase(encoder.getPatterns(), 0, 152, 18));
addSlotToContainer(new SlotOutput(encoder.getPatterns(), 1, 152, 58));
int ox = 8;

View File

@@ -1,12 +1,12 @@
package com.raoulvdberge.refinedstorage.container;
import com.raoulvdberge.refinedstorage.RSItems;
import com.raoulvdberge.refinedstorage.container.slot.SlotBase;
import com.raoulvdberge.refinedstorage.container.slot.SlotOutput;
import com.raoulvdberge.refinedstorage.tile.TileSolderer;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
public class ContainerSolderer extends ContainerBase {
public ContainerSolderer(TileSolderer solderer, EntityPlayer player) {
@@ -16,7 +16,7 @@ public class ContainerSolderer extends ContainerBase {
int y = 20;
for (int i = 0; i < 3; ++i) {
addSlotToContainer(new SlotItemHandler(solderer.getItems(), i, x, y));
addSlotToContainer(new SlotBase(solderer.getItems(), i, x, y));
y += 18;
}
@@ -24,7 +24,7 @@ public class ContainerSolderer extends ContainerBase {
addSlotToContainer(new SlotOutput(solderer.getResult(), 0, 127, 38));
for (int i = 0; i < 4; ++i) {
addSlotToContainer(new SlotItemHandler(solderer.getUpgrades(), i, 187, 6 + (i * 18)));
addSlotToContainer(new SlotBase(solderer.getUpgrades(), i, 187, 6 + (i * 18)));
}
addPlayerInventory(8, 89);

View File

@@ -1,17 +1,17 @@
package com.raoulvdberge.refinedstorage.container;
import com.raoulvdberge.refinedstorage.container.slot.SlotBase;
import com.raoulvdberge.refinedstorage.tile.TileWirelessTransmitter;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
public class ContainerWirelessTransmitter extends ContainerBase {
public ContainerWirelessTransmitter(TileWirelessTransmitter wirelessTransmitter, EntityPlayer player) {
super(wirelessTransmitter, player);
for (int i = 0; i < 4; ++i) {
addSlotToContainer(new SlotItemHandler(wirelessTransmitter.getUpgrades(), i, 187, 6 + (i * 18)));
addSlotToContainer(new SlotBase(wirelessTransmitter.getUpgrades(), i, 187, 6 + (i * 18)));
}
addPlayerInventory(8, 55);
@@ -23,7 +23,7 @@ public class ContainerWirelessTransmitter extends ContainerBase {
Slot slot = getSlot(index);
if (slot != null && slot.getHasStack()) {
if (slot.getHasStack()) {
stack = slot.getStack();
if (index < 4) {

View File

@@ -0,0 +1,16 @@
package com.raoulvdberge.refinedstorage.container.slot;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.SlotItemHandler;
// @todo: Forge issue #3497
public class SlotBase extends SlotItemHandler {
public SlotBase(IItemHandler itemHandler, int index, int xPosition, int yPosition) {
super(itemHandler, index, xPosition, yPosition);
}
@Override
public int getSlotStackLimit() {
return getItemHandler().getSlotLimit(getSlotIndex());
}
}

View File

@@ -9,12 +9,11 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.common.IPlantable;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.SlotItemHandler;
import javax.annotation.Nonnull;
import java.lang.reflect.Field;
public class SlotFilter extends SlotItemHandler {
public class SlotFilter extends SlotBase {
public static final int FILTER_ALLOW_SIZE = 1;
public static final int FILTER_ALLOW_BLOCKS = 2;

View File

@@ -2,11 +2,10 @@ package com.raoulvdberge.refinedstorage.container.slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.SlotItemHandler;
import javax.annotation.Nonnull;
public class SlotOutput extends SlotItemHandler {
public class SlotOutput extends SlotBase {
public SlotOutput(IItemHandler inventory, int id, int x, int y) {
super(inventory, id, x, y);
}

View File

@@ -65,6 +65,11 @@ public class ItemHandlerUpgrade extends ItemHandlerBasic {
return 0;
}
@Override
public int getSlotLimit(int slot) {
return 1;
}
public int getItemInteractCount() {
return hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1;
}

View File

@@ -34,7 +34,6 @@ public class ItemUpgrade extends ItemBase {
setHasSubtypes(true);
setMaxDamage(0);
setMaxStackSize(1);
}
@Override