From fb281bd5fa8bc1290a2ddecd8f5c00a366ac9461 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Wed, 30 Sep 2020 13:34:37 +0200 Subject: [PATCH] Small rename. Check if chunk exists before accessing it on server. --- .../li/cil/oc2/client/gui/TerminalScreen.java | 4 +- ...java => AbstractTerminalBlockMessage.java} | 8 ++-- .../network/ComputerTerminalInputMessage.java | 34 ----------------- .../li/cil/oc2/common/network/Network.java | 16 ++++---- .../network/TerminalBlockInputMessage.java | 37 +++++++++++++++++++ ...e.java => TerminalBlockOutputMessage.java} | 8 ++-- .../cil/oc2/common/network/package-info.java | 7 ++++ .../oc2/common/tile/ComputerTileEntity.java | 4 +- 8 files changed, 64 insertions(+), 54 deletions(-) rename src/main/java/li/cil/oc2/common/network/{AbstractComputerTerminalMessage.java => AbstractTerminalBlockMessage.java} (69%) delete mode 100644 src/main/java/li/cil/oc2/common/network/ComputerTerminalInputMessage.java create mode 100644 src/main/java/li/cil/oc2/common/network/TerminalBlockInputMessage.java rename src/main/java/li/cil/oc2/common/network/{ComputerTerminalOutputMessage.java => TerminalBlockOutputMessage.java} (68%) create mode 100644 src/main/java/li/cil/oc2/common/network/package-info.java diff --git a/src/main/java/li/cil/oc2/client/gui/TerminalScreen.java b/src/main/java/li/cil/oc2/client/gui/TerminalScreen.java index 12931f60..634d4c3e 100644 --- a/src/main/java/li/cil/oc2/client/gui/TerminalScreen.java +++ b/src/main/java/li/cil/oc2/client/gui/TerminalScreen.java @@ -5,7 +5,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import li.cil.oc2.api.API; import li.cil.oc2.client.gui.terminal.Terminal; import li.cil.oc2.client.gui.terminal.TerminalInput; -import li.cil.oc2.common.network.ComputerTerminalInputMessage; +import li.cil.oc2.common.network.TerminalBlockInputMessage; import li.cil.oc2.common.network.Network; import li.cil.oc2.common.tile.ComputerTileEntity; import net.minecraft.client.gui.screen.Screen; @@ -69,7 +69,7 @@ public final class TerminalScreen extends Screen { final ByteBuffer input = terminal.getInput(); if (input != null) { - Network.INSTANCE.sendToServer(new ComputerTerminalInputMessage(tileEntity, input)); + Network.INSTANCE.sendToServer(new TerminalBlockInputMessage(tileEntity, input)); } } diff --git a/src/main/java/li/cil/oc2/common/network/AbstractComputerTerminalMessage.java b/src/main/java/li/cil/oc2/common/network/AbstractTerminalBlockMessage.java similarity index 69% rename from src/main/java/li/cil/oc2/common/network/AbstractComputerTerminalMessage.java rename to src/main/java/li/cil/oc2/common/network/AbstractTerminalBlockMessage.java index dd61ccee..b43718f7 100644 --- a/src/main/java/li/cil/oc2/common/network/AbstractComputerTerminalMessage.java +++ b/src/main/java/li/cil/oc2/common/network/AbstractTerminalBlockMessage.java @@ -6,16 +6,16 @@ import net.minecraft.util.math.BlockPos; import java.nio.ByteBuffer; -public abstract class AbstractComputerTerminalMessage { +public abstract class AbstractTerminalBlockMessage { protected BlockPos pos; protected byte[] data; - public AbstractComputerTerminalMessage(final ComputerTileEntity tileEntity, final ByteBuffer data) { + protected AbstractTerminalBlockMessage(final ComputerTileEntity tileEntity, final ByteBuffer data) { this.pos = tileEntity.getPos(); this.data = data.array(); } - public AbstractComputerTerminalMessage(final PacketBuffer buffer) { + protected AbstractTerminalBlockMessage(final PacketBuffer buffer) { fromBytes(buffer); } @@ -24,7 +24,7 @@ public abstract class AbstractComputerTerminalMessage { data = buffer.readByteArray(); } - public static void toBytes(final AbstractComputerTerminalMessage message, final PacketBuffer buffer) { + public static void toBytes(final AbstractTerminalBlockMessage message, final PacketBuffer buffer) { buffer.writeBlockPos(message.pos); buffer.writeByteArray(message.data); } diff --git a/src/main/java/li/cil/oc2/common/network/ComputerTerminalInputMessage.java b/src/main/java/li/cil/oc2/common/network/ComputerTerminalInputMessage.java deleted file mode 100644 index 21de48da..00000000 --- a/src/main/java/li/cil/oc2/common/network/ComputerTerminalInputMessage.java +++ /dev/null @@ -1,34 +0,0 @@ -package li.cil.oc2.common.network; - -import li.cil.oc2.common.tile.ComputerTileEntity; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.network.PacketBuffer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.server.ServerWorld; -import net.minecraftforge.fml.network.NetworkEvent; - -import java.nio.ByteBuffer; -import java.util.function.Supplier; - -public final class ComputerTerminalInputMessage extends AbstractComputerTerminalMessage { - public ComputerTerminalInputMessage(final ComputerTileEntity tileEntity, final ByteBuffer data) { - super(tileEntity, data); - } - - public ComputerTerminalInputMessage(final PacketBuffer buffer) { - super(buffer); - } - - public static boolean handleInput(final AbstractComputerTerminalMessage message, final Supplier context) { - context.get().enqueueWork(() -> { - final ServerPlayerEntity player = context.get().getSender(); - if (player == null) return; - final ServerWorld world = player.getServerWorld(); - // TODO Check if chunk is loaded first. - final TileEntity tileEntity = world.getTileEntity(message.pos); - if (!(tileEntity instanceof ComputerTileEntity)) return; - ((ComputerTileEntity) tileEntity).getTerminal().putInput(ByteBuffer.wrap(message.data)); - }); - return true; - } -} diff --git a/src/main/java/li/cil/oc2/common/network/Network.java b/src/main/java/li/cil/oc2/common/network/Network.java index a63e1b6d..2391f0ad 100644 --- a/src/main/java/li/cil/oc2/common/network/Network.java +++ b/src/main/java/li/cil/oc2/common/network/Network.java @@ -18,16 +18,16 @@ public final class Network { ); public static void setup() { - INSTANCE.messageBuilder(ComputerTerminalOutputMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_CLIENT) - .encoder(ComputerTerminalOutputMessage::toBytes) - .decoder(ComputerTerminalOutputMessage::new) - .consumer(ComputerTerminalOutputMessage::handleOutput) + INSTANCE.messageBuilder(TerminalBlockOutputMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_CLIENT) + .encoder(TerminalBlockOutputMessage::toBytes) + .decoder(TerminalBlockOutputMessage::new) + .consumer(TerminalBlockOutputMessage::handleOutput) .add(); - INSTANCE.messageBuilder(ComputerTerminalInputMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_SERVER) - .encoder(ComputerTerminalInputMessage::toBytes) - .decoder(ComputerTerminalInputMessage::new) - .consumer(ComputerTerminalInputMessage::handleInput) + INSTANCE.messageBuilder(TerminalBlockInputMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_SERVER) + .encoder(TerminalBlockInputMessage::toBytes) + .decoder(TerminalBlockInputMessage::new) + .consumer(TerminalBlockInputMessage::handleInput) .add(); } diff --git a/src/main/java/li/cil/oc2/common/network/TerminalBlockInputMessage.java b/src/main/java/li/cil/oc2/common/network/TerminalBlockInputMessage.java new file mode 100644 index 00000000..cb78868a --- /dev/null +++ b/src/main/java/li/cil/oc2/common/network/TerminalBlockInputMessage.java @@ -0,0 +1,37 @@ +package li.cil.oc2.common.network; + +import li.cil.oc2.common.tile.ComputerTileEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.network.PacketBuffer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.fml.network.NetworkEvent; + +import java.nio.ByteBuffer; +import java.util.function.Supplier; + +public final class TerminalBlockInputMessage extends AbstractTerminalBlockMessage { + public TerminalBlockInputMessage(final ComputerTileEntity tileEntity, final ByteBuffer data) { + super(tileEntity, data); + } + + public TerminalBlockInputMessage(final PacketBuffer buffer) { + super(buffer); + } + + public static boolean handleInput(final AbstractTerminalBlockMessage message, final Supplier context) { + context.get().enqueueWork(() -> { + final ServerPlayerEntity player = context.get().getSender(); + if (player == null) return; + final ServerWorld world = player.getServerWorld(); + final ChunkPos chunkPos = new ChunkPos(message.pos); + if (world.chunkExists(chunkPos.x, chunkPos.z)) { + final TileEntity tileEntity = world.getTileEntity(message.pos); + if (!(tileEntity instanceof ComputerTileEntity)) return; + ((ComputerTileEntity) tileEntity).getTerminal().putInput(ByteBuffer.wrap(message.data)); + } + }); + return true; + } +} diff --git a/src/main/java/li/cil/oc2/common/network/ComputerTerminalOutputMessage.java b/src/main/java/li/cil/oc2/common/network/TerminalBlockOutputMessage.java similarity index 68% rename from src/main/java/li/cil/oc2/common/network/ComputerTerminalOutputMessage.java rename to src/main/java/li/cil/oc2/common/network/TerminalBlockOutputMessage.java index ae08957f..89f11c7e 100644 --- a/src/main/java/li/cil/oc2/common/network/ComputerTerminalOutputMessage.java +++ b/src/main/java/li/cil/oc2/common/network/TerminalBlockOutputMessage.java @@ -10,16 +10,16 @@ import net.minecraftforge.fml.network.NetworkEvent; import java.nio.ByteBuffer; import java.util.function.Supplier; -public final class ComputerTerminalOutputMessage extends AbstractComputerTerminalMessage { - public ComputerTerminalOutputMessage(final ComputerTileEntity tileEntity, final ByteBuffer data) { +public final class TerminalBlockOutputMessage extends AbstractTerminalBlockMessage { + public TerminalBlockOutputMessage(final ComputerTileEntity tileEntity, final ByteBuffer data) { super(tileEntity, data); } - public ComputerTerminalOutputMessage(final PacketBuffer buffer) { + public TerminalBlockOutputMessage(final PacketBuffer buffer) { super(buffer); } - public static boolean handleOutput(final AbstractComputerTerminalMessage message, final Supplier context) { + public static boolean handleOutput(final AbstractTerminalBlockMessage message, final Supplier context) { context.get().enqueueWork(() -> { final ClientWorld world = Minecraft.getInstance().world; if (world == null) return; diff --git a/src/main/java/li/cil/oc2/common/network/package-info.java b/src/main/java/li/cil/oc2/common/network/package-info.java new file mode 100644 index 00000000..b2188287 --- /dev/null +++ b/src/main/java/li/cil/oc2/common/network/package-info.java @@ -0,0 +1,7 @@ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package li.cil.oc2.common.network; + +import mcp.MethodsReturnNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/li/cil/oc2/common/tile/ComputerTileEntity.java b/src/main/java/li/cil/oc2/common/tile/ComputerTileEntity.java index 2f910cc8..f19343c7 100644 --- a/src/main/java/li/cil/oc2/common/tile/ComputerTileEntity.java +++ b/src/main/java/li/cil/oc2/common/tile/ComputerTileEntity.java @@ -3,7 +3,7 @@ package li.cil.oc2.common.tile; import it.unimi.dsi.fastutil.bytes.ByteArrayFIFOQueue; import li.cil.oc2.OpenComputers; import li.cil.oc2.client.gui.terminal.Terminal; -import li.cil.oc2.common.network.ComputerTerminalOutputMessage; +import li.cil.oc2.common.network.TerminalBlockOutputMessage; import li.cil.oc2.common.network.Network; import li.cil.oc2.common.vm.VirtualMachineRunner; import li.cil.sedna.api.Sizes; @@ -214,7 +214,7 @@ public final class ComputerTileEntity extends TileEntity implements ITickableTil terminal.putOutput(output); output.flip(); - final ComputerTerminalOutputMessage message = new ComputerTerminalOutputMessage(ComputerTileEntity.this, output); + final TerminalBlockOutputMessage message = new TerminalBlockOutputMessage(ComputerTileEntity.this, output); Network.INSTANCE.send(PacketDistributor.TRACKING_CHUNK.with(() -> chunk), message); } }