From 41832da25f9aa5cb37fee870752e64e5a9057c17 Mon Sep 17 00:00:00 2001 From: inglettronald Date: Sun, 4 Jun 2023 14:28:53 -0500 Subject: initial commit --- .../java/com/dulkirfabric/mixin/ExampleMixin.java | 28 ++++++++++ .../mixin/render/GameMenuScreenMixin.java | 61 ++++++++++++++++++++++ .../com/dulkirfabric/mixin/render/ScreenMixin.java | 29 ++++++++++ 3 files changed, 118 insertions(+) create mode 100644 src/main/java/com/dulkirfabric/mixin/ExampleMixin.java create mode 100644 src/main/java/com/dulkirfabric/mixin/render/GameMenuScreenMixin.java create mode 100644 src/main/java/com/dulkirfabric/mixin/render/ScreenMixin.java (limited to 'src/main/java/com/dulkirfabric/mixin') 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 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 addDrawableChild(T drawableElement); +} \ No newline at end of file -- cgit