From f1a204e7ad9768fd0b182a774d79fbd504d27e1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Riba=20D=C3=A1niel?= <61618352+vitphire@users.noreply.github.com> Date: Tue, 9 Apr 2024 19:21:06 +0200 Subject: [PATCH] Added book color functionality to ColorSigns (#338) --- .../anticope/rejects/modules/ColorSigns.java | 52 ++++++++++++++++--- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/src/main/java/anticope/rejects/modules/ColorSigns.java b/src/main/java/anticope/rejects/modules/ColorSigns.java index 87b80e92..a130ba9d 100644 --- a/src/main/java/anticope/rejects/modules/ColorSigns.java +++ b/src/main/java/anticope/rejects/modules/ColorSigns.java @@ -2,30 +2,63 @@ import anticope.rejects.MeteorRejectsAddon; import meteordevelopment.meteorclient.events.packets.PacketEvent; +import meteordevelopment.meteorclient.settings.BoolSetting; +import meteordevelopment.meteorclient.settings.Setting; +import meteordevelopment.meteorclient.settings.SettingGroup; import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.orbit.EventHandler; +import net.minecraft.network.packet.c2s.play.BookUpdateC2SPacket; import net.minecraft.network.packet.c2s.play.UpdateSignC2SPacket; import net.minecraft.network.packet.s2c.play.GameJoinS2CPacket; +import net.minecraft.server.MinecraftServer; + +import java.util.List; public class ColorSigns extends Module { + private final SettingGroup sgGeneral = settings.getDefaultGroup(); + + private final Setting signs = sgGeneral.add(new BoolSetting.Builder() + .name("signs") + .description("Allows you to use colors in signs.") + .defaultValue(true) + .build() + ); + + private final Setting books = sgGeneral.add(new BoolSetting.Builder() + .name("books") + .description("Allows you to use colors in books.") + .defaultValue(false) + .build() + ); + public ColorSigns() { super(MeteorRejectsAddon.CATEGORY, "color-signs", "Allows you to use colors on signs on NON-PAPER servers (use \"&\" for color symbols)"); } - + @EventHandler private void onPacketSend(PacketEvent.Send event) { if (event.packet instanceof GameJoinS2CPacket) { checkWarning(); return; } - if (!(event.packet instanceof UpdateSignC2SPacket)) return; - UpdateSignC2SPacket p = (UpdateSignC2SPacket)event.packet; - for (int l = 0; l < p.getText().length; l++) { - String newText = p.getText()[l].replaceAll("(?i)\u00a7|&([0-9A-FK-OR])", "\u00a7\u00a7$1$1"); - p.getText()[l] = newText; + if (signs.get() && event.packet instanceof UpdateSignC2SPacket packet) { + for (int line = 0; line < packet.getText().length; line++) { + packet.getText()[line] = packet.getText()[line] + .replaceAll("(?i)(?:&|(? newPages = packet.getPages().stream().map(text -> + text.replaceAll("(?i)&([0-9A-Z])", "§$1")).toList(); + // BookUpdateC2SPacket.pages is final, so we need to create a new packet + if (!packet.getPages().equals(newPages)) { + assert mc.getNetworkHandler() != null; + mc.getNetworkHandler().sendPacket(new BookUpdateC2SPacket( + packet.getSlot(), newPages, packet.getTitle())); + event.cancel(); + } } - event.packet = p; } @Override @@ -35,7 +68,10 @@ public void onActivate() { } private void checkWarning() { - String brand = mc.player.getServer().getServerModName(); + assert mc.player != null; + MinecraftServer server = mc.player.getServer(); + if (server == null) return; + String brand = server.getServerModName(); if (brand == null) return; if (brand.contains("Paper")) warning("You are on a paper server. Color signs won't work here"); }