Added book color functionality to ColorSigns (#338)
This commit is contained in:
@@ -2,13 +2,36 @@ package anticope.rejects.modules;
|
|||||||
|
|
||||||
import anticope.rejects.MeteorRejectsAddon;
|
import anticope.rejects.MeteorRejectsAddon;
|
||||||
import meteordevelopment.meteorclient.events.packets.PacketEvent;
|
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.meteorclient.systems.modules.Module;
|
||||||
import meteordevelopment.orbit.EventHandler;
|
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.c2s.play.UpdateSignC2SPacket;
|
||||||
import net.minecraft.network.packet.s2c.play.GameJoinS2CPacket;
|
import net.minecraft.network.packet.s2c.play.GameJoinS2CPacket;
|
||||||
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class ColorSigns extends Module {
|
public class ColorSigns extends Module {
|
||||||
|
|
||||||
|
private final SettingGroup sgGeneral = settings.getDefaultGroup();
|
||||||
|
|
||||||
|
private final Setting<Boolean> signs = sgGeneral.add(new BoolSetting.Builder()
|
||||||
|
.name("signs")
|
||||||
|
.description("Allows you to use colors in signs.")
|
||||||
|
.defaultValue(true)
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
|
||||||
|
private final Setting<Boolean> books = sgGeneral.add(new BoolSetting.Builder()
|
||||||
|
.name("books")
|
||||||
|
.description("Allows you to use colors in books.")
|
||||||
|
.defaultValue(false)
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
|
||||||
public ColorSigns() {
|
public ColorSigns() {
|
||||||
super(MeteorRejectsAddon.CATEGORY, "color-signs", "Allows you to use colors on signs on NON-PAPER servers (use \"&\" for color symbols)");
|
super(MeteorRejectsAddon.CATEGORY, "color-signs", "Allows you to use colors on signs on NON-PAPER servers (use \"&\" for color symbols)");
|
||||||
}
|
}
|
||||||
@@ -19,13 +42,23 @@ public class ColorSigns extends Module {
|
|||||||
checkWarning();
|
checkWarning();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!(event.packet instanceof UpdateSignC2SPacket)) return;
|
if (signs.get() && event.packet instanceof UpdateSignC2SPacket packet) {
|
||||||
UpdateSignC2SPacket p = (UpdateSignC2SPacket)event.packet;
|
for (int line = 0; line < packet.getText().length; line++) {
|
||||||
for (int l = 0; l < p.getText().length; l++) {
|
packet.getText()[line] = packet.getText()[line]
|
||||||
String newText = p.getText()[l].replaceAll("(?i)\u00a7|&([0-9A-FK-OR])", "\u00a7\u00a7$1$1");
|
.replaceAll("(?i)(?:&|(?<!§)§)([0-9A-Z])", "§§$1$1");
|
||||||
p.getText()[l] = newText;
|
}
|
||||||
|
}
|
||||||
|
if (books.get() && event.packet instanceof BookUpdateC2SPacket packet) {
|
||||||
|
List<String> 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
|
@Override
|
||||||
@@ -35,7 +68,10 @@ public class ColorSigns extends Module {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void checkWarning() {
|
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 == null) return;
|
||||||
if (brand.contains("Paper")) warning("You are on a paper server. Color signs won't work here");
|
if (brand.contains("Paper")) warning("You are on a paper server. Color signs won't work here");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user