diff --git a/src/main/java/dan200/computercraft/shared/network/NetworkHandler.java b/src/main/java/dan200/computercraft/shared/network/NetworkHandler.java index e10f8fc66..4051206ea 100644 --- a/src/main/java/dan200/computercraft/shared/network/NetworkHandler.java +++ b/src/main/java/dan200/computercraft/shared/network/NetworkHandler.java @@ -67,6 +67,7 @@ public final class NetworkHandler registerMainThread( 12, ComputerDeletedClientMessage::new ); registerMainThread( 13, ComputerTerminalClientMessage::new ); registerMainThread( 14, PlayRecordClientMessage.class, PlayRecordClientMessage::new ); + registerMainThread( 15, TerminalDimensionsClientMessage.class, TerminalDimensionsClientMessage::new ); } private static void receive( PacketContext context, PacketByteBuf buffer ) diff --git a/src/main/java/dan200/computercraft/shared/network/client/TerminalDimensionsClientMessage.java b/src/main/java/dan200/computercraft/shared/network/client/TerminalDimensionsClientMessage.java new file mode 100644 index 000000000..9a26901e2 --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/network/client/TerminalDimensionsClientMessage.java @@ -0,0 +1,70 @@ +/* + * This file is part of ComputerCraft - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2022. Do not distribute without permission. + * Send enquiries to dratcliffe@gmail.com + */ +package dan200.computercraft.shared.network.client; + +import dan200.computercraft.ComputerCraft; +import dan200.computercraft.shared.network.NetworkMessage; +import net.fabricmc.fabric.api.network.PacketContext; +import net.minecraft.network.PacketByteBuf; + +import javax.annotation.Nonnull; + +/** + * The terminal and portable computer server-side configured dimensions. + */ +public class TerminalDimensionsClientMessage implements NetworkMessage +{ + + private final int computerTermWidth; + private final int computerTermHeight; + private final int pocketTermWidth; + private final int pocketTermHeight; + private final int monitorWidth; + private final int monitorHeight; + + public TerminalDimensionsClientMessage() + { + this.computerTermWidth = ComputerCraft.computerTermWidth; + this.computerTermHeight = ComputerCraft.computerTermHeight; + this.pocketTermWidth = ComputerCraft.pocketTermWidth; + this.pocketTermHeight = ComputerCraft.pocketTermHeight; + this.monitorHeight = ComputerCraft.monitorHeight; + this.monitorWidth = ComputerCraft.monitorWidth; + } + + public TerminalDimensionsClientMessage( @Nonnull PacketByteBuf buf ) + { + computerTermWidth = buf.readVarInt(); + computerTermHeight = buf.readVarInt(); + pocketTermWidth = buf.readVarInt(); + pocketTermHeight = buf.readVarInt(); + monitorHeight = buf.readVarInt(); + monitorWidth = buf.readVarInt(); + } + + @Override + public void toBytes( PacketByteBuf buf ) + { + buf.writeVarInt( computerTermWidth ); + buf.writeVarInt( computerTermHeight ); + buf.writeVarInt( pocketTermWidth ); + buf.writeVarInt( pocketTermHeight ); + buf.writeVarInt( monitorWidth ); + buf.writeVarInt( monitorHeight ); + } + + @Override + public void handle( PacketContext context ) + { + ComputerCraft.computerTermWidth = this.computerTermWidth; + ComputerCraft.computerTermHeight = this.computerTermHeight; + ComputerCraft.pocketTermWidth = this.pocketTermWidth; + ComputerCraft.pocketTermHeight = this.pocketTermHeight; + ComputerCraft.monitorWidth = this.monitorWidth; + ComputerCraft.monitorHeight = this.monitorHeight; + } + +} diff --git a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java index 73d0a8281..250d62f68 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java @@ -23,6 +23,7 @@ import dan200.computercraft.shared.data.HasComputerIdLootCondition; import dan200.computercraft.shared.data.PlayerCreativeLootCondition; import dan200.computercraft.shared.media.items.RecordMedia; import dan200.computercraft.shared.network.NetworkHandler; +import dan200.computercraft.shared.network.client.TerminalDimensionsClientMessage; import dan200.computercraft.shared.peripheral.commandblock.CommandBlockPeripheral; import dan200.computercraft.shared.peripheral.generic.methods.InventoryMethods; import dan200.computercraft.shared.peripheral.modem.wireless.WirelessNetwork; @@ -34,6 +35,7 @@ import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerBlockEntityEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; +import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.fabricmc.fabric.api.resource.ResourceManagerHelper; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.CommandBlockBlockEntity; @@ -128,6 +130,10 @@ public final class ComputerCraftProxyCommon // Config ServerLifecycleEvents.SERVER_STARTING.register( Config::serverStarting ); ServerLifecycleEvents.SERVER_STOPPING.register( Config::serverStopping ); + ServerPlayConnectionEvents.JOIN.register( ( listener, sender, server ) -> + { + NetworkHandler.sendToPlayer( listener.player, new TerminalDimensionsClientMessage() ); + } ); TurtleEvent.EVENT_BUS.register( FurnaceRefuelHandler.INSTANCE ); TurtleEvent.EVENT_BUS.register( new TurtlePermissions() );