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

View File

@@ -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;
}
}

View File

@@ -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);
}
});
}

View File

@@ -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);
}
});
}

View File

@@ -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);
}
});
}

View File

@@ -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);
}
}
});

View File

@@ -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);
}
});
}

View File

@@ -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()))

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB