diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiPriority.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiPriority.java new file mode 100755 index 000000000..8760db1fa --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiPriority.java @@ -0,0 +1,83 @@ +package com.raoulvdberge.refinedstorage.gui; + +import com.google.common.primitives.Ints; +import com.raoulvdberge.refinedstorage.gui.grid.GuiCraftingStart; +import com.raoulvdberge.refinedstorage.tile.data.TileDataManager; +import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.util.Tuple; + +public class GuiPriority extends GuiCraftingStart { + private TileDataParameter priority; + + public GuiPriority(GuiBase parent, TileDataParameter priority) { + super(parent, null, new Container() { + @Override + public boolean canInteractWith(EntityPlayer playerIn) { + return false; + } + }, 164, 92); + + this.priority = priority; + } + + @Override + protected int getAmount() { + return priority.getValue(); + } + + @Override + protected String getStartButtonText() { + return "Set"; + } + + @Override + protected String getTitle() { + return "Priority"; + } + + @Override + protected String getTexture() { + return "gui/priority.png"; + } + + @Override + protected Tuple getAmountPos() { + return new Tuple<>(18 + 1, 47 + 1); + } + + @Override + protected Tuple getIncrementButtonPos(int x, int y) { + return new Tuple<>(6 + (x * (30 + 3)), y + (y == 0 ? 20 : 64)); + } + + @Override + protected Tuple getStartCancelPos() { + return new Tuple<>(107, 30); + } + + @Override + protected boolean canAmountGoNegative() { + return true; + } + + @Override + protected int[] getIncrements() { + return new int[]{ + 1, 5, 10, + -1, -5, -10 + }; + } + + @Override + protected void startRequest() { + Integer amount = Ints.tryParse(amountField.getText()); + + if (amount != null) { + TileDataManager.setParameter(priority, amount); + + close(); + } + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiStorage.java index b31b4b1b6..350ea0487 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiStorage.java @@ -5,11 +5,17 @@ import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.container.ContainerBase; import com.raoulvdberge.refinedstorage.gui.sidebutton.*; import com.raoulvdberge.refinedstorage.tile.IStorageGui; +import net.minecraft.client.gui.GuiButton; +import net.minecraftforge.fml.common.FMLCommonHandler; + +import java.io.IOException; public class GuiStorage extends GuiBase { private IStorageGui gui; private String texture; + private GuiButton priorityButton; + private int barX = 8; private int barY = 54; private int barWidth = 16; @@ -56,7 +62,7 @@ public class GuiStorage extends GuiBase { String txt = "Priority"; // @TODO: I18n int bw = 10 + fontRendererObj.getStringWidth(txt); - addButton(x + 169 - bw, y + 41, bw, 20, txt); + priorityButton = addButton(x + 169 - bw, y + 41, bw, 20, txt); } @Override @@ -99,7 +105,12 @@ public class GuiStorage extends GuiBase { } } - // @TODO: Remove - public void updatePriority(int priority) { + @Override + protected void actionPerformed(GuiButton button) throws IOException { + super.actionPerformed(button); + + if (button == priorityButton) { + FMLCommonHandler.instance().showGuiScreen(new GuiPriority(this, gui.getPriorityParameter())); + } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiCraftingStart.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiCraftingStart.java index 3d220025d..a6e57ba1f 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiCraftingStart.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiCraftingStart.java @@ -9,6 +9,8 @@ import com.raoulvdberge.refinedstorage.network.MessageGridCraftingPreview; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiTextField; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.util.Tuple; import net.minecraftforge.fml.client.FMLClientHandler; import org.lwjgl.input.Keyboard; @@ -17,44 +19,90 @@ import java.io.IOException; public class GuiCraftingStart extends GuiBase { private static final int DEFAULT_AMOUNT = 1; - private GuiTextField amountField; - private GuiGrid parent; + protected GuiTextField amountField; + private GuiBase parent; private ClientStackItem stack; private GuiButton startButton; private GuiButton cancelButton; private GuiButton[] incrementButtons = new GuiButton[6]; - public GuiCraftingStart(GuiGrid parent, EntityPlayer player, ClientStackItem stack) { - super(new ContainerCraftingSettings(player, stack.getStack()), 172, 99); + public GuiCraftingStart(GuiBase parent, ClientStackItem stack, Container container, int w, int h) { + super(container, w, h); this.parent = parent; this.stack = stack; } + public GuiCraftingStart(GuiGrid parent, EntityPlayer player, ClientStackItem stack) { + this(parent, stack, new ContainerCraftingSettings(player, stack.getStack()), 172, 99); + } + + protected String getStartButtonText() { + return t("misc.refinedstorage:start"); + } + + protected String getTitle() { + return t("container.crafting"); + } + + protected String getTexture() { + return "gui/crafting_settings.png"; + } + + protected int[] getIncrements() { + return new int[]{ + 1, 10, 64, + -1, -10, -64 + }; + } + + protected int getAmount() { + return DEFAULT_AMOUNT; + } + + protected Tuple getAmountPos() { + return new Tuple<>(7 + 1, 50 + 1); + } + + protected Tuple getIncrementButtonPos(int x, int y) { + return new Tuple<>(6 + (x * (30 + 3)), y + (y == 0 ? 20 : 72)); + } + + protected Tuple getStartCancelPos() { + return new Tuple<>(114, 33); + } + + protected boolean canAmountGoNegative() { + return false; + } + @Override public void init(int x, int y) { - startButton = addButton(x + 114, y + 33, 50, 20, t("misc.refinedstorage:start")); - cancelButton = addButton(x + 114, y + 57, 50, 20, t("gui.cancel")); + Tuple pos = getStartCancelPos(); - amountField = new GuiTextField(0, fontRendererObj, x + 7 + 1, y + 50 + 1, 69 - 6, fontRendererObj.FONT_HEIGHT); + startButton = addButton(x + pos.getFirst(), y + pos.getSecond(), 50, 20, getStartButtonText()); + cancelButton = addButton(x + pos.getFirst(), y + pos.getSecond() + 24, 50, 20, t("gui.cancel")); + + amountField = new GuiTextField(0, fontRendererObj, x + getAmountPos().getFirst(), y + getAmountPos().getSecond(), 69 - 6, fontRendererObj.FONT_HEIGHT); amountField.setEnableBackgroundDrawing(false); amountField.setVisible(true); - amountField.setText(String.valueOf(DEFAULT_AMOUNT)); + amountField.setText(String.valueOf(getAmount())); amountField.setTextColor(16777215); amountField.setCanLoseFocus(false); amountField.setFocused(true); - int[] increments = new int[]{ - 1, 10, 64, - -1, -10, -64 - }; + int[] increments = getIncrements(); for (int i = 0; i < 3; ++i) { - incrementButtons[i] = addButton(x + 6 + (i * (30 + 3)), y + 20, 30, 20, "+" + increments[i]); + pos = getIncrementButtonPos(i, 0); + + incrementButtons[i] = addButton(x + pos.getFirst(), y + pos.getSecond(), 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])); + pos = getIncrementButtonPos(i, 1); + + incrementButtons[3 + i] = addButton(x + pos.getFirst(), y + pos.getSecond(), 30, 20, String.valueOf(increments[3 + i])); } } @@ -64,7 +112,7 @@ public class GuiCraftingStart extends GuiBase { @Override public void drawBackground(int x, int y, int mouseX, int mouseY) { - bindTexture("gui/crafting_settings.png"); + bindTexture(getTexture()); drawTexture(x, y, 0, 0, width, height); @@ -73,7 +121,7 @@ public class GuiCraftingStart extends GuiBase { @Override public void drawForeground(int mouseX, int mouseY) { - drawString(7, 7, t("container.crafting")); + drawString(7, 7, getTitle()); } @Override @@ -110,7 +158,11 @@ public class GuiCraftingStart extends GuiBase { int newAmount = Integer.parseInt(incrementButton.displayString); - newAmount = Math.max(DEFAULT_AMOUNT, ((oldAmount == 1 && newAmount != 1) ? 0 : oldAmount) + newAmount); + if (!canAmountGoNegative()) { + newAmount = Math.max(DEFAULT_AMOUNT, ((oldAmount == 1 && newAmount != 1) ? 0 : oldAmount) + newAmount); + } else { + newAmount = oldAmount + newAmount; + } amountField.setText(String.valueOf(newAmount)); @@ -120,7 +172,7 @@ public class GuiCraftingStart extends GuiBase { } } - private void startRequest() { + protected void startRequest() { Integer quantity = Ints.tryParse(amountField.getText()); if (quantity != null && quantity > 0) { @@ -130,11 +182,11 @@ public class GuiCraftingStart extends GuiBase { } } - private void close() { + protected void close() { FMLClientHandler.instance().showGuiScreen(parent); } - public GuiGrid getParent() { + public GuiBase getParent() { return parent; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IAccessType.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IAccessType.java index b9aa6b83c..585dfa407 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IAccessType.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IAccessType.java @@ -8,16 +8,16 @@ import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; import net.minecraft.tileentity.TileEntity; public interface IAccessType { - static TileDataParameter createParameter() { + static TileDataParameter createParameter() { return new TileDataParameter<>(RSSerializers.ACCESS_TYPE_SERIALIZER, AccessType.READ_WRITE, new ITileDataProducer() { @Override public AccessType getValue(T tile) { - return ((IAccessType) tile).getAccessType(); + return tile.getAccessType(); } }, new ITileDataConsumer() { @Override public void setValue(T tile, AccessType value) { - ((IAccessType) tile).setAccessType(value); + tile.setAccessType(value); } }); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IComparable.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IComparable.java index 36fb4bdfc..8cbdcb35b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IComparable.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IComparable.java @@ -7,16 +7,16 @@ import net.minecraft.network.datasync.DataSerializers; import net.minecraft.tileentity.TileEntity; public interface IComparable { - static TileDataParameter createParameter() { + static TileDataParameter createParameter() { return new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(T tile) { - return ((IComparable) tile).getCompare(); + return tile.getCompare(); } }, new ITileDataConsumer() { @Override public void setValue(T tile, Integer value) { - ((IComparable) tile).setCompare(value); + tile.setCompare(value); } }); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IExcessVoidable.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IExcessVoidable.java index 8047c40d7..dff6d139d 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IExcessVoidable.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IExcessVoidable.java @@ -7,16 +7,16 @@ import net.minecraft.network.datasync.DataSerializers; import net.minecraft.tileentity.TileEntity; public interface IExcessVoidable { - static TileDataParameter createParameter() { + static TileDataParameter createParameter() { return new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer() { @Override public Boolean getValue(T tile) { - return ((IExcessVoidable) tile).getVoidExcess(); + return tile.getVoidExcess(); } }, new ITileDataConsumer() { @Override public void setValue(T tile, Boolean value) { - ((IExcessVoidable) tile).setVoidExcess(value); + tile.setVoidExcess(value); } }); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IFilterable.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IFilterable.java index 84945d948..d2d1bd4e0 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IFilterable.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IFilterable.java @@ -15,17 +15,17 @@ public interface IFilterable { int WHITELIST = 0; int BLACKLIST = 1; - static TileDataParameter createParameter() { + static TileDataParameter createParameter() { return new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(T tile) { - return ((IFilterable) tile).getMode(); + return tile.getMode(); } }, new ITileDataConsumer() { @Override public void setValue(T tile, Integer value) { if (value == WHITELIST || value == BLACKLIST) { - ((IFilterable) tile).setMode(value); + tile.setMode(value); } } }); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IPrioritizable.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IPrioritizable.java index 5f82611b7..a898913af 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IPrioritizable.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IPrioritizable.java @@ -1,28 +1,22 @@ package com.raoulvdberge.refinedstorage.tile.config; -import com.raoulvdberge.refinedstorage.gui.GuiStorage; import com.raoulvdberge.refinedstorage.tile.data.ITileDataConsumer; import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; -import net.minecraft.client.Minecraft; import net.minecraft.network.datasync.DataSerializers; import net.minecraft.tileentity.TileEntity; public interface IPrioritizable { - static TileDataParameter createParameter() { + static TileDataParameter createParameter() { return new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(T tile) { - return ((IPrioritizable) tile).getPriority(); + return tile.getPriority(); } }, new ITileDataConsumer() { @Override public void setValue(T tile, Integer value) { - ((IPrioritizable) tile).setPriority(value); - } - }, parameter -> { - if (Minecraft.getMinecraft().currentScreen instanceof GuiStorage) { - ((GuiStorage) Minecraft.getMinecraft().currentScreen).updatePriority(parameter.getValue()); + tile.setPriority(value); } }); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IType.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IType.java index bbe383c2a..5dfb8aee3 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IType.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/config/IType.java @@ -12,17 +12,17 @@ public interface IType { int ITEMS = 0; int FLUIDS = 1; - static TileDataParameter createParameter() { + static TileDataParameter createParameter() { return new TileDataParameter<>(DataSerializers.VARINT, ITEMS, new ITileDataProducer() { @Override public Integer getValue(T tile) { - return ((IType) tile).getType(); + return tile.getType(); } }, new ITileDataConsumer() { @Override public void setValue(T tile, Integer value) { if (value == 0 || value == 1) { - ((IType) tile).setType(value); + tile.setType(value); tile.getWorld().playerEntities.stream() .filter(p -> p.openContainer instanceof ContainerBase && ((ContainerBase) p.openContainer).getTile().getPos().equals(tile.getPos())) diff --git a/src/main/resources/assets/refinedstorage/textures/gui/priority.png b/src/main/resources/assets/refinedstorage/textures/gui/priority.png new file mode 100755 index 000000000..423ef87b6 Binary files /dev/null and b/src/main/resources/assets/refinedstorage/textures/gui/priority.png differ