diff --git a/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/mixin/ServerPlayNetworkHandlerMixin.java b/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/mixin/ServerPlayNetworkHandlerMixin.java index 26b8c79e..20604d34 100644 --- a/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/mixin/ServerPlayNetworkHandlerMixin.java +++ b/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/mixin/ServerPlayNetworkHandlerMixin.java @@ -1,14 +1,26 @@ package org.dynmap.fabric_1_18.mixin; +import net.minecraft.block.BlockState; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.SignBlockEntity; +import net.minecraft.network.packet.c2s.play.UpdateSignC2SPacket; import net.minecraft.server.filter.TextStream; import net.minecraft.server.network.ServerPlayNetworkHandler; import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.text.LiteralText; +import net.minecraft.util.math.BlockPos; + +import java.util.List; + +import org.dynmap.fabric_1_18.event.BlockEvents; import org.dynmap.fabric_1_18.event.ServerChatEvents; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @Mixin(ServerPlayNetworkHandler.class) public abstract class ServerPlayNetworkHandlerMixin { @@ -26,4 +38,29 @@ public abstract class ServerPlayNetworkHandlerMixin { public void onGameMessage(TextStream.Message message, CallbackInfo info) { ServerChatEvents.EVENT.invoker().onChatMessage(player, message.getRaw()); } -} + + @Inject( + method = "onSignUpdate", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/block/entity/SignBlockEntity;markDirty()V", + shift = At.Shift.BEFORE + ), + locals = LocalCapture.CAPTURE_FAILHARD + ) + public void onSignUpdate(UpdateSignC2SPacket packet, List signText, CallbackInfo info, + ServerWorld serverWorld, BlockPos blockPos, BlockState blockState, BlockEntity blockEntity, SignBlockEntity signBlockEntity) + { + // Pull the raw text from the input. + String[] rawTexts = new String[4]; + for (int i=0; i