abstracted out side buttons (thanks to this they also work on ctrls now)
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
package storagecraft.gui;
|
||||
|
||||
import com.google.common.base.Joiner;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.inventory.Container;
|
||||
@@ -12,8 +14,17 @@ import net.minecraft.util.StatCollector;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL12;
|
||||
import storagecraft.StorageCraft;
|
||||
import storagecraft.gui.sidebutton.SideButton;
|
||||
|
||||
public abstract class GuiBase extends GuiContainer {
|
||||
public static final int SIDE_BUTTON_WIDTH = 20;
|
||||
public static final int SIDE_BUTTON_HEIGHT = 20;
|
||||
|
||||
private List<SideButton> sideButtons = new ArrayList<SideButton>();
|
||||
|
||||
private int lastButtonId = 0;
|
||||
private int lastSideButtonY = 6;
|
||||
|
||||
public GuiBase(Container container, int w, int h) {
|
||||
super(container);
|
||||
|
||||
@@ -46,26 +57,70 @@ public abstract class GuiBase extends GuiContainer {
|
||||
protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
|
||||
drawForeground(mouseX - guiLeft, mouseY - guiTop);
|
||||
mouseX -= guiLeft;
|
||||
mouseY -= guiTop;
|
||||
|
||||
for (SideButton sideButton : sideButtons) {
|
||||
sideButton.draw(this, sideButton.getX() + 2, sideButton.getY() + 1);
|
||||
|
||||
if (inBounds(sideButton.getX(), sideButton.getY(), SIDE_BUTTON_WIDTH, SIDE_BUTTON_HEIGHT, mouseX, mouseY)) {
|
||||
drawTooltip(mouseX, mouseY, sideButton.getTooltip(this));
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean inBounds(int x, int y, int w, int h, int ox, int oy) {
|
||||
drawForeground(mouseX, mouseY);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void actionPerformed(GuiButton button) {
|
||||
super.actionPerformed(button);
|
||||
|
||||
for (SideButton sideButton : sideButtons) {
|
||||
if (sideButton.getId() == button.id) {
|
||||
sideButton.actionPerformed();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public GuiButton addButton(int x, int y, int w, int h) {
|
||||
return addButton(x, y, w, h, "");
|
||||
}
|
||||
|
||||
public GuiButton addButton(int x, int y, int w, int h, String text) {
|
||||
GuiButton button = new GuiButton(lastButtonId++, x, y, w, h, text);
|
||||
|
||||
buttonList.add(button);
|
||||
|
||||
return button;
|
||||
}
|
||||
|
||||
public void addSideButton(SideButton button) {
|
||||
button.setX(xSize - 1);
|
||||
button.setY(lastSideButtonY);
|
||||
button.setId(addButton(guiLeft + button.getX(), guiTop + button.getY(), SIDE_BUTTON_WIDTH, SIDE_BUTTON_HEIGHT).id);
|
||||
|
||||
lastSideButtonY += SIDE_BUTTON_HEIGHT + 4;
|
||||
|
||||
sideButtons.add(button);
|
||||
}
|
||||
|
||||
public boolean inBounds(int x, int y, int w, int h, int ox, int oy) {
|
||||
return ox >= x && ox <= x + w && oy >= y && oy <= y + h;
|
||||
}
|
||||
|
||||
protected void bindTexture(String file) {
|
||||
public void bindTexture(String file) {
|
||||
bindTexture(StorageCraft.ID, file);
|
||||
}
|
||||
|
||||
protected void bindTexture(String base, String file) {
|
||||
public void bindTexture(String base, String file) {
|
||||
mc.getTextureManager().bindTexture(new ResourceLocation(base, "textures/" + file));
|
||||
}
|
||||
|
||||
protected void drawItem(int x, int y, ItemStack stack) {
|
||||
public void drawItem(int x, int y, ItemStack stack) {
|
||||
drawItem(x, y, stack, false);
|
||||
}
|
||||
|
||||
protected void drawItem(int x, int y, ItemStack stack, boolean withOverlay) {
|
||||
public void drawItem(int x, int y, ItemStack stack, boolean withOverlay) {
|
||||
zLevel = 100;
|
||||
itemRender.zLevel = 100;
|
||||
|
||||
@@ -89,16 +144,16 @@ public abstract class GuiBase extends GuiContainer {
|
||||
zLevel = 0;
|
||||
}
|
||||
|
||||
protected void drawString(int x, int y, String message) {
|
||||
public void drawString(int x, int y, String message) {
|
||||
drawString(x, y, message, 4210752);
|
||||
}
|
||||
|
||||
protected void drawString(int x, int y, String message, int color) {
|
||||
public void drawString(int x, int y, String message, int color) {
|
||||
fontRendererObj.drawString(message, x, y, color);
|
||||
}
|
||||
|
||||
// https://github.com/AppliedEnergistics/Applied-Energistics-2/blob/master/src/main/java/appeng/client/gui/AEBaseGui.java
|
||||
protected void drawTooltip(int x, int y, String message) {
|
||||
public void drawTooltip(int x, int y, String message) {
|
||||
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
|
||||
|
||||
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
|
||||
@@ -179,7 +234,7 @@ public abstract class GuiBase extends GuiContainer {
|
||||
GL11.glPopAttrib();
|
||||
}
|
||||
|
||||
protected void drawTooltip(int x, int y, ItemStack stack) {
|
||||
public void drawTooltip(int x, int y, ItemStack stack) {
|
||||
List list = stack.getTooltip(mc.thePlayer, mc.gameSettings.advancedItemTooltips);
|
||||
|
||||
for (int i = 0; i < list.size(); ++i) {
|
||||
@@ -193,7 +248,7 @@ public abstract class GuiBase extends GuiContainer {
|
||||
drawTooltip(x, y, Joiner.on("\n").join(list));
|
||||
}
|
||||
|
||||
protected String t(String name, Object... format) {
|
||||
public String t(String name, Object... format) {
|
||||
return StatCollector.translateToLocalFormatted(name, format);
|
||||
}
|
||||
|
||||
|
@@ -1,6 +1,7 @@
|
||||
package storagecraft.gui;
|
||||
|
||||
import storagecraft.container.ContainerController;
|
||||
import storagecraft.gui.sidebutton.SideButtonRedstoneMode;
|
||||
import storagecraft.tile.TileController;
|
||||
|
||||
public class GuiController extends GuiBase {
|
||||
@@ -14,6 +15,7 @@ public class GuiController extends GuiBase {
|
||||
|
||||
@Override
|
||||
public void init(int x, int y) {
|
||||
addSideButton(new SideButtonRedstoneMode(controller));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -1,11 +1,25 @@
|
||||
package storagecraft.gui;
|
||||
|
||||
import storagecraft.container.ContainerDrive;
|
||||
import storagecraft.gui.sidebutton.SideButtonRedstoneMode;
|
||||
import storagecraft.tile.TileDrive;
|
||||
|
||||
public class GuiDrive extends GuiMachine {
|
||||
public class GuiDrive extends GuiBase {
|
||||
private TileDrive drive;
|
||||
|
||||
public GuiDrive(ContainerDrive container, TileDrive drive) {
|
||||
super(container, 176, 190, drive);
|
||||
super(container, 176, 190);
|
||||
|
||||
this.drive = drive;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(int x, int y) {
|
||||
addSideButton(new SideButtonRedstoneMode(drive));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(int x, int y) {
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -17,8 +31,6 @@ public class GuiDrive extends GuiMachine {
|
||||
|
||||
@Override
|
||||
public void drawForeground(int mouseX, int mouseY) {
|
||||
super.drawForeground(mouseX, mouseY);
|
||||
|
||||
drawString(7, 7, t("gui.storagecraft:drive"));
|
||||
drawString(7, 96, t("container.inventory"));
|
||||
}
|
||||
|
@@ -3,34 +3,33 @@ package storagecraft.gui;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import storagecraft.StorageCraft;
|
||||
import storagecraft.container.ContainerExporter;
|
||||
import storagecraft.gui.sidebutton.SideButtonRedstoneMode;
|
||||
import storagecraft.network.MessageExporterUpdate;
|
||||
import storagecraft.tile.TileExporter;
|
||||
import storagecraft.util.InventoryUtils;
|
||||
|
||||
public class GuiExporter extends GuiMachine {
|
||||
public class GuiExporter extends GuiBase {
|
||||
private TileExporter exporter;
|
||||
|
||||
private GuiButton compareNBTButton;
|
||||
private GuiButton compareDamageButton;
|
||||
|
||||
public GuiExporter(ContainerExporter container, TileExporter exporter) {
|
||||
super(container, 176, 186, exporter);
|
||||
super(container, 176, 186);
|
||||
|
||||
this.exporter = exporter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(int x, int y) {
|
||||
super.init(x, y);
|
||||
addSideButton(new SideButtonRedstoneMode(exporter));
|
||||
|
||||
buttonList.add(compareNBTButton = new GuiButton(1, x + 7, y + 41, 100, 20, ""));
|
||||
buttonList.add(compareDamageButton = new GuiButton(2, x + 7, y + 63, 120, 20, ""));
|
||||
compareNBTButton = addButton(x + 7, y + 41, 100, 20);
|
||||
compareDamageButton = addButton(x + 7, y + 63, 120, 20);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(int x, int y) {
|
||||
super.update(x, y);
|
||||
|
||||
compareNBTButton.displayString = t("misc.storagecraft:compareNBT") + ": ";
|
||||
compareNBTButton.displayString += t("misc.storagecraft:" + ((exporter.getCompareFlags() & InventoryUtils.COMPARE_NBT) == InventoryUtils.COMPARE_NBT ? "on" : "off"));
|
||||
|
||||
@@ -47,8 +46,6 @@ public class GuiExporter extends GuiMachine {
|
||||
|
||||
@Override
|
||||
public void drawForeground(int mouseX, int mouseY) {
|
||||
super.drawForeground(mouseX, mouseY);
|
||||
|
||||
drawString(7, 7, t("gui.storagecraft:exporter"));
|
||||
drawString(7, 93, t("container.inventory"));
|
||||
}
|
||||
@@ -59,9 +56,9 @@ public class GuiExporter extends GuiMachine {
|
||||
|
||||
int flags = exporter.getCompareFlags();
|
||||
|
||||
if (button.id == compareNBTButton.id) {
|
||||
if (button == compareNBTButton) {
|
||||
flags ^= InventoryUtils.COMPARE_NBT;
|
||||
} else if (button.id == compareDamageButton.id) {
|
||||
} else if (button == compareDamageButton) {
|
||||
flags ^= InventoryUtils.COMPARE_DAMAGE;
|
||||
}
|
||||
|
||||
|
@@ -9,13 +9,14 @@ import org.lwjgl.input.Keyboard;
|
||||
import org.lwjgl.input.Mouse;
|
||||
import storagecraft.StorageCraft;
|
||||
import storagecraft.container.ContainerGrid;
|
||||
import storagecraft.gui.sidebutton.SideButtonRedstoneMode;
|
||||
import storagecraft.network.MessageStoragePull;
|
||||
import storagecraft.network.MessageStoragePush;
|
||||
import storagecraft.storage.StorageItem;
|
||||
import storagecraft.tile.TileController;
|
||||
import storagecraft.tile.TileGrid;
|
||||
|
||||
public class GuiGrid extends GuiMachine {
|
||||
public class GuiGrid extends GuiBase {
|
||||
private ContainerGrid container;
|
||||
private TileGrid grid;
|
||||
|
||||
@@ -27,7 +28,7 @@ public class GuiGrid extends GuiMachine {
|
||||
private int offset;
|
||||
|
||||
public GuiGrid(ContainerGrid container, TileGrid grid) {
|
||||
super(container, 176, 190, grid);
|
||||
super(container, 176, 190);
|
||||
|
||||
this.container = container;
|
||||
this.grid = grid;
|
||||
@@ -35,9 +36,9 @@ public class GuiGrid extends GuiMachine {
|
||||
|
||||
@Override
|
||||
public void init(int x, int y) {
|
||||
super.init(x, y);
|
||||
addSideButton(new SideButtonRedstoneMode(grid));
|
||||
|
||||
searchField = new GuiTextField(fontRendererObj, x + 80 + 2, y + 6 + 1, 88 - 6, fontRendererObj.FONT_HEIGHT);
|
||||
searchField = new GuiTextField(fontRendererObj, x + 80 + 1, y + 6 + 1, 88 - 6, fontRendererObj.FONT_HEIGHT);
|
||||
searchField.setEnableBackgroundDrawing(false);
|
||||
searchField.setVisible(true);
|
||||
searchField.setTextColor(16777215);
|
||||
@@ -47,8 +48,6 @@ public class GuiGrid extends GuiMachine {
|
||||
|
||||
@Override
|
||||
public void update(int x, int y) {
|
||||
super.update(x, y);
|
||||
|
||||
int wheel = Mouse.getDWheel();
|
||||
|
||||
wheel = Math.max(Math.min(-wheel, 1), -1);
|
||||
@@ -99,8 +98,6 @@ public class GuiGrid extends GuiMachine {
|
||||
|
||||
@Override
|
||||
public void drawForeground(int mouseX, int mouseY) {
|
||||
super.drawForeground(mouseX, mouseY);
|
||||
|
||||
drawString(7, 7, t("gui.storagecraft:grid"));
|
||||
drawString(7, 96, t("container.inventory"));
|
||||
|
||||
@@ -149,6 +146,30 @@ public class GuiGrid extends GuiMachine {
|
||||
}
|
||||
}
|
||||
|
||||
public List<StorageItem> getItems() {
|
||||
List<StorageItem> items = new ArrayList<StorageItem>();
|
||||
|
||||
if (!grid.isConnected()) {
|
||||
return items;
|
||||
}
|
||||
|
||||
items.addAll(grid.getController().getItems());
|
||||
|
||||
if (!searchField.getText().trim().isEmpty()) {
|
||||
Iterator<StorageItem> t = items.iterator();
|
||||
|
||||
while (t.hasNext()) {
|
||||
StorageItem item = t.next();
|
||||
|
||||
if (!item.toItemStack().getDisplayName().toLowerCase().contains(searchField.getText().toLowerCase())) {
|
||||
t.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseClicked(int mouseX, int mouseY, int clickedButton) {
|
||||
super.mouseClicked(mouseX, mouseY, clickedButton);
|
||||
@@ -181,28 +202,4 @@ public class GuiGrid extends GuiMachine {
|
||||
super.keyTyped(character, keyCode);
|
||||
}
|
||||
}
|
||||
|
||||
public List<StorageItem> getItems() {
|
||||
List<StorageItem> items = new ArrayList<StorageItem>();
|
||||
|
||||
if (!grid.isConnected()) {
|
||||
return items;
|
||||
}
|
||||
|
||||
items.addAll(grid.getController().getItems());
|
||||
|
||||
if (!searchField.getText().trim().isEmpty()) {
|
||||
Iterator<StorageItem> t = items.iterator();
|
||||
|
||||
while (t.hasNext()) {
|
||||
StorageItem item = t.next();
|
||||
|
||||
if (!item.toItemStack().getDisplayName().toLowerCase().contains(searchField.getText().toLowerCase())) {
|
||||
t.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return items;
|
||||
}
|
||||
}
|
||||
|
@@ -3,11 +3,12 @@ package storagecraft.gui;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import storagecraft.StorageCraft;
|
||||
import storagecraft.container.ContainerImporter;
|
||||
import storagecraft.gui.sidebutton.SideButtonRedstoneMode;
|
||||
import storagecraft.network.MessageImporterUpdate;
|
||||
import storagecraft.tile.TileImporter;
|
||||
import storagecraft.util.InventoryUtils;
|
||||
|
||||
public class GuiImporter extends GuiMachine {
|
||||
public class GuiImporter extends GuiBase {
|
||||
private TileImporter importer;
|
||||
|
||||
private GuiButton compareNBTButton;
|
||||
@@ -15,24 +16,22 @@ public class GuiImporter extends GuiMachine {
|
||||
private GuiButton modeButton;
|
||||
|
||||
public GuiImporter(ContainerImporter container, TileImporter importer) {
|
||||
super(container, 176, 201, importer);
|
||||
super(container, 176, 201);
|
||||
|
||||
this.importer = importer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(int x, int y) {
|
||||
super.init(x, y);
|
||||
addSideButton(new SideButtonRedstoneMode(importer));
|
||||
|
||||
buttonList.add(compareNBTButton = new GuiButton(1, x + 7, y + 41, 100, 20, ""));
|
||||
buttonList.add(compareDamageButton = new GuiButton(2, x + 7, y + 63, 120, 20, ""));
|
||||
buttonList.add(modeButton = new GuiButton(3, x + 7, y + 85, 80, 20, ""));
|
||||
compareNBTButton = addButton(x + 7, y + 41, 100, 20);
|
||||
compareDamageButton = addButton(x + 7, y + 63, 120, 20);
|
||||
modeButton = addButton(x + 7, y + 85, 80, 20);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(int x, int y) {
|
||||
super.update(x, y);
|
||||
|
||||
compareNBTButton.displayString = t("misc.storagecraft:compareNBT") + ": ";
|
||||
compareNBTButton.displayString += t("misc.storagecraft:" + ((importer.getCompareFlags() & InventoryUtils.COMPARE_NBT) == InventoryUtils.COMPARE_NBT ? "on" : "off"));
|
||||
|
||||
@@ -51,8 +50,6 @@ public class GuiImporter extends GuiMachine {
|
||||
|
||||
@Override
|
||||
public void drawForeground(int mouseX, int mouseY) {
|
||||
super.drawForeground(mouseX, mouseY);
|
||||
|
||||
drawString(7, 7, t("gui.storagecraft:importer"));
|
||||
drawString(7, 108, t("container.inventory"));
|
||||
}
|
||||
@@ -63,9 +60,9 @@ public class GuiImporter extends GuiMachine {
|
||||
|
||||
int flags = importer.getCompareFlags();
|
||||
|
||||
if (button.id == compareNBTButton.id) {
|
||||
if (button == compareNBTButton) {
|
||||
flags ^= InventoryUtils.COMPARE_NBT;
|
||||
} else if (button.id == compareDamageButton.id) {
|
||||
} else if (button == compareDamageButton) {
|
||||
flags ^= InventoryUtils.COMPARE_DAMAGE;
|
||||
}
|
||||
|
||||
|
@@ -1,54 +0,0 @@
|
||||
package storagecraft.gui;
|
||||
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import storagecraft.StorageCraft;
|
||||
import storagecraft.network.MessageRedstoneModeUpdate;
|
||||
import storagecraft.tile.TileMachine;
|
||||
|
||||
public abstract class GuiMachine extends GuiBase {
|
||||
private TileMachine machine;
|
||||
|
||||
public static final ItemStack REDSTONE_MODE_ITEM = new ItemStack(Items.redstone, 1);
|
||||
|
||||
private int redstoneModeX;
|
||||
private int redstoneModeY = 6;
|
||||
private int redstoneModeWidth = 20;
|
||||
private int redstoneModeHeight = 20;
|
||||
|
||||
public GuiMachine(Container container, int w, int h, TileMachine machine) {
|
||||
super(container, w, h);
|
||||
|
||||
this.redstoneModeX = w - 1;
|
||||
this.machine = machine;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(int x, int y) {
|
||||
buttonList.add(new GuiButton(0, x + redstoneModeX, y + redstoneModeY, redstoneModeWidth, redstoneModeHeight, ""));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(int x, int y) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawForeground(int mouseX, int mouseY) {
|
||||
drawItem(redstoneModeX + 2, redstoneModeY + 1, REDSTONE_MODE_ITEM);
|
||||
|
||||
if (inBounds(redstoneModeX, redstoneModeY, redstoneModeWidth, redstoneModeHeight, mouseX, mouseY)) {
|
||||
drawTooltip(mouseX, mouseY, t("misc.storagecraft:redstoneMode." + machine.getRedstoneMode().id));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void actionPerformed(GuiButton button) {
|
||||
super.actionPerformed(button);
|
||||
|
||||
if (button.id == 0) {
|
||||
StorageCraft.NETWORK.sendToServer(new MessageRedstoneModeUpdate(machine.xCoord, machine.yCoord, machine.zCoord));
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,11 +1,25 @@
|
||||
package storagecraft.gui;
|
||||
|
||||
import storagecraft.container.ContainerStorageProxy;
|
||||
import storagecraft.gui.sidebutton.SideButtonRedstoneMode;
|
||||
import storagecraft.tile.TileStorageProxy;
|
||||
|
||||
public class GuiStorageProxy extends GuiMachine {
|
||||
public class GuiStorageProxy extends GuiBase {
|
||||
private TileStorageProxy storageProxy;
|
||||
|
||||
public GuiStorageProxy(ContainerStorageProxy container, TileStorageProxy storageProxy) {
|
||||
super(container, 176, 131, storageProxy);
|
||||
super(container, 176, 131);
|
||||
|
||||
this.storageProxy = storageProxy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(int x, int y) {
|
||||
addSideButton(new SideButtonRedstoneMode(storageProxy));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(int x, int y) {
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -17,8 +31,6 @@ public class GuiStorageProxy extends GuiMachine {
|
||||
|
||||
@Override
|
||||
public void drawForeground(int mouseX, int mouseY) {
|
||||
super.drawForeground(mouseX, mouseY);
|
||||
|
||||
drawString(7, 7, t("gui.storagecraft:storageProxy"));
|
||||
drawString(7, 39, t("container.inventory"));
|
||||
}
|
||||
|
39
src/main/java/storagecraft/gui/sidebutton/SideButton.java
Normal file
39
src/main/java/storagecraft/gui/sidebutton/SideButton.java
Normal file
@@ -0,0 +1,39 @@
|
||||
package storagecraft.gui.sidebutton;
|
||||
|
||||
import storagecraft.gui.GuiBase;
|
||||
|
||||
public abstract class SideButton {
|
||||
private int id;
|
||||
private int x;
|
||||
private int y;
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public int getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
public void setX(int x) {
|
||||
this.x = x;
|
||||
}
|
||||
|
||||
public int getY() {
|
||||
return y;
|
||||
}
|
||||
|
||||
public void setY(int y) {
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
public abstract String getTooltip(GuiBase gui);
|
||||
|
||||
public abstract void draw(GuiBase gui, int x, int y);
|
||||
|
||||
public abstract void actionPerformed();
|
||||
}
|
@@ -0,0 +1,31 @@
|
||||
package storagecraft.gui.sidebutton;
|
||||
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import storagecraft.StorageCraft;
|
||||
import storagecraft.gui.GuiBase;
|
||||
import storagecraft.network.MessageRedstoneModeUpdate;
|
||||
import storagecraft.tile.IRedstoneControllable;
|
||||
|
||||
public class SideButtonRedstoneMode extends SideButton {
|
||||
private IRedstoneControllable control;
|
||||
|
||||
public SideButtonRedstoneMode(IRedstoneControllable control) {
|
||||
this.control = control;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTooltip(GuiBase gui) {
|
||||
return gui.t("misc.storagecraft:redstoneMode." + control.getRedstoneMode().id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(GuiBase gui, int x, int y) {
|
||||
gui.drawItem(x, y, new ItemStack(Items.redstone, 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed() {
|
||||
StorageCraft.NETWORK.sendToServer(new MessageRedstoneModeUpdate(control));
|
||||
}
|
||||
}
|
@@ -6,7 +6,7 @@ import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import storagecraft.tile.TileMachine;
|
||||
import storagecraft.tile.IRedstoneControllable;
|
||||
|
||||
public class MessageRedstoneModeUpdate implements IMessage, IMessageHandler<MessageRedstoneModeUpdate, IMessage> {
|
||||
private int x;
|
||||
@@ -16,10 +16,10 @@ public class MessageRedstoneModeUpdate implements IMessage, IMessageHandler<Mess
|
||||
public MessageRedstoneModeUpdate() {
|
||||
}
|
||||
|
||||
public MessageRedstoneModeUpdate(int x, int y, int z) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
public MessageRedstoneModeUpdate(IRedstoneControllable control) {
|
||||
this.x = control.getX();
|
||||
this.y = control.getY();
|
||||
this.z = control.getZ();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -42,10 +42,10 @@ public class MessageRedstoneModeUpdate implements IMessage, IMessageHandler<Mess
|
||||
|
||||
TileEntity tile = player.worldObj.getTileEntity(message.x, message.y, message.z);
|
||||
|
||||
if (tile instanceof TileMachine) {
|
||||
TileMachine machine = (TileMachine) tile;
|
||||
if (tile instanceof IRedstoneControllable) {
|
||||
IRedstoneControllable control = (IRedstoneControllable) tile;
|
||||
|
||||
machine.setRedstoneMode(machine.getRedstoneMode().next());
|
||||
control.setRedstoneMode(control.getRedstoneMode().next());
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@@ -6,4 +6,10 @@ public interface INetworkTile {
|
||||
public void fromBytes(ByteBuf buf);
|
||||
|
||||
public void toBytes(ByteBuf buf);
|
||||
|
||||
public int getX();
|
||||
|
||||
public int getY();
|
||||
|
||||
public int getZ();
|
||||
}
|
||||
|
13
src/main/java/storagecraft/tile/IRedstoneControllable.java
Normal file
13
src/main/java/storagecraft/tile/IRedstoneControllable.java
Normal file
@@ -0,0 +1,13 @@
|
||||
package storagecraft.tile;
|
||||
|
||||
public interface IRedstoneControllable {
|
||||
public RedstoneMode getRedstoneMode();
|
||||
|
||||
public void setRedstoneMode(RedstoneMode mode);
|
||||
|
||||
public int getX();
|
||||
|
||||
public int getY();
|
||||
|
||||
public int getZ();
|
||||
}
|
@@ -1,10 +1,14 @@
|
||||
package storagecraft.tile;
|
||||
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public enum RedstoneMode {
|
||||
IGNORE(0),
|
||||
HIGH(1),
|
||||
LOW(2);
|
||||
|
||||
public static final String NBT = "RedstoneMode";
|
||||
|
||||
public final int id;
|
||||
|
||||
RedstoneMode(int id) {
|
||||
@@ -21,6 +25,19 @@ public enum RedstoneMode {
|
||||
return next;
|
||||
}
|
||||
|
||||
public boolean isEnabled(World world, int x, int y, int z) {
|
||||
switch (this) {
|
||||
case IGNORE:
|
||||
return true;
|
||||
case HIGH:
|
||||
return world.isBlockIndirectlyGettingPowered(x, y, z);
|
||||
case LOW:
|
||||
return !world.isBlockIndirectlyGettingPowered(x, y, z);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static RedstoneMode getById(int id) {
|
||||
for (RedstoneMode control : values()) {
|
||||
if (control.id == id) {
|
||||
|
@@ -69,7 +69,7 @@ public class TileCable extends TileBase {
|
||||
|
||||
TileEntity tile = worldObj.getTileEntity(x, y, z);
|
||||
|
||||
if (tile instanceof TileMachine && ((TileMachine) tile).isEnabled()) {
|
||||
if (tile instanceof TileMachine && ((TileMachine) tile).getRedstoneMode().isEnabled(worldObj, x, y, z)) {
|
||||
machines.add((TileMachine) tile);
|
||||
|
||||
visited.add(Vec3.createVectorHelper(x, y, z));
|
||||
|
@@ -17,10 +17,12 @@ import storagecraft.storage.IStorageProvider;
|
||||
import storagecraft.storage.StorageItem;
|
||||
import storagecraft.util.InventoryUtils;
|
||||
|
||||
public class TileController extends TileBase implements IEnergyReceiver, INetworkTile {
|
||||
public class TileController extends TileBase implements IEnergyReceiver, INetworkTile, IRedstoneControllable {
|
||||
private List<StorageItem> items = new ArrayList<StorageItem>();
|
||||
private List<IStorage> storages = new ArrayList<IStorage>();
|
||||
|
||||
private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
|
||||
|
||||
private List<TileMachine> machines = new ArrayList<TileMachine>();
|
||||
|
||||
private List<Vec3> visitedCables = new ArrayList<Vec3>();
|
||||
@@ -223,6 +225,10 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
|
||||
super.readFromNBT(nbt);
|
||||
|
||||
energy.readFromNBT(nbt);
|
||||
|
||||
if (nbt.hasKey(RedstoneMode.NBT)) {
|
||||
redstoneMode = RedstoneMode.getById(nbt.getInteger(RedstoneMode.NBT));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -230,6 +236,8 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
|
||||
super.writeToNBT(nbt);
|
||||
|
||||
energy.writeToNBT(nbt);
|
||||
|
||||
nbt.setInteger(RedstoneMode.NBT, redstoneMode.id);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -257,14 +265,42 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
|
||||
}
|
||||
|
||||
public boolean isActive() {
|
||||
return energy.getEnergyStored() >= getEnergyUsage();
|
||||
return energy.getEnergyStored() >= getEnergyUsage() && redstoneMode.isEnabled(worldObj, xCoord, yCoord, zCoord);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RedstoneMode getRedstoneMode() {
|
||||
return redstoneMode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRedstoneMode(RedstoneMode mode) {
|
||||
this.redstoneMode = mode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getX() {
|
||||
return xCoord;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getY() {
|
||||
return yCoord;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getZ() {
|
||||
return zCoord;
|
||||
}
|
||||
|
||||
// @TODO: add helpers for sending redstone control + item storages over net
|
||||
@Override
|
||||
public void fromBytes(ByteBuf buf) {
|
||||
energy.setEnergyStored(buf.readInt());
|
||||
energyUsage = buf.readInt();
|
||||
|
||||
redstoneMode = RedstoneMode.getById(buf.readInt());
|
||||
|
||||
items.clear();
|
||||
|
||||
int size = buf.readInt();
|
||||
@@ -285,6 +321,8 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
|
||||
buf.writeInt(energy.getEnergyStored());
|
||||
buf.writeInt(energyUsage);
|
||||
|
||||
buf.writeInt(redstoneMode.id);
|
||||
|
||||
buf.writeInt(items.size());
|
||||
|
||||
for (StorageItem item : items) {
|
||||
|
@@ -3,9 +3,7 @@ package storagecraft.tile;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
public abstract class TileMachine extends TileBase implements INetworkTile {
|
||||
public static final String NBT_REDSTONE_MODE = "RedstoneMode";
|
||||
|
||||
public abstract class TileMachine extends TileBase implements INetworkTile, IRedstoneControllable {
|
||||
protected boolean connected = false;
|
||||
|
||||
private RedstoneMode redstoneMode = RedstoneMode.LOW;
|
||||
@@ -43,27 +41,31 @@ public abstract class TileMachine extends TileBase implements INetworkTile {
|
||||
return connected;
|
||||
}
|
||||
|
||||
public boolean isEnabled() {
|
||||
switch (redstoneMode) {
|
||||
case IGNORE:
|
||||
return true;
|
||||
case HIGH:
|
||||
return worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord);
|
||||
case LOW:
|
||||
return !worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RedstoneMode getRedstoneMode() {
|
||||
return redstoneMode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRedstoneMode(RedstoneMode mode) {
|
||||
this.redstoneMode = mode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getX() {
|
||||
return xCoord;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getY() {
|
||||
return yCoord;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getZ() {
|
||||
return zCoord;
|
||||
}
|
||||
|
||||
public TileController getController() {
|
||||
return (TileController) worldObj.getTileEntity(xController, yController, zController);
|
||||
}
|
||||
@@ -98,8 +100,8 @@ public abstract class TileMachine extends TileBase implements INetworkTile {
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
super.readFromNBT(nbt);
|
||||
|
||||
if (nbt.hasKey(NBT_REDSTONE_MODE)) {
|
||||
redstoneMode = RedstoneMode.getById(nbt.getInteger(NBT_REDSTONE_MODE));
|
||||
if (nbt.hasKey(RedstoneMode.NBT)) {
|
||||
redstoneMode = RedstoneMode.getById(nbt.getInteger(RedstoneMode.NBT));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,7 +109,7 @@ public abstract class TileMachine extends TileBase implements INetworkTile {
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
super.writeToNBT(nbt);
|
||||
|
||||
nbt.setInteger(NBT_REDSTONE_MODE, redstoneMode.id);
|
||||
nbt.setInteger(RedstoneMode.NBT, redstoneMode.id);
|
||||
}
|
||||
|
||||
public abstract int getEnergyUsage();
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Reference in New Issue
Block a user