diff options
Diffstat (limited to 'src/main/java/gregtech/api/gui')
25 files changed, 1782 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/gui/GT_Container.java b/src/main/java/gregtech/api/gui/GT_Container.java new file mode 100644 index 0000000000..dc5e59d7d4 --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_Container.java @@ -0,0 +1,564 @@ +package gregtech.api.gui; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.GT_Log; +import gregtech.api.util.GT_Utility; +import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_FusionComputer; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ICrafting; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + * + * Main Container-Class, used for all my GUIs + */ +public class GT_Container extends Container { + public IGregTechTileEntity mTileEntity; + public InventoryPlayer mPlayerInventory; + + public GT_Container (InventoryPlayer aPlayerInventory, IGregTechTileEntity aTileEntityInventory) { + + mTileEntity = aTileEntityInventory; + mPlayerInventory = aPlayerInventory; + } + + /** + * To add the Slots to your GUI + */ + public void addSlots(InventoryPlayer aPlayerInventory) { + // + } + + /** + * Amount of regular Slots in the GUI (so, non-HoloSlots) + */ + public int getSlotCount() { + return 0; + } + + /** + * Amount of ALL Slots in the GUI including HoloSlots and ArmorSlots, but excluding regular Player Slots + */ + protected final int getAllSlotCount() { + if (inventorySlots != null) { + if (doesBindPlayerInventory()) return inventorySlots.size()-36; + return inventorySlots.size(); + } + return getSlotCount(); + } + + /** + * Start-Index of the usable Slots (the first non-HoloSlot) + */ + public int getSlotStartIndex() { + return 0; + } + + public int getShiftClickStartIndex() { + return getSlotStartIndex(); + } + + /** + * Amount of Slots in the GUI the player can Shift-Click into. Uses also getSlotStartIndex + */ + public int getShiftClickSlotCount() { + return 0; + } + + /** + * Is Player-Inventory visible? + */ + public boolean doesBindPlayerInventory() { + return true; + } + + /** + * Override this Function with something like "return mTileEntity.isUseableByPlayer(aPlayer);" + */ + @Override + public boolean canInteractWith(EntityPlayer aPlayer) { + return false; + } + + protected void bindPlayerInventory(InventoryPlayer aInventoryPlayer) { + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 9; j++) { + addSlotToContainer(new Slot(aInventoryPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + } + } + + for (int i = 0; i < 9; i++) { + addSlotToContainer(new Slot(aInventoryPlayer, i, 8 + i * 18, 142)); + } + } + + @Override + public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) { + mTileEntity.markDirty(); + + if (aSlotIndex >= 0) { + if (inventorySlots.get(aSlotIndex) == null || inventorySlots.get(aSlotIndex) instanceof GT_Slot_Holo) return null; + if (!(inventorySlots.get(aSlotIndex) instanceof GT_Slot_Armor)) if (aSlotIndex < getAllSlotCount()) if (aSlotIndex < getSlotStartIndex() || aSlotIndex >= getSlotStartIndex() + getSlotCount()) return null; + } + + try {return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);} catch (Throwable e) {e.printStackTrace(GT_Log.err);} + + ItemStack rStack = null; + InventoryPlayer aPlayerInventory = aPlayer.inventory; + Slot aSlot; + ItemStack tTempStack; + int tTempStackSize; + ItemStack aHoldStack; + + if ((aShifthold == 0 || aShifthold == 1) && (aMouseclick == 0 || aMouseclick == 1)) { + if (aSlotIndex == -999) { + if (aPlayerInventory.getItemStack() != null && aSlotIndex == -999) { + if (aMouseclick == 0) { + aPlayer.dropPlayerItemWithRandomChoice(aPlayerInventory.getItemStack(), true); + aPlayerInventory.setItemStack(null); + } + if (aMouseclick == 1) { + aPlayer.dropPlayerItemWithRandomChoice(aPlayerInventory.getItemStack().splitStack(1), true); + if (aPlayerInventory.getItemStack().stackSize == 0) { + aPlayerInventory.setItemStack(null); + } + } + } + } else if (aShifthold == 1) { + aSlot = (Slot)this.inventorySlots.get(aSlotIndex); + if (aSlot != null && aSlot.canTakeStack(aPlayer)) { + tTempStack = this.transferStackInSlot(aPlayer, aSlotIndex); + if (tTempStack != null) { + rStack = GT_Utility.copy(tTempStack); + if (aSlot.getStack() != null && aSlot.getStack().getItem() == tTempStack.getItem()) { + slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer); + } + } + } + } else { + if (aSlotIndex < 0) { + return null; + } + aSlot = (Slot)this.inventorySlots.get(aSlotIndex); + if (aSlot != null) { + tTempStack = aSlot.getStack(); + ItemStack var13 = aPlayerInventory.getItemStack(); + if (tTempStack != null) { + rStack = GT_Utility.copy(tTempStack); + } + if (tTempStack == null) { + if (var13 != null && aSlot.isItemValid(var13)) { + tTempStackSize = aMouseclick == 0 ? var13.stackSize : 1; + if (tTempStackSize > aSlot.getSlotStackLimit()) { + tTempStackSize = aSlot.getSlotStackLimit(); + } + aSlot.putStack(var13.splitStack(tTempStackSize)); + + if (var13.stackSize == 0) { + aPlayerInventory.setItemStack((ItemStack)null); + } + } + } else if (aSlot.canTakeStack(aPlayer)) { + if (var13 == null) { + tTempStackSize = aMouseclick == 0 ? tTempStack.stackSize : (tTempStack.stackSize + 1) / 2; + aHoldStack = aSlot.decrStackSize(tTempStackSize); + aPlayerInventory.setItemStack(aHoldStack); + if (tTempStack.stackSize == 0) { + aSlot.putStack((ItemStack)null); + } + aSlot.onPickupFromSlot(aPlayer, aPlayerInventory.getItemStack()); + } else if (aSlot.isItemValid(var13)) { + if (tTempStack.getItem() == var13.getItem() && tTempStack.getItemDamage() == var13.getItemDamage() && ItemStack.areItemStackTagsEqual(tTempStack, var13)) { + tTempStackSize = aMouseclick == 0 ? var13.stackSize : 1; + if (tTempStackSize > aSlot.getSlotStackLimit() - tTempStack.stackSize) { + tTempStackSize = aSlot.getSlotStackLimit() - tTempStack.stackSize; + } + if (tTempStackSize > var13.getMaxStackSize() - tTempStack.stackSize) { + tTempStackSize = var13.getMaxStackSize() - tTempStack.stackSize; + } + var13.splitStack(tTempStackSize); + if (var13.stackSize == 0) { + aPlayerInventory.setItemStack((ItemStack)null); + } + tTempStack.stackSize += tTempStackSize; + } else if (var13.stackSize <= aSlot.getSlotStackLimit()) { + aSlot.putStack(var13); + aPlayerInventory.setItemStack(tTempStack); + } + } else if (tTempStack.getItem() == var13.getItem() && var13.getMaxStackSize() > 1 && (!tTempStack.getHasSubtypes() || tTempStack.getItemDamage() == var13.getItemDamage()) && ItemStack.areItemStackTagsEqual(tTempStack, var13)) { + tTempStackSize = tTempStack.stackSize; + + if (tTempStackSize > 0 && tTempStackSize + var13.stackSize <= var13.getMaxStackSize()) { + var13.stackSize += tTempStackSize; + tTempStack = aSlot.decrStackSize(tTempStackSize); + + if (tTempStack.stackSize == 0) { + aSlot.putStack((ItemStack)null); + } + + aSlot.onPickupFromSlot(aPlayer, aPlayerInventory.getItemStack()); + } + } + } + aSlot.onSlotChanged(); + } + } + } else if (aShifthold == 2 && aMouseclick >= 0 && aMouseclick < 9) { + aSlot = (Slot)this.inventorySlots.get(aSlotIndex); + + if (aSlot.canTakeStack(aPlayer)) { + tTempStack = aPlayerInventory.getStackInSlot(aMouseclick); + boolean var9 = tTempStack == null || aSlot.inventory == aPlayerInventory && aSlot.isItemValid(tTempStack); + tTempStackSize = -1; + + if (!var9) { + tTempStackSize = aPlayerInventory.getFirstEmptyStack(); + var9 |= tTempStackSize > -1; + } + + if (aSlot.getHasStack() && var9) { + aHoldStack = aSlot.getStack(); + aPlayerInventory.setInventorySlotContents(aMouseclick, aHoldStack); + + if ((aSlot.inventory != aPlayerInventory || !aSlot.isItemValid(tTempStack)) && tTempStack != null) { + if (tTempStackSize > -1) { + aPlayerInventory.addItemStackToInventory(tTempStack); + aSlot.decrStackSize(aHoldStack.stackSize); + aSlot.putStack((ItemStack)null); + aSlot.onPickupFromSlot(aPlayer, aHoldStack); + } + } else { + aSlot.decrStackSize(aHoldStack.stackSize); + aSlot.putStack(tTempStack); + aSlot.onPickupFromSlot(aPlayer, aHoldStack); + } + } else if (!aSlot.getHasStack() && tTempStack != null && aSlot.isItemValid(tTempStack)) { + aPlayerInventory.setInventorySlotContents(aMouseclick, (ItemStack)null); + aSlot.putStack(tTempStack); + } + } + } else if (aShifthold == 3 && aPlayer.capabilities.isCreativeMode && aPlayerInventory.getItemStack() == null && aSlotIndex >= 0) { + aSlot = (Slot)this.inventorySlots.get(aSlotIndex); + if (aSlot != null && aSlot.getHasStack()) { + tTempStack = GT_Utility.copy(aSlot.getStack()); + tTempStack.stackSize = tTempStack.getMaxStackSize(); + aPlayerInventory.setItemStack(tTempStack); + } + } + return rStack; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer aPlayer, int aSlotIndex) { + ItemStack stack = null; + Slot slotObject = (Slot)inventorySlots.get(aSlotIndex); + + mTileEntity.markDirty(); + + //null checks and checks if the item can be stacked (maxStackSize > 1) + if (getSlotCount() > 0 && slotObject != null && slotObject.getHasStack() && !(slotObject instanceof GT_Slot_Holo)) { + ItemStack stackInSlot = slotObject.getStack(); + stack = GT_Utility.copy(stackInSlot); + + //TileEntity -> Player + if (aSlotIndex < getAllSlotCount()) { + if (doesBindPlayerInventory()) + if (!mergeItemStack(stackInSlot, getAllSlotCount(), getAllSlotCount()+36, true)) { + return null; + } + //Player -> TileEntity + } else if (!mergeItemStack(stackInSlot, getShiftClickStartIndex(), getShiftClickStartIndex()+getShiftClickSlotCount(), false)) { + return null; + } + + if (stackInSlot.stackSize == 0) { + slotObject.putStack(null); + } else { + slotObject.onSlotChanged(); + } + } + return stack; + } + + /** + * merges provided ItemStack with the first avaliable one in the container/player inventory + */ + @Override + protected boolean mergeItemStack(ItemStack aStack, int aStartIndex, int aSlotCount, boolean par4) { + boolean var5 = false; + int var6 = aStartIndex; + + mTileEntity.markDirty(); + + if (par4) { + var6 = aSlotCount - 1; + } + + Slot var7; + ItemStack var8; + + if (aStack.isStackable()) { + while (aStack.stackSize > 0 && (!par4 && var6 < aSlotCount || par4 && var6 >= aStartIndex)) { + var7 = (Slot)this.inventorySlots.get(var6); + var8 = var7.getStack(); + + if (!(var7 instanceof GT_Slot_Holo) && !(var7 instanceof GT_Slot_Output) && var8 != null && var8.getItem() == aStack.getItem() && (!aStack.getHasSubtypes() || aStack.getItemDamage() == var8.getItemDamage()) && ItemStack.areItemStackTagsEqual(aStack, var8)) { + int var9 = var8.stackSize + aStack.stackSize; + + if (var9 <= aStack.getMaxStackSize()) { + aStack.stackSize = 0; + var8.stackSize = var9; + var7.onSlotChanged(); + var5 = true; + } else if (var8.stackSize < aStack.getMaxStackSize()) { + aStack.stackSize -= aStack.getMaxStackSize() - var8.stackSize; + var8.stackSize = aStack.getMaxStackSize(); + var7.onSlotChanged(); + var5 = true; + } + } + + if (par4) { + --var6; + } else { + ++var6; + } + } + } + + if (aStack.stackSize > 0) + { + if (par4) + { + var6 = aSlotCount - 1; + } + else + { + var6 = aStartIndex; + } + + while (!par4 && var6 < aSlotCount || par4 && var6 >= aStartIndex) + { + var7 = (Slot)this.inventorySlots.get(var6); + var8 = var7.getStack(); + + if (var8 == null) + { + var7.putStack(GT_Utility.copy(aStack)); + var7.onSlotChanged(); + aStack.stackSize = 0; + var5 = true; + break; + } + + if (par4) + { + --var6; + } + else + { + ++var6; + } + } + } + + return var5; + } + + @Override + protected Slot addSlotToContainer(Slot par1Slot) { + try { + return super.addSlotToContainer(par1Slot); + } catch(Throwable e) { + e.printStackTrace(GT_Log.err); + } + return par1Slot; + } + + @Override + public void addCraftingToCrafters(ICrafting par1ICrafting) { + try { + super.addCraftingToCrafters(par1ICrafting); + } catch(Throwable e) { + e.printStackTrace(GT_Log.err); + } + } + + @Override + public List getInventory() { + try { + return super.getInventory(); + } catch(Throwable e) { + e.printStackTrace(GT_Log.err); + } + return null; + } + + @Override + public void removeCraftingFromCrafters(ICrafting par1ICrafting) { + try { + super.removeCraftingFromCrafters(par1ICrafting); + } catch(Throwable e) { + e.printStackTrace(GT_Log.err); + } + } + + @Override + public void detectAndSendChanges() { + try { + super.detectAndSendChanges(); + } catch(Throwable e) { + e.printStackTrace(GT_Log.err); + } + } + + @Override + public boolean enchantItem(EntityPlayer par1EntityPlayer, int par2) { + try { + return super.enchantItem(par1EntityPlayer, par2); + } catch(Throwable e) { + e.printStackTrace(GT_Log.err); + } + return false; + } + + @Override + public Slot getSlotFromInventory(IInventory par1IInventory, int par2) { + try { + return super.getSlotFromInventory(par1IInventory, par2); + } catch(Throwable e) { + e.printStackTrace(GT_Log.err); + } + return null; + } + + @Override + public Slot getSlot(int par1) { + try { + if (this.inventorySlots.size() > par1) return super.getSlot(par1); + } catch(Throwable e) { + e.printStackTrace(GT_Log.err); + } + return null; + } + + @Override + public boolean func_94530_a(ItemStack par1ItemStack, Slot par2Slot) { + try { + return super.func_94530_a(par1ItemStack, par2Slot); + } catch(Throwable e) { + e.printStackTrace(GT_Log.err); + } + return true; + } + + @Override + protected void retrySlotClick(int par1, int par2, boolean par3, EntityPlayer par4EntityPlayer) { + try { + super.retrySlotClick(par1, par2, par3, par4EntityPlayer); + } catch(Throwable e) { + e.printStackTrace(GT_Log.err); + } + } + + @Override + public void onContainerClosed(EntityPlayer par1EntityPlayer) { + try { + super.onContainerClosed(par1EntityPlayer); + } catch(Throwable e) { + e.printStackTrace(GT_Log.err); + } + } + + @Override + public void onCraftMatrixChanged(IInventory par1IInventory) { + try { + super.onCraftMatrixChanged(par1IInventory); + } catch(Throwable e) { + e.printStackTrace(GT_Log.err); + } + } + + @Override + public void putStackInSlot(int par1, ItemStack par2ItemStack) { + try { + super.putStackInSlot(par1, par2ItemStack); + } catch(Throwable e) { + e.printStackTrace(GT_Log.err); + } + } + + @Override + public void putStacksInSlots(ItemStack[] par1ArrayOfItemStack) { + try { + super.putStacksInSlots(par1ArrayOfItemStack); + } catch(Throwable e) { + e.printStackTrace(GT_Log.err); + } + } + + @Override + public void updateProgressBar(int par1, int par2) { + try { + super.updateProgressBar(par1, par2); + } catch(Throwable e) { + e.printStackTrace(GT_Log.err); + } + } + + @Override + public short getNextTransactionID(InventoryPlayer par1InventoryPlayer) { + try { + return super.getNextTransactionID(par1InventoryPlayer); + } catch(Throwable e) { + e.printStackTrace(GT_Log.err); + } + return 0; + } + + @Override + public boolean isPlayerNotUsingContainer(EntityPlayer par1EntityPlayer) { + try { + return super.isPlayerNotUsingContainer(par1EntityPlayer); + } catch(Throwable e) { + e.printStackTrace(GT_Log.err); + } + return true; + } + + @Override + public void setPlayerIsPresent(EntityPlayer par1EntityPlayer, boolean par2) { + try { + super.setPlayerIsPresent(par1EntityPlayer, par2); + } catch(Throwable e) { + e.printStackTrace(GT_Log.err); + } + } + + @Override + protected void func_94533_d() { + try { + super.func_94533_d(); + } catch(Throwable e) { + e.printStackTrace(GT_Log.err); + } + } + + @Override + public boolean canDragIntoSlot(Slot par1Slot) { + try { + return super.canDragIntoSlot(par1Slot); + } catch(Throwable e) { + e.printStackTrace(GT_Log.err); + } + return true; + } +}
\ No newline at end of file diff --git a/src/main/java/gregtech/api/gui/GT_ContainerMetaTile_Machine.java b/src/main/java/gregtech/api/gui/GT_ContainerMetaTile_Machine.java new file mode 100644 index 0000000000..d4fc27aaf9 --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_ContainerMetaTile_Machine.java @@ -0,0 +1,152 @@ +package gregtech.api.gui; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +import java.util.Iterator; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ICrafting; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + * + * The Container I use for all my MetaTileEntities + */ +public class GT_ContainerMetaTile_Machine extends GT_Container { + + public GT_ContainerMetaTile_Machine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) { + super(aInventoryPlayer, aTileEntity); + + mTileEntity = aTileEntity; + + if (mTileEntity != null && mTileEntity.getMetaTileEntity() != null) { + addSlots(aInventoryPlayer); + if (doesBindPlayerInventory()) bindPlayerInventory(aInventoryPlayer); + detectAndSendChanges(); + } else { + aInventoryPlayer.player.openContainer = aInventoryPlayer.player.inventoryContainer; + } + } + public GT_ContainerMetaTile_Machine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, boolean doesBindInventory){ + super(aInventoryPlayer, aTileEntity); + mTileEntity = aTileEntity; + + if (mTileEntity != null && mTileEntity.getMetaTileEntity() != null) { + addSlots(aInventoryPlayer); + if (doesBindPlayerInventory()&&doesBindInventory) bindPlayerInventory(aInventoryPlayer); + detectAndSendChanges(); + } else { + aInventoryPlayer.player.openContainer = aInventoryPlayer.player.inventoryContainer; + } + } + + + public int mActive = 0, mMaxProgressTime = 0, mProgressTime = 0, mEnergy = 0, mSteam = 0, mSteamStorage = 0, mStorage = 0, mOutput = 0, mInput = 0, mID = 0, mDisplayErrorCode = 0; + private int oActive = 0, oMaxProgressTime = 0, oProgressTime = 0, oEnergy = 0, oSteam = 0, oSteamStorage = 0, oStorage = 0, oOutput = 0, oInput = 0, oID = 0, oDisplayErrorCode = 0, mTimer = 0; + + @Override + public void detectAndSendChanges() { + super.detectAndSendChanges(); + if (mTileEntity.isClientSide() || mTileEntity.getMetaTileEntity() == null) return; + mStorage = (int)Math.min(Integer.MAX_VALUE, mTileEntity.getEUCapacity()); + mEnergy = (int)Math.min(Integer.MAX_VALUE, mTileEntity.getStoredEU()); + mSteamStorage = (int)Math.min(Integer.MAX_VALUE, mTileEntity.getSteamCapacity()); + mSteam = (int)Math.min(Integer.MAX_VALUE, mTileEntity.getStoredSteam()); + mOutput = (int)Math.min(Integer.MAX_VALUE, mTileEntity.getOutputVoltage()); + mInput = (int)Math.min(Integer.MAX_VALUE, mTileEntity.getInputVoltage()); + mDisplayErrorCode = mTileEntity.getErrorDisplayID(); + mProgressTime = mTileEntity.getProgress(); + mMaxProgressTime = mTileEntity.getMaxProgress(); + mActive = mTileEntity.isActive()?1:0; + mTimer++; + + Iterator var2 = this.crafters.iterator(); + while (var2.hasNext()) { + ICrafting var1 = (ICrafting)var2.next(); + if (mTimer % 500 == 10 || oEnergy != mEnergy) { + var1.sendProgressBarUpdate(this, 0, mEnergy & 65535); + var1.sendProgressBarUpdate(this, 1, mEnergy >>> 16); + } + if (mTimer % 500 == 10 || oStorage != mStorage) { + var1.sendProgressBarUpdate(this, 2, mStorage & 65535); + var1.sendProgressBarUpdate(this, 3, mStorage >>> 16); + } + if (mTimer % 500 == 10 || oOutput != mOutput) { + var1.sendProgressBarUpdate(this, 4, mOutput); + } + if (mTimer % 500 == 10 || oInput != mInput) { + var1.sendProgressBarUpdate(this, 5, mInput); + } + if (mTimer % 500 == 10 || oDisplayErrorCode != mDisplayErrorCode) { + var1.sendProgressBarUpdate(this, 6, mDisplayErrorCode); + } + if (mTimer % 500 == 10 || oProgressTime != mProgressTime) { + var1.sendProgressBarUpdate(this, 11, mProgressTime & 65535); + var1.sendProgressBarUpdate(this, 12, mProgressTime >>> 16); + } + if (mTimer % 500 == 10 || oMaxProgressTime != mMaxProgressTime) { + var1.sendProgressBarUpdate(this, 13, mMaxProgressTime & 65535); + var1.sendProgressBarUpdate(this, 14, mMaxProgressTime >>> 16); + } + if (mTimer % 500 == 10 || oID != mID) { + var1.sendProgressBarUpdate(this, 15, mID); + } + if (mTimer % 500 == 10 || oActive != mActive) { + var1.sendProgressBarUpdate(this, 16, mActive); + } + if (mTimer % 500 == 10 || oSteam != mSteam) { + var1.sendProgressBarUpdate(this, 17, mSteam & 65535); + var1.sendProgressBarUpdate(this, 18, mSteam >>> 16); + } + if (mTimer % 500 == 10 || oSteamStorage != mSteamStorage) { + var1.sendProgressBarUpdate(this, 19, mSteamStorage & 65535); + var1.sendProgressBarUpdate(this, 20, mSteamStorage >>> 16); + } + } + + oID = mID; + oSteam = mSteam; + oInput = mInput; + oActive = mActive; + oOutput = mOutput; + oEnergy = mEnergy; + oStorage = mStorage; + oSteamStorage = mSteamStorage; + oProgressTime = mProgressTime; + oMaxProgressTime = mMaxProgressTime; + oDisplayErrorCode = mDisplayErrorCode; + } + + @SideOnly(Side.CLIENT) + @Override + public void updateProgressBar(int par1, int par2) { + super.updateProgressBar(par1, par2); + switch (par1) { + case 0: mEnergy = mEnergy & -65536 | par2; break; + case 1: mEnergy = mEnergy & 65535 | par2 << 16; break; + case 2: mStorage = mStorage & -65536 | par2; break; + case 3: mStorage = mStorage & 65535 | par2 << 16; break; + case 4: mOutput = par2; break; + case 5: mInput = par2; break; + case 6: mDisplayErrorCode = par2; break; + case 11: mProgressTime = mProgressTime & -65536 | par2; break; + case 12: mProgressTime = mProgressTime & 65535 | par2 << 16; break; + case 13: mMaxProgressTime = mMaxProgressTime & -65536 | par2; break; + case 14: mMaxProgressTime = mMaxProgressTime & 65535 | par2 << 16; break; + case 15: mID = par2; break; + case 16: mActive = par2; break; + case 17: mSteam = mSteam & -65536 | par2; break; + case 18: mSteam = mSteam & 65535 | par2 << 16; break; + case 19: mSteamStorage = mSteamStorage & -65536 | par2; break; + case 20: mSteamStorage = mSteamStorage & 65535 | par2 << 16; break; + } + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return mTileEntity.isUseableByPlayer(player); + } +}
\ No newline at end of file diff --git a/src/main/java/gregtech/api/gui/GT_Container_1by1.java b/src/main/java/gregtech/api/gui/GT_Container_1by1.java new file mode 100644 index 0000000000..3607d81e38 --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_Container_1by1.java @@ -0,0 +1,27 @@ +package gregtech.api.gui; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; + +public class GT_Container_1by1 extends GT_ContainerMetaTile_Machine { + + public GT_Container_1by1(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) { + super(aInventoryPlayer, aTileEntity); + } + + @Override + public void addSlots(InventoryPlayer aInventoryPlayer) { + addSlotToContainer(new Slot(mTileEntity, 0, 80, 35)); + } + + @Override + public int getSlotCount() { + return 1; + } + + @Override + public int getShiftClickSlotCount() { + return 1; + } +} diff --git a/src/main/java/gregtech/api/gui/GT_Container_2by2.java b/src/main/java/gregtech/api/gui/GT_Container_2by2.java new file mode 100644 index 0000000000..2d4bdcd3ae --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_Container_2by2.java @@ -0,0 +1,30 @@ +package gregtech.api.gui; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; + +public class GT_Container_2by2 extends GT_ContainerMetaTile_Machine { + + public GT_Container_2by2(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) { + super(aInventoryPlayer, aTileEntity); + } + + @Override + public void addSlots(InventoryPlayer aInventoryPlayer) { + addSlotToContainer(new Slot(mTileEntity, 0, 71, 26)); + addSlotToContainer(new Slot(mTileEntity, 1, 89, 26)); + addSlotToContainer(new Slot(mTileEntity, 2, 71, 44)); + addSlotToContainer(new Slot(mTileEntity, 3, 89, 44)); + } + + @Override + public int getSlotCount() { + return 4; + } + + @Override + public int getShiftClickSlotCount() { + return 4; + } +} diff --git a/src/main/java/gregtech/api/gui/GT_Container_3by3.java b/src/main/java/gregtech/api/gui/GT_Container_3by3.java new file mode 100644 index 0000000000..9206116de1 --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_Container_3by3.java @@ -0,0 +1,35 @@ +package gregtech.api.gui; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; + +public class GT_Container_3by3 extends GT_ContainerMetaTile_Machine { + + public GT_Container_3by3(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) { + super(aInventoryPlayer, aTileEntity); + } + + @Override + public void addSlots(InventoryPlayer aInventoryPlayer) { + addSlotToContainer(new Slot(mTileEntity, 0, 62, 17)); + addSlotToContainer(new Slot(mTileEntity, 1, 80, 17)); + addSlotToContainer(new Slot(mTileEntity, 2, 98, 17)); + addSlotToContainer(new Slot(mTileEntity, 3, 62, 35)); + addSlotToContainer(new Slot(mTileEntity, 4, 80, 35)); + addSlotToContainer(new Slot(mTileEntity, 5, 98, 35)); + addSlotToContainer(new Slot(mTileEntity, 6, 62, 53)); + addSlotToContainer(new Slot(mTileEntity, 7, 80, 53)); + addSlotToContainer(new Slot(mTileEntity, 8, 98, 53)); + } + + @Override + public int getSlotCount() { + return 9; + } + + @Override + public int getShiftClickSlotCount() { + return 9; + } +} diff --git a/src/main/java/gregtech/api/gui/GT_Container_4by4.java b/src/main/java/gregtech/api/gui/GT_Container_4by4.java new file mode 100644 index 0000000000..eb6039cd1c --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_Container_4by4.java @@ -0,0 +1,42 @@ +package gregtech.api.gui; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; + +public class GT_Container_4by4 extends GT_ContainerMetaTile_Machine { + + public GT_Container_4by4(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) { + super(aInventoryPlayer, aTileEntity); + } + + @Override + public void addSlots(InventoryPlayer aInventoryPlayer) { + addSlotToContainer(new Slot(mTileEntity, 0, 53, 8)); + addSlotToContainer(new Slot(mTileEntity, 1, 71, 8)); + addSlotToContainer(new Slot(mTileEntity, 2, 89, 8)); + addSlotToContainer(new Slot(mTileEntity, 3, 107, 8)); + addSlotToContainer(new Slot(mTileEntity, 4, 53, 26)); + addSlotToContainer(new Slot(mTileEntity, 5, 71, 26)); + addSlotToContainer(new Slot(mTileEntity, 6, 89, 26)); + addSlotToContainer(new Slot(mTileEntity, 7, 107, 26)); + addSlotToContainer(new Slot(mTileEntity, 8, 53, 44)); + addSlotToContainer(new Slot(mTileEntity, 9, 71, 44)); + addSlotToContainer(new Slot(mTileEntity,10, 89, 44)); + addSlotToContainer(new Slot(mTileEntity,11, 107, 44)); + addSlotToContainer(new Slot(mTileEntity,12, 53, 62)); + addSlotToContainer(new Slot(mTileEntity,13, 71, 62)); + addSlotToContainer(new Slot(mTileEntity,14, 89, 62)); + addSlotToContainer(new Slot(mTileEntity,15, 107, 62)); + } + + @Override + public int getSlotCount() { + return 16; + } + + @Override + public int getShiftClickSlotCount() { + return 16; + } +} diff --git a/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java b/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java new file mode 100644 index 0000000000..410d4c9801 --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java @@ -0,0 +1,249 @@ +package gregtech.api.gui; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; + +import java.util.Iterator; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ICrafting; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + * + * The Container I use for all my Basic Machines + */ +public class GT_Container_BasicMachine extends GT_Container_BasicTank { + + public GT_Container_BasicMachine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) { + super(aInventoryPlayer, aTileEntity); + } + + @Override + public void addSlots(InventoryPlayer aInventoryPlayer) { + addSlotToContainer(new GT_Slot_Holo(mTileEntity, 0, 8, 63, false, true, 1)); + addSlotToContainer(new GT_Slot_Holo(mTileEntity, 0, 26, 63, false, true, 1)); + addSlotToContainer(new GT_Slot_Render(mTileEntity, 2, 107, 63)); + + int tStartIndex = ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).getInputSlot(); + + switch (((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mInputSlotCount) { + case 0: + break; + case 1: + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 25)); + break; + case 2: + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 25)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 25)); + break; + case 3: + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 25)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 25)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 25)); + break; + case 4: + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 16)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 16)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 34)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 34)); + break; + case 5: + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 16)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 16)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 16)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 34)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 34)); + break; + case 6: + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 16)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 16)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 16)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 34)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 34)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 34)); + break; + case 7: + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 7)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 7)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 7)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 25)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 25)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 25)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 43)); + break; + case 8: + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 7)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 7)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 7)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 25)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 25)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 25)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 43)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 43)); + break; + default: + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 7)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 7)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 7)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 25)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 25)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 25)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 17, 43)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 35, 43)); + addSlotToContainer(new Slot(mTileEntity, tStartIndex++, 53, 43)); + break; + } + + tStartIndex = ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).getOutputSlot(); + + switch (((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mOutputItems.length) { + case 0: + break; + case 1: + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 25)); + break; + case 2: + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 25)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 25)); + break; + case 3: + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 25)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 25)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 25)); + break; + case 4: + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 16)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 16)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 34)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 34)); + break; + case 5: + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 16)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 16)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 16)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 34)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 34)); + break; + case 6: + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 16)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 16)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 16)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 34)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 34)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 34)); + break; + case 7: + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 7)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 7)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 7)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 25)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 25)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 25)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 43)); + break; + case 8: + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 7)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 7)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 7)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 25)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 25)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 25)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 43)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 43)); + break; + default: + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 7)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 7)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 7)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 25)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 25)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 25)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 107, 43)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 125, 43)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, tStartIndex++, 143, 43)); + break; + } + + addSlotToContainer(new Slot(mTileEntity, 1, 80, 63)); + addSlotToContainer(new Slot(mTileEntity, 3, 125, 63)); + addSlotToContainer(new GT_Slot_Render(mTileEntity, tStartIndex++, 53, 63)); + } + + public boolean mFluidTransfer = false, mItemTransfer = false, mStuttering = false; + + @Override + public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) { + switch(aSlotIndex) { + case 0: + if (mTileEntity.getMetaTileEntity() == null) return null; + ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mFluidTransfer = !((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mFluidTransfer; + return null; + case 1: + if (mTileEntity.getMetaTileEntity() == null) return null; + ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mItemTransfer = !((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mItemTransfer; + return null; + default: + return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer); + } + } + + @Override + public void detectAndSendChanges() { + super.detectAndSendChanges(); + if (mTileEntity.isClientSide() || mTileEntity.getMetaTileEntity() == null) return; + + mFluidTransfer = ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mFluidTransfer; + mItemTransfer = ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mItemTransfer; + mStuttering = ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mStuttering; + + Iterator var2 = this.crafters.iterator(); + while (var2.hasNext()) { + ICrafting var1 = (ICrafting)var2.next(); + var1.sendProgressBarUpdate(this, 102, mFluidTransfer?1:0); + var1.sendProgressBarUpdate(this, 103, mItemTransfer?1:0); + var1.sendProgressBarUpdate(this, 104, mStuttering?1:0); + } + } + + @Override + public void addCraftingToCrafters(ICrafting par1ICrafting) { + super.addCraftingToCrafters(par1ICrafting); + } + + @Override + @SideOnly(Side.CLIENT) + public void updateProgressBar(int par1, int par2) { + super.updateProgressBar(par1, par2); + switch (par1) { + case 102: mFluidTransfer = (par2 != 0); break; + case 103: mItemTransfer = (par2 != 0); break; + case 104: mStuttering = (par2 != 0); break; + } + } + + @Override + public int getSlotStartIndex() { + return 3; + } + + @Override + public int getShiftClickStartIndex() { + return 3; + } + + @Override + public int getSlotCount() { + return getShiftClickSlotCount() + ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mOutputItems.length + 2; + } + + @Override + public int getShiftClickSlotCount() { + return ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).mInputSlotCount; + } +} diff --git a/src/main/java/gregtech/api/gui/GT_Container_BasicTank.java b/src/main/java/gregtech/api/gui/GT_Container_BasicTank.java new file mode 100644 index 0000000000..7fe15f7474 --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_Container_BasicTank.java @@ -0,0 +1,70 @@ +package gregtech.api.gui; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; +import gregtech.common.tileentities.storage.GT_MetaTileEntity_QuantumChest; + +import java.util.Iterator; + +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ICrafting; +import net.minecraft.inventory.Slot; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + * + * The Container I use for all my Basic Tanks + */ +public class GT_Container_BasicTank extends GT_ContainerMetaTile_Machine { + + public GT_Container_BasicTank(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) { + super(aInventoryPlayer, aTileEntity); + } + + @Override + public void addSlots(InventoryPlayer aInventoryPlayer) { + addSlotToContainer(new Slot(mTileEntity, 0, 80, 17)); + addSlotToContainer(new GT_Slot_Output(mTileEntity, 1, 80, 53)); + addSlotToContainer(new GT_Slot_Render(mTileEntity, 2, 59, 42)); + } + + public int mContent = 0; + + @Override + public void detectAndSendChanges() { + super.detectAndSendChanges(); + if (mTileEntity.isClientSide() || mTileEntity.getMetaTileEntity() == null) return; + if (((GT_MetaTileEntity_BasicTank)mTileEntity.getMetaTileEntity()).mFluid != null) + mContent = ((GT_MetaTileEntity_BasicTank)mTileEntity.getMetaTileEntity()).mFluid.amount; + else + mContent = 0; + Iterator var2 = this.crafters.iterator(); + while (var2.hasNext()) { + ICrafting var1 = (ICrafting)var2.next(); + var1.sendProgressBarUpdate(this, 100, mContent & 65535); + var1.sendProgressBarUpdate(this, 101, mContent >>> 16); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void updateProgressBar(int par1, int par2) { + super.updateProgressBar(par1, par2); + switch (par1) { + case 100: mContent = mContent & -65536 | par2; break; + case 101: mContent = mContent & 65535 | par2 << 16; break; + } + } + + @Override + public int getSlotCount() { + return 2; + } + + @Override + public int getShiftClickSlotCount() { + return 1; + } +} diff --git a/src/main/java/gregtech/api/gui/GT_Container_MaintenanceHatch.java b/src/main/java/gregtech/api/gui/GT_Container_MaintenanceHatch.java new file mode 100644 index 0000000000..3f9846bb99 --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_Container_MaintenanceHatch.java @@ -0,0 +1,30 @@ +package gregtech.api.gui; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; + +public class GT_Container_MaintenanceHatch extends GT_ContainerMetaTile_Machine { + + public GT_Container_MaintenanceHatch(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) { + super(aInventoryPlayer, aTileEntity); + } + + @Override + public void addSlots(InventoryPlayer aInventoryPlayer) { + addSlotToContainer(new GT_Slot_Holo(mTileEntity, 0, 80, 35, false, false, 1)); + } + + @Override + public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) { + if (aSlotIndex != 0) return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer); + ItemStack tStack = aPlayer.inventory.getItemStack(); + if (tStack != null) { + ((GT_MetaTileEntity_Hatch_Maintenance)mTileEntity.getMetaTileEntity()).onToolClick(tStack, aPlayer); + if (tStack.stackSize <= 0) aPlayer.inventory.setItemStack(null); + } + return null; + } +}
\ No newline at end of file diff --git a/src/main/java/gregtech/api/gui/GT_Container_MultiMachine.java b/src/main/java/gregtech/api/gui/GT_Container_MultiMachine.java new file mode 100644 index 0000000000..289b783e25 --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_Container_MultiMachine.java @@ -0,0 +1,35 @@ +package gregtech.api.gui; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + * + * The Container I use for all my Basic Machines + */ +public class GT_Container_MultiMachine extends GT_ContainerMetaTile_Machine { + public GT_Container_MultiMachine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) { + super(aInventoryPlayer, aTileEntity); + } + + public GT_Container_MultiMachine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, boolean bindInventory) { + super(aInventoryPlayer, aTileEntity, bindInventory); + } + + @Override + public void addSlots(InventoryPlayer aInventoryPlayer) { + addSlotToContainer(new Slot(mTileEntity, 1, 152, 5)); + } + + @Override + public int getSlotCount() { + return 1; + } + + @Override + public int getShiftClickSlotCount() { + return 1; + } +} diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer.java b/src/main/java/gregtech/api/gui/GT_GUIContainer.java new file mode 100644 index 0000000000..a92ca35666 --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_GUIContainer.java @@ -0,0 +1,67 @@ +package gregtech.api.gui; + +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.inventory.Container; +import net.minecraft.util.ResourceLocation; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + * + * Main GUI-Container-Class which basically contains the Code needed to prevent crashes from improperly Coded Items. + */ +public class GT_GUIContainer extends GuiContainer { + + public boolean mCrashed = false; + + public ResourceLocation mGUIbackground; + + public String mGUIbackgroundPath; + + public int getLeft() {return guiLeft;} + public int getTop() {return guiTop;} + + public GT_GUIContainer(Container aContainer, String aGUIbackground) { + super(aContainer); + mGUIbackground = new ResourceLocation(mGUIbackgroundPath = aGUIbackground); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) { + // + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { + mc.renderEngine.bindTexture(mGUIbackground); + } + + @Override + public void drawScreen(int par1, int par2, float par3) { + try { + super.drawScreen(par1, par2, par3); + } catch(Throwable e) { + try { + Tessellator.instance.draw(); + } catch(Throwable f) { + // + } + } + } + /* + @Override + protected void drawSlotInventory(Slot par1Slot) { + try { + super.drawSlotInventory(par1Slot); + } catch(Throwable e) { + try { + Tessellator.instance.draw(); + } catch(Throwable f) {} + if (!mCrashed) { + GT_Log.out.println("Clientside Slot drawing Crash prevented. Seems one Itemstack causes Problems with negative Damage Values or the Wildcard Damage Value. This is absolutely NOT a Bug of the GregTech-Addon, so don't even think about reporting it to me, it's a Bug of the Mod, which belongs to the almost-crash-causing Item, so bug that Mods Author and not me! Did you hear it? NOT ME!!!"); + e.printStackTrace(); + mCrashed = true; + } + } + }*/ +} diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainerMetaTile_Machine.java b/src/main/java/gregtech/api/gui/GT_GUIContainerMetaTile_Machine.java new file mode 100644 index 0000000000..0bfc774bfb --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_GUIContainerMetaTile_Machine.java @@ -0,0 +1,39 @@ +package gregtech.api.gui; + +import gregtech.api.GregTech_API; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemDye; + +import org.lwjgl.opengl.GL11; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + * + * The GUI-Container I use for all my MetaTileEntities + */ +public class GT_GUIContainerMetaTile_Machine extends GT_GUIContainer { + + public final GT_ContainerMetaTile_Machine mContainer; + + public GT_GUIContainerMetaTile_Machine(GT_ContainerMetaTile_Machine aContainer, String aGUIbackground) { + super(aContainer, aGUIbackground); + mContainer = aContainer; + } + + public GT_GUIContainerMetaTile_Machine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aGUIbackground) { + this(new GT_ContainerMetaTile_Machine(aInventoryPlayer, aTileEntity), aGUIbackground); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { + super.drawGuiContainerBackgroundLayer(par1, par2, par3); + if (GregTech_API.sColoredGUI && mContainer != null && mContainer.mTileEntity != null) { + int tColor = mContainer.mTileEntity.getColorization() & 15; + if (tColor >= 0 && tColor < ItemDye.field_150922_c.length) { + tColor = ItemDye.field_150922_c[tColor]; + GL11.glColor4f(((tColor >> 16) & 255) / 255.0F, ((tColor >> 8) & 255) / 255.0F, (tColor & 255) / 255.0F, 1.0F); + } else GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } else GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } +}
\ No newline at end of file diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer_1by1.java b/src/main/java/gregtech/api/gui/GT_GUIContainer_1by1.java new file mode 100644 index 0000000000..2d4176ee84 --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_GUIContainer_1by1.java @@ -0,0 +1,28 @@ +package gregtech.api.gui; + +import static gregtech.api.enums.GT_Values.RES_PATH_GUI; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.entity.player.InventoryPlayer; + +public class GT_GUIContainer_1by1 extends GT_GUIContainerMetaTile_Machine { + + private final String mName; + + public GT_GUIContainer_1by1(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName) { + super(new GT_Container_1by1(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "1by1.png"); + mName = aName; + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) { + fontRendererObj.drawString(mName, 8, 4, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { + super.drawGuiContainerBackgroundLayer(par1, par2, par3); + int x = (width - xSize) / 2; + int y = (height - ySize) / 2; + drawTexturedModalRect(x, y, 0, 0, xSize, ySize); + } +} diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer_2by2.java b/src/main/java/gregtech/api/gui/GT_GUIContainer_2by2.java new file mode 100644 index 0000000000..3ad77d8a2b --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_GUIContainer_2by2.java @@ -0,0 +1,28 @@ +package gregtech.api.gui; + +import static gregtech.api.enums.GT_Values.RES_PATH_GUI; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.entity.player.InventoryPlayer; + +public class GT_GUIContainer_2by2 extends GT_GUIContainerMetaTile_Machine { + + private final String mName; + + public GT_GUIContainer_2by2(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName) { + super(new GT_Container_2by2(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "2by2.png"); + mName = aName; + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) { + fontRendererObj.drawString(mName, 8, 4, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { + super.drawGuiContainerBackgroundLayer(par1, par2, par3); + int x = (width - xSize) / 2; + int y = (height - ySize) / 2; + drawTexturedModalRect(x, y, 0, 0, xSize, ySize); + } +} diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer_3by3.java b/src/main/java/gregtech/api/gui/GT_GUIContainer_3by3.java new file mode 100644 index 0000000000..4eb892d4ba --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_GUIContainer_3by3.java @@ -0,0 +1,28 @@ +package gregtech.api.gui; + +import static gregtech.api.enums.GT_Values.RES_PATH_GUI; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.entity.player.InventoryPlayer; + +public class GT_GUIContainer_3by3 extends GT_GUIContainerMetaTile_Machine { + + private final String mName; + + public GT_GUIContainer_3by3(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName) { + super(new GT_Container_3by3(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "3by3.png"); + mName = aName; + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) { + fontRendererObj.drawString(mName, 8, 4, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { + super.drawGuiContainerBackgroundLayer(par1, par2, par3); + int x = (width - xSize) / 2; + int y = (height - ySize) / 2; + drawTexturedModalRect(x, y, 0, 0, xSize, ySize); + } +} diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer_4by4.java b/src/main/java/gregtech/api/gui/GT_GUIContainer_4by4.java new file mode 100644 index 0000000000..e01e5f81d9 --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_GUIContainer_4by4.java @@ -0,0 +1,28 @@ +package gregtech.api.gui; + +import static gregtech.api.enums.GT_Values.RES_PATH_GUI; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.entity.player.InventoryPlayer; + +public class GT_GUIContainer_4by4 extends GT_GUIContainerMetaTile_Machine { + + private final String mName; + + public GT_GUIContainer_4by4(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName) { + super(new GT_Container_4by4(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "4by4.png"); + mName = aName; + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) { + fontRendererObj.drawString(mName, 8, 4, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { + super.drawGuiContainerBackgroundLayer(par1, par2, par3); + int x = (width - xSize) / 2; + int y = (height - ySize) / 2; + drawTexturedModalRect(x, y, 0, 0, xSize, ySize); + } +} diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer_BasicMachine.java b/src/main/java/gregtech/api/gui/GT_GUIContainer_BasicMachine.java new file mode 100644 index 0000000000..7898f3b635 --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_GUIContainer_BasicMachine.java @@ -0,0 +1,86 @@ +package gregtech.api.gui; + +import static gregtech.api.enums.GT_Values.RES_PATH_GUI; + +import java.util.ArrayList; +import java.util.List; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.entity.player.InventoryPlayer; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + * + * The GUI-Container I use for all my Basic Machines + * + * As the NEI-RecipeTransferRect Handler can't handle one GUI-Class for all GUIs I needed to produce some dummy-classes which extend this class + */ +public class GT_GUIContainer_BasicMachine extends GT_GUIContainerMetaTile_Machine { + + public final String mName, mNEI; + public final byte mProgressBarDirection, mProgressBarAmount; + + public GT_GUIContainer_BasicMachine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName, String aTextureFile, String aNEI) { + this(aInventoryPlayer, aTileEntity, aName, aTextureFile, aNEI, (byte)0, (byte)1); + } + + public GT_GUIContainer_BasicMachine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName, String aTextureFile, String aNEI, byte aProgressBarDirection, byte aProgressBarAmount) { + super(new GT_Container_BasicMachine(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "basicmachines/" + aTextureFile); + mProgressBarDirection = aProgressBarDirection; + mProgressBarAmount = (byte)Math.max(1, aProgressBarAmount); + mName = aName; + mNEI = aNEI; + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) { + fontRendererObj.drawString(mName, 8, 4, 4210752); + drawTooltip(par1, par2); + } + + private void drawTooltip(int x2, int y2){ + int xStart = (width - xSize) / 2; + int yStart = (height - ySize) / 2; + int x = x2 - xStart; + int y = y2 - yStart +5; + List<String> list = new ArrayList<String>(); + if (y >= 67 && y <= 84) { + if (x >= 7 && x <= 24){ + list.add("Fluid Auto-Output"); + } + if (x >= 25 && x <= 42){ + list.add("Item Auto-Output"); + } + } + if (!list.isEmpty()) + drawHoveringText(list, x, y, fontRendererObj); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { + super.drawGuiContainerBackgroundLayer(par1, par2, par3); + int x = (width - xSize) / 2; + int y = (height - ySize) / 2; + drawTexturedModalRect(x, y, 0, 0, xSize, ySize); + if (mContainer != null) { + if (((GT_Container_BasicMachine)mContainer).mFluidTransfer) drawTexturedModalRect(x + 7, y + 62, 176, 18, 18, 18); + if (((GT_Container_BasicMachine)mContainer).mItemTransfer) drawTexturedModalRect(x + 25, y + 62, 176, 36, 18, 18); + if (((GT_Container_BasicMachine)mContainer).mStuttering) drawTexturedModalRect(x + 79, y + 44, 176, 54, 18, 18); + + if (mContainer.mMaxProgressTime > 0) { + int tSize = (mProgressBarDirection < 2 ? 20 : 18), tProgress = Math.max(1, Math.min(tSize * mProgressBarAmount, (mContainer.mProgressTime>0?1:0) + (mContainer.mProgressTime * tSize * mProgressBarAmount) / mContainer.mMaxProgressTime)) % (tSize+1); + + switch (mProgressBarDirection) { // yes, my OCD was mad at me before I did the Tabs. + case 0: drawTexturedModalRect(x + 78 , y + 24 , 176 , 0 , tProgress , 18 ); break; + case 1: drawTexturedModalRect(x + 78 + 20 - tProgress , y + 24 , 176 + 20 - tProgress , 0 , tProgress , 18 ); break; + case 2: drawTexturedModalRect(x + 78 , y + 24 , 176 , 0 , 20 , tProgress ); break; + case 3: drawTexturedModalRect(x + 78 , y + 24 + 18 - tProgress , 176 , 18 - tProgress , 20 , tProgress ); break; + case 4: tProgress = 20 - tProgress; drawTexturedModalRect(x + 78 , y + 24 , 176 , 0 , tProgress , 18 ); break; + case 5: tProgress = 20 - tProgress; drawTexturedModalRect(x + 78 + 20 - tProgress , y + 24 , 176 + 20 - tProgress , 0 , tProgress , 18 ); break; + case 6: tProgress = 18 - tProgress; drawTexturedModalRect(x + 78 , y + 24 , 176 , 0 , 20 , tProgress ); break; + case 7: tProgress = 18 - tProgress; drawTexturedModalRect(x + 78 , y + 24 + 18 - tProgress , 176 , 18 - tProgress , 20 , tProgress ); break; + } + } + } + } +}
\ No newline at end of file diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer_BasicTank.java b/src/main/java/gregtech/api/gui/GT_GUIContainer_BasicTank.java new file mode 100644 index 0000000000..ae35067e42 --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_GUIContainer_BasicTank.java @@ -0,0 +1,35 @@ +package gregtech.api.gui; + +import static gregtech.api.enums.GT_Values.RES_PATH_GUI; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.GT_Utility; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.StatCollector; + +public class GT_GUIContainer_BasicTank extends GT_GUIContainerMetaTile_Machine { + + private final String mName; + + public GT_GUIContainer_BasicTank(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName) { + super(new GT_Container_BasicTank(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "BasicTank.png"); + mName = aName; + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) { + fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 8, ySize - 96 + 2, 4210752); + fontRendererObj.drawString(mName, 8, 6, 4210752); + if (mContainer != null) { + fontRendererObj.drawString("Liquid Amount", 10, 20, 16448255); + fontRendererObj.drawString(GT_Utility.parseNumberToString(((GT_Container_BasicTank)mContainer).mContent), 10, 30, 16448255); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { + super.drawGuiContainerBackgroundLayer(par1, par2, par3); + int x = (width - xSize) / 2; + int y = (height - ySize) / 2; + drawTexturedModalRect(x, y, 0, 0, xSize, ySize); + } +} diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer_MaintenanceHatch.java b/src/main/java/gregtech/api/gui/GT_GUIContainer_MaintenanceHatch.java new file mode 100644 index 0000000000..cc663ad258 --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_GUIContainer_MaintenanceHatch.java @@ -0,0 +1,26 @@ +package gregtech.api.gui; + +import static gregtech.api.enums.GT_Values.RES_PATH_GUI; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.entity.player.InventoryPlayer; + +public class GT_GUIContainer_MaintenanceHatch extends GT_GUIContainerMetaTile_Machine { + + public GT_GUIContainer_MaintenanceHatch(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) { + super(new GT_Container_MaintenanceHatch(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "Maintenance.png"); + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) { + fontRendererObj.drawString("Maintenance Hatch", 8, 4, 4210752); + fontRendererObj.drawString("Click with Tool to repair.", 8, 12, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { + super.drawGuiContainerBackgroundLayer(par1, par2, par3); + int x = (width - xSize) / 2; + int y = (height - ySize) / 2; + drawTexturedModalRect(x, y, 0, 0, xSize, ySize); + } +} diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer_MultiMachine.java b/src/main/java/gregtech/api/gui/GT_GUIContainer_MultiMachine.java new file mode 100644 index 0000000000..b71b328293 --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_GUIContainer_MultiMachine.java @@ -0,0 +1,55 @@ +package gregtech.api.gui; + +import static gregtech.api.enums.GT_Values.RES_PATH_GUI; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.entity.player.InventoryPlayer; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + * + * The GUI-Container I use for all my Basic Machines + * + * As the NEI-RecipeTransferRect Handler can't handle one GUI-Class for all GUIs I needed to produce some dummy-classes which extend this class + */ +public class GT_GUIContainer_MultiMachine extends GT_GUIContainerMetaTile_Machine { + + String mName = ""; + + public GT_GUIContainer_MultiMachine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName, String aTextureFile) { + super(new GT_Container_MultiMachine(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "multimachines/" + (aTextureFile==null?"MultiblockDisplay":aTextureFile)); + mName = aName; + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) { + fontRendererObj.drawString(mName, 10, 8, 16448255); + + if (mContainer != null) { + if ((((GT_Container_MultiMachine)mContainer).mDisplayErrorCode & 1) != 0) fontRendererObj.drawString("Pipe is loose.", 10, 16, 16448255); + if ((((GT_Container_MultiMachine)mContainer).mDisplayErrorCode & 2) != 0) fontRendererObj.drawString("Screws are missing.", 10, 24, 16448255); + if ((((GT_Container_MultiMachine)mContainer).mDisplayErrorCode & 4) != 0) fontRendererObj.drawString("Something is stuck.", 10, 32, 16448255); + if ((((GT_Container_MultiMachine)mContainer).mDisplayErrorCode & 8) != 0) fontRendererObj.drawString("Platings are dented.", 10, 40, 16448255); + if ((((GT_Container_MultiMachine)mContainer).mDisplayErrorCode & 16) != 0) fontRendererObj.drawString("Circuitry burned out.", 10, 48, 16448255); + if ((((GT_Container_MultiMachine)mContainer).mDisplayErrorCode & 32) != 0) fontRendererObj.drawString("That doesn't belong there.", 10, 56, 16448255); + if ((((GT_Container_MultiMachine)mContainer).mDisplayErrorCode & 64) != 0) fontRendererObj.drawString("Incomplete Structure.", 10, 64, 16448255); + + if (((GT_Container_MultiMachine)mContainer).mDisplayErrorCode == 0) { + if (((GT_Container_MultiMachine)mContainer).mActive == 0) { + fontRendererObj.drawString("Hit with Soft Hammer", 10, 16, 16448255); + fontRendererObj.drawString("to (re-)start the Machine", 10, 24, 16448255); + fontRendererObj.drawString("if it doesn't start.", 10, 32, 16448255); + } else { + fontRendererObj.drawString("Running perfectly.", 10, 16, 16448255); + } + } + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { + super.drawGuiContainerBackgroundLayer(par1, par2, par3); + int x = (width - xSize) / 2; + int y = (height - ySize) / 2; + drawTexturedModalRect(x, y, 0, 0, xSize, ySize); + } +} diff --git a/src/main/java/gregtech/api/gui/GT_Slot_Armor.java b/src/main/java/gregtech/api/gui/GT_Slot_Armor.java new file mode 100644 index 0000000000..fdd89bca38 --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_Slot_Armor.java @@ -0,0 +1,27 @@ +package gregtech.api.gui; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class GT_Slot_Armor extends Slot { + final int mArmorType; + final EntityPlayer mPlayer; + + public GT_Slot_Armor(IInventory par2IInventory, int par3, int par4, int par5, int par6, EntityPlayer aPlayer) { + super(par2IInventory, par3, par4, par5); + mArmorType = par6; + mPlayer = aPlayer; + } + + @Override + public int getSlotStackLimit() { + return 1; + } + + @Override + public boolean isItemValid(ItemStack aStack) { + return aStack != null && aStack.getItem() != null && aStack.getItem().isValidArmor(aStack, mArmorType, mPlayer); + } +} diff --git a/src/main/java/gregtech/api/gui/GT_Slot_DataOrb.java b/src/main/java/gregtech/api/gui/GT_Slot_DataOrb.java new file mode 100644 index 0000000000..bd247148f3 --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_Slot_DataOrb.java @@ -0,0 +1,17 @@ +package gregtech.api.gui; + +import gregtech.api.enums.ItemList; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class GT_Slot_DataOrb extends Slot { + public GT_Slot_DataOrb(IInventory par1iInventory, int par2, int par3, int par4) { + super(par1iInventory, par2, par3, par4); + } + + @Override + public boolean isItemValid(ItemStack aStack) { + return ItemList.Tool_DataOrb.isStackEqual(aStack, false, true); + } +}
\ No newline at end of file diff --git a/src/main/java/gregtech/api/gui/GT_Slot_Holo.java b/src/main/java/gregtech/api/gui/GT_Slot_Holo.java new file mode 100644 index 0000000000..87bb9c51dc --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_Slot_Holo.java @@ -0,0 +1,46 @@ +package gregtech.api.gui; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class GT_Slot_Holo extends Slot { + public final int mSlotIndex; + public boolean mCanInsertItem, mCanStackItem; + public int mMaxStacksize = 127; + + public GT_Slot_Holo(IInventory par1iInventory, int par2, int par3, int par4, boolean aCanInsertItem, boolean aCanStackItem, int aMaxStacksize) { + super(par1iInventory, par2, par3, par4); + mCanInsertItem = aCanInsertItem; + mCanStackItem = aCanStackItem; + mMaxStacksize = aMaxStacksize; + mSlotIndex = par2; + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) { + return mCanInsertItem; + } + + @Override + public int getSlotStackLimit() { + return mMaxStacksize; + } + + @Override + public boolean getHasStack() { + return false; + } + + @Override + public ItemStack decrStackSize(int par1) { + if (!mCanStackItem) return null; + return super.decrStackSize(par1); + } + + @Override + public boolean canTakeStack(EntityPlayer par1EntityPlayer) { + return false; + } +} diff --git a/src/main/java/gregtech/api/gui/GT_Slot_Output.java b/src/main/java/gregtech/api/gui/GT_Slot_Output.java new file mode 100644 index 0000000000..3c91380d16 --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_Slot_Output.java @@ -0,0 +1,16 @@ +package gregtech.api.gui; + +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class GT_Slot_Output extends Slot { + public GT_Slot_Output(IInventory par1iInventory, int par2, int par3, int par4) { + super(par1iInventory, par2, par3, par4); + } + + @Override + public boolean isItemValid(ItemStack par1ItemStack) { + return false; + } +} diff --git a/src/main/java/gregtech/api/gui/GT_Slot_Render.java b/src/main/java/gregtech/api/gui/GT_Slot_Render.java new file mode 100644 index 0000000000..15f4c339ae --- /dev/null +++ b/src/main/java/gregtech/api/gui/GT_Slot_Render.java @@ -0,0 +1,22 @@ +package gregtech.api.gui; + +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; + +public class GT_Slot_Render extends GT_Slot_Holo { + public GT_Slot_Render(IInventory par1iInventory, int par2, int par3, int par4) { + super(par1iInventory, par2, par3, par4, false, false, 0); + } + + /** + * NEI has a nice and "useful" Delete-All Function, which would delete the Content of this Slot. This is here to prevent that. + */ + @Override + public void putStack(ItemStack aStack) { + if (inventory instanceof TileEntity && ((TileEntity)inventory).getWorldObj().isRemote) { + inventory.setInventorySlotContents(getSlotIndex(), aStack); + } + onSlotChanged(); + } +}
\ No newline at end of file |