aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/dulkirfabric/mixin/ExampleMixin.java28
-rw-r--r--src/main/java/com/dulkirfabric/mixin/render/GameMenuScreenMixin.java61
-rw-r--r--src/main/java/com/dulkirfabric/mixin/render/ScreenMixin.java29
3 files changed, 118 insertions, 0 deletions
diff --git a/src/main/java/com/dulkirfabric/mixin/ExampleMixin.java b/src/main/java/com/dulkirfabric/mixin/ExampleMixin.java
new file mode 100644
index 0000000..93b2b2d
--- /dev/null
+++ b/src/main/java/com/dulkirfabric/mixin/ExampleMixin.java
@@ -0,0 +1,28 @@
+/**
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * If it is not possible or desirable to put the notice in a particular
+ * file, then You may include the notice in a location (such as a LICENSE
+ * file in a relevant directory) where a recipient would be likely to look
+ * for such a notice.
+ *
+ * You may add additional accurate notices of copyright ownership.
+ */
+
+package com.dulkirfabric.mixin;
+
+import net.minecraft.server.MinecraftServer;
+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(MinecraftServer.class)
+public class ExampleMixin {
+ @Inject(at = @At("HEAD"), method = "loadWorld")
+ private void init(CallbackInfo info) {
+
+ }
+} \ No newline at end of file
diff --git a/src/main/java/com/dulkirfabric/mixin/render/GameMenuScreenMixin.java b/src/main/java/com/dulkirfabric/mixin/render/GameMenuScreenMixin.java
new file mode 100644
index 0000000..020413e
--- /dev/null
+++ b/src/main/java/com/dulkirfabric/mixin/render/GameMenuScreenMixin.java
@@ -0,0 +1,61 @@
+/**
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * If it is not possible or desirable to put the notice in a particular
+ * file, then You may include the notice in a location (such as a LICENSE
+ * file in a relevant directory) where a recipient would be likely to look
+ * for such a notice.
+ *
+ * You may add additional accurate notices of copyright ownership.
+ */
+
+package com.dulkirfabric.mixin.render;
+
+import com.dulkirfabric.config.DulkirConfig;
+import com.dulkirfabric.events.WidgetInitEvent;
+import net.minecraft.client.gui.screen.GameMenuScreen;
+import net.minecraft.client.gui.screen.Screen;
+import net.minecraft.client.gui.widget.ButtonWidget;
+import net.minecraft.client.gui.widget.GridWidget;
+import net.minecraft.text.*;
+import net.minecraft.util.Formatting;
+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.callback.CallbackInfo;
+import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
+
+import java.util.function.Supplier;
+
+import static com.dulkirfabric.DulkirModFabric.EVENT_BUS;
+
+@Mixin(GameMenuScreen.class)
+public abstract class GameMenuScreenMixin extends ScreenMixin {
+
+ private final Text buttonText = MutableText.of(new LiteralTextContent("Dulkir")).formatted(Formatting.BOLD, Formatting.YELLOW);
+
+ @Shadow
+ protected abstract ButtonWidget createButton(Text text, Supplier<Screen> screenSupplier);
+
+ /**
+ * Method to create the config entry point button inside the escape menu
+ */
+ @Inject(method = "initWidgets", at = @At(value = "FIELD", target = "Lnet/minecraft/client/gui/screen/GameMenuScreen;OPTIONS_TEXT:Lnet/minecraft/text/Text;"), locals = LocalCapture.CAPTURE_FAILEXCEPTION)
+ private void initWidget(CallbackInfo ci, GridWidget gridWidget, GridWidget.Adder adder) {
+ adder.add(this.createButton(buttonText, DulkirConfig.INSTANCE::getScreen));
+ }
+
+ @Inject(method = "initWidgets", at = @At(value = "HEAD"))
+ private void initWidgetPre(CallbackInfo ci) {
+ EVENT_BUS.post(WidgetInitEvent.get(false));
+ }
+
+ @Inject(method = "initWidgets", at = @At(value = "TAIL"))
+ private void initWidgetPost(CallbackInfo ci) {
+ EVENT_BUS.post(WidgetInitEvent.get(true));
+ }
+
+} \ No newline at end of file
diff --git a/src/main/java/com/dulkirfabric/mixin/render/ScreenMixin.java b/src/main/java/com/dulkirfabric/mixin/render/ScreenMixin.java
new file mode 100644
index 0000000..a29cfbc
--- /dev/null
+++ b/src/main/java/com/dulkirfabric/mixin/render/ScreenMixin.java
@@ -0,0 +1,29 @@
+/**
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * If it is not possible or desirable to put the notice in a particular
+ * file, then You may include the notice in a location (such as a LICENSE
+ * file in a relevant directory) where a recipient would be likely to look
+ * for such a notice.
+ *
+ * You may add additional accurate notices of copyright ownership.
+ */
+
+package com.dulkirfabric.mixin.render;
+
+import net.minecraft.client.gui.Drawable;
+import net.minecraft.client.gui.Element;
+import net.minecraft.client.gui.Selectable;
+import net.minecraft.client.gui.screen.Screen;
+
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+
+
+@Mixin(Screen.class)
+public abstract class ScreenMixin {
+ @Shadow
+ protected abstract <T extends Element & Drawable & Selectable> T addDrawableChild(T drawableElement);
+} \ No newline at end of file