From 048c7bda2335cfcb181c2680d1515a730d3aff14 Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Mon, 30 Aug 2021 18:46:39 +0100 Subject: [PATCH] Allow opening pocket computers without rendering a terminal When placed in the off hand, pocket computers now render a different screen when opened in the off-hand, just rendering text at the top of the screen rather than "opening" the whole computer. This means you can view the world and computer in your hand at the same time, effectively allowing you to emulate the Plethora/MoarPeripherals keyboard (and much more). This currently requires you to move the pocket computer to the other hand to open it normally. I did look into allowing for shift+right click to open normally, but this is awkward when you're looking at a something like a monitor - you need to shift as otherwise you'd click the block! Plethora hooks into onItemUseFirst instead, and this might be an option in the future - meaning that right click would always open some computer GUI and never the blocks. This may be something we change in the future - let's get some feedback first! Closes #861. Apologies for this essay, but if you got this far you were probably interested! --- .../computercraft/client/ClientRegistry.java | 8 +- .../computercraft/client/gui/GuiComputer.java | 6 +- .../client/gui/NoTermComputerScreen.java | 108 ++++++++++++++++++ .../client/gui/widgets/WidgetTerminal.java | 1 + .../dan200/computercraft/shared/Registry.java | 14 ++- .../shared/computer/blocks/TileComputer.java | 7 +- .../computer/inventory/ContainerComputer.java | 24 ---- .../inventory/ContainerComputerBase.java | 4 +- .../network/container/ContainerData.java | 29 +++++ .../inventory/ContainerPocketComputer.java | 69 ----------- .../inventory/PocketComputerMenuProvider.java | 61 ++++++++++ .../pocket/items/ItemPocketComputer.java | 5 +- .../assets/computercraft/lang/en_us.json | 3 +- 13 files changed, 224 insertions(+), 115 deletions(-) create mode 100644 src/main/java/dan200/computercraft/client/gui/NoTermComputerScreen.java delete mode 100644 src/main/java/dan200/computercraft/shared/computer/inventory/ContainerComputer.java delete mode 100644 src/main/java/dan200/computercraft/shared/pocket/inventory/ContainerPocketComputer.java create mode 100644 src/main/java/dan200/computercraft/shared/pocket/inventory/PocketComputerMenuProvider.java diff --git a/src/main/java/dan200/computercraft/client/ClientRegistry.java b/src/main/java/dan200/computercraft/client/ClientRegistry.java index fccf3f0de..f1629b070 100644 --- a/src/main/java/dan200/computercraft/client/ClientRegistry.java +++ b/src/main/java/dan200/computercraft/client/ClientRegistry.java @@ -13,11 +13,10 @@ import dan200.computercraft.client.render.TurtleModelLoader; import dan200.computercraft.client.render.TurtlePlayerRenderer; import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.common.IColouredItem; -import dan200.computercraft.shared.computer.inventory.ContainerComputer; +import dan200.computercraft.shared.computer.inventory.ContainerComputerBase; import dan200.computercraft.shared.computer.inventory.ContainerViewComputer; import dan200.computercraft.shared.media.items.ItemDisk; import dan200.computercraft.shared.media.items.ItemTreasureDisk; -import dan200.computercraft.shared.pocket.inventory.ContainerPocketComputer; import dan200.computercraft.shared.pocket.items.ItemPocketComputer; import dan200.computercraft.shared.util.Colour; import net.minecraft.client.gui.ScreenManager; @@ -168,8 +167,9 @@ public final class ClientRegistry { // My IDE doesn't think so, but we do actually need these generics. - ScreenManager.>register( Registry.ModContainers.COMPUTER.get(), GuiComputer::create ); - ScreenManager.>register( Registry.ModContainers.POCKET_COMPUTER.get(), GuiComputer::createPocket ); + ScreenManager.>register( Registry.ModContainers.COMPUTER.get(), GuiComputer::create ); + ScreenManager.>register( Registry.ModContainers.POCKET_COMPUTER.get(), GuiComputer::createPocket ); + ScreenManager.>register( Registry.ModContainers.POCKET_COMPUTER_NO_TERM.get(), NoTermComputerScreen::new ); ScreenManager.register( Registry.ModContainers.TURTLE.get(), GuiTurtle::new ); ScreenManager.register( Registry.ModContainers.PRINTER.get(), GuiPrinter::new ); diff --git a/src/main/java/dan200/computercraft/client/gui/GuiComputer.java b/src/main/java/dan200/computercraft/client/gui/GuiComputer.java index 05164cb67..6d3404632 100644 --- a/src/main/java/dan200/computercraft/client/gui/GuiComputer.java +++ b/src/main/java/dan200/computercraft/client/gui/GuiComputer.java @@ -11,10 +11,8 @@ import dan200.computercraft.ComputerCraft; import dan200.computercraft.client.gui.widgets.ComputerSidebar; import dan200.computercraft.client.gui.widgets.WidgetTerminal; import dan200.computercraft.client.render.ComputerBorderRenderer; -import dan200.computercraft.shared.computer.inventory.ContainerComputer; import dan200.computercraft.shared.computer.inventory.ContainerComputerBase; import dan200.computercraft.shared.computer.inventory.ContainerViewComputer; -import dan200.computercraft.shared.pocket.inventory.ContainerPocketComputer; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.util.text.ITextComponent; @@ -39,7 +37,7 @@ public final class GuiComputer extends Computer imageHeight = WidgetTerminal.getHeight( termHeight ) + BORDER * 2; } - public static GuiComputer create( ContainerComputer container, PlayerInventory inventory, ITextComponent component ) + public static GuiComputer create( ContainerComputerBase container, PlayerInventory inventory, ITextComponent component ) { return new GuiComputer<>( container, inventory, component, @@ -47,7 +45,7 @@ public final class GuiComputer extends Computer ); } - public static GuiComputer createPocket( ContainerPocketComputer container, PlayerInventory inventory, ITextComponent component ) + public static GuiComputer createPocket( ContainerComputerBase container, PlayerInventory inventory, ITextComponent component ) { return new GuiComputer<>( container, inventory, component, diff --git a/src/main/java/dan200/computercraft/client/gui/NoTermComputerScreen.java b/src/main/java/dan200/computercraft/client/gui/NoTermComputerScreen.java new file mode 100644 index 000000000..ca1edee7a --- /dev/null +++ b/src/main/java/dan200/computercraft/client/gui/NoTermComputerScreen.java @@ -0,0 +1,108 @@ +/* + * This file is part of ComputerCraft - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2021. Do not distribute without permission. + * Send enquiries to dratcliffe@gmail.com + */ +package dan200.computercraft.client.gui; + +import com.mojang.blaze3d.matrix.MatrixStack; +import dan200.computercraft.ComputerCraft; +import dan200.computercraft.client.gui.widgets.WidgetTerminal; +import dan200.computercraft.shared.computer.core.ClientComputer; +import dan200.computercraft.shared.computer.inventory.ContainerComputerBase; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.IHasContainer; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.util.IReorderingProcessor; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import org.lwjgl.glfw.GLFW; + +import javax.annotation.Nonnull; +import java.util.List; + +public class NoTermComputerScreen extends Screen implements IHasContainer +{ + private final T menu; + private WidgetTerminal terminal; + + public NoTermComputerScreen( T menu, PlayerInventory player, ITextComponent title ) + { + super( title ); + this.menu = menu; + } + + @Nonnull + @Override + public T getMenu() + { + return menu; + } + + @Override + protected void init() + { + super.init(); + minecraft.keyboardHandler.setSendRepeatsToGui( true ); + + terminal = addWidget( new WidgetTerminal( (ClientComputer) menu.getComputer(), 0, 0, ComputerCraft.pocketTermWidth, ComputerCraft.pocketTermHeight ) ); + terminal.visible = false; + terminal.active = false; + setFocused( terminal ); + } + + @Override + public final void removed() + { + super.removed(); + minecraft.keyboardHandler.setSendRepeatsToGui( false ); + } + + @Override + public final void tick() + { + super.tick(); + terminal.update(); + } + + @Override + public void onClose() + { + minecraft.player.closeContainer(); + super.onClose(); + } + + @Override + public boolean isPauseScreen() + { + return false; + } + + @Override + public final boolean keyPressed( int key, int scancode, int modifiers ) + { + // Forward the tab key to the terminal, rather than moving between controls. + if( key == GLFW.GLFW_KEY_TAB && getFocused() != null && getFocused() == terminal ) + { + return getFocused().keyPressed( key, scancode, modifiers ); + } + + return super.keyPressed( key, scancode, modifiers ); + } + + @Override + public void render( MatrixStack transform, int mouseX, int mouseY, float partialTicks ) + { + super.render( transform, mouseX, mouseY, partialTicks ); + + FontRenderer font = minecraft.font; + List lines = font.split( new TranslationTextComponent( "gui.computercraft.pocket_computer_overlay" ), (int) (width * 0.8) ); + float y = 10.0f; + for( IReorderingProcessor line : lines ) + { + font.drawShadow( transform, line, (float) ((width / 2) - (minecraft.font.width( line ) / 2)), y, 0xFFFFFF ); + y += 9.0f; + } + } +} diff --git a/src/main/java/dan200/computercraft/client/gui/widgets/WidgetTerminal.java b/src/main/java/dan200/computercraft/client/gui/widgets/WidgetTerminal.java index ead0fd81d..19b1da7d1 100644 --- a/src/main/java/dan200/computercraft/client/gui/widgets/WidgetTerminal.java +++ b/src/main/java/dan200/computercraft/client/gui/widgets/WidgetTerminal.java @@ -311,6 +311,7 @@ public class WidgetTerminal extends Widget @Override public void render( @Nonnull MatrixStack transform, int mouseX, int mouseY, float partialTicks ) { + if( !visible ) return; Matrix4f matrix = transform.last().pose(); Terminal terminal = computer.getTerminal(); if( terminal != null ) diff --git a/src/main/java/dan200/computercraft/shared/Registry.java b/src/main/java/dan200/computercraft/shared/Registry.java index 4b18fa6b8..ed8053cce 100644 --- a/src/main/java/dan200/computercraft/shared/Registry.java +++ b/src/main/java/dan200/computercraft/shared/Registry.java @@ -18,7 +18,7 @@ import dan200.computercraft.shared.computer.blocks.BlockComputer; import dan200.computercraft.shared.computer.blocks.TileCommandComputer; import dan200.computercraft.shared.computer.blocks.TileComputer; import dan200.computercraft.shared.computer.core.ComputerFamily; -import dan200.computercraft.shared.computer.inventory.ContainerComputer; +import dan200.computercraft.shared.computer.inventory.ContainerComputerBase; import dan200.computercraft.shared.computer.inventory.ContainerViewComputer; import dan200.computercraft.shared.computer.items.ItemComputer; import dan200.computercraft.shared.computer.recipe.ComputerUpgradeRecipe; @@ -53,7 +53,6 @@ import dan200.computercraft.shared.peripheral.printer.ContainerPrinter; import dan200.computercraft.shared.peripheral.printer.TilePrinter; import dan200.computercraft.shared.peripheral.speaker.BlockSpeaker; import dan200.computercraft.shared.peripheral.speaker.TileSpeaker; -import dan200.computercraft.shared.pocket.inventory.ContainerPocketComputer; import dan200.computercraft.shared.pocket.items.ItemPocketComputer; import dan200.computercraft.shared.pocket.peripherals.PocketModem; import dan200.computercraft.shared.pocket.peripherals.PocketSpeaker; @@ -312,11 +311,14 @@ public final class Registry { static final DeferredRegister> CONTAINERS = DeferredRegister.create( ForgeRegistries.CONTAINERS, ComputerCraft.MOD_ID ); - public static final RegistryObject> COMPUTER = CONTAINERS.register( "computer", - () -> ContainerData.toType( ComputerContainerData::new, ContainerComputer::new ) ); + public static final RegistryObject> COMPUTER = CONTAINERS.register( "computer", + () -> ContainerData.toType( ComputerContainerData::new, ContainerComputerBase::new ) ); - public static final RegistryObject> POCKET_COMPUTER = CONTAINERS.register( "pocket_computer", - () -> ContainerData.toType( ComputerContainerData::new, ContainerPocketComputer::new ) ); + public static final RegistryObject> POCKET_COMPUTER = CONTAINERS.register( "pocket_computer", + () -> ContainerData.toType( ComputerContainerData::new, ContainerComputerBase::new ) ); + + public static final RegistryObject> POCKET_COMPUTER_NO_TERM = CONTAINERS.register( "pocket_computer_no_term", + () -> ContainerData.toType( ComputerContainerData::new, ContainerComputerBase::new ) ); public static final RegistryObject> TURTLE = CONTAINERS.register( "turtle", () -> ContainerData.toType( ComputerContainerData::new, ContainerTurtle::new ) ); diff --git a/src/main/java/dan200/computercraft/shared/computer/blocks/TileComputer.java b/src/main/java/dan200/computercraft/shared/computer/blocks/TileComputer.java index 23a4a7d6f..eb92fdfbe 100644 --- a/src/main/java/dan200/computercraft/shared/computer/blocks/TileComputer.java +++ b/src/main/java/dan200/computercraft/shared/computer/blocks/TileComputer.java @@ -8,10 +8,11 @@ package dan200.computercraft.shared.computer.blocks; import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.core.computer.ComputerSide; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.computer.core.ComputerState; import dan200.computercraft.shared.computer.core.ServerComputer; -import dan200.computercraft.shared.computer.inventory.ContainerComputer; +import dan200.computercraft.shared.computer.inventory.ContainerComputerBase; import dan200.computercraft.shared.util.CapabilityUtil; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; @@ -50,7 +51,7 @@ public class TileComputer extends TileComputerBase return computer; } - public boolean isUsableByPlayer( PlayerEntity player ) + protected boolean isUsableByPlayer( PlayerEntity player ) { return isUsable( player, false ); } @@ -85,7 +86,7 @@ public class TileComputer extends TileComputerBase @Override public Container createMenu( int id, @Nonnull PlayerInventory inventory, @Nonnull PlayerEntity player ) { - return new ContainerComputer( id, this ); + return new ContainerComputerBase( Registry.ModContainers.COMPUTER.get(), id, this::isUsableByPlayer, createServerComputer(), getFamily() ); } @Nonnull diff --git a/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerComputer.java b/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerComputer.java deleted file mode 100644 index f2ead9dad..000000000 --- a/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerComputer.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2021. Do not distribute without permission. - * Send enquiries to dratcliffe@gmail.com - */ -package dan200.computercraft.shared.computer.inventory; - -import dan200.computercraft.shared.Registry; -import dan200.computercraft.shared.computer.blocks.TileComputer; -import dan200.computercraft.shared.network.container.ComputerContainerData; -import net.minecraft.entity.player.PlayerInventory; - -public class ContainerComputer extends ContainerComputerBase -{ - public ContainerComputer( int id, TileComputer tile ) - { - super( Registry.ModContainers.COMPUTER.get(), id, tile::isUsableByPlayer, tile.createServerComputer(), tile.getFamily() ); - } - - public ContainerComputer( int id, PlayerInventory player, ComputerContainerData data ) - { - super( Registry.ModContainers.COMPUTER.get(), id, player, data ); - } -} diff --git a/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerComputerBase.java b/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerComputerBase.java index 0ff641c57..5dd47c15e 100644 --- a/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerComputerBase.java +++ b/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerComputerBase.java @@ -46,7 +46,7 @@ public class ContainerComputerBase extends Container implements IContainerComput private UUID toUploadId; private List toUpload; - protected ContainerComputerBase( ContainerType type, int id, Predicate canUse, IComputer computer, ComputerFamily family ) + public ContainerComputerBase( ContainerType type, int id, Predicate canUse, IComputer computer, ComputerFamily family ) { super( type, id ); this.canUse = canUse; @@ -54,7 +54,7 @@ public class ContainerComputerBase extends Container implements IContainerComput this.family = family; } - protected ContainerComputerBase( ContainerType type, int id, PlayerInventory player, ComputerContainerData data ) + public ContainerComputerBase( ContainerType type, int id, PlayerInventory player, ComputerContainerData data ) { this( type, id, x -> true, getComputer( player, data ), data.getFamily() ); } diff --git a/src/main/java/dan200/computercraft/shared/network/container/ContainerData.java b/src/main/java/dan200/computercraft/shared/network/container/ContainerData.java index 90787fc0f..fd81d78b3 100644 --- a/src/main/java/dan200/computercraft/shared/network/container/ContainerData.java +++ b/src/main/java/dan200/computercraft/shared/network/container/ContainerData.java @@ -13,6 +13,7 @@ import net.minecraft.inventory.container.ContainerType; import net.minecraft.inventory.container.INamedContainerProvider; import net.minecraft.network.PacketBuffer; import net.minecraftforge.common.extensions.IForgeContainerType; +import net.minecraftforge.fml.network.IContainerFactory; import net.minecraftforge.fml.network.NetworkHooks; import javax.annotation.Nonnull; @@ -37,8 +38,36 @@ public interface ContainerData return IForgeContainerType.create( ( id, player, data ) -> factory.create( id, player, reader.apply( data ) ) ); } + static ContainerType toType( Function reader, FixedFactory factory ) + { + return new FixedPointContainerFactory<>( reader, factory ).type; + } + interface Factory { C create( int id, @Nonnull PlayerInventory inventory, T data ); } + + interface FixedFactory + { + C create( ContainerType type, int id, @Nonnull PlayerInventory inventory, T data ); + } + + class FixedPointContainerFactory implements IContainerFactory + { + private final IContainerFactory impl; + private final ContainerType type; + + private FixedPointContainerFactory( Function reader, FixedFactory factory ) + { + ContainerType type = this.type = IForgeContainerType.create( this ); + impl = ( id, player, data ) -> factory.create( type, id, player, reader.apply( data ) ); + } + + @Override + public C create( int windowId, PlayerInventory inv, PacketBuffer data ) + { + return impl.create( windowId, inv, data ); + } + } } diff --git a/src/main/java/dan200/computercraft/shared/pocket/inventory/ContainerPocketComputer.java b/src/main/java/dan200/computercraft/shared/pocket/inventory/ContainerPocketComputer.java deleted file mode 100644 index 3cf67f103..000000000 --- a/src/main/java/dan200/computercraft/shared/pocket/inventory/ContainerPocketComputer.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2021. Do not distribute without permission. - * Send enquiries to dratcliffe@gmail.com - */ -package dan200.computercraft.shared.pocket.inventory; - -import dan200.computercraft.shared.Registry; -import dan200.computercraft.shared.computer.core.ServerComputer; -import dan200.computercraft.shared.computer.inventory.ContainerComputerBase; -import dan200.computercraft.shared.network.container.ComputerContainerData; -import dan200.computercraft.shared.pocket.items.ItemPocketComputer; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.Container; -import net.minecraft.inventory.container.INamedContainerProvider; -import net.minecraft.item.ItemStack; -import net.minecraft.util.Hand; -import net.minecraft.util.text.ITextComponent; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -public final class ContainerPocketComputer extends ContainerComputerBase -{ - private ContainerPocketComputer( int id, ServerComputer computer, ItemPocketComputer item, Hand hand ) - { - super( Registry.ModContainers.POCKET_COMPUTER.get(), id, p -> { - ItemStack stack = p.getItemInHand( hand ); - return stack.getItem() == item && ItemPocketComputer.getServerComputer( stack ) == computer; - }, computer, item.getFamily() ); - } - - public ContainerPocketComputer( int id, PlayerInventory player, ComputerContainerData data ) - { - super( Registry.ModContainers.POCKET_COMPUTER.get(), id, player, data ); - } - - public static class Factory implements INamedContainerProvider - { - private final ServerComputer computer; - private final ITextComponent name; - private final ItemPocketComputer item; - private final Hand hand; - - public Factory( ServerComputer computer, ItemStack stack, ItemPocketComputer item, Hand hand ) - { - this.computer = computer; - name = stack.getHoverName(); - this.item = item; - this.hand = hand; - } - - - @Nonnull - @Override - public ITextComponent getDisplayName() - { - return name; - } - - @Nullable - @Override - public Container createMenu( int id, @Nonnull PlayerInventory inventory, @Nonnull PlayerEntity entity ) - { - return new ContainerPocketComputer( id, computer, item, hand ); - } - } -} diff --git a/src/main/java/dan200/computercraft/shared/pocket/inventory/PocketComputerMenuProvider.java b/src/main/java/dan200/computercraft/shared/pocket/inventory/PocketComputerMenuProvider.java new file mode 100644 index 000000000..0a08ece1a --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/pocket/inventory/PocketComputerMenuProvider.java @@ -0,0 +1,61 @@ +/* + * This file is part of ComputerCraft - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2021. Do not distribute without permission. + * Send enquiries to dratcliffe@gmail.com + */ +package dan200.computercraft.shared.pocket.inventory; + +import dan200.computercraft.shared.Registry; +import dan200.computercraft.shared.computer.core.ServerComputer; +import dan200.computercraft.shared.computer.inventory.ContainerComputerBase; +import dan200.computercraft.shared.pocket.items.ItemPocketComputer; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.container.Container; +import net.minecraft.inventory.container.INamedContainerProvider; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Hand; +import net.minecraft.util.text.ITextComponent; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public class PocketComputerMenuProvider implements INamedContainerProvider +{ + private final ServerComputer computer; + private final ITextComponent name; + private final ItemPocketComputer item; + private final Hand hand; + private final boolean isTypingOnly; + + public PocketComputerMenuProvider( ServerComputer computer, ItemStack stack, ItemPocketComputer item, Hand hand, boolean isTypingOnly ) + { + this.computer = computer; + name = stack.getHoverName(); + this.item = item; + this.hand = hand; + this.isTypingOnly = isTypingOnly; + } + + + @Nonnull + @Override + public ITextComponent getDisplayName() + { + return name; + } + + @Nullable + @Override + public Container createMenu( int id, @Nonnull PlayerInventory inventory, @Nonnull PlayerEntity entity ) + { + return new ContainerComputerBase( + isTypingOnly ? Registry.ModContainers.POCKET_COMPUTER_NO_TERM.get() : Registry.ModContainers.POCKET_COMPUTER.get(), id, + p -> { + ItemStack stack = p.getItemInHand( hand ); + return stack.getItem() == item && ItemPocketComputer.getServerComputer( stack ) == computer; + }, + computer, item.getFamily() + ); + } +} diff --git a/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java b/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java index b029d90e6..b937877a8 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java +++ b/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java @@ -22,7 +22,7 @@ import dan200.computercraft.shared.computer.items.IComputerItem; import dan200.computercraft.shared.network.container.ComputerContainerData; import dan200.computercraft.shared.pocket.apis.PocketAPI; import dan200.computercraft.shared.pocket.core.PocketServerComputer; -import dan200.computercraft.shared.pocket.inventory.ContainerPocketComputer; +import dan200.computercraft.shared.pocket.inventory.PocketComputerMenuProvider; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; @@ -154,7 +154,8 @@ public class ItemPocketComputer extends Item implements IComputerItem, IMedia, I if( !stop && computer != null ) { - new ComputerContainerData( computer ).open( player, new ContainerPocketComputer.Factory( computer, stack, this, hand ) ); + boolean isTypingOnly = hand == Hand.OFF_HAND; + new ComputerContainerData( computer ).open( player, new PocketComputerMenuProvider( computer, stack, this, hand, isTypingOnly ) ); } } return new ActionResult<>( ActionResultType.SUCCESS, stack ); diff --git a/src/main/resources/assets/computercraft/lang/en_us.json b/src/main/resources/assets/computercraft/lang/en_us.json index 5d10c6607..e19fd33e6 100644 --- a/src/main/resources/assets/computercraft/lang/en_us.json +++ b/src/main/resources/assets/computercraft/lang/en_us.json @@ -130,5 +130,6 @@ "gui.computercraft.upload.failed.corrupted": "Files corrupted when uploading. Please try again.", "gui.computercraft.upload.overwrite": "Files would be overwritten", "gui.computercraft.upload.overwrite.detail": "The following files will be overwritten when uploading. Continue?%s", - "gui.computercraft.upload.overwrite_button": "Overwrite" + "gui.computercraft.upload.overwrite_button": "Overwrite", + "gui.computercraft.pocket_computer_overlay": "Pocket computer open. Press ESC to close." }