diff --git a/src/main/java/minescript/network/packet/StartInterpreterC2SPacket.java b/src/main/java/minescript/network/packet/StartInterpreterC2SPacket.java index a9835a6..e14d2d3 100644 --- a/src/main/java/minescript/network/packet/StartInterpreterC2SPacket.java +++ b/src/main/java/minescript/network/packet/StartInterpreterC2SPacket.java @@ -3,18 +3,23 @@ import interpreter.Interpreter; import minescript.block.entity.TurtleBlockEntity; import net.fabricmc.fabric.api.networking.v1.PacketSender; +import net.minecraft.nbt.NbtCompound; import net.minecraft.network.PacketByteBuf; import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.ServerPlayNetworkHandler; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; +import net.minecraft.text.Text; import net.minecraft.util.math.BlockPos; +import java.util.Arrays; + public class StartInterpreterC2SPacket { public static void receive(MinecraftServer server, ServerPlayerEntity player, ServerPlayNetworkHandler handler, PacketByteBuf buf, PacketSender responseSender) { BlockPos pos = buf.readBlockPos(); - String program = buf.readString(); - + int length = buf.readInt(); + String program = buf.readString(length); + server.executeSync(() -> { ServerWorld world = player.getWorld(); TurtleBlockEntity entity = (TurtleBlockEntity) world.getBlockEntity(pos); diff --git a/src/main/java/minescript/screen/TextEditorScreen.java b/src/main/java/minescript/screen/TextEditorScreen.java index 7417ef5..96a519d 100644 --- a/src/main/java/minescript/screen/TextEditorScreen.java +++ b/src/main/java/minescript/screen/TextEditorScreen.java @@ -1,15 +1,23 @@ package minescript.screen; +import io.netty.buffer.ByteBuf; +import io.wispforest.owo.client.screens.ScreenInternals; import io.wispforest.owo.ui.base.BaseUIModelHandledScreen; import io.wispforest.owo.ui.base.BaseUIModelScreen; import io.wispforest.owo.ui.component.ButtonComponent; import io.wispforest.owo.ui.container.FlowLayout; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; import net.minecraft.client.gui.widget.EditBoxWidget; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.network.PacketByteBuf; import net.minecraft.text.Text; import net.minecraft.util.Identifier; import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; public class TextEditorScreen extends BaseUIModelHandledScreen { @@ -54,7 +62,11 @@ protected void build(FlowLayout rootComponent) { var runButton = rootComponent.childById(ButtonComponent.class, "run-button"); if (runButton == null) throw new NullPointerException("runButton is null"); runButton.onPress(button -> { - handler.sendMessage(new TextEditorScreenHandler.StartInterpreterMessage(editor.getText())); + String text = editor.getText(); + PacketByteBuf buf = PacketByteBufs.create(); + buf.writeString(text, text.length()); + + handler.sendMessage(new TextEditorScreenHandler.StartInterpreterMessage(text.length(), buf)); this.close(); }); } diff --git a/src/main/java/minescript/screen/TextEditorScreenHandler.java b/src/main/java/minescript/screen/TextEditorScreenHandler.java index d5821db..c5a59d0 100644 --- a/src/main/java/minescript/screen/TextEditorScreenHandler.java +++ b/src/main/java/minescript/screen/TextEditorScreenHandler.java @@ -1,5 +1,6 @@ package minescript.screen; +import io.netty.buffer.ByteBuf; import minescript.MineScript; import minescript.block.entity.TurtleBlockEntity; import minescript.network.MineScriptPackets; @@ -8,10 +9,14 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; import net.minecraft.network.PacketByteBuf; import net.minecraft.screen.ScreenHandler; +import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; +import java.util.Arrays; + public class TextEditorScreenHandler extends ScreenHandler { private String inputText; private final @Nullable TurtleBlockEntity entity; @@ -35,18 +40,21 @@ public String getInputText() { } private void handleSetInputText(StartInterpreterMessage message) { - this.inputText = message.message; + int length = message.length; + String text = message.buf.readString(length); + this.inputText = text; assert entity != null; - entity.setTurtleInput(message.message); + entity.setTurtleInput(text); PacketByteBuf buf = PacketByteBufs.create(); buf.writeBlockPos(entity.getPos()); - buf.writeString(message.message); + buf.writeInt(length); + buf.writeString(text, text.length()); ClientPlayNetworking.send(MineScriptPackets.START_INTERPRETER_ID, buf); } - public record StartInterpreterMessage(String message) {} + public record StartInterpreterMessage(int length, PacketByteBuf buf) {} @Override public ItemStack quickMove(PlayerEntity player, int slot) {