From e520a9db8ac8a2d897e650557057d2147487b013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Tue, 27 Jul 2021 18:12:11 +0200 Subject: [PATCH] Pull common UI logic from robot and computer into base class. --- .../gui/AbstractMachineTerminalScreen.java | 87 ++++++++++++++ ...ava => AbstractMachineTerminalWidget.java} | 79 +++++++------ .../client/gui/ComputerTerminalScreen.java | 109 +----------------- .../oc2/client/gui/RobotTerminalScreen.java | 100 +--------------- .../java/li/cil/oc2/client/gui/Sprites.java | 5 +- .../java/li/cil/oc2/client/gui/Textures.java | 2 +- .../container/AbstractMachineContainer.java | 52 +++++++++ .../AbstractMachineTerminalContainer.java | 40 +------ .../container/ComputerTerminalContainer.java | 26 ++++- .../container/RobotTerminalContainer.java | 32 ++++- .../li/cil/oc2/common/entity/RobotEntity.java | 6 +- .../common/tileentity/ComputerTileEntity.java | 11 +- .../textures/gui/widget/intentory_button.png | Bin 2204 -> 0 bytes .../textures/gui/widget/inventory_button.png | Bin 0 -> 2324 bytes 14 files changed, 256 insertions(+), 293 deletions(-) create mode 100644 src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalScreen.java rename src/main/java/li/cil/oc2/client/gui/{AbstractTerminalWidget.java => AbstractMachineTerminalWidget.java} (75%) create mode 100644 src/main/java/li/cil/oc2/common/container/AbstractMachineContainer.java delete mode 100644 src/main/resources/assets/oc2/textures/gui/widget/intentory_button.png create mode 100644 src/main/resources/assets/oc2/textures/gui/widget/inventory_button.png diff --git a/src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalScreen.java b/src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalScreen.java new file mode 100644 index 00000000..af566129 --- /dev/null +++ b/src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalScreen.java @@ -0,0 +1,87 @@ +package li.cil.oc2.client.gui; + +import com.mojang.blaze3d.matrix.MatrixStack; +import li.cil.oc2.common.container.AbstractMachineTerminalContainer; +import net.minecraft.client.gui.screen.inventory.ContainerScreen; +import net.minecraft.client.gui.widget.Widget; +import net.minecraft.client.util.InputMappings; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.util.text.ITextComponent; + +public abstract class AbstractMachineTerminalScreen extends ContainerScreen { + private final AbstractMachineTerminalWidget terminalWidget; + + /////////////////////////////////////////////////////////////////// + + protected AbstractMachineTerminalScreen(final T container, final PlayerInventory playerInventory, final ITextComponent title) { + super(container, playerInventory, title); + this.terminalWidget = new AbstractMachineTerminalWidget(this, container) { + @Override + protected void addButton(final Widget widget) { + AbstractMachineTerminalScreen.this.addButton(widget); + } + }; + imageWidth = Sprites.TERMINAL_SCREEN.width; + imageHeight = Sprites.TERMINAL_SCREEN.height; + } + + /////////////////////////////////////////////////////////////////// + + @Override + protected void renderBg(final MatrixStack matrixStack, final float partialTicks, final int mouseX, final int mouseY) { + terminalWidget.renderBackground(matrixStack, mouseX, mouseY); + } + + @Override + protected void renderLabels(final MatrixStack matrixStack, final int mouseX, final int mouseY) { + // This is required to prevent the labels from being rendered + } + + @Override + public void render(final MatrixStack matrixStack, final int mouseX, final int mouseY, final float partialTicks) { + renderBackground(matrixStack); + super.render(matrixStack, mouseX, mouseY, partialTicks); + terminalWidget.render(matrixStack, mouseX, mouseY, menu.getVirtualMachine().getBootError()); + } + + @Override + public void tick() { + super.tick(); + + terminalWidget.tick(); + } + + @Override + public boolean charTyped(final char ch, final int modifiers) { + return terminalWidget.charTyped(ch, modifiers) || + super.charTyped(ch, modifiers); + } + + @Override + public boolean keyPressed(final int keyCode, final int scanCode, final int modifiers) { + if (terminalWidget.keyPressed(keyCode, scanCode, modifiers)) { + return true; + } + + // Don't close with inventory binding since we usually want to use that as terminal input + // even without input capture enabled. + final InputMappings.Input input = InputMappings.getKey(keyCode, scanCode); + if (this.minecraft.options.keyInventory.isActiveAndMatches(input)) { + return true; + } + + return super.keyPressed(keyCode, scanCode, modifiers); + } + + @Override + public void init() { + super.init(); + terminalWidget.init(); + } + + @Override + public void onClose() { + super.onClose(); + terminalWidget.onClose(); + } +} diff --git a/src/main/java/li/cil/oc2/client/gui/AbstractTerminalWidget.java b/src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalWidget.java similarity index 75% rename from src/main/java/li/cil/oc2/client/gui/AbstractTerminalWidget.java rename to src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalWidget.java index 15c31dd4..8f32b7e4 100644 --- a/src/main/java/li/cil/oc2/client/gui/AbstractTerminalWidget.java +++ b/src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalWidget.java @@ -3,8 +3,10 @@ package li.cil.oc2.client.gui; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; import li.cil.oc2.client.gui.terminal.TerminalInput; +import li.cil.oc2.client.gui.widget.ImageButton; import li.cil.oc2.client.gui.widget.ToggleImageButton; import li.cil.oc2.common.Constants; +import li.cil.oc2.common.container.AbstractMachineTerminalContainer; import li.cil.oc2.common.vm.Terminal; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.AbstractGui; @@ -25,7 +27,7 @@ import java.util.List; import static li.cil.oc2.common.util.TooltipUtils.withColor; -public abstract class AbstractTerminalWidget extends AbstractGui { +public abstract class AbstractMachineTerminalWidget extends AbstractGui { public static final int TERMINAL_WIDTH = Terminal.WIDTH * Terminal.CHAR_WIDTH / 2; public static final int TERMINAL_HEIGHT = Terminal.HEIGHT * Terminal.CHAR_HEIGHT / 2; @@ -33,34 +35,28 @@ public abstract class AbstractTerminalWidget extends AbstractGui { public static final int TERMINAL_X = MARGIN_SIZE; public static final int TERMINAL_Y = MARGIN_SIZE; - public static final int WIDTH = TERMINAL_WIDTH + MARGIN_SIZE * 2; - public static final int HEIGHT = TERMINAL_HEIGHT + MARGIN_SIZE * 2; + public static final int WIDTH = Sprites.TERMINAL_SCREEN.width; + public static final int HEIGHT = Sprites.TERMINAL_SCREEN.height; private static final int CONTROLS_TOP = 8; - private static final int ENERGY_TOP = CONTROLS_TOP + Sprites.SIDEBAR_2.height + 4; + private static final int ENERGY_TOP = CONTROLS_TOP + Sprites.SIDEBAR_3.height + 4; private static boolean isInputCaptureEnabled; /////////////////////////////////////////////////////////////////// private final Screen parent; + private final AbstractMachineTerminalContainer container; private final Terminal terminal; private int windowLeft, windowTop; private boolean isMouseOverTerminal; - private int currentEnergy, maxEnergy, energyConsumption; - /////////////////////////////////////////////////////////////////// - protected AbstractTerminalWidget(final Screen parent, final Terminal terminal) { + protected AbstractMachineTerminalWidget(final Screen parent, final AbstractMachineTerminalContainer container) { this.parent = parent; - this.terminal = terminal; - } - - public void setEnergyInfo(final int current, final int capacity, final int consumption) { - this.currentEnergy = current; - this.maxEnergy = capacity; - this.energyConsumption = consumption; + this.container = container; + this.terminal = container.getTerminal(); } public void renderBackground(final MatrixStack matrixStack, final int mouseX, final int mouseY) { @@ -68,9 +64,9 @@ public abstract class AbstractTerminalWidget extends AbstractGui { isMouseOverTerminal = isMouseOverTerminal(mouseX, mouseY); - Sprites.SIDEBAR_2.draw(matrixStack, windowLeft - Sprites.SIDEBAR_2.width, windowTop + CONTROLS_TOP); + Sprites.SIDEBAR_3.draw(matrixStack, windowLeft - Sprites.SIDEBAR_2.width, windowTop + CONTROLS_TOP); - if (maxEnergy > 0) { + if (container.getEnergyCapacity() > 0) { final int x = windowLeft - Sprites.SIDEBAR_2.width; final int y = windowTop + ENERGY_TOP; Sprites.SIDEBAR_2.draw(matrixStack, x, y); @@ -85,7 +81,7 @@ public abstract class AbstractTerminalWidget extends AbstractGui { } public void render(final MatrixStack matrixStack, final int mouseX, final int mouseY, @Nullable final ITextComponent error) { - if (isRunning()) { + if (container.getVirtualMachine().isRunning()) { final MatrixStack stack = new MatrixStack(); stack.translate(windowLeft + TERMINAL_X, windowTop + TERMINAL_Y, getClient().getItemRenderer().blitOffset); stack.scale(TERMINAL_WIDTH / (float) terminal.getWidth(), TERMINAL_HEIGHT / (float) terminal.getHeight(), 1f); @@ -104,12 +100,16 @@ public abstract class AbstractTerminalWidget extends AbstractGui { } } - if (maxEnergy > 0) { - Sprites.ENERGY_BAR.drawFillY(matrixStack, windowLeft - Sprites.SIDEBAR_2.width + 4, windowTop + ENERGY_TOP + 4, currentEnergy / (float) maxEnergy); + final int energyCapacity = container.getEnergyCapacity(); + if (energyCapacity > 0) { + final int energyStored = container.getEnergy(); + final int energyConsumption = container.getEnergyConsumption(); + + Sprites.ENERGY_BAR.drawFillY(matrixStack, windowLeft - Sprites.SIDEBAR_2.width + 4, windowTop + ENERGY_TOP + 4, energyStored / (float) energyCapacity); if (isMouseOver(mouseX, mouseY, -Sprites.SIDEBAR_2.width + 4, ENERGY_TOP + 4, Sprites.ENERGY_BAR.width, Sprites.ENERGY_BAR.height)) { final List tooltip = Arrays.asList( - new TranslationTextComponent(Constants.TOOLTIP_ENERGY, withColor(currentEnergy + "/" + maxEnergy, TextFormatting.GREEN)), + new TranslationTextComponent(Constants.TOOLTIP_ENERGY, withColor(energyStored + "/" + energyCapacity, TextFormatting.GREEN)), new TranslationTextComponent(Constants.TOOLTIP_ENERGY_CONSUMPTION, withColor(String.valueOf(energyConsumption), TextFormatting.GREEN)) ); GuiUtils.drawHoveringText(matrixStack, tooltip, mouseX, mouseY, parent.width, parent.height, 200, getClient().font); @@ -120,7 +120,7 @@ public abstract class AbstractTerminalWidget extends AbstractGui { public void tick() { final ByteBuffer input = terminal.getInput(); if (input != null) { - sendTerminalInputToServer(input); + container.sendTerminalInputToServer(input); } } @@ -158,7 +158,7 @@ public abstract class AbstractTerminalWidget extends AbstractGui { getClient().keyboardHandler.setSendRepeatsToGui(true); addButton(new ToggleImageButton( - parent, windowLeft - Sprites.SIDEBAR_2.width + 4, windowTop + CONTROLS_TOP + 4, + parent, windowLeft - Sprites.SIDEBAR_3.width + 4, windowTop + CONTROLS_TOP + 4, 12, 12, new TranslationTextComponent(Constants.COMPUTER_SCREEN_POWER_CAPTION), new TranslationTextComponent(Constants.COMPUTER_SCREEN_POWER_DESCRIPTION), @@ -169,17 +169,17 @@ public abstract class AbstractTerminalWidget extends AbstractGui { @Override public void onPress() { super.onPress(); - sendPowerStateToServer(!isRunning()); + container.sendPowerStateToServer(!container.getVirtualMachine().isRunning()); } @Override public boolean isToggled() { - return isRunning(); + return container.getVirtualMachine().isRunning(); } }); addButton(new ToggleImageButton( - parent, windowLeft - Sprites.SIDEBAR_2.width + 4, windowTop + CONTROLS_TOP + 18, + parent, windowLeft - Sprites.SIDEBAR_3.width + 4, windowTop + CONTROLS_TOP + 4 + 14, 12, 12, new TranslationTextComponent(Constants.COMPUTER_SCREEN_CAPTURE_INPUT_CAPTION), new TranslationTextComponent(Constants.COMPUTER_SCREEN_CAPTURE_INPUT_DESCRIPTION), @@ -198,6 +198,20 @@ public abstract class AbstractTerminalWidget extends AbstractGui { return isInputCaptureEnabled; } }); + + addButton(new ImageButton( + parent, windowLeft - Sprites.SIDEBAR_3.width + 4, windowTop + CONTROLS_TOP + 4 + 14 + 14, + 12, 12, + new TranslationTextComponent(Constants.COMPUTER_SCREEN_CAPTURE_INPUT_CAPTION), + new TranslationTextComponent(Constants.COMPUTER_SCREEN_CAPTURE_INPUT_DESCRIPTION), + Sprites.INVENTORY_BUTTON_INACTIVE, + Sprites.INVENTORY_BUTTON_ACTIVE + ) { + @Override + public void onPress() { + // todo switch to container + } + }); } public void onClose() { @@ -206,14 +220,7 @@ public abstract class AbstractTerminalWidget extends AbstractGui { /////////////////////////////////////////////////////////////////// - protected abstract boolean isRunning(); - - protected void addButton(final Widget widget) { - } - - protected abstract void sendPowerStateToServer(boolean value); - - protected abstract void sendTerminalInputToServer(final ByteBuffer input); + protected abstract void addButton(final Widget widget); /////////////////////////////////////////////////////////////////// @@ -222,13 +229,13 @@ public abstract class AbstractTerminalWidget extends AbstractGui { } private boolean shouldCaptureInput() { - return isMouseOverTerminal && isInputCaptureEnabled && isRunning(); + return isMouseOverTerminal && isInputCaptureEnabled && container.getVirtualMachine().isRunning(); } private boolean isMouseOverTerminal(final int mouseX, final int mouseY) { return isMouseOver(mouseX, mouseY, - AbstractTerminalWidget.TERMINAL_X, AbstractTerminalWidget.TERMINAL_Y, - AbstractTerminalWidget.TERMINAL_WIDTH, AbstractTerminalWidget.TERMINAL_HEIGHT); + AbstractMachineTerminalWidget.TERMINAL_X, AbstractMachineTerminalWidget.TERMINAL_Y, + AbstractMachineTerminalWidget.TERMINAL_WIDTH, AbstractMachineTerminalWidget.TERMINAL_HEIGHT); } private boolean isMouseOver(final int mouseX, final int mouseY, final int x, final int y, final int width, final int height) { diff --git a/src/main/java/li/cil/oc2/client/gui/ComputerTerminalScreen.java b/src/main/java/li/cil/oc2/client/gui/ComputerTerminalScreen.java index b3d47e6d..6bd2c45b 100644 --- a/src/main/java/li/cil/oc2/client/gui/ComputerTerminalScreen.java +++ b/src/main/java/li/cil/oc2/client/gui/ComputerTerminalScreen.java @@ -1,118 +1,11 @@ package li.cil.oc2.client.gui; -import com.mojang.blaze3d.matrix.MatrixStack; import li.cil.oc2.common.container.ComputerTerminalContainer; -import li.cil.oc2.common.network.Network; -import li.cil.oc2.common.network.message.ComputerPowerMessage; -import li.cil.oc2.common.network.message.ComputerTerminalInputMessage; -import li.cil.oc2.common.vm.Terminal; -import net.minecraft.client.gui.screen.inventory.ContainerScreen; -import net.minecraft.client.gui.widget.Widget; -import net.minecraft.client.util.InputMappings; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.util.text.ITextComponent; -import java.nio.ByteBuffer; - -public final class ComputerTerminalScreen extends ContainerScreen { - private final ComputerTerminalWidget terminalWidget; - - /////////////////////////////////////////////////////////////////// - +public final class ComputerTerminalScreen extends AbstractMachineTerminalScreen { public ComputerTerminalScreen(final ComputerTerminalContainer container, final PlayerInventory playerInventory, final ITextComponent title) { super(container, playerInventory, title); - this.terminalWidget = new ComputerTerminalWidget(container.getComputer().getTerminal()); - imageWidth = AbstractTerminalWidget.WIDTH; - imageHeight = AbstractTerminalWidget.HEIGHT; - } - - /////////////////////////////////////////////////////////////////// - - @Override - protected void renderBg(final MatrixStack matrixStack, final float partialTicks, final int mouseX, final int mouseY) { - terminalWidget.renderBackground(matrixStack, mouseX, mouseY); - } - - @Override - protected void renderLabels(final MatrixStack matrixStack, final int mouseX, final int mouseY) { - // This is required to prevent the labels from being rendered - } - - @Override - public void render(final MatrixStack matrixStack, final int mouseX, final int mouseY, final float partialTicks) { - terminalWidget.setEnergyInfo(menu.getEnergy(), menu.getEnergyCapacity(), menu.getEnergyConsumption()); - - renderBackground(matrixStack); - super.render(matrixStack, mouseX, mouseY, partialTicks); - terminalWidget.render(matrixStack, mouseX, mouseY, menu.getComputer().getVirtualMachine().getBootError()); - } - - @Override - public void tick() { - super.tick(); - - terminalWidget.tick(); - } - - @Override - public boolean charTyped(final char ch, final int modifiers) { - return terminalWidget.charTyped(ch, modifiers) || - super.charTyped(ch, modifiers); - } - - @Override - public boolean keyPressed(final int keyCode, final int scanCode, final int modifiers) { - if (terminalWidget.keyPressed(keyCode, scanCode, modifiers)) { - return true; - } - - // Don't close with inventory binding since we usually want to use that as terminal input - // even without input capture enabled. - final InputMappings.Input input = InputMappings.getKey(keyCode, scanCode); - if (this.minecraft.options.keyInventory.isActiveAndMatches(input)) { - return true; - } - - return super.keyPressed(keyCode, scanCode, modifiers); - } - - @Override - public void init() { - super.init(); - terminalWidget.init(); - } - - @Override - public void onClose() { - super.onClose(); - terminalWidget.onClose(); - } - - /////////////////////////////////////////////////////////////////// - - private final class ComputerTerminalWidget extends AbstractTerminalWidget { - public ComputerTerminalWidget(final Terminal terminal) { - super(ComputerTerminalScreen.this, terminal); - } - - @Override - protected boolean isRunning() { - return menu.getComputer().getVirtualMachine().isRunning(); - } - - @Override - protected void addButton(final Widget widget) { - ComputerTerminalScreen.this.addButton(widget); - } - - @Override - protected void sendPowerStateToServer(final boolean value) { - Network.INSTANCE.sendToServer(new ComputerPowerMessage(menu.getComputer(), value)); - } - - @Override - protected void sendTerminalInputToServer(final ByteBuffer input) { - Network.INSTANCE.sendToServer(new ComputerTerminalInputMessage(menu.getComputer(), input)); - } } } diff --git a/src/main/java/li/cil/oc2/client/gui/RobotTerminalScreen.java b/src/main/java/li/cil/oc2/client/gui/RobotTerminalScreen.java index fd65e264..1ddfefec 100644 --- a/src/main/java/li/cil/oc2/client/gui/RobotTerminalScreen.java +++ b/src/main/java/li/cil/oc2/client/gui/RobotTerminalScreen.java @@ -2,121 +2,29 @@ package li.cil.oc2.client.gui; import com.mojang.blaze3d.matrix.MatrixStack; import li.cil.oc2.common.container.RobotTerminalContainer; -import li.cil.oc2.common.network.Network; -import li.cil.oc2.common.network.message.RobotPowerMessage; -import li.cil.oc2.common.network.message.RobotTerminalInputMessage; -import li.cil.oc2.common.vm.Terminal; -import net.minecraft.client.gui.screen.inventory.ContainerScreen; -import net.minecraft.client.gui.widget.Widget; -import net.minecraft.client.util.InputMappings; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.util.text.ITextComponent; -import java.nio.ByteBuffer; - -public final class RobotTerminalScreen extends ContainerScreen { - private static final int SLOTS_X = (AbstractTerminalWidget.WIDTH - Sprites.HOTBAR.width) / 2; - private static final int SLOTS_Y = AbstractTerminalWidget.HEIGHT - 1; - - private final RobotTerminalWidget terminalWidget; +public final class RobotTerminalScreen extends AbstractMachineTerminalScreen { + private static final int SLOTS_X = (AbstractMachineTerminalWidget.WIDTH - Sprites.HOTBAR.width) / 2; + private static final int SLOTS_Y = AbstractMachineTerminalWidget.HEIGHT - 1; /////////////////////////////////////////////////////////////////// public RobotTerminalScreen(final RobotTerminalContainer container, final PlayerInventory playerInventory, final ITextComponent title) { super(container, playerInventory, title); - this.terminalWidget = new RobotTerminalWidget(container.getRobot().getTerminal()); - imageWidth = AbstractTerminalWidget.WIDTH; - imageHeight = AbstractTerminalWidget.HEIGHT; } @Override protected void renderBg(final MatrixStack matrixStack, final float partialTicks, final int mouseX, final int mouseY) { Sprites.HOTBAR.draw(matrixStack, leftPos + SLOTS_X, topPos + SLOTS_Y); - terminalWidget.renderBackground(matrixStack, mouseX, mouseY); - } - - @Override - protected void renderLabels(final MatrixStack matrixStack, final int mouseX, final int mouseY) { - + super.renderBg(matrixStack, partialTicks, mouseX, mouseY); } @Override public void render(final MatrixStack matrixStack, final int mouseX, final int mouseY, final float partialTicks) { - terminalWidget.setEnergyInfo(menu.getEnergy(), menu.getEnergyCapacity(), menu.getEnergyConsumption()); - - renderBackground(matrixStack); super.render(matrixStack, mouseX, mouseY, partialTicks); - terminalWidget.render(matrixStack, mouseX, mouseY, menu.getRobot().getVirtualMachine().getBootError()); RobotContainerScreen.renderSelection(matrixStack, menu.getRobot().getSelectedSlot(), leftPos + SLOTS_X + 4, topPos + SLOTS_Y + 4, 12); renderTooltip(matrixStack, mouseX, mouseY); } - - @Override - public void tick() { - super.tick(); - - terminalWidget.tick(); - } - - @Override - public boolean charTyped(final char ch, final int modifiers) { - return terminalWidget.charTyped(ch, modifiers) || - super.charTyped(ch, modifiers); - } - - @Override - public boolean keyPressed(final int keyCode, final int scanCode, final int modifiers) { - if (terminalWidget.keyPressed(keyCode, scanCode, modifiers)) { - return true; - } - - // Don't close with inventory binding since we usually want to use that as terminal input - // even without input capture enabled. - final InputMappings.Input input = InputMappings.getKey(keyCode, scanCode); - if (this.minecraft.options.keyInventory.isActiveAndMatches(input)) { - return true; - } - - return super.keyPressed(keyCode, scanCode, modifiers); - } - - @Override - public void init() { - super.init(); - terminalWidget.init(); - } - - @Override - public void onClose() { - super.onClose(); - terminalWidget.onClose(); - } - - /////////////////////////////////////////////////////////////////// - - private final class RobotTerminalWidget extends AbstractTerminalWidget { - public RobotTerminalWidget(final Terminal terminal) { - super(RobotTerminalScreen.this, terminal); - } - - @Override - protected boolean isRunning() { - return menu.getRobot().getVirtualMachine().isRunning(); - } - - @Override - protected void addButton(final Widget widget) { - RobotTerminalScreen.this.addButton(widget); - } - - @Override - protected void sendPowerStateToServer(final boolean value) { - Network.INSTANCE.sendToServer(new RobotPowerMessage(menu.getRobot(), value)); - } - - @Override - protected void sendTerminalInputToServer(final ByteBuffer input) { - Network.INSTANCE.sendToServer(new RobotTerminalInputMessage(menu.getRobot(), input)); - } - } } diff --git a/src/main/java/li/cil/oc2/client/gui/Sprites.java b/src/main/java/li/cil/oc2/client/gui/Sprites.java index 09cc223f..58c92a3c 100644 --- a/src/main/java/li/cil/oc2/client/gui/Sprites.java +++ b/src/main/java/li/cil/oc2/client/gui/Sprites.java @@ -30,9 +30,8 @@ public final class Sprites { public static final Sprite POWER_BUTTON_BASE = new Sprite(POWER_BUTTON_TEXTURE, 12, 12, 15, 1); public static final Sprite POWER_BUTTON_PRESSED = new Sprite(POWER_BUTTON_TEXTURE, 12, 12, 29, 1); - public static final Sprite INVENTORY_BUTTON_ACTIVE = new Sprite(INVENTORY_BUTTON_TEXTURE, 12, 12, 1, 1); - public static final Sprite INVENTORY_BUTTON_BASE = new Sprite(INVENTORY_BUTTON_TEXTURE, 12, 12, 15, 1); - public static final Sprite INVENTORY_BUTTON_PRESSED = new Sprite(INVENTORY_BUTTON_TEXTURE, 12, 12, 29, 1); + public static final Sprite INVENTORY_BUTTON_INACTIVE = new Sprite(INVENTORY_BUTTON_TEXTURE, 12, 12, 1, 1); + public static final Sprite INVENTORY_BUTTON_ACTIVE = new Sprite(INVENTORY_BUTTON_TEXTURE, 12, 12, 15, 1); public static final Sprite CONFIRM_PRESSED = new Sprite(CONFIRM_BUTTON_TEXTURE, 12, 12, 14, 1); public static final Sprite CONFIRM_BASE = new Sprite(CONFIRM_BUTTON_TEXTURE, 12, 12, 1, 1); diff --git a/src/main/java/li/cil/oc2/client/gui/Textures.java b/src/main/java/li/cil/oc2/client/gui/Textures.java index 6f0619de..042d5268 100644 --- a/src/main/java/li/cil/oc2/client/gui/Textures.java +++ b/src/main/java/li/cil/oc2/client/gui/Textures.java @@ -22,5 +22,5 @@ public final class Textures { public static final Texture ENERGY_TEXTURE = new Texture("textures/gui/widget/energy.png", 24, 26); public static final Texture POWER_BUTTON_TEXTURE = new Texture("textures/gui/widget/power_button.png", 42, 14); public static final Texture INPUT_BUTTON_TEXTURE = new Texture("textures/gui/widget/input_button.png", 42, 14); - public static final Texture INVENTORY_BUTTON_TEXTURE = new Texture("textures/gui/widget/inventory_button.png", 42, 14); + public static final Texture INVENTORY_BUTTON_TEXTURE = new Texture("textures/gui/widget/inventory_button.png", 28, 14); } diff --git a/src/main/java/li/cil/oc2/common/container/AbstractMachineContainer.java b/src/main/java/li/cil/oc2/common/container/AbstractMachineContainer.java new file mode 100644 index 00000000..36fe15a0 --- /dev/null +++ b/src/main/java/li/cil/oc2/common/container/AbstractMachineContainer.java @@ -0,0 +1,52 @@ +package li.cil.oc2.common.container; + +import li.cil.oc2.common.vm.VirtualMachine; +import net.minecraft.inventory.container.ContainerType; +import net.minecraft.util.IIntArray; +import net.minecraft.util.IntArray; + +public abstract class AbstractMachineContainer extends AbstractContainer { + private static final int ENERGY_INFO_SIZE = 3; + + public static final int ENERGY_STORED_INDEX = 0; + public static final int ENERGY_CAPACITY_INDEX = 1; + public static final int ENERGY_CONSUMPTION_INDEX = 2; + + /////////////////////////////////////////////////////////////////// + + private final IIntArray energyInfo; + + /////////////////////////////////////////////////////////////////// + + protected AbstractMachineContainer(final ContainerType type, final int id, final IIntArray energyInfo) { + super(type, id); + this.energyInfo = energyInfo; + + checkContainerDataCount(energyInfo, ENERGY_INFO_SIZE); + addDataSlots(energyInfo); + } + + /////////////////////////////////////////////////////////////////// + + public abstract VirtualMachine getVirtualMachine(); + + public abstract void sendPowerStateToServer(final boolean value); + + public int getEnergy() { + return energyInfo.get(ENERGY_STORED_INDEX); + } + + public int getEnergyCapacity() { + return energyInfo.get(ENERGY_CAPACITY_INDEX); + } + + public int getEnergyConsumption() { + return energyInfo.get(ENERGY_CONSUMPTION_INDEX); + } + + /////////////////////////////////////////////////////////////////// + + protected static IIntArray createEnergyInfo() { + return new IntArray(ENERGY_INFO_SIZE); + } +} diff --git a/src/main/java/li/cil/oc2/common/container/AbstractMachineTerminalContainer.java b/src/main/java/li/cil/oc2/common/container/AbstractMachineTerminalContainer.java index 0818caed..a2bc18db 100644 --- a/src/main/java/li/cil/oc2/common/container/AbstractMachineTerminalContainer.java +++ b/src/main/java/li/cil/oc2/common/container/AbstractMachineTerminalContainer.java @@ -1,47 +1,19 @@ package li.cil.oc2.common.container; +import li.cil.oc2.common.vm.Terminal; import net.minecraft.inventory.container.ContainerType; import net.minecraft.util.IIntArray; -import net.minecraft.util.IntArray; -public abstract class AbstractMachineTerminalContainer extends AbstractContainer { - private static final int ENERGY_INFO_SIZE = 3; - - public static final int ENERGY_STORED_INDEX = 0; - public static final int ENERGY_CAPACITY_INDEX = 1; - public static final int ENERGY_CONSUMPTION_INDEX = 2; - - /////////////////////////////////////////////////////////////////// - - private final IIntArray energyInfo; - - /////////////////////////////////////////////////////////////////// +import java.nio.ByteBuffer; +public abstract class AbstractMachineTerminalContainer extends AbstractMachineContainer { protected AbstractMachineTerminalContainer(final ContainerType type, final int id, final IIntArray energyInfo) { - super(type, id); - this.energyInfo = energyInfo; - - checkContainerDataCount(energyInfo, ENERGY_INFO_SIZE); - addDataSlots(energyInfo); + super(type, id, energyInfo); } /////////////////////////////////////////////////////////////////// - public int getEnergy() { - return energyInfo.get(ENERGY_STORED_INDEX); - } + public abstract Terminal getTerminal(); - public int getEnergyCapacity() { - return energyInfo.get(ENERGY_CAPACITY_INDEX); - } - - public int getEnergyConsumption() { - return energyInfo.get(ENERGY_CONSUMPTION_INDEX); - } - - /////////////////////////////////////////////////////////////////// - - protected static IIntArray createEnergyInfo() { - return new IntArray(3); - } + public abstract void sendTerminalInputToServer(final ByteBuffer input); } diff --git a/src/main/java/li/cil/oc2/common/container/ComputerTerminalContainer.java b/src/main/java/li/cil/oc2/common/container/ComputerTerminalContainer.java index 699234bd..c92643b5 100644 --- a/src/main/java/li/cil/oc2/common/container/ComputerTerminalContainer.java +++ b/src/main/java/li/cil/oc2/common/container/ComputerTerminalContainer.java @@ -1,7 +1,12 @@ package li.cil.oc2.common.container; import li.cil.oc2.common.block.Blocks; +import li.cil.oc2.common.network.Network; +import li.cil.oc2.common.network.message.ComputerPowerMessage; +import li.cil.oc2.common.network.message.ComputerTerminalInputMessage; import li.cil.oc2.common.tileentity.ComputerTileEntity; +import li.cil.oc2.common.vm.Terminal; +import li.cil.oc2.common.vm.VirtualMachine; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.network.PacketBuffer; @@ -11,6 +16,7 @@ import net.minecraft.util.IWorldPosCallable; import net.minecraft.util.math.BlockPos; import javax.annotation.Nullable; +import java.nio.ByteBuffer; public final class ComputerTerminalContainer extends AbstractMachineTerminalContainer { @Nullable @@ -38,8 +44,24 @@ public final class ComputerTerminalContainer extends AbstractMachineTerminalCont /////////////////////////////////////////////////////////////////// - public ComputerTileEntity getComputer() { - return computer; + @Override + public VirtualMachine getVirtualMachine() { + return computer.getVirtualMachine(); + } + + @Override + public void sendPowerStateToServer(final boolean value) { + Network.INSTANCE.sendToServer(new ComputerPowerMessage(computer, value)); + } + + @Override + public Terminal getTerminal() { + return computer.getTerminal(); + } + + @Override + public void sendTerminalInputToServer(final ByteBuffer input) { + Network.INSTANCE.sendToServer(new ComputerTerminalInputMessage(computer, input)); } @Override diff --git a/src/main/java/li/cil/oc2/common/container/RobotTerminalContainer.java b/src/main/java/li/cil/oc2/common/container/RobotTerminalContainer.java index e8eab262..62e9a1b2 100644 --- a/src/main/java/li/cil/oc2/common/container/RobotTerminalContainer.java +++ b/src/main/java/li/cil/oc2/common/container/RobotTerminalContainer.java @@ -1,7 +1,12 @@ package li.cil.oc2.common.container; -import li.cil.oc2.client.gui.AbstractTerminalWidget; +import li.cil.oc2.client.gui.AbstractMachineTerminalWidget; import li.cil.oc2.common.entity.RobotEntity; +import li.cil.oc2.common.network.Network; +import li.cil.oc2.common.network.message.RobotPowerMessage; +import li.cil.oc2.common.network.message.RobotTerminalInputMessage; +import li.cil.oc2.common.vm.Terminal; +import li.cil.oc2.common.vm.VirtualMachine; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; @@ -11,6 +16,7 @@ import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.SlotItemHandler; import javax.annotation.Nullable; +import java.nio.ByteBuffer; public final class RobotTerminalContainer extends AbstractMachineTerminalContainer { @Nullable @@ -35,8 +41,8 @@ public final class RobotTerminalContainer extends AbstractMachineTerminalContain final ItemStackHandler inventory = robot.getInventory(); for (int slot = 0; slot < inventory.getSlots(); slot++) { - final int x = (AbstractTerminalWidget.WIDTH - inventory.getSlots() * SLOT_SIZE) / 2 + 1 + slot * SLOT_SIZE; - addSlot(new SlotItemHandler(inventory, slot, x, AbstractTerminalWidget.HEIGHT + 4)); + final int x = (AbstractMachineTerminalWidget.WIDTH - inventory.getSlots() * SLOT_SIZE) / 2 + 1 + slot * SLOT_SIZE; + addSlot(new SlotItemHandler(inventory, slot, x, AbstractMachineTerminalWidget.HEIGHT + 4)); } } @@ -46,6 +52,26 @@ public final class RobotTerminalContainer extends AbstractMachineTerminalContain return robot; } + @Override + public VirtualMachine getVirtualMachine() { + return robot.getVirtualMachine(); + } + + @Override + public void sendPowerStateToServer(final boolean value) { + Network.INSTANCE.sendToServer(new RobotPowerMessage(robot, value)); + } + + @Override + public Terminal getTerminal() { + return robot.getTerminal(); + } + + @Override + public void sendTerminalInputToServer(final ByteBuffer input) { + Network.INSTANCE.sendToServer(new RobotTerminalInputMessage(robot, input)); + } + @Override public boolean stillValid(final PlayerEntity player) { return robot.isAlive() && robot.closerThan(player, 8); diff --git a/src/main/java/li/cil/oc2/common/entity/RobotEntity.java b/src/main/java/li/cil/oc2/common/entity/RobotEntity.java index ef77d372..24047210 100644 --- a/src/main/java/li/cil/oc2/common/entity/RobotEntity.java +++ b/src/main/java/li/cil/oc2/common/entity/RobotEntity.java @@ -471,11 +471,11 @@ public final class RobotEntity extends Entity implements Robot { @Override public int get(final int index) { switch (index) { - case AbstractMachineTerminalContainer.ENERGY_STORED_INDEX: + case AbstractMachineContainer.ENERGY_STORED_INDEX: return energy.getEnergyStored(); - case AbstractMachineTerminalContainer.ENERGY_CAPACITY_INDEX: + case AbstractMachineContainer.ENERGY_CAPACITY_INDEX: return energy.getMaxEnergyStored(); - case AbstractMachineTerminalContainer.ENERGY_CONSUMPTION_INDEX: + case AbstractMachineContainer.ENERGY_CONSUMPTION_INDEX: return virtualMachine.busController.getEnergyConsumption(); default: return 0; diff --git a/src/main/java/li/cil/oc2/common/tileentity/ComputerTileEntity.java b/src/main/java/li/cil/oc2/common/tileentity/ComputerTileEntity.java index 061b6b41..3d4e9777 100644 --- a/src/main/java/li/cil/oc2/common/tileentity/ComputerTileEntity.java +++ b/src/main/java/li/cil/oc2/common/tileentity/ComputerTileEntity.java @@ -15,10 +15,7 @@ import li.cil.oc2.common.bus.TileEntityDeviceBusElement; import li.cil.oc2.common.bus.device.util.BlockDeviceInfo; import li.cil.oc2.common.bus.device.util.Devices; import li.cil.oc2.common.capabilities.Capabilities; -import li.cil.oc2.common.container.AbstractMachineTerminalContainer; -import li.cil.oc2.common.container.ComputerInventoryContainer; -import li.cil.oc2.common.container.ComputerTerminalContainer; -import li.cil.oc2.common.container.DeviceItemStackHandler; +import li.cil.oc2.common.container.*; import li.cil.oc2.common.energy.FixedEnergyStorage; import li.cil.oc2.common.network.Network; import li.cil.oc2.common.network.message.ComputerBootErrorMessage; @@ -132,11 +129,11 @@ public final class ComputerTileEntity extends AbstractTileEntity implements ITic @Override public int get(final int index) { switch (index) { - case AbstractMachineTerminalContainer.ENERGY_STORED_INDEX: + case AbstractMachineContainer.ENERGY_STORED_INDEX: return energy.getEnergyStored(); - case AbstractMachineTerminalContainer.ENERGY_CAPACITY_INDEX: + case AbstractMachineContainer.ENERGY_CAPACITY_INDEX: return energy.getMaxEnergyStored(); - case AbstractMachineTerminalContainer.ENERGY_CONSUMPTION_INDEX: + case AbstractMachineContainer.ENERGY_CONSUMPTION_INDEX: return virtualMachine.busController.getEnergyConsumption(); default: return 0; diff --git a/src/main/resources/assets/oc2/textures/gui/widget/intentory_button.png b/src/main/resources/assets/oc2/textures/gui/widget/intentory_button.png deleted file mode 100644 index dc71c43d9d3425c92fae4da62f7486847db03976..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2204 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 z