Add priority GUI

This commit is contained in:
Raoul Van den Berge
2016-10-29 18:58:44 +02:00
parent 3de0561b21
commit 6406bfaece
10 changed files with 187 additions and 47 deletions

View 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();
}
}
}

View File

@@ -5,11 +5,17 @@ import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.container.ContainerBase; import com.raoulvdberge.refinedstorage.container.ContainerBase;
import com.raoulvdberge.refinedstorage.gui.sidebutton.*; import com.raoulvdberge.refinedstorage.gui.sidebutton.*;
import com.raoulvdberge.refinedstorage.tile.IStorageGui; 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 { public class GuiStorage extends GuiBase {
private IStorageGui gui; private IStorageGui gui;
private String texture; private String texture;
private GuiButton priorityButton;
private int barX = 8; private int barX = 8;
private int barY = 54; private int barY = 54;
private int barWidth = 16; private int barWidth = 16;
@@ -56,7 +62,7 @@ public class GuiStorage extends GuiBase {
String txt = "Priority"; // @TODO: I18n String txt = "Priority"; // @TODO: I18n
int bw = 10 + fontRendererObj.getStringWidth(txt); 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 @Override
@@ -99,7 +105,12 @@ public class GuiStorage extends GuiBase {
} }
} }
// @TODO: Remove @Override
public void updatePriority(int priority) { protected void actionPerformed(GuiButton button) throws IOException {
super.actionPerformed(button);
if (button == priorityButton) {
FMLCommonHandler.instance().showGuiScreen(new GuiPriority(this, gui.getPriorityParameter()));
}
} }
} }

View File

@@ -9,6 +9,8 @@ import com.raoulvdberge.refinedstorage.network.MessageGridCraftingPreview;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.gui.GuiTextField;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.util.Tuple;
import net.minecraftforge.fml.client.FMLClientHandler; import net.minecraftforge.fml.client.FMLClientHandler;
import org.lwjgl.input.Keyboard; import org.lwjgl.input.Keyboard;
@@ -17,44 +19,90 @@ import java.io.IOException;
public class GuiCraftingStart extends GuiBase { public class GuiCraftingStart extends GuiBase {
private static final int DEFAULT_AMOUNT = 1; private static final int DEFAULT_AMOUNT = 1;
private GuiTextField amountField; protected GuiTextField amountField;
private GuiGrid parent; private GuiBase parent;
private ClientStackItem stack; private ClientStackItem stack;
private GuiButton startButton; private GuiButton startButton;
private GuiButton cancelButton; private GuiButton cancelButton;
private GuiButton[] incrementButtons = new GuiButton[6]; private GuiButton[] incrementButtons = new GuiButton[6];
public GuiCraftingStart(GuiGrid parent, EntityPlayer player, ClientStackItem stack) { public GuiCraftingStart(GuiBase parent, ClientStackItem stack, Container container, int w, int h) {
super(new ContainerCraftingSettings(player, stack.getStack()), 172, 99); super(container, w, h);
this.parent = parent; this.parent = parent;
this.stack = stack; 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 @Override
public void init(int x, int y) { public void init(int x, int y) {
startButton = addButton(x + 114, y + 33, 50, 20, t("misc.refinedstorage:start")); Tuple<Integer, Integer> pos = getStartCancelPos();
cancelButton = addButton(x + 114, y + 57, 50, 20, t("gui.cancel"));
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.setEnableBackgroundDrawing(false);
amountField.setVisible(true); amountField.setVisible(true);
amountField.setText(String.valueOf(DEFAULT_AMOUNT)); amountField.setText(String.valueOf(getAmount()));
amountField.setTextColor(16777215); amountField.setTextColor(16777215);
amountField.setCanLoseFocus(false); amountField.setCanLoseFocus(false);
amountField.setFocused(true); amountField.setFocused(true);
int[] increments = new int[]{ int[] increments = getIncrements();
1, 10, 64,
-1, -10, -64
};
for (int i = 0; i < 3; ++i) { 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) { 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 @Override
public void drawBackground(int x, int y, int mouseX, int mouseY) { 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); drawTexture(x, y, 0, 0, width, height);
@@ -73,7 +121,7 @@ public class GuiCraftingStart extends GuiBase {
@Override @Override
public void drawForeground(int mouseX, int mouseY) { public void drawForeground(int mouseX, int mouseY) {
drawString(7, 7, t("container.crafting")); drawString(7, 7, getTitle());
} }
@Override @Override
@@ -110,7 +158,11 @@ public class GuiCraftingStart extends GuiBase {
int newAmount = Integer.parseInt(incrementButton.displayString); 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)); 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()); Integer quantity = Ints.tryParse(amountField.getText());
if (quantity != null && quantity > 0) { if (quantity != null && quantity > 0) {
@@ -130,11 +182,11 @@ public class GuiCraftingStart extends GuiBase {
} }
} }
private void close() { protected void close() {
FMLClientHandler.instance().showGuiScreen(parent); FMLClientHandler.instance().showGuiScreen(parent);
} }
public GuiGrid getParent() { public GuiBase getParent() {
return parent; return parent;
} }
} }

View File

@@ -8,16 +8,16 @@ import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
public interface IAccessType { 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>() { return new TileDataParameter<>(RSSerializers.ACCESS_TYPE_SERIALIZER, AccessType.READ_WRITE, new ITileDataProducer<AccessType, T>() {
@Override @Override
public AccessType getValue(T tile) { public AccessType getValue(T tile) {
return ((IAccessType) tile).getAccessType(); return tile.getAccessType();
} }
}, new ITileDataConsumer<AccessType, T>() { }, new ITileDataConsumer<AccessType, T>() {
@Override @Override
public void setValue(T tile, AccessType value) { public void setValue(T tile, AccessType value) {
((IAccessType) tile).setAccessType(value); tile.setAccessType(value);
} }
}); });
} }

View File

@@ -7,16 +7,16 @@ import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
public interface IComparable { 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>() { return new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, T>() {
@Override @Override
public Integer getValue(T tile) { public Integer getValue(T tile) {
return ((IComparable) tile).getCompare(); return tile.getCompare();
} }
}, new ITileDataConsumer<Integer, T>() { }, new ITileDataConsumer<Integer, T>() {
@Override @Override
public void setValue(T tile, Integer value) { public void setValue(T tile, Integer value) {
((IComparable) tile).setCompare(value); tile.setCompare(value);
} }
}); });
} }

View File

@@ -7,16 +7,16 @@ import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
public interface IExcessVoidable { 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>() { return new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer<Boolean, T>() {
@Override @Override
public Boolean getValue(T tile) { public Boolean getValue(T tile) {
return ((IExcessVoidable) tile).getVoidExcess(); return tile.getVoidExcess();
} }
}, new ITileDataConsumer<Boolean, T>() { }, new ITileDataConsumer<Boolean, T>() {
@Override @Override
public void setValue(T tile, Boolean value) { public void setValue(T tile, Boolean value) {
((IExcessVoidable) tile).setVoidExcess(value); tile.setVoidExcess(value);
} }
}); });
} }

View File

@@ -15,17 +15,17 @@ public interface IFilterable {
int WHITELIST = 0; int WHITELIST = 0;
int BLACKLIST = 1; 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>() { return new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, T>() {
@Override @Override
public Integer getValue(T tile) { public Integer getValue(T tile) {
return ((IFilterable) tile).getMode(); return tile.getMode();
} }
}, new ITileDataConsumer<Integer, T>() { }, new ITileDataConsumer<Integer, T>() {
@Override @Override
public void setValue(T tile, Integer value) { public void setValue(T tile, Integer value) {
if (value == WHITELIST || value == BLACKLIST) { if (value == WHITELIST || value == BLACKLIST) {
((IFilterable) tile).setMode(value); tile.setMode(value);
} }
} }
}); });

View File

@@ -1,28 +1,22 @@
package com.raoulvdberge.refinedstorage.tile.config; 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.ITileDataConsumer;
import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.client.Minecraft;
import net.minecraft.network.datasync.DataSerializers; import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
public interface IPrioritizable { 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>() { return new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, T>() {
@Override @Override
public Integer getValue(T tile) { public Integer getValue(T tile) {
return ((IPrioritizable) tile).getPriority(); return tile.getPriority();
} }
}, new ITileDataConsumer<Integer, T>() { }, new ITileDataConsumer<Integer, T>() {
@Override @Override
public void setValue(T tile, Integer value) { public void setValue(T tile, Integer value) {
((IPrioritizable) tile).setPriority(value); tile.setPriority(value);
}
}, parameter -> {
if (Minecraft.getMinecraft().currentScreen instanceof GuiStorage) {
((GuiStorage) Minecraft.getMinecraft().currentScreen).updatePriority(parameter.getValue());
} }
}); });
} }

View File

@@ -12,17 +12,17 @@ public interface IType {
int ITEMS = 0; int ITEMS = 0;
int FLUIDS = 1; 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>() { return new TileDataParameter<>(DataSerializers.VARINT, ITEMS, new ITileDataProducer<Integer, T>() {
@Override @Override
public Integer getValue(T tile) { public Integer getValue(T tile) {
return ((IType) tile).getType(); return tile.getType();
} }
}, new ITileDataConsumer<Integer, T>() { }, new ITileDataConsumer<Integer, T>() {
@Override @Override
public void setValue(T tile, Integer value) { public void setValue(T tile, Integer value) {
if (value == 0 || value == 1) { if (value == 0 || value == 1) {
((IType) tile).setType(value); tile.setType(value);
tile.getWorld().playerEntities.stream() tile.getWorld().playerEntities.stream()
.filter(p -> p.openContainer instanceof ContainerBase && ((ContainerBase) p.openContainer).getTile().getPos().equals(tile.getPos())) .filter(p -> p.openContainer instanceof ContainerBase && ((ContainerBase) p.openContainer).getTile().getPos().equals(tile.getPos()))

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB