Add priority GUI
This commit is contained in:
83
src/main/java/com/raoulvdberge/refinedstorage/gui/GuiPriority.java
Executable file
83
src/main/java/com/raoulvdberge/refinedstorage/gui/GuiPriority.java
Executable file
@@ -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<Integer> priority;
|
||||
|
||||
public GuiPriority(GuiBase parent, TileDataParameter<Integer> 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<Integer, Integer> getAmountPos() {
|
||||
return new Tuple<>(18 + 1, 47 + 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Tuple<Integer, Integer> getIncrementButtonPos(int x, int y) {
|
||||
return new Tuple<>(6 + (x * (30 + 3)), y + (y == 0 ? 20 : 64));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Tuple<Integer, Integer> 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();
|
||||
}
|
||||
}
|
||||
}
|
@@ -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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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<Integer, Integer> getAmountPos() {
|
||||
return new Tuple<>(7 + 1, 50 + 1);
|
||||
}
|
||||
|
||||
protected Tuple<Integer, Integer> getIncrementButtonPos(int x, int y) {
|
||||
return new Tuple<>(6 + (x * (30 + 3)), y + (y == 0 ? 20 : 72));
|
||||
}
|
||||
|
||||
protected Tuple<Integer, Integer> 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<Integer, Integer> 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;
|
||||
}
|
||||
}
|
||||
|
@@ -8,16 +8,16 @@ import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
||||
public interface IAccessType {
|
||||
static <T extends TileEntity> TileDataParameter<AccessType> createParameter() {
|
||||
static <T extends TileEntity & IAccessType> TileDataParameter<AccessType> createParameter() {
|
||||
return new TileDataParameter<>(RSSerializers.ACCESS_TYPE_SERIALIZER, AccessType.READ_WRITE, new ITileDataProducer<AccessType, T>() {
|
||||
@Override
|
||||
public AccessType getValue(T tile) {
|
||||
return ((IAccessType) tile).getAccessType();
|
||||
return tile.getAccessType();
|
||||
}
|
||||
}, new ITileDataConsumer<AccessType, T>() {
|
||||
@Override
|
||||
public void setValue(T tile, AccessType value) {
|
||||
((IAccessType) tile).setAccessType(value);
|
||||
tile.setAccessType(value);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@@ -7,16 +7,16 @@ import net.minecraft.network.datasync.DataSerializers;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
||||
public interface IComparable {
|
||||
static <T extends TileEntity> TileDataParameter<Integer> createParameter() {
|
||||
static <T extends TileEntity & IComparable> TileDataParameter<Integer> createParameter() {
|
||||
return new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, T>() {
|
||||
@Override
|
||||
public Integer getValue(T tile) {
|
||||
return ((IComparable) tile).getCompare();
|
||||
return tile.getCompare();
|
||||
}
|
||||
}, new ITileDataConsumer<Integer, T>() {
|
||||
@Override
|
||||
public void setValue(T tile, Integer value) {
|
||||
((IComparable) tile).setCompare(value);
|
||||
tile.setCompare(value);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@@ -7,16 +7,16 @@ import net.minecraft.network.datasync.DataSerializers;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
||||
public interface IExcessVoidable {
|
||||
static <T extends TileEntity> TileDataParameter<Boolean> createParameter() {
|
||||
static <T extends TileEntity & IExcessVoidable> TileDataParameter<Boolean> createParameter() {
|
||||
return new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer<Boolean, T>() {
|
||||
@Override
|
||||
public Boolean getValue(T tile) {
|
||||
return ((IExcessVoidable) tile).getVoidExcess();
|
||||
return tile.getVoidExcess();
|
||||
}
|
||||
}, new ITileDataConsumer<Boolean, T>() {
|
||||
@Override
|
||||
public void setValue(T tile, Boolean value) {
|
||||
((IExcessVoidable) tile).setVoidExcess(value);
|
||||
tile.setVoidExcess(value);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@@ -15,17 +15,17 @@ public interface IFilterable {
|
||||
int WHITELIST = 0;
|
||||
int BLACKLIST = 1;
|
||||
|
||||
static <T extends TileEntity> TileDataParameter<Integer> createParameter() {
|
||||
static <T extends TileEntity & IFilterable> TileDataParameter<Integer> createParameter() {
|
||||
return new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, T>() {
|
||||
@Override
|
||||
public Integer getValue(T tile) {
|
||||
return ((IFilterable) tile).getMode();
|
||||
return tile.getMode();
|
||||
}
|
||||
}, new ITileDataConsumer<Integer, T>() {
|
||||
@Override
|
||||
public void setValue(T tile, Integer value) {
|
||||
if (value == WHITELIST || value == BLACKLIST) {
|
||||
((IFilterable) tile).setMode(value);
|
||||
tile.setMode(value);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@@ -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 <T extends TileEntity> TileDataParameter<Integer> createParameter() {
|
||||
static <T extends TileEntity & IPrioritizable> TileDataParameter<Integer> createParameter() {
|
||||
return new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, T>() {
|
||||
@Override
|
||||
public Integer getValue(T tile) {
|
||||
return ((IPrioritizable) tile).getPriority();
|
||||
return tile.getPriority();
|
||||
}
|
||||
}, new ITileDataConsumer<Integer, T>() {
|
||||
@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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@@ -12,17 +12,17 @@ public interface IType {
|
||||
int ITEMS = 0;
|
||||
int FLUIDS = 1;
|
||||
|
||||
static <T extends TileEntity> TileDataParameter<Integer> createParameter() {
|
||||
static <T extends TileEntity & IType> TileDataParameter<Integer> createParameter() {
|
||||
return new TileDataParameter<>(DataSerializers.VARINT, ITEMS, new ITileDataProducer<Integer, T>() {
|
||||
@Override
|
||||
public Integer getValue(T tile) {
|
||||
return ((IType) tile).getType();
|
||||
return tile.getType();
|
||||
}
|
||||
}, new ITileDataConsumer<Integer, T>() {
|
||||
@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()))
|
||||
|
BIN
src/main/resources/assets/refinedstorage/textures/gui/priority.png
Executable file
BIN
src/main/resources/assets/refinedstorage/textures/gui/priority.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
Reference in New Issue
Block a user