From 25f7b032b7135312f409e8154158132fa62ce07a Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 21 Jun 2016 20:38:05 +0200 Subject: [PATCH] New crafting settings gui --- CHANGELOG.md | 3 + .../container/ContainerCraftingSettings.java | 107 ++++++++++++++++++ .../gui/GuiCraftingSettings.java | 59 ++++++++-- src/main/java/refinedstorage/gui/GuiGrid.java | 2 +- .../textures/gui/crafting_settings.png | Bin 1725 -> 1768 bytes 5 files changed, 160 insertions(+), 11 deletions(-) create mode 100755 src/main/java/refinedstorage/container/ContainerCraftingSettings.java diff --git a/CHANGELOG.md b/CHANGELOG.md index fcabbc699..a531aba33 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,9 @@ When updating to this version, you'll have to break and replace your controller. - Fixed wrong item getting crafted - Rewrote storage networks: they are now saved to disk, so big systems won't lag when rejoining a chunk +**Features** +- New crafting settings gui + ### 0.7.16 **Features** - Added support for Storage Drawers void upgrade diff --git a/src/main/java/refinedstorage/container/ContainerCraftingSettings.java b/src/main/java/refinedstorage/container/ContainerCraftingSettings.java new file mode 100755 index 000000000..f2296d648 --- /dev/null +++ b/src/main/java/refinedstorage/container/ContainerCraftingSettings.java @@ -0,0 +1,107 @@ +package refinedstorage.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.items.ItemHandlerHelper; +import refinedstorage.container.slot.SlotDisabled; + +import javax.annotation.Nullable; + +public class ContainerCraftingSettings extends ContainerBase { + public ContainerCraftingSettings(EntityPlayer player, final ItemStack stack) { + super(player); + + final ItemStack slot = ItemHandlerHelper.copyStackWithSize(stack, 1); + + addSlotToContainer(new SlotDisabled(new IInventory() { + @Override + public int getSizeInventory() { + return 1; + } + + @Nullable + @Override + public ItemStack getStackInSlot(int index) { + return slot; + } + + @Nullable + @Override + public ItemStack decrStackSize(int index, int count) { + return null; + } + + @Nullable + @Override + public ItemStack removeStackFromSlot(int index) { + return null; + } + + @Override + public void setInventorySlotContents(int index, @Nullable ItemStack stack) { + } + + @Override + public int getInventoryStackLimit() { + return 0; + } + + @Override + public void markDirty() { + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + return false; + } + + @Override + public void openInventory(EntityPlayer player) { + } + + @Override + public void closeInventory(EntityPlayer player) { + } + + @Override + public boolean isItemValidForSlot(int index, ItemStack stack) { + return false; + } + + @Override + public int getField(int id) { + return 0; + } + + @Override + public void setField(int id, int value) { + } + + @Override + public int getFieldCount() { + return 0; + } + + @Override + public void clear() { + } + + @Override + public String getName() { + return null; + } + + @Override + public boolean hasCustomName() { + return false; + } + + @Override + public ITextComponent getDisplayName() { + return null; + } + }, 0, 89, 48)); + } +} diff --git a/src/main/java/refinedstorage/gui/GuiCraftingSettings.java b/src/main/java/refinedstorage/gui/GuiCraftingSettings.java index 7277a76c8..190471b7e 100755 --- a/src/main/java/refinedstorage/gui/GuiCraftingSettings.java +++ b/src/main/java/refinedstorage/gui/GuiCraftingSettings.java @@ -3,40 +3,59 @@ package refinedstorage.gui; import com.google.common.primitives.Ints; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiTextField; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.client.FMLClientHandler; import org.lwjgl.input.Keyboard; import refinedstorage.RefinedStorage; -import refinedstorage.container.ContainerDummy; +import refinedstorage.container.ContainerCraftingSettings; import refinedstorage.network.MessageGridCraftingStart; import refinedstorage.tile.controller.StorageHandler; import java.io.IOException; public class GuiCraftingSettings extends GuiBase { + public static final int DEFAULT_AMOUNT = 1; + private GuiTextField amountField; - private GuiGrid gridGui; + private GuiGrid gui; private ItemStack stack; private GuiButton startButton; + private GuiButton cancelButton; + private GuiButton[] incrementButtons = new GuiButton[6]; - public GuiCraftingSettings(GuiGrid gridGui, ItemStack stack) { - super(new ContainerDummy(), 143, 61); + public GuiCraftingSettings(GuiGrid gui, EntityPlayer player, ItemStack stack) { + super(new ContainerCraftingSettings(player, stack), 170, 99); - this.gridGui = gridGui; + this.gui = gui; this.stack = stack; } @Override public void init(int x, int y) { - startButton = addButton(x + 48, y + 35, 50, 20, t("misc.refinedstorage:start")); + startButton = addButton(x + 114, y + 33, 50, 20, t("misc.refinedstorage:start")); + cancelButton = addButton(x + 114, y + 57, 50, 20, t("gui.cancel")); - amountField = new GuiTextField(0, fontRendererObj, x + 39 + 1, y + 21 + 1, 69 - 6, fontRendererObj.FONT_HEIGHT); + amountField = new GuiTextField(0, fontRendererObj, x + 7 + 1, y + 50 + 1, 69 - 6, fontRendererObj.FONT_HEIGHT); amountField.setEnableBackgroundDrawing(false); amountField.setVisible(true); - amountField.setText("1"); + amountField.setText(String.valueOf(DEFAULT_AMOUNT)); amountField.setTextColor(16777215); amountField.setCanLoseFocus(false); amountField.setFocused(true); + + int[] increments = new int[]{ + 1, 10, 64, + -1, -10, -64 + }; + + for (int i = 0; i < 3; ++i) { + incrementButtons[i] = addButton(x + 6 + (i * (30 + 3)), y + 20, 30, 20, "+" + increments[i]); + } + + for (int i = 0; i < 3; ++i) { + incrementButtons[3 + i] = addButton(x + 6 + (i * (30 + 3)), y + 72, 30, 20, String.valueOf(increments[3 + i])); + } } @Override @@ -54,7 +73,7 @@ public class GuiCraftingSettings extends GuiBase { @Override public void drawForeground(int mouseX, int mouseY) { - drawString((width - fontRendererObj.getStringWidth(t("container.crafting"))) / 2, 8, t("container.crafting")); + drawString(7, 7, t("container.crafting")); } @Override @@ -78,6 +97,26 @@ public class GuiCraftingSettings extends GuiBase { if (button.id == startButton.id) { startRequest(); + } else if (button.id == cancelButton.id) { + close(); + } else { + for (GuiButton incrementButton : incrementButtons) { + if (incrementButton.id == button.id) { + Integer oldAmount = Ints.tryParse(amountField.getText()); + + if (oldAmount == null) { + oldAmount = 0; + } + + int newAmount = Integer.parseInt(incrementButton.displayString); + + newAmount = Math.min(Math.max(DEFAULT_AMOUNT, oldAmount + newAmount), StorageHandler.MAX_CRAFTING_PER_REQUEST); + + amountField.setText(String.valueOf(newAmount)); + + break; + } + } } } @@ -92,6 +131,6 @@ public class GuiCraftingSettings extends GuiBase { } private void close() { - FMLClientHandler.instance().showGuiScreen(gridGui); + FMLClientHandler.instance().showGuiScreen(gui); } } diff --git a/src/main/java/refinedstorage/gui/GuiGrid.java b/src/main/java/refinedstorage/gui/GuiGrid.java index b7187b06a..1b9c4232e 100755 --- a/src/main/java/refinedstorage/gui/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/GuiGrid.java @@ -358,7 +358,7 @@ public class GuiGrid extends GuiBase { if (isOverSlotWithItem() && container.getPlayer().inventory.getItemStack() == null) { if (items.get(slotNumber).stackSize == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown())) { - FMLCommonHandler.instance().showGuiScreen(new GuiCraftingSettings(this, items.get(slotNumber))); + FMLCommonHandler.instance().showGuiScreen(new GuiCraftingSettings(this, container.getPlayer(), items.get(slotNumber))); } else { int flags = 0; diff --git a/src/main/resources/assets/refinedstorage/textures/gui/crafting_settings.png b/src/main/resources/assets/refinedstorage/textures/gui/crafting_settings.png index 6004ea1372daf0f4f45618bc52ffd6cd7a4fab53..58c8ac01dbc09d43f0b43d107c151302c17469f7 100755 GIT binary patch delta 397 zcmdnX`+|3Z4YRqq`9_;xOe{^0#Z@-jGK({E?POr!+sU|tO??04I2NmVYfl%)kczms zcMp0o8#1sx+`jAx#Yg%o{r;{a?vGzuPpl4>&{Xw$oceh zznwbgAEuhT3vbQbA21#e%ocZGU@UmLkyQXhAGrmhV=8kPS%9?6#xfwy5H1(Z0HWR3 z!~*F9Q;&-|)Poo(dLJ{|%`1K0D1M9k!M`QueOw9+3_CvEVA{cu=ltup;(lcY^P2Vh z&xNPv#h#jWHO4P~z8h ozxnd7Rd3gv+{pS#!pr)6{<>c#9kKb-lo^1))78&qol`;+0K|8dX#fBK delta 296 zcmaFCyO(!@%|`oQOzaE{3{Gs5VmI3|i!*ZVVqoCg#VESp?9${o7OQ#zPZ!6KinzD8 zH|8C35Md3J{_#J)tiVQh3B%hw6XUKD>w87FI^J4rOSMwlB6~Y|W*SEhckTblEC)6p6LkR5Kg-|7zdW{lZ&qrD&v{<<>ppqLppGlNJ;yVF0m9(v>gTe~DWM4fyVQ3t