From 23bc33333e1b80d371b46f7c28bbc4396865f99e Mon Sep 17 00:00:00 2001 From: xia__mc <108219418+xia-mc@users.noreply.github.com> Date: Fri, 20 Dec 2024 21:36:46 +0800 Subject: [PATCH 1/3] Release 2.14.1 (#874) --- .../keystrokesmod/event/ClientBrandEvent.java | 13 +++ .../impl/network/MixinClientSpoofer.java | 17 --- .../impl/network/MixinFMLCommonHandler.java | 21 ++++ .../module/impl/exploit/ClientSpoofer.java | 101 +++++++++--------- .../module/impl/render/Watermark.java | 2 +- .../java/keystrokesmod/utility/Commands.java | 10 ++ src/main/resources/mixins.raven.json | 2 +- 7 files changed, 97 insertions(+), 69 deletions(-) create mode 100644 src/main/java/keystrokesmod/event/ClientBrandEvent.java delete mode 100644 src/main/java/keystrokesmod/mixins/impl/network/MixinClientSpoofer.java create mode 100644 src/main/java/keystrokesmod/mixins/impl/network/MixinFMLCommonHandler.java diff --git a/src/main/java/keystrokesmod/event/ClientBrandEvent.java b/src/main/java/keystrokesmod/event/ClientBrandEvent.java new file mode 100644 index 00000000..7dbb2d69 --- /dev/null +++ b/src/main/java/keystrokesmod/event/ClientBrandEvent.java @@ -0,0 +1,13 @@ +package keystrokesmod.event; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import net.minecraftforge.fml.common.eventhandler.Event; + +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +public class ClientBrandEvent extends Event { + private String brand; +} diff --git a/src/main/java/keystrokesmod/mixins/impl/network/MixinClientSpoofer.java b/src/main/java/keystrokesmod/mixins/impl/network/MixinClientSpoofer.java deleted file mode 100644 index e2a2b57c..00000000 --- a/src/main/java/keystrokesmod/mixins/impl/network/MixinClientSpoofer.java +++ /dev/null @@ -1,17 +0,0 @@ -package keystrokesmod.mixins.impl.network; - -import keystrokesmod.module.impl.exploit.ClientSpoofer; -import net.minecraftforge.fml.common.FMLCommonHandler; -import org.jetbrains.annotations.NotNull; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(FMLCommonHandler.class) -public abstract class MixinClientSpoofer { - @Inject(method = "getModName", at = @At("RETURN"), cancellable = true, remap = false) - private void getModName(@NotNull CallbackInfoReturnable cir) { - cir.setReturnValue(ClientSpoofer.getBrandName().brand); - } -} \ No newline at end of file diff --git a/src/main/java/keystrokesmod/mixins/impl/network/MixinFMLCommonHandler.java b/src/main/java/keystrokesmod/mixins/impl/network/MixinFMLCommonHandler.java new file mode 100644 index 00000000..96dc00b5 --- /dev/null +++ b/src/main/java/keystrokesmod/mixins/impl/network/MixinFMLCommonHandler.java @@ -0,0 +1,21 @@ +package keystrokesmod.mixins.impl.network; + +import keystrokesmod.event.ClientBrandEvent; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.common.FMLCommonHandler; +import org.jetbrains.annotations.NotNull; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(FMLCommonHandler.class) +public abstract class MixinFMLCommonHandler { + + @Inject(method = "getModName", at = @At("RETURN"), remap = false, cancellable = true) + private void getModName(@NotNull CallbackInfoReturnable cir) { + ClientBrandEvent event = new ClientBrandEvent(cir.getReturnValue()); + MinecraftForge.EVENT_BUS.post(event); + cir.setReturnValue(event.getBrand()); + } +} diff --git a/src/main/java/keystrokesmod/module/impl/exploit/ClientSpoofer.java b/src/main/java/keystrokesmod/module/impl/exploit/ClientSpoofer.java index 47396114..5775ea08 100644 --- a/src/main/java/keystrokesmod/module/impl/exploit/ClientSpoofer.java +++ b/src/main/java/keystrokesmod/module/impl/exploit/ClientSpoofer.java @@ -1,75 +1,76 @@ package keystrokesmod.module.impl.exploit; +import keystrokesmod.event.ClientBrandEvent; import keystrokesmod.event.SendPacketEvent; import keystrokesmod.module.Module; import keystrokesmod.module.setting.impl.ButtonSetting; -import keystrokesmod.module.setting.impl.ModeSetting; +import keystrokesmod.module.setting.impl.LiteralSubMode; +import keystrokesmod.module.setting.impl.ModeValue; +import net.minecraft.network.play.client.C17PacketCustomPayload; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.network.internal.FMLProxyPacket; import org.jetbrains.annotations.NotNull; -import java.util.Arrays; - public class ClientSpoofer extends Module { - private static SpoofMode currentSpoof = SpoofMode.FORGE; - public final ButtonSetting cancelForgePacket = new ButtonSetting("Cancel Forge packet", false); - private final ModeSetting mode = new ModeSetting("Mode", SpoofMode.getNames(), 0); + public static String customBrand = null; + + private final ModeValue mode; + private final ButtonSetting noForge; + private final ButtonSetting cancelForgePacket; public ClientSpoofer() { super("ClientSpoofer", category.exploit); - this.registerSetting(mode, cancelForgePacket); - } - - public static BrandInfo getBrandName() { - return new BrandInfo(currentSpoof.brand); - } - - public void onDisable() { - currentSpoof = SpoofMode.FORGE; - } - - @Override - public void onUpdate() { - currentSpoof = SpoofMode.values()[(int) mode.getInput()]; + this.registerSetting(mode = new ModeValue("Mode", this) + .add(new LiteralSubMode("Vanilla", this)) + .add(new LiteralSubMode("Forge", this)) + .add(new LiteralSubMode("Lunar", this)) + .add(new LiteralSubMode("Cancel", this)) + .add(new LiteralSubMode("null", this)) + .add(new LiteralSubMode("Custom", this)) + ); + this.registerSetting(noForge = new ButtonSetting("No forge", false)); + this.registerSetting(cancelForgePacket = new ButtonSetting("Cancel FMLProxyPacket", false)); } @SubscribeEvent public void onSendPacket(@NotNull SendPacketEvent event) { - if (event.getPacket() instanceof FMLProxyPacket && cancelForgePacket.isToggled()) { + if (event.getPacket() instanceof FMLProxyPacket + && cancelForgePacket.isToggled()) { event.setCanceled(true); } - } - - - enum SpoofMode { - FORGE("Forge", "FML,Forge"), - VANILLA("Vanilla", "vanilla"), - LUNAR("Lunar", "lunarclient:v2.16.0-2426"), - CHEATBREAKER("Cheatbreaker", "CB"), - GEYSER("Geyser", "Geyser"), - LABYMOD("LabyMod", "LMC"), - ; - - private static final String[] MODES = Arrays.stream(values()).map(spoofMode -> spoofMode.name).toArray(String[]::new); - public final String name; - public final String brand; - - SpoofMode(String name, String brand) { - this.name = name; - this.brand = brand; - } - - public static String @NotNull [] getNames() { - return MODES; + if (event.getPacket() instanceof C17PacketCustomPayload + && mode.getSelected().getPrettyName().equals("Cancel")) { + event.setCanceled(true); } } - public static class BrandInfo { - public final String brand; - - public BrandInfo(String brand) { - this.brand = brand; + @SubscribeEvent + public void onClientBrand(@NotNull ClientBrandEvent event) { + String brand = event.getBrand(); + + switch (mode.getSelected().getPrettyName()) { + case "Vanilla": + brand = "vanilla"; + break; + case "Forge": + if (noForge.isToggled()) { + brand = "fml"; + } else { + brand = "fml,forge"; + } + break; + case "Lunar": + brand = "lunarclient:v2.18.3-2451"; + break; + case "null": + brand = null; + break; + case "Custom": + brand = customBrand; + break; } + + event.setBrand(brand); } -} \ No newline at end of file +} diff --git a/src/main/java/keystrokesmod/module/impl/render/Watermark.java b/src/main/java/keystrokesmod/module/impl/render/Watermark.java index 62ac046e..348b43e5 100644 --- a/src/main/java/keystrokesmod/module/impl/render/Watermark.java +++ b/src/main/java/keystrokesmod/module/impl/render/Watermark.java @@ -28,7 +28,7 @@ import java.util.Objects; public class Watermark extends Module { - public static final String VERSION = "2.14"; + public static final String VERSION = "2.14.1"; public static final Map WATERMARK = new Object2ObjectOpenHashMap<>(); public static String customName = "CustomClient"; diff --git a/src/main/java/keystrokesmod/utility/Commands.java b/src/main/java/keystrokesmod/utility/Commands.java index 82bcea0d..b4c7eca1 100644 --- a/src/main/java/keystrokesmod/utility/Commands.java +++ b/src/main/java/keystrokesmod/utility/Commands.java @@ -8,6 +8,7 @@ import keystrokesmod.module.Module; import keystrokesmod.module.ModuleManager; import keystrokesmod.module.impl.client.Settings; +import keystrokesmod.module.impl.exploit.ClientSpoofer; import keystrokesmod.module.impl.fun.NoteBot; import keystrokesmod.module.impl.minigames.DuelsStats; import keystrokesmod.module.impl.other.ChatAI; @@ -275,6 +276,14 @@ public static void rCMD(@NotNull String c) { KillMessage.killMessage = c.substring(12); print("&aSet killmessage to " + KillMessage.killMessage, 1); + } else if (firstArg.equals("clientspoofer")) { + if (!hasArgs) { + print(invSyn, 1); + return; + } + + ClientSpoofer.customBrand = c.substring(14); + print("&aSet clientspoofer custom brand to " + ClientSpoofer.customBrand, 1); } else if (firstArg.equals("binds")) { for (Module module : Raven.getModuleManager().getModules()) { if (module.getKeycode() != 0) { @@ -541,6 +550,7 @@ public static void rCMD(@NotNull String c) { print("1 cname [name]", 0); print("2 " + FakeChat.command + " [msg]", 0); print("4 killmessage [message]", 0); + print("4 clientspoofer [brand]", 0); print(String.format("5 clientname [name (current is '%s')]", Watermark.customName), 0); print("6 chat ", 0); } diff --git a/src/main/resources/mixins.raven.json b/src/main/resources/mixins.raven.json index d925274e..5f17c43d 100644 --- a/src/main/resources/mixins.raven.json +++ b/src/main/resources/mixins.raven.json @@ -56,7 +56,7 @@ "gui.MixinGuiMultiplayer", "gui.MixinGuiScreen", "gui.MixinGuiSlot", - "network.MixinClientSpoofer", + "network.MixinFMLCommonHandler", "network.MixinNetHandlerPlayClient", "render.ItemRendererAccessor", "render.MixinBlockRendererDispatcher", From b614e3a96c65b4b84a9f2ec2167cb8f270002f85 Mon Sep 17 00:00:00 2001 From: xItsSunny Date: Tue, 31 Dec 2024 15:04:53 +0100 Subject: [PATCH 2/3] Add files via upload --- .../keystrokesmod/textures/capes/ravenxd.png | Bin 0 -> 32274 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/keystrokesmod/textures/capes/ravenxd.png diff --git a/src/main/resources/assets/keystrokesmod/textures/capes/ravenxd.png b/src/main/resources/assets/keystrokesmod/textures/capes/ravenxd.png new file mode 100644 index 0000000000000000000000000000000000000000..c32d3fbe6142dae2ce7808ca0bd0977dc2a643a7 GIT binary patch literal 32274 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ΝTwh^aAzS|(<=Ntco?M7OPf-DOLV%B16! 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 Date: Tue, 31 Dec 2024 15:07:45 +0100 Subject: [PATCH 3/3] Update CustomCape.java --- .../java/keystrokesmod/module/impl/render/CustomCape.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/main/java/keystrokesmod/module/impl/render/CustomCape.java b/src/main/java/keystrokesmod/module/impl/render/CustomCape.java index 65bef37a..eb4eb807 100644 --- a/src/main/java/keystrokesmod/module/impl/render/CustomCape.java +++ b/src/main/java/keystrokesmod/module/impl/render/CustomCape.java @@ -24,9 +24,7 @@ public final class CustomCape extends Module { public static final List LOADED_CAPES = new ArrayList<>(); public static String[] CAPES_NAME = new String[]{ - "RavenAnime", "RavenAqua", "RavenGreen", "RavenPurple", "RavenRed", "RavenWhite", "RavenYellow", - "Cherry", "Die", - "Astolfo" + "RavenAnime", "RavenAqua", "RavenGreen", "RavenPurple", "RavenRed", "RavenWhite", "RavenYellow", "RavenXD", "Cherry", "Die", "Astolfo" }; public static final ModeSetting cape = new ModeSetting("Cape", CAPES_NAME, 0); private static File directory; @@ -66,9 +64,7 @@ public static void loadCapes() { } final String[] builtinCapes = new String[]{ - "RavenAnime", "RavenAqua", "RavenGreen", "RavenPurple", "RavenRed", "RavenWhite", "RavenYellow", - "Cherry", "Die", - "Astolfo" + "RavenAnime", "RavenAqua", "RavenGreen", "RavenPurple", "RavenRed", "RavenWhite", "RavenYellow", "RavenXD", "Cherry", "Die", "Astolfo" }; CAPES_NAME = new String[files.length + builtinCapes.length]; LOADED_CAPES.clear();