aboutsummaryrefslogtreecommitdiff
path: root/versions/src/main
diff options
context:
space:
mode:
authorWyvest <45589059+Wyvest@users.noreply.github.com>2022-07-02 06:12:23 +0700
committerWyvest <45589059+Wyvest@users.noreply.github.com>2022-07-02 06:12:23 +0700
commitd4bb5a94308d4379ef3d6cc7b9221ea0d98ff051 (patch)
tree9bb9b53e2823f73084780673763504f4098bae69 /versions/src/main
parentd2b1d57120bb51e76191302a58d935afe52b89df (diff)
downloadOneConfig-d4bb5a94308d4379ef3d6cc7b9221ea0d98ff051.tar.gz
OneConfig-d4bb5a94308d4379ef3d6cc7b9221ea0d98ff051.tar.bz2
OneConfig-d4bb5a94308d4379ef3d6cc7b9221ea0d98ff051.zip
Separate Minecraft dependant and non-dependant code
Diffstat (limited to 'versions/src/main')
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/events/event/ChatReceiveEvent.java22
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/events/event/ReceivePacketEvent.java11
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/events/event/ScreenOpenEvent.java17
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/events/event/SendPacketEvent.java11
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/events/event/TimerUpdateEvent.java24
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/OneConfig.java93
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/gui/impl/BlurHandlerImpl.java132
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/mixin/GuiIngameForgeMixin.java19
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/mixin/MinecraftMixin.java100
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/mixin/NetHandlerPlayClientMixin.java38
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/mixin/NetworkManagerMixin.java25
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/mixin/OptifineConfigMixin.java23
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/mixin/ShaderGroupAccessor.java16
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/mixin/VigilantMixin.java10
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/mixin/WorldClientMixin.java23
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/plugin/asm/ClassTransformer.java102
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/plugin/asm/ITransformer.java24
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/plugin/asm/OneConfigTweaker.java117
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/plugin/asm/tweakers/NanoVGGLConfigTransformer.java47
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/plugin/asm/tweakers/VigilantTransformer.java89
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/plugin/hooks/Lwjgl2FunctionProvider.java47
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/plugin/hooks/OptifineConfigHook.java22
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/internal/plugin/hooks/VigilantHook.java26
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/platform/impl/GLPlatformImpl.java67
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/platform/impl/GuiPlatformImpl.java31
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/platform/impl/I18nPlatformImpl.java13
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/platform/impl/LoaderPlatformImpl.java26
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/platform/impl/MousePlatformImpl.java53
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/platform/impl/PlatformImpl.java12
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/platform/impl/ServerPlatformImpl.java22
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/utils/commands/PlatformCommandManagerImpl.java330
-rw-r--r--versions/src/main/java/cc/polyfrost/oneconfig/utils/gui/GuiUtils.java100
-rw-r--r--versions/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/DSLs.kt9
-rw-r--r--versions/src/main/kotlin/cc/polyfrost/oneconfig/utils/dsl/GuiUtilsDSL.kt11
-rw-r--r--versions/src/main/resources/META-INF/services/cc.polyfrost.oneconfig.internal.gui.BlurHandler1
-rw-r--r--versions/src/main/resources/META-INF/services/cc.polyfrost.oneconfig.platform.GLPlatform1
-rw-r--r--versions/src/main/resources/META-INF/services/cc.polyfrost.oneconfig.platform.GuiPlatform1
-rw-r--r--versions/src/main/resources/META-INF/services/cc.polyfrost.oneconfig.platform.I18nPlatform1
-rw-r--r--versions/src/main/resources/META-INF/services/cc.polyfrost.oneconfig.platform.LoaderPlatform1
-rw-r--r--versions/src/main/resources/META-INF/services/cc.polyfrost.oneconfig.platform.MousePlatform1
-rw-r--r--versions/src/main/resources/META-INF/services/cc.polyfrost.oneconfig.platform.Platform1
-rw-r--r--versions/src/main/resources/META-INF/services/cc.polyfrost.oneconfig.platform.ServerPlatform1
-rw-r--r--versions/src/main/resources/META-INF/services/cc.polyfrost.oneconfig.utils.commands.PlatformCommandManager1
-rw-r--r--versions/src/main/resources/mixins.oneconfig.json21
44 files changed, 1742 insertions, 0 deletions
diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/events/event/ChatReceiveEvent.java b/versions/src/main/java/cc/polyfrost/oneconfig/events/event/ChatReceiveEvent.java
new file mode 100644
index 0000000..6585729
--- /dev/null
+++ b/versions/src/main/java/cc/polyfrost/oneconfig/events/event/ChatReceiveEvent.java
@@ -0,0 +1,22 @@
+package cc.polyfrost.oneconfig.events.event;
+
+import cc.polyfrost.oneconfig.libs.universal.wrappers.message.UTextComponent;
+import net.minecraft.util.IChatComponent;
+
+/**
+ * Called when a chat message is received.
+ */
+public class ChatReceiveEvent extends CancellableEvent {
+ /**
+ * The message that was received.
+ */
+ public final IChatComponent message;
+
+ public ChatReceiveEvent(IChatComponent message) {
+ this.message = message;
+ }
+
+ public String getFullyUnformattedMessage() {
+ return UTextComponent.Companion.stripFormatting(message.getUnformattedText());
+ }
+}
diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/events/event/ReceivePacketEvent.java b/versions/src/main/java/cc/polyfrost/oneconfig/events/event/ReceivePacketEvent.java
new file mode 100644
index 0000000..17bc16d
--- /dev/null
+++ b/versions/src/main/java/cc/polyfrost/oneconfig/events/event/ReceivePacketEvent.java
@@ -0,0 +1,11 @@
+package cc.polyfrost.oneconfig.events.event;
+
+import net.minecraft.network.Packet;
+
+public class ReceivePacketEvent extends CancellableEvent {
+ public final Packet<?> packet;
+
+ public ReceivePacketEvent(Packet<?> packet) {
+ this.packet = packet;
+ }
+}
diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/events/event/ScreenOpenEvent.java b/versions/src/main/java/cc/polyfrost/oneconfig/events/event/ScreenOpenEvent.java
new file mode 100644
index 0000000..4593638
--- /dev/null
+++ b/versions/src/main/java/cc/polyfrost/oneconfig/events/event/ScreenOpenEvent.java
@@ -0,0 +1,17 @@
+package cc.polyfrost.oneconfig.events.event;
+
+import net.minecraft.client.gui.GuiScreen;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Called when a screen is opened or closed.
+ * If the screen is closed, {@link ScreenOpenEvent#screen} will be null.
+ */
+public class ScreenOpenEvent extends CancellableEvent {
+ @Nullable
+ public final GuiScreen screen;
+
+ public ScreenOpenEvent(@Nullable GuiScreen screen) {
+ this.screen = screen;
+ }
+}
diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/events/event/SendPacketEvent.java b/versions/src/main/java/cc/polyfrost/oneconfig/events/event/SendPacketEvent.java
new file mode 100644
index 0000000..3cee784
--- /dev/null
+++ b/versions/src/main/java/cc/polyfrost/oneconfig/events/event/SendPacketEvent.java
@@ -0,0 +1,11 @@
+package cc.polyfrost.oneconfig.events.event;
+
+import net.minecraft.network.Packet;
+
+public class SendPacketEvent extends CancellableEvent {
+ public final Packet<?> packet;
+
+ public SendPacketEvent(Packet<?> packet) {
+ this.packet = packet;
+ }
+}
diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/events/event/TimerUpdateEvent.java b/versions/src/main/java/cc/polyfrost/oneconfig/events/event/TimerUpdateEvent.java
new file mode 100644
index 0000000..a8b88dc
--- /dev/null
+++ b/versions/src/main/java/cc/polyfrost/oneconfig/events/event/TimerUpdateEvent.java
@@ -0,0 +1,24 @@
+package cc.polyfrost.oneconfig.events.event;
+
+import net.minecraft.util.Timer;
+
+/**
+ * Called when the {@link Timer} is updated.
+ * Can be used as an alternative to getting instances of {@link Timer}
+ * via Mixin or Access Wideners / Transformers
+ */
+public class TimerUpdateEvent {
+ /**
+ * Whether the deltaTicks / renderPartialTicks was updated
+ */
+ public final boolean updatedDeltaTicks;
+ /**
+ * The {@link Timer} instance
+ */
+ public final Timer timer;
+
+ public TimerUpdateEvent(Timer timer, boolean updatedDeltaTicks) {
+ this.timer = timer;
+ this.updatedDeltaTicks = updatedDeltaTicks;
+ }
+} \ No newline at end of file
diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/internal/OneConfig.java b/versions/src/main/java/cc/polyfrost/oneconfig/internal/OneConfig.java
new file mode 100644
index 0000000..7ecfe98
--- /dev/null
+++ b/versions/src/main/java/cc/polyfrost/oneconfig/internal/OneConfig.java
@@ -0,0 +1,93 @@
+package cc.polyfrost.oneconfig.internal;
+
+import cc.polyfrost.oneconfig.events.EventManager;
+import cc.polyfrost.oneconfig.events.event.ShutdownEvent;
+import cc.polyfrost.oneconfig.internal.command.OneConfigCommand;
+import cc.polyfrost.oneconfig.internal.config.OneConfigConfig;
+import cc.polyfrost.oneconfig.internal.config.Preferences;
+import cc.polyfrost.oneconfig.internal.config.core.ConfigCore;
+import cc.polyfrost.oneconfig.internal.config.core.KeyBindHandler;
+import cc.polyfrost.oneconfig.internal.gui.BlurHandler;
+import cc.polyfrost.oneconfig.internal.hud.HudCore;
+import cc.polyfrost.oneconfig.libs.eventbus.Subscribe;
+import cc.polyfrost.oneconfig.utils.commands.CommandManager;
+import cc.polyfrost.oneconfig.utils.gui.GuiUtils;
+import cc.polyfrost.oneconfig.utils.hypixel.HypixelUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.io.File;
+import java.util.ServiceLoader;
+
+/**
+ * The main class of OneConfig.
+ */
+@net.minecraftforge.fml.common.Mod(modid = "@ID@", name = "@NAME@", version = "@VER@")
+public class OneConfig {
+
+ public OneConfig() {
+ EventManager.INSTANCE.register(this);
+ }
+
+ public static final File oneConfigDir = new File("./OneConfig");
+ public static final Logger LOGGER = LogManager.getLogger("@NAME@");
+ private static boolean preLaunched = false;
+ private static boolean initialized = false;
+ private static boolean isObfuscated = true;
+
+ /**
+ * Called before mods are loaded.
+ * <p><b>SHOULD NOT BE CALLED!</b></p>
+ */
+ public static void preLaunch() {
+ if (preLaunched) return;
+ try {
+ Class.forName("net.minecraft.world.World");
+ LOGGER.warn("OneConfig is NOT obfuscated!");
+ isObfuscated = false;
+ } catch (Exception ignored) {
+ }
+ oneConfigDir.mkdirs();
+ new File(oneConfigDir, "profiles").mkdirs();
+ if (OneConfigConfig.getInstance() == null) {
+ OneConfigConfig.getInstance();
+ }
+ if (Preferences.getInstance() == null) {
+ Preferences.getInstance();
+ }
+ preLaunched = true;
+ }
+
+ /**
+ * Called after mods are loaded.
+ * <p><b>SHOULD NOT BE CALLED!</b></p>
+ */
+ @SuppressWarnings("ResultOfMethodCallIgnored")
+ public static void init() {
+ if (initialized) return;
+ GuiUtils.getDeltaTime(); // called to make sure static initializer is called
+ try {
+ EventManager.INSTANCE.register(BlurHandler.INSTANCE);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ CommandManager.INSTANCE.registerCommand(OneConfigCommand.class);
+ EventManager.INSTANCE.register(new HudCore());
+ HypixelUtils.INSTANCE.initialize();
+ EventManager.INSTANCE.register(KeyBindHandler.INSTANCE);
+ ConfigCore.sortMods();
+
+ initialized = true;
+ }
+
+ /** Returns weather this is an obfuscated environment, using a check for obfuscated name of net.minecraft.world.World.class.
+ * @return true if this is an obfuscated environment, which is normal for Minecraft or false if not. */
+ public static boolean isObfuscated() {
+ return isObfuscated;
+ }
+
+ @Subscribe
+ private void onShutdown(ShutdownEvent event) {
+ ConfigCore.saveAll();
+ }
+}
diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/internal/gui/impl/BlurHandlerImpl.java b/versions/src/main/java/cc/polyfrost/oneconfig/internal/gui/impl/BlurHandlerImpl.java
new file mode 100644
index 0000000..0ef5f2b
--- /dev/null
+++ b/versions/src/main/java/cc/polyfrost/oneconfig/internal/gui/impl/BlurHandlerImpl.java
@@ -0,0 +1,132 @@
+package cc.polyfrost.oneconfig.internal.gui.impl;
+
+import cc.polyfrost.oneconfig.events.event.RenderEvent;
+import cc.polyfrost.oneconfig.events.event.ScreenOpenEvent;
+import cc.polyfrost.oneconfig.events.event.Stage;
+import cc.polyfrost.oneconfig.gui.OneConfigGui;
+import cc.polyfrost.oneconfig.internal.config.Preferences;
+import cc.polyfrost.oneconfig.internal.gui.BlurHandler;
+import cc.polyfrost.oneconfig.internal.mixin.ShaderGroupAccessor;
+import cc.polyfrost.oneconfig.libs.eventbus.Subscribe;
+import cc.polyfrost.oneconfig.libs.universal.UMinecraft;
+import cc.polyfrost.oneconfig.libs.universal.UScreen;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.shader.Shader;
+import net.minecraft.client.shader.ShaderUniform;
+import net.minecraft.util.ResourceLocation;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.util.List;
+
+/**
+ * An implementation of the BlurMC mod by tterrag1098.
+ * <p>
+ * For the original source see <a href="https://github.com/tterrag1098/Blur/blob/1.8.9/src/main/java/com/tterrag/blur/Blur.java">...</a>
+ * For the public license, see <a href="https://github.com/tterrag1098/Blur/blob/1.8.9/LICENSE">...</a>
+ * <p>
+ * License available under <a href="https://github.com/boomboompower/ToggleChat/blob/master/src/main/resources/licenses/BlurMC-License.txt">...</a>
+ *
+ * @author tterrag1098, boomboompower
+ * <p>
+ * Taken from ToggleChat
+ * <a href="https://github.com/boomboompower/ToggleChat/blob/master/LICENSE">...</a>
+ */
+public class BlurHandlerImpl implements BlurHandler {
+ private final ResourceLocation blurShader = new ResourceLocation("shaders/post/fade_in_blur.json");
+ private final Logger logger = LogManager.getLogger("OneConfig - Blur");
+ private long start;
+ private float progress = 0;
+
+ @Subscribe
+ private void onGuiChange(ScreenOpenEvent event) {
+ reloadBlur(event.screen);
+ }
+
+ @Subscribe
+ private void onRenderTick(RenderEvent event) {
+ if (event.stage != Stage.END) {
+ return;
+ }
+
+ // Only blur on our own menus
+ if (UScreen.getCurrentScreen() == null) {
+ return;
+ }
+
+ // Only update the shader if one is active
+ if (!UMinecraft.getMinecraft().entityRenderer.isShaderActive()) {
+ return;
+ }
+ if (progress >= 5) return;
+ progress = getBlurStrengthProgress();
+
+ // This is hilariously bad, and could cause frame issues on low-end computers.
+ // Why is this being computed every tick? Surely there is a better way?
+ // This needs to be optimized.
+ try {
+ final List<Shader> listShaders = ((ShaderGroupAccessor) Minecraft.getMinecraft().entityRenderer.getShaderGroup()).getListShaders();
+
+ // Should not happen. Something bad happened.
+ if (listShaders == null) {
+ return;
+ }
+
+ // Iterate through the list of shaders.
+ for (Shader shader : listShaders) {
+ ShaderUniform su = shader.getShaderManager().getShaderUniform("Progress");
+
+ if (su == null) {
+ continue;
+ }
+
+ // All this for this.
+ su.set(progress);
+ }
+ } catch (IllegalArgumentException ex) {
+ this.logger.error("An error.png occurred while updating OneConfig's blur. Please report this!", ex);
+ }
+ }
+
+ /**
+ * Activates/deactivates the blur in the current world if
+ * one of many conditions are met, such as no current other shader
+ * is being used, we actually have the blur setting enabled
+ */
+ public void reloadBlur(Object gui) {
+ // Don't do anything if no world is loaded
+ if (UMinecraft.getWorld() == null) {
+ return;
+ }
+
+ // If a shader is not already active and the UI is
+ // a one of ours, we should load our own blur!
+
+ if (!UMinecraft.getMinecraft().entityRenderer.isShaderActive() && gui instanceof OneConfigGui && Preferences.enableBlur) {
+ UMinecraft.getMinecraft().entityRenderer.loadShader(this.blurShader);
+
+ this.start = System.currentTimeMillis();
+ this.progress = 0;
+
+ // If a shader is active and the incoming UI is null or we have blur disabled, stop using the shader.
+ } else if (UMinecraft.getMinecraft().entityRenderer.isShaderActive() && (gui == null || !Preferences.enableBlur)) {
+ String name = UMinecraft.getMinecraft().entityRenderer.getShaderGroup().getShaderGroupName();
+
+ // Only stop our specific blur ;)
+ if (!name.endsWith("fade_in_blur.json")) {
+ return;
+ }
+
+ UMinecraft.getMinecraft().entityRenderer.stopUseShader();
+ }
+ }
+
+ /**
+ * Returns the strength of the blur as determined by the duration the effect of the blur.
+ * <p>
+ * The strength of the blur does not go below 5.0F.
+ */
+ private float getBlurStrengthProgress() {
+ return Math.min((System.currentTimeMillis() - this.start) / 50F, 5.0F);
+ }
+}
diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/internal/mixin/GuiIngameForgeMixin.java b/versions/src/main/java/cc/polyfrost/oneconfig/internal/mixin/GuiIngameForgeMixin.java
new file mode 100644
index 0000000..2a89972
--- /dev/null
+++ b/versions/src/main/java/cc/polyfrost/oneconfig/internal/mixin/GuiIngameForgeMixin.java
@@ -0,0 +1,19 @@
+//#if MC==10809
+package cc.polyfrost.oneconfig.internal.mixin;
+
+import cc.polyfrost.oneconfig.events.EventManager;
+import cc.polyfrost.oneconfig.events.event.HudRenderEvent;
+import net.minecraftforge.client.GuiIngameForge;
+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.CallbackInfo;
+
+@Mixin(value = GuiIngameForge.class, remap = false)
+public class GuiIngameForgeMixin {
+ @Inject(method = "renderGameOverlay", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/GuiIngameForge;post(Lnet/minecraftforge/client/event/RenderGameOverlayEvent$ElementType;)V", shift = At.Shift.AFTER, remap = false), remap = true)
+ private void onRenderGameOverlay(float partialTicks, CallbackInfo ci) {
+ EventManager.INSTANCE.post(new HudRenderEvent(partialTicks));
+ }
+}
+//#endif \ No newline at end of file
diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/internal/mixin/MinecraftMixin.java b/versions/src/main/java/cc/polyfrost/oneconfig/internal/mixin/MinecraftMixin.java
new file mode 100644
index 0000000..0603d12
--- /dev/null
+++ b/versions/src/main/java/cc/polyfrost/oneconfig/internal/mixin/MinecraftMixin.java
@@ -0,0 +1,100 @@
+//#if MC==10809
+package cc.polyfrost.oneconfig.internal.mixin;
+
+import cc.polyfrost.oneconfig.internal.OneConfig;
+import cc.polyfrost.oneconfig.events.EventManager;
+import cc.polyfrost.oneconfig.events.event.*;
+import net.minecraft.client.Minecraft;
+import net.minecraft.util.Timer;
+import net.minecraftforge.client.event.GuiOpenEvent;
+import net.minecraftforge.fml.common.eventhandler.Event;
+import org.objectweb.asm.Opcodes;
+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.ModifyArg;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(Minecraft.class)
+public class MinecraftMixin {
+ @Shadow
+ private Timer timer;
+
+ @Inject(method = "shutdownMinecraftApplet", at = @At("HEAD"))
+ private void onShutdown(CallbackInfo ci) {
+ EventManager.INSTANCE.post(new PreShutdownEvent());
+ }
+
+ @Inject(method = "startGame", at = @At("HEAD"))
+ private void onStart(CallbackInfo ci) {
+ EventManager.INSTANCE.post(new StartEvent());
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> EventManager.INSTANCE.post(new ShutdownEvent())));
+ }
+
+ @Inject(method = "startGame", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/client/FMLClientHandler;beginMinecraftLoading(Lnet/minecraft/client/Minecraft;Ljava/util/List;Lnet/minecraft/client/resources/IReloadableResourceManager;)V", remap = false), remap = true)
+ private void onPreLaunch(CallbackInfo ci) {
+ OneConfig.preLaunch();
+ }
+
+ @Inject(method = "startGame", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/client/FMLClientHandler;onInitializationComplete()V", shift = At.Shift.AFTER, remap = false), remap = true)
+ private void onInit(CallbackInfo ci) {
+ EventManager.INSTANCE.post(new InitializationEvent());
+ OneConfig.init();
+ }
+
+ @Inject(method = "runGameLoop", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/common/FMLCommonHandler;onRenderTickStart(F)V", shift = At.Shift.AFTER, remap = false), remap = true)
+ private void onRenderTickStart(CallbackInfo ci) {
+ EventManager.INSTANCE.post(new RenderEvent(Stage.START, timer.renderPartialTicks));
+ }
+
+ @Inject(method = "runGameLoop", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/common/FMLCommonHandler;onRenderTickEnd(F)V", shift = At.Shift.AFTER, remap = false), remap = true)
+ private void onRenderTickEnd(CallbackInfo ci) {
+ EventManager.INSTANCE.post(new RenderEvent(Stage.END, timer.renderPartialTicks));
+ }
+
+ @Inject(method = "runTick", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/common/FMLCommonHandler;onPreClientTick()V", shift = At.Shift.AFTER, remap = false), remap = true)
+ private void onClientTickStart(CallbackInfo ci) {
+ EventManager.INSTANCE.post(new TickEvent(Stage.START));
+ }
+
+ @Inject(method = "runTick", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/common/FMLCommonHandler;onPostClientTick()V", shift = At.Shift.AFTER, remap = false), remap = true)
+ private void onClientTickEnd(CallbackInfo ci) {
+ EventManager.INSTANCE.post(new TickEvent(Stage.END));
+ }
+
+ @ModifyArg(method = "displayGuiScreen", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/common/eventhandler/EventBus;post(Lnet/minecraftforge/fml/common/eventhandler/Event;)Z", remap = false), remap = true)
+ private Event onGuiOpenEvent(Event a) {
+ if (a instanceof GuiOpenEvent) {
+ GuiOpenEvent forgeEvent = (GuiOpenEvent) a;
+ ScreenOpenEvent event = new ScreenOpenEvent(forgeEvent.gui);
+ EventManager.INSTANCE.post(event);
+ if (event.isCancelled) {
+ forgeEvent.setCanceled(true);
+ }
+ return forgeEvent;
+ }
+ return a;
+ }
+
+ @Inject(method = "runGameLoop", at = @At(value = "FIELD", target = "Lnet/minecraft/util/Timer;renderPartialTicks:F", opcode = Opcodes.PUTFIELD, shift = At.Shift.AFTER))
+ private void onNonDeltaTickTimerUpdate(CallbackInfo ci) {
+ EventManager.INSTANCE.post(new TimerUpdateEvent(timer, false));
+ }
+
+ @Inject(method = "runGameLoop", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Timer;updateTimer()V", shift = At.Shift.AFTER, ordinal = 1))
+ private void onDeltaTickTimerUpdate(CallbackInfo ci) {
+ EventManager.INSTANCE.post(new TimerUpdateEvent(timer, true));
+ }
+
+ @Inject(method = "runTick", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/common/FMLCommonHandler;fireKeyInput()V"))
+ private void onKeyEvent(CallbackInfo ci) {
+ EventManager.INSTANCE.post(new KeyInputEvent());
+ }
+
+ @Inject(method = "runTick", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/common/FMLCommonHandler;fireMouseInput()V"))
+ private void onMouseEvent(CallbackInfo ci) {
+ EventManager.INSTANCE.post(new MouseInputEvent());
+ }
+}
+//#endif \ No newline at end of file
diff --git a/versions/src/main/java/cc/polyfrost/oneconfig/internal/mixin/NetHandlerPlayClientMixin.java b/versions/src/main/java/cc/polyfrost/oneconfig/internal/mixin/NetHandlerPlayClientMixin.java
new file mode 100644
index 0000000..7a446c7
--- /dev/null
+++ b/versions/src/main/java/cc/polyfrost/oneconfig/internal/mixin/NetHandlerPlayClientMixin.java
@@ -0,0 +1,38 @@
+//#if MC==10809
+package cc.polyfrost.oneconfig.internal.mixin;
+
+import cc.polyfrost.oneconfig.events.EventManager;
+import cc.polyfrost.oneconfig.events.event.ChatReceiveEvent;
+import cc.polyfrost.oneconfig.events.event.SendPacketEvent;
+import net.minecraft.client.network.NetHandlerPlayClient;
+import net.minecraft.network.Packet;
+import net.minecraft.network.play.server.S02PacketChat;
+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.CallbackInfo;
+
+@Mixin(value = NetHandlerPlayClient.class, priority = Integer.MAX_VALUE)
+public class NetHandlerPlayClientMixin {
+
+ @Inject(method = "addToSendQueue", at = @At("HEAD"), cancellable = true)
+ private void onSendPacket(Packet<?> p_147297_1_, CallbackInfo ci) {
+ SendPacketEvent event = new SendPacketEvent(p_147297_1_);
+ EventManager.INSTANCE.post(event);
+ if (event.isCancelled) {
+ ci.cancel();
+ }
+ }
+
+ @Inject(method = "handleChat", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/event/ForgeEventFactory;onClientChat(BLnet/minecraft/util/IChatComponent;)Lnet/minecraft/util/IChatComponent;", remap = false), cancellable = true, remap = true)
+ private void onClientChat(S02PacketChat packetIn, CallbackInfo ci) {
+ if (packetIn.getType() == 0) {
+ ChatReceiveEvent event = new ChatReceiveEvent(packetIn.getChatComponent());
+ EventManager.INSTANCE.post(event);
+ if (event.isCancelled) {
+ ci.