mirror of
https://github.com/GTNewHorizons/CodeChickenCore.git
synced 2026-11-12 00:07:33 +00:00
Moved a bunch of inventory stuff to CCL
This commit is contained in:
1 parent
3307b52f09
commit
e5608d9140
10 files changed
+3
-585
No files matched your search
@@ -1,4 +1,4 @@
|
||||
mc_version=1.7.10
|
||||
forge_version=10.13.3.1373-1.7.10
|
||||
ccl_version=1.1.3.136
|
||||
mod_version=1.0.6
|
||||
ccl_version=1.1.3.138
|
||||
mod_version=1.0.7
|
||||
@@ -39,7 +39,7 @@ public class CodeChickenCoreModContainer extends DummyModContainer
|
||||
LinkedList<ArtifactVersion> deps = new LinkedList<ArtifactVersion>();
|
||||
if(!getVersion().contains("$")) {
|
||||
deps.add(VersionParser.parseVersionReference("Forge@[10.13.3,)"));
|
||||
deps.add(VersionParser.parseVersionReference("NotEnoughItems@[1.0.3,)"));
|
||||
deps.add(VersionParser.parseVersionReference("NotEnoughItems@[1.0.5,)"));
|
||||
deps.add(VersionParser.parseVersionReference("EnderStorage@[1.4.7,)"));
|
||||
deps.add(VersionParser.parseVersionReference("ChickenChunks@[1.3.4,)"));
|
||||
deps.add(VersionParser.parseVersionReference("Translocator@[1.1.1,)"));
|
||||
|
||||
@@ -1,235 +0,0 @@
|
||||
package codechicken.core.inventory;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import codechicken.lib.packet.PacketCustom;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.ICrafting;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.inventory.Slot;
|
||||
|
||||
public abstract class ContainerExtended extends Container implements ICrafting
|
||||
{
|
||||
public LinkedList<EntityPlayerMP> playerCrafters = new LinkedList<EntityPlayerMP>();
|
||||
|
||||
public ContainerExtended() {
|
||||
crafters.add(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCraftingToCrafters(ICrafting icrafting) {
|
||||
if (icrafting instanceof EntityPlayerMP) {
|
||||
playerCrafters.add((EntityPlayerMP) icrafting);
|
||||
sendContainerAndContentsToPlayer(this, getInventory(), Arrays.asList((EntityPlayerMP) icrafting));
|
||||
detectAndSendChanges();
|
||||
} else
|
||||
super.addCraftingToCrafters(icrafting);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeCraftingFromCrafters(ICrafting icrafting) {
|
||||
if (icrafting instanceof EntityPlayerMP)
|
||||
playerCrafters.remove(icrafting);
|
||||
else
|
||||
super.removeCraftingFromCrafters(icrafting);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendContainerAndContentsToPlayer(Container container, List list) {
|
||||
sendContainerAndContentsToPlayer(container, list, playerCrafters);
|
||||
}
|
||||
|
||||
public void sendContainerAndContentsToPlayer(Container container, List<ItemStack> list, List<EntityPlayerMP> playerCrafters) {
|
||||
LinkedList<ItemStack> largeStacks = new LinkedList<ItemStack>();
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
ItemStack stack = list.get(i);
|
||||
if (stack != null && stack.stackSize > Byte.MAX_VALUE) {
|
||||
list.set(i, null);
|
||||
largeStacks.add(stack);
|
||||
} else
|
||||
largeStacks.add(null);
|
||||
}
|
||||
|
||||
for (EntityPlayerMP player : playerCrafters)
|
||||
player.sendContainerAndContentsToPlayer(container, list);
|
||||
|
||||
for (int i = 0; i < largeStacks.size(); i++) {
|
||||
ItemStack stack = largeStacks.get(i);
|
||||
if (stack != null)
|
||||
sendLargeStack(stack, i, playerCrafters);
|
||||
}
|
||||
}
|
||||
|
||||
public void sendLargeStack(ItemStack stack, int slot, List<EntityPlayerMP> players) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendProgressBarUpdate(Container container, int i, int j) {
|
||||
for (EntityPlayerMP player : playerCrafters)
|
||||
player.sendProgressBarUpdate(container, i, j);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendSlotContents(Container container, int slot, ItemStack stack) {
|
||||
if (stack != null && stack.stackSize > Byte.MAX_VALUE)
|
||||
sendLargeStack(stack, slot, playerCrafters);
|
||||
else
|
||||
for (EntityPlayerMP player : playerCrafters)
|
||||
player.sendSlotContents(container, slot, stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack slotClick(int par1, int par2, int par3, EntityPlayer player) {
|
||||
if (par1 >= 0 && par1 < inventorySlots.size()) {
|
||||
Slot slot = getSlot(par1);
|
||||
if (slot instanceof SlotHandleClicks)
|
||||
return ((SlotHandleClicks) slot).slotClick(this, player, par2, par3);
|
||||
}
|
||||
return super.slotClick(par1, par2, par3, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int slotIndex) {
|
||||
ItemStack transferredStack = null;
|
||||
Slot slot = (Slot) inventorySlots.get(slotIndex);
|
||||
|
||||
if (slot != null && slot.getHasStack()) {
|
||||
ItemStack stack = slot.getStack();
|
||||
transferredStack = stack.copy();
|
||||
|
||||
if (!doMergeStackAreas(slotIndex, stack))
|
||||
return null;
|
||||
|
||||
if (stack.stackSize == 0)
|
||||
slot.putStack(null);
|
||||
else
|
||||
slot.onSlotChanged();
|
||||
}
|
||||
|
||||
return transferredStack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mergeItemStack(ItemStack stack, int startIndex, int endIndex, boolean reverse) {
|
||||
boolean merged = false;
|
||||
int slotIndex = reverse ? endIndex - 1 : startIndex;
|
||||
|
||||
if (stack == null)
|
||||
return false;
|
||||
|
||||
if (stack.isStackable())//search for stacks to increase
|
||||
{
|
||||
while (stack.stackSize > 0 && (reverse ? slotIndex >= startIndex : slotIndex < endIndex)) {
|
||||
Slot slot = (Slot) inventorySlots.get(slotIndex);
|
||||
ItemStack slotStack = slot.getStack();
|
||||
|
||||
if (slotStack != null && slotStack.getItem() == stack.getItem() &&
|
||||
(!stack.getHasSubtypes() || stack.getItemDamage() == slotStack.getItemDamage()) &&
|
||||
ItemStack.areItemStackTagsEqual(stack, slotStack)) {
|
||||
int totalStackSize = slotStack.stackSize + stack.stackSize;
|
||||
int maxStackSize = Math.min(stack.getMaxStackSize(), slot.getSlotStackLimit());
|
||||
if (totalStackSize <= maxStackSize) {
|
||||
stack.stackSize = 0;
|
||||
slotStack.stackSize = totalStackSize;
|
||||
slot.onSlotChanged();
|
||||
merged = true;
|
||||
} else if (slotStack.stackSize < maxStackSize) {
|
||||
stack.stackSize -= maxStackSize - slotStack.stackSize;
|
||||
slotStack.stackSize = maxStackSize;
|
||||
slot.onSlotChanged();
|
||||
merged = true;
|
||||
}
|
||||
}
|
||||
|
||||
slotIndex += reverse ? -1 : 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (stack.stackSize > 0)//normal transfer :)
|
||||
{
|
||||
slotIndex = reverse ? endIndex - 1 : startIndex;
|
||||
|
||||
while (stack.stackSize > 0 && (reverse ? slotIndex >= startIndex : slotIndex < endIndex)) {
|
||||
Slot slot = (Slot) this.inventorySlots.get(slotIndex);
|
||||
|
||||
if (!slot.getHasStack() && slot.isItemValid(stack)) {
|
||||
int maxStackSize = Math.min(stack.getMaxStackSize(), slot.getSlotStackLimit());
|
||||
if (stack.stackSize <= maxStackSize) {
|
||||
slot.putStack(stack.copy());
|
||||
slot.onSlotChanged();
|
||||
stack.stackSize = 0;
|
||||
merged = true;
|
||||
} else {
|
||||
slot.putStack(stack.splitStack(maxStackSize));
|
||||
slot.onSlotChanged();
|
||||
merged = true;
|
||||
}
|
||||
}
|
||||
|
||||
slotIndex += reverse ? -1 : 1;
|
||||
}
|
||||
}
|
||||
|
||||
return merged;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when slotIndex is shift clicked on. Recommended implementation is to call mergeItemStack based on slotIndex
|
||||
*
|
||||
* @param stack The stack in the clicked slot
|
||||
* @return True if one or more items were moved from this slots into other slots
|
||||
*/
|
||||
public boolean doMergeStackAreas(int slotIndex, ItemStack stack) {
|
||||
return false;
|
||||
}
|
||||
|
||||
protected void bindPlayerInventory(InventoryPlayer inventoryPlayer) {
|
||||
bindPlayerInventory(inventoryPlayer, 8, 84);
|
||||
}
|
||||
|
||||
protected void bindPlayerInventory(InventoryPlayer inventoryPlayer, int x, int y) {
|
||||
for (int row = 0; row < 3; row++)
|
||||
for (int col = 0; col < 9; col++)
|
||||
addSlotToContainer(new Slot(inventoryPlayer, col + row * 9 + 9, x + col * 18, y + row * 18));
|
||||
for (int slot = 0; slot < 9; slot++)
|
||||
addSlotToContainer(new Slot(inventoryPlayer, slot, x + slot * 18, y + 58));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInteractWith(EntityPlayer var1) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public void sendContainerPacket(PacketCustom packet) {
|
||||
for (EntityPlayerMP player : playerCrafters)
|
||||
packet.sendToPlayer(player);
|
||||
}
|
||||
|
||||
/**
|
||||
* May be called from a client packet handler to handle additional info
|
||||
*/
|
||||
public void handleOutputPacket(PacketCustom packet) {
|
||||
}
|
||||
|
||||
/**
|
||||
* May be called from a server packet handler to handle additional info
|
||||
*/
|
||||
public void handleInputPacket(PacketCustom packet) {
|
||||
}
|
||||
|
||||
/**
|
||||
* May be called from a server packet handler to handle client input
|
||||
*/
|
||||
public void handleGuiChange(int ID, int value) {
|
||||
}
|
||||
|
||||
public void sendProgressBarUpdate(int barID, int value) {
|
||||
for (ICrafting crafting : (List<ICrafting>) crafters)
|
||||
crafting.sendProgressBarUpdate(this, barID, value);
|
||||
}
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
package codechicken.core.inventory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import codechicken.lib.packet.PacketCustom;
|
||||
|
||||
public abstract class ContainerSynchronised extends ContainerExtended
|
||||
{
|
||||
private ArrayList<IContainerSyncVar> syncVars = new ArrayList<IContainerSyncVar>();
|
||||
|
||||
public abstract PacketCustom createSyncPacket();
|
||||
|
||||
@Override
|
||||
public final void detectAndSendChanges()
|
||||
{
|
||||
super.detectAndSendChanges();
|
||||
|
||||
for(int i = 0; i < syncVars.size(); i++)
|
||||
{
|
||||
IContainerSyncVar var = syncVars.get(i);
|
||||
if(var.changed())
|
||||
{
|
||||
PacketCustom packet = createSyncPacket();
|
||||
packet.writeByte(i);
|
||||
var.writeChange(packet);
|
||||
sendContainerPacket(packet);
|
||||
var.reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendContainerAndContentsToPlayer(Container container, List<ItemStack> list, List<EntityPlayerMP> playerCrafters)
|
||||
{
|
||||
super.sendContainerAndContentsToPlayer(container, list, playerCrafters);
|
||||
for(int i = 0; i < syncVars.size(); i++)
|
||||
{
|
||||
IContainerSyncVar var = syncVars.get(i);
|
||||
PacketCustom packet = createSyncPacket();
|
||||
packet.writeByte(i);
|
||||
var.writeChange(packet);
|
||||
var.reset();
|
||||
for(EntityPlayerMP player : playerCrafters)
|
||||
packet.sendToPlayer(player);
|
||||
}
|
||||
}
|
||||
|
||||
public void addSyncVar(IContainerSyncVar var)
|
||||
{
|
||||
syncVars.add(var);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void handleOutputPacket(PacketCustom packet)
|
||||
{
|
||||
syncVars.get(packet.readUByte()).readChange(packet);
|
||||
}
|
||||
|
||||
public List<IContainerSyncVar> getSyncedVars()
|
||||
{
|
||||
return Collections.unmodifiableList(syncVars);
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
package codechicken.core.inventory;
|
||||
|
||||
import codechicken.lib.packet.PacketCustom;
|
||||
|
||||
public interface IContainerSyncVar
|
||||
{
|
||||
public boolean changed();
|
||||
|
||||
public void reset();
|
||||
|
||||
public void writeChange(PacketCustom packet);
|
||||
|
||||
public void readChange(PacketCustom packet);
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
package codechicken.core.inventory;
|
||||
|
||||
import codechicken.lib.packet.PacketCustom;
|
||||
|
||||
public abstract class IntegerSync implements IContainerSyncVar
|
||||
{
|
||||
public int c_value;
|
||||
|
||||
@Override
|
||||
public boolean changed()
|
||||
{
|
||||
return getValue() != c_value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset()
|
||||
{
|
||||
c_value = getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeChange(PacketCustom packet)
|
||||
{
|
||||
packet.writeInt(getValue());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readChange(PacketCustom packet)
|
||||
{
|
||||
c_value = packet.readInt();
|
||||
}
|
||||
|
||||
public abstract int getValue();
|
||||
}
|
||||
@@ -1,122 +0,0 @@
|
||||
package codechicken.core.inventory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class MappedInventoryAccess implements IInventory
|
||||
{
|
||||
public static interface InventoryAccessor
|
||||
{
|
||||
public boolean canAccessSlot(int slot);
|
||||
}
|
||||
|
||||
public static final InventoryAccessor fullAccess = new InventoryAccessor()
|
||||
{
|
||||
public boolean canAccessSlot(int slot) {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
private ArrayList<Integer> slotMap = new ArrayList<Integer>();
|
||||
private IInventory inv;
|
||||
private ArrayList<InventoryAccessor> accessors = new ArrayList<MappedInventoryAccess.InventoryAccessor>();
|
||||
|
||||
public MappedInventoryAccess(IInventory inv, InventoryAccessor... accessors) {
|
||||
this.inv = inv;
|
||||
|
||||
for (InventoryAccessor a : accessors)
|
||||
this.accessors.add(a);
|
||||
|
||||
reset();
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
slotMap.clear();
|
||||
nextslot:
|
||||
for (int i = 0; i < inv.getSizeInventory(); i++) {
|
||||
for (InventoryAccessor a : accessors)
|
||||
if (!a.canAccessSlot(i))
|
||||
continue nextslot;
|
||||
|
||||
slotMap.add(i);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSizeInventory() {
|
||||
return slotMap.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackInSlot(int slot) {
|
||||
return inv.getStackInSlot(slotMap.get(slot));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack decrStackSize(int slot, int amount) {
|
||||
return inv.decrStackSize(slotMap.get(slot), amount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackInSlotOnClosing(int slot) {
|
||||
return inv.getStackInSlotOnClosing(slotMap.get(slot));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInventorySlotContents(int slot, ItemStack stack) {
|
||||
inv.setInventorySlotContents(slotMap.get(slot), stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getInventoryName() {
|
||||
return inv.getInventoryName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getInventoryStackLimit() {
|
||||
return inv.getInventoryStackLimit();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markDirty() {
|
||||
inv.markDirty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUseableByPlayer(EntityPlayer player) {
|
||||
return inv.isUseableByPlayer(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void openInventory() {
|
||||
inv.openInventory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void closeInventory() {
|
||||
inv.closeInventory();
|
||||
}
|
||||
|
||||
public void addAccessor(InventoryAccessor accessor) {
|
||||
accessors.add(accessor);
|
||||
reset();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValidForSlot(int slot, ItemStack stack) {
|
||||
return inv.isItemValidForSlot(slotMap.get(slot), stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasCustomInventoryName() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public List<InventoryAccessor> accessors() {
|
||||
return accessors;
|
||||
}
|
||||
}
|
||||
@@ -1,73 +0,0 @@
|
||||
package codechicken.core.inventory;
|
||||
|
||||
import codechicken.lib.inventory.InventoryUtils;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class SlotDummy extends SlotHandleClicks
|
||||
{
|
||||
public final int stackLimit;
|
||||
public SlotDummy(IInventory inv, int slot, int x, int y)
|
||||
{
|
||||
this(inv, slot, x, y, 64);
|
||||
}
|
||||
|
||||
public SlotDummy(IInventory inv, int slot, int x, int y, int limit)
|
||||
{
|
||||
super(inv, slot, x, y);
|
||||
stackLimit = limit;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack slotClick(ContainerExtended container, EntityPlayer player, int button, int modifier)
|
||||
{
|
||||
ItemStack held = player.inventory.getItemStack();
|
||||
boolean shift = modifier == 1;
|
||||
slotClick(held, button, shift);
|
||||
return null;
|
||||
}
|
||||
|
||||
public void slotClick(ItemStack held, int button, boolean shift)
|
||||
{
|
||||
ItemStack tstack = getStack();
|
||||
if(held != null && (tstack == null || !InventoryUtils.canStack(held, tstack)))
|
||||
{
|
||||
int quantity = Math.min(held.stackSize, stackLimit);
|
||||
if(shift)
|
||||
quantity = Math.min(stackLimit, held.getMaxStackSize()*16);
|
||||
if(button == 1)
|
||||
quantity = 1;
|
||||
putStack(InventoryUtils.copyStack(held, quantity));
|
||||
}
|
||||
else if(tstack != null)
|
||||
{
|
||||
int inc;
|
||||
if(held != null)
|
||||
{
|
||||
inc = button == 1 ? -held.stackSize : held.stackSize;
|
||||
if(shift)
|
||||
inc *= 16;
|
||||
}
|
||||
else
|
||||
{
|
||||
inc = button == 1 ? -1 : 1;
|
||||
if(shift)
|
||||
inc *= 16;
|
||||
}
|
||||
int quantity = tstack.stackSize+inc;
|
||||
if(quantity <= 0)
|
||||
putStack(null);
|
||||
else
|
||||
putStack(InventoryUtils.copyStack(tstack, quantity));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putStack(ItemStack stack)
|
||||
{
|
||||
if(stack != null && stack.stackSize > stackLimit)
|
||||
stack = InventoryUtils.copyStack(stack, stackLimit);
|
||||
super.putStack(stack);
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
package codechicken.core.inventory;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class SlotDummyOutput extends SlotHandleClicks
|
||||
{
|
||||
public SlotDummyOutput(IInventory inv, int slot, int x, int y)
|
||||
{
|
||||
super(inv, slot, x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack slotClick(ContainerExtended container, EntityPlayer player, int button, int modifier)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
package codechicken.core.inventory;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public abstract class SlotHandleClicks extends Slot
|
||||
{
|
||||
public SlotHandleClicks(IInventory inv, int slot, int x, int y)
|
||||
{
|
||||
super(inv, slot, x, y);
|
||||
}
|
||||
|
||||
public abstract ItemStack slotClick(ContainerExtended container, EntityPlayer player, int button, int modifier);
|
||||
}
|
||||
Reference in new issue
Block a user