tcr/java/src/game/inventory/ContainerMachine.java

139 lines
4.3 KiB
Java
Raw Normal View History

2025-03-11 00:23:54 +01:00
package game.inventory;
import game.entity.npc.EntityNPC;
import game.item.ItemStack;
import game.tileentity.TileEntityMachine;
import game.tileentity.TileEntityMachine.Status;
public class ContainerMachine extends Container
{
private final IInventory machine;
private final TileEntityMachine tile;
private int temperature;
private Status status = Status.OFF;
private final int[] resources;
public ContainerMachine(InventoryPlayer playerInv, TileEntityMachine tile, IInventory machine, EntityNPC player)
{
this.machine = machine;
this.tile = tile;
this.resources = new int[tile.getNumResources()];
machine.openInventory(player);
int i = 71;
for (int j = 0; j < machine.getSizeInventory(); ++j)
{
final int index = j;
this.addSlotToContainer(new Slot(machine, j, 8 + j * 18, 40) {
public boolean isItemValid(ItemStack stack)
{
return ContainerMachine.this.tile.isItemValidForSlot(index, stack);
}
});
}
for (int l = 0; l < 3; ++l)
{
for (int k = 0; k < 9; ++k)
{
this.addSlotToContainer(new Slot(playerInv, k + l * 9 + 9, 8 + k * 18, l * 18 + i));
}
}
for (int i1 = 0; i1 < 9; ++i1)
{
this.addSlotToContainer(new Slot(playerInv, i1, 8 + i1 * 18, 58 + i));
}
}
public boolean canInteractWith(EntityNPC playerIn)
{
return this.machine.isUseableByPlayer(playerIn);
}
protected boolean canTransfer(Slot slot, ItemStack stack) {
return slot.isItemValid(stack);
}
public ItemStack transferStackInSlot(EntityNPC playerIn, int index)
{
ItemStack itemstack = null;
Slot slot = (Slot)this.inventorySlots.get(index);
if (slot != null && slot.getHasStack())
{
ItemStack itemstack1 = slot.getStack();
itemstack = itemstack1.copy();
if (index < this.machine.getSizeInventory())
{
if (!this.mergeItemStack(itemstack1, this.machine.getSizeInventory(), this.inventorySlots.size(), true))
{
return null;
}
}
else if (!this.mergeItemStack(itemstack1, 0, this.machine.getSizeInventory(), false))
{
return null;
}
if (itemstack1.stackSize == 0)
{
slot.putStack((ItemStack)null);
}
else
{
slot.onSlotChanged();
}
}
return itemstack;
}
public void onContainerClosed(EntityNPC playerIn)
{
super.onContainerClosed(playerIn);
this.machine.closeInventory(playerIn);
}
public void onCraftGuiOpened(ICrafting listener)
{
super.onCraftGuiOpened(listener);
// listener.sendAllWindowProperties(this, this.machine);
}
public void updateProgressBar(int id, int data)
{
if(id == this.resources.length)
this.tile.setTemperature(data);
else if(id == this.resources.length + 1)
this.tile.setStatus(Status.values()[data % Status.values().length]);
else
this.tile.getResource(id).setValue(data);
}
public void detectAndSendChanges()
{
super.detectAndSendChanges();
for (int i = 0; i < this.crafters.size(); ++i)
{
ICrafting icrafting = (ICrafting)this.crafters.get(i);
if(this.temperature != this.tile.getTemperature())
icrafting.sendProgressBarUpdate(this, this.resources.length, this.tile.getTemperature());
if(this.status != this.tile.getStatus())
icrafting.sendProgressBarUpdate(this, this.resources.length + 1, this.tile.getStatus().ordinal());
for(int z = 0; z < this.resources.length; z++) {
if(this.resources[z] != this.tile.getResource(z).getValue())
icrafting.sendProgressBarUpdate(this, z, this.tile.getResource(z).getValue());
}
}
this.temperature = this.tile.getTemperature();
this.status = this.tile.getStatus();
for(int z = 0; z < this.resources.length; z++) {
this.resources[z] = this.tile.getResource(z).getValue();
}
}
}