From de891d6c6d6e2c42a1ca575c5e1ada61abe16706 Mon Sep 17 00:00:00 2001 From: Cloudburst Date: Fri, 23 Jul 2021 13:52:31 +0200 Subject: [PATCH] Added ability to disable Meteor's API --- .../rejects/mixin/meteor/ConfigTabMixin.java | 23 +++++++++++ .../rejects/mixin/meteor/HttpMixin.java | 27 ++++++++++++ .../rejects/utils/RejectsConfig.java | 41 +++++++++++++++++++ .../rejects/utils/RejectsUtils.java | 6 +++ .../meteor-rejects-meteor.mixins.json | 4 +- 5 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 src/main/java/cloudburst/rejects/mixin/meteor/ConfigTabMixin.java create mode 100644 src/main/java/cloudburst/rejects/mixin/meteor/HttpMixin.java create mode 100644 src/main/java/cloudburst/rejects/utils/RejectsConfig.java diff --git a/src/main/java/cloudburst/rejects/mixin/meteor/ConfigTabMixin.java b/src/main/java/cloudburst/rejects/mixin/meteor/ConfigTabMixin.java new file mode 100644 index 0000000..33570b8 --- /dev/null +++ b/src/main/java/cloudburst/rejects/mixin/meteor/ConfigTabMixin.java @@ -0,0 +1,23 @@ +package cloudburst.rejects.mixin.meteor; + +import cloudburst.rejects.utils.RejectsConfig; +import meteordevelopment.meteorclient.gui.tabs.builtin.ConfigTab; +import meteordevelopment.meteorclient.settings.*; +import org.spongepowered.asm.mixin.*; + +@Mixin(ConfigTab.class) +public class ConfigTabMixin { + @Shadow + @Final + private static Settings settings; + + private static final SettingGroup sgRejects = settings.createGroup("Rejects"); + + private static final Setting httpAllowed = sgRejects.add(new EnumSetting.Builder() + .name("http-allowed") + .description("Changes what api endpoints can be reached.") + .defaultValue(RejectsConfig.get().httpAllowed) + .onChanged(v -> RejectsConfig.get().httpAllowed = v) + .build() + ); +} diff --git a/src/main/java/cloudburst/rejects/mixin/meteor/HttpMixin.java b/src/main/java/cloudburst/rejects/mixin/meteor/HttpMixin.java new file mode 100644 index 0000000..97d0095 --- /dev/null +++ b/src/main/java/cloudburst/rejects/mixin/meteor/HttpMixin.java @@ -0,0 +1,27 @@ +package cloudburst.rejects.mixin.meteor; + +import cloudburst.rejects.utils.RejectsConfig; +import meteordevelopment.meteorclient.utils.network.Http; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.*; + + +@Mixin(Http.class) +public class HttpMixin { + + @ModifyArg(method="get", at= @At(value = "INVOKE", target = "Lmeteordevelopment/meteorclient/utils/network/Http$Request;(Lmeteordevelopment/meteorclient/utils/network/Http$Method;Ljava/lang/String;)V"), remap = false) + private static String onGet(String url) { + if (RejectsConfig.get().httpAllowed == RejectsConfig.HttpAllowed.Nothing) return "http://0.0.0.0"; + else if (RejectsConfig.get().httpAllowed == RejectsConfig.HttpAllowed.NotMeteorApi && url.startsWith("https://meteorclient.com/api")) return "http://0.0.0.0"; + else if (RejectsConfig.get().httpAllowed == RejectsConfig.HttpAllowed.NotMeteorPing && url.startsWith("https://meteorclient.com/api/online")) return "http://0.0.0.0"; + return url; + } + + @ModifyArg(method="post", at= @At(value = "INVOKE", target = "Lmeteordevelopment/meteorclient/utils/network/Http$Request;(Lmeteordevelopment/meteorclient/utils/network/Http$Method;Ljava/lang/String;)V"), remap = false) + private static String onPost(String url) { + if (RejectsConfig.get().httpAllowed == RejectsConfig.HttpAllowed.Nothing) return "http://0.0.0.0"; + else if (RejectsConfig.get().httpAllowed == RejectsConfig.HttpAllowed.NotMeteorApi && url.startsWith("https://meteorclient.com/api")) return "http://0.0.0.0"; + else if (RejectsConfig.get().httpAllowed == RejectsConfig.HttpAllowed.NotMeteorPing && url.startsWith("https://meteorclient.com/api/online")) return "http://0.0.0.0"; + return url; + } +} diff --git a/src/main/java/cloudburst/rejects/utils/RejectsConfig.java b/src/main/java/cloudburst/rejects/utils/RejectsConfig.java new file mode 100644 index 0000000..1ac4a69 --- /dev/null +++ b/src/main/java/cloudburst/rejects/utils/RejectsConfig.java @@ -0,0 +1,41 @@ +package cloudburst.rejects.utils; + +import meteordevelopment.meteorclient.systems.System; +import meteordevelopment.meteorclient.MeteorClient; +import net.minecraft.nbt.NbtCompound; + +public class RejectsConfig extends System { + private static final RejectsConfig rejectsConfig = new RejectsConfig(); + + public enum HttpAllowed { + Everything, + NotMeteorApi, + NotMeteorPing, + Nothing + } + + public HttpAllowed httpAllowed = HttpAllowed.Everything; + + public RejectsConfig() { + super("rejects-config"); + init(); + load(MeteorClient.FOLDER); + } + + public static RejectsConfig get() { + return rejectsConfig; + } + + @Override + public NbtCompound toTag() { + NbtCompound tag = new NbtCompound(); + tag.putString("httpAllowed", httpAllowed.toString()); + return tag; + } + + @Override + public RejectsConfig fromTag(NbtCompound tag) { + httpAllowed = HttpAllowed.valueOf(tag.getString("httpAllowed")); + return this; + } +} diff --git a/src/main/java/cloudburst/rejects/utils/RejectsUtils.java b/src/main/java/cloudburst/rejects/utils/RejectsUtils.java index 07c4dc3..7bb6921 100644 --- a/src/main/java/cloudburst/rejects/utils/RejectsUtils.java +++ b/src/main/java/cloudburst/rejects/utils/RejectsUtils.java @@ -1,5 +1,7 @@ package cloudburst.rejects.utils; +import meteordevelopment.meteorclient.MeteorClient; + import java.util.Timer; import java.util.TimerTask; @@ -7,6 +9,10 @@ public class RejectsUtils { public static int CPS = 0; public static void init() { + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + RejectsConfig.get().save(MeteorClient.FOLDER); + })); + new Timer().scheduleAtFixedRate(newTimerTaskFromLambda(() -> CPS = 0), 0, 1000); } diff --git a/src/main/resources/meteor-rejects-meteor.mixins.json b/src/main/resources/meteor-rejects-meteor.mixins.json index 9dc954e..1f150b4 100644 --- a/src/main/resources/meteor-rejects-meteor.mixins.json +++ b/src/main/resources/meteor-rejects-meteor.mixins.json @@ -4,6 +4,8 @@ "compatibilityLevel": "JAVA_16", "mixins": [ ], "client": [ - "GuiRendererAccessor" + "ConfigTabMixin", + "GuiRendererAccessor", + "HttpMixin" ] } \ No newline at end of file