Pull common UI logic from robot and computer into base class.

This commit is contained in:
Florian Nücke
2021-07-27 18:12:11 +02:00
parent 7b573b8810
commit e520a9db8a
14 changed files with 256 additions and 293 deletions

View File

@@ -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<T extends AbstractMachineTerminalContainer> extends ContainerScreen<T> {
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();
}
}

View File

@@ -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<? extends ITextProperties> 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) {

View File

@@ -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<ComputerTerminalContainer> {
private final ComputerTerminalWidget terminalWidget;
///////////////////////////////////////////////////////////////////
public final class ComputerTerminalScreen extends AbstractMachineTerminalScreen<ComputerTerminalContainer> {
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));
}
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB