Fix access to client-only type on server. Fixes #72.

This commit is contained in:
Florian Nücke
2022-01-01 04:25:08 +01:00
parent 783b405017
commit 4e30d28e8d
9 changed files with 37 additions and 8 deletions

View File

@@ -13,12 +13,15 @@ import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.FormattedText;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.world.entity.player.Inventory;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import java.util.List;
import static java.util.Arrays.asList;
import static li.cil.oc2.common.util.TooltipUtils.withColor;
@OnlyIn(Dist.CLIENT)
public abstract class AbstractMachineInventoryScreen<T extends AbstractMachineTerminalContainer> extends AbstractModContainerScreen<T> {
private static final int CONTROLS_TOP = 8;
private static final int ENERGY_TOP = CONTROLS_TOP + Sprites.SIDEBAR_2.height + 4;

View File

@@ -14,12 +14,15 @@ import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.FormattedText;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.world.entity.player.Inventory;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import java.util.List;
import static java.util.Arrays.asList;
import static li.cil.oc2.common.util.TooltipUtils.withColor;
@OnlyIn(Dist.CLIENT)
public abstract class AbstractMachineTerminalScreen<T extends AbstractMachineTerminalContainer> extends AbstractModContainerScreen<T> {
private static final int CONTROLS_TOP = 8;
private static final int ENERGY_TOP = CONTROLS_TOP + Sprites.SIDEBAR_3.height + 4;

View File

@@ -4,7 +4,10 @@ import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
public abstract class AbstractModContainerScreen<T extends AbstractContainerMenu> extends AbstractContainerScreen<T> {
public AbstractModContainerScreen(final T container, final Inventory playerInventory, final Component title) {
super(container, playerInventory, title);

View File

@@ -6,7 +6,10 @@ import li.cil.oc2.common.container.ComputerInventoryContainer;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Inventory;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
public final class ComputerContainerScreen extends AbstractMachineInventoryScreen<ComputerInventoryContainer> {
public ComputerContainerScreen(final ComputerInventoryContainer container, final Inventory inventory, final Component title) {
super(container, inventory, title);

View File

@@ -3,7 +3,10 @@ package li.cil.oc2.client.gui;
import li.cil.oc2.common.container.ComputerTerminalContainer;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Inventory;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
public final class ComputerTerminalScreen extends AbstractMachineTerminalScreen<ComputerTerminalContainer> {
public ComputerTerminalScreen(final ComputerTerminalContainer container, final Inventory playerInventory, final Component title) {
super(container, playerInventory, title);

View File

@@ -8,18 +8,21 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiComponent;
import net.minecraft.network.chat.Component;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import org.lwjgl.glfw.GLFW;
import javax.annotation.Nullable;
import java.nio.ByteBuffer;
@OnlyIn(Dist.CLIENT)
public final class MachineTerminalWidget extends GuiComponent {
public static final int TERMINAL_WIDTH = Terminal.WIDTH * Terminal.CHAR_WIDTH / 2;
public static final int TERMINAL_HEIGHT = Terminal.HEIGHT * Terminal.CHAR_HEIGHT / 2;
private static final int TERMINAL_WIDTH = Terminal.WIDTH * Terminal.CHAR_WIDTH / 2;
private static final int TERMINAL_HEIGHT = Terminal.HEIGHT * Terminal.CHAR_HEIGHT / 2;
public static final int MARGIN_SIZE = 8;
public static final int TERMINAL_X = MARGIN_SIZE;
public static final int TERMINAL_Y = MARGIN_SIZE;
private static final int MARGIN_SIZE = 8;
private static final int TERMINAL_X = MARGIN_SIZE;
private static final int TERMINAL_Y = MARGIN_SIZE;
public static final int WIDTH = Sprites.TERMINAL_SCREEN.width;
public static final int HEIGHT = Sprites.TERMINAL_SCREEN.height;

View File

@@ -6,7 +6,10 @@ import li.cil.oc2.common.container.RobotInventoryContainer;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Inventory;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
public final class RobotContainerScreen extends AbstractMachineInventoryScreen<RobotInventoryContainer> {
private static final int SLOT_SIZE = 18;

View File

@@ -6,7 +6,10 @@ import li.cil.oc2.common.container.RobotTerminalContainer;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Inventory;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
public final class RobotTerminalScreen extends AbstractMachineTerminalScreen<RobotTerminalContainer> {
private static final int SLOTS_X = (MachineTerminalWidget.WIDTH - Sprites.HOTBAR.width) / 2;
private static final int SLOTS_Y = MachineTerminalWidget.HEIGHT - 1;

View File

@@ -1,6 +1,6 @@
package li.cil.oc2.common.container;
import li.cil.oc2.client.gui.MachineTerminalWidget;
import li.cil.oc2.client.gui.Sprites;
import li.cil.oc2.common.bus.CommonDeviceBusController;
import li.cil.oc2.common.energy.FixedEnergyStorage;
import li.cil.oc2.common.entity.RobotEntity;
@@ -47,10 +47,15 @@ public final class RobotTerminalContainer extends AbstractRobotContainer {
private RobotTerminalContainer(final int id, final RobotEntity robot, final ContainerData energyInfo) {
super(Containers.ROBOT_TERMINAL.get(), id, robot, energyInfo);
// It's kinda dumb we need to access technically-client-side stuff here, but that's the nature of containers
// needing to specify display positions for some reason.
final int terminalScreenWidth = Sprites.TERMINAL_SCREEN.width;
final int terminalScreenHeight = Sprites.TERMINAL_SCREEN.height;
final ItemStackHandler inventory = robot.getInventory();
for (int slot = 0; slot < inventory.getSlots(); slot++) {
final int x = (MachineTerminalWidget.WIDTH - inventory.getSlots() * SLOT_SIZE) / 2 + 1 + slot * SLOT_SIZE;
addSlot(new SlotItemHandler(inventory, slot, x, MachineTerminalWidget.HEIGHT + 4));
final int x = (terminalScreenWidth - inventory.getSlots() * SLOT_SIZE) / 2 + 1 + slot * SLOT_SIZE;
addSlot(new SlotItemHandler(inventory, slot, x, terminalScreenHeight + 4));
}
}
}