diff options
author | inglettronald <inglettronald@gmail.com> | 2023-06-04 14:28:53 -0500 |
---|---|---|
committer | inglettronald <inglettronald@gmail.com> | 2023-06-04 14:28:53 -0500 |
commit | 41832da25f9aa5cb37fee870752e64e5a9057c17 (patch) | |
tree | f7b6015ddee527367e1d8235b2fd36a155d62a20 /src/main | |
download | DulkirMod-Fabric-41832da25f9aa5cb37fee870752e64e5a9057c17.tar.gz DulkirMod-Fabric-41832da25f9aa5cb37fee870752e64e5a9057c17.tar.bz2 DulkirMod-Fabric-41832da25f9aa5cb37fee870752e64e5a9057c17.zip |
initial commit
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/com/dulkirfabric/mixin/ExampleMixin.java | 28 | ||||
-rw-r--r-- | src/main/java/com/dulkirfabric/mixin/render/GameMenuScreenMixin.java | 61 | ||||
-rw-r--r-- | src/main/java/com/dulkirfabric/mixin/render/ScreenMixin.java | 29 | ||||
-rw-r--r-- | src/main/kotlin/com/dulkirfabric/DulkirModFabric.kt | 55 | ||||
-rw-r--r-- | src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt | 95 | ||||
-rw-r--r-- | src/main/kotlin/com/dulkirfabric/events/WidgetInitEvent.kt | 24 | ||||
-rw-r--r-- | src/main/resources/assets/dulkirmod-fabric/icon.png | bin | 0 -> 6849 bytes | |||
-rw-r--r-- | src/main/resources/dulkirmod-fabric.mixins.json | 15 | ||||
-rw-r--r-- | src/main/resources/fabric.mod.json | 49 |
9 files changed, 356 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 diff --git a/src/main/kotlin/com/dulkirfabric/DulkirModFabric.kt b/src/main/kotlin/com/dulkirfabric/DulkirModFabric.kt new file mode 100644 index 0000000..c81cb63 --- /dev/null +++ b/src/main/kotlin/com/dulkirfabric/DulkirModFabric.kt @@ -0,0 +1,55 @@ +/** + * 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 + +import com.dulkirfabric.events.WidgetInitEvent +import meteordevelopment.orbit.EventBus +import meteordevelopment.orbit.EventHandler +import net.fabricmc.api.ModInitializer +import net.minecraft.client.MinecraftClient +import org.slf4j.LoggerFactory +import java.lang.invoke.MethodHandles + + +object DulkirModFabric : ModInitializer { + private val logger = LoggerFactory.getLogger("dulkirmod-fabric") + @JvmField + val EVENT_BUS = EventBus() + @JvmField + val mc: MinecraftClient = MinecraftClient.getInstance() + + var widgetLoadTime = 0L + + override fun onInitialize() { + logger.info("Initializing DulkirMod...") + + EVENT_BUS.registerLambdaFactory("com.dulkirfabric") { lookupInMethod, klass -> + lookupInMethod.invoke(null, klass, MethodHandles.lookup()) as MethodHandles.Lookup + } + + EVENT_BUS.subscribe(this) + } + + @EventHandler + fun onPreInit(event: WidgetInitEvent) { + if (!event.initialized) println("have not initialized widgets yet!!!!") + widgetLoadTime = System.nanoTime() + } + + @EventHandler + fun onPostInit(event: WidgetInitEvent) { + val time = System.nanoTime() - widgetLoadTime + if (event.initialized) println("widgets initialized!!!!!, took: $time ns") + } +}
\ No newline at end of file diff --git a/src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt b/src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt new file mode 100644 index 0000000..14c8c29 --- /dev/null +++ b/src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt @@ -0,0 +1,95 @@ +/** + * 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.config + +import me.shedaniel.clothconfig2.api.ConfigBuilder +import me.shedaniel.clothconfig2.api.Modifier +import me.shedaniel.clothconfig2.api.ModifierKeyCode +import me.shedaniel.clothconfig2.impl.builders.LongListBuilder +import net.minecraft.client.gui.screen.Screen +import net.minecraft.client.util.InputUtil +import net.minecraft.text.LiteralTextContent +import net.minecraft.text.MutableText +import net.minecraft.text.Text +import net.minecraft.util.Formatting +import net.minecraft.util.Identifier + +object DulkirConfig { + + private val buttonText: Text = + MutableText.of(LiteralTextContent("Dulkir")).formatted(Formatting.BOLD, Formatting.YELLOW) + var screen: Screen + + init { + /*val builder = ConfigBuilder.create() + .setParentScreen(mc.currentScreen) + .setTitle(buttonText) + val entryBuilder = builder.entryBuilder() + + val general = builder.getOrCreateCategory(Text.of("General")) + val someSetting = general.addEntry(entryBuilder.)*/ + val builder = ConfigBuilder.create().setTitle(buttonText) + builder.setDefaultBackgroundTexture(Identifier("minecraft:textures/block/oak_planks.png")) + builder.setGlobalized(true) + builder.setGlobalizedExpanded(true) + val entryBuilder = builder.entryBuilder() + val testing = builder.getOrCreateCategory(Text.translatable("category.cloth-config.testing")) + testing.addEntry( + entryBuilder.startKeyCodeField(Text.literal("Cool Key"), InputUtil.UNKNOWN_KEY) + .setDefaultValue(InputUtil.UNKNOWN_KEY).build() + ) + testing.addEntry( + entryBuilder.startModifierKeyCodeField( + Text.literal("Cool Modifier Key"), + ModifierKeyCode.of(InputUtil.Type.KEYSYM.createFromCode(79), Modifier.of(false, true, false)) + ).setDefaultValue( + ModifierKeyCode.of( + InputUtil.Type.KEYSYM.createFromCode(79), + Modifier.of(false, true, false) + ) + ).build() + ) + testing.addEntry( + entryBuilder.startDoubleList(Text.literal("A list of Doubles"), mutableListOf(1.0, 2.0, 3.0)) + .setDefaultValue( + mutableListOf(1.0, 2.0, 3.0) + ).build() + ) + testing.addEntry( + (entryBuilder.startLongList(Text.literal("A list of Longs"), mutableListOf(1L, 2L, 3L)).setDefaultValue( + mutableListOf(1L, 2L, 3L) + ).setInsertButtonEnabled(false) as LongListBuilder).build() + ) + testing.addEntry( + entryBuilder.startStrList(Text.literal("A list of Strings"), mutableListOf("abc", "xyz")).setTooltip( + *arrayOf<Text>( + Text.literal("Yes this is some beautiful tooltip\nOh and this is the second line!") + ) + ).setDefaultValue(mutableListOf("abc", "xyz")).build() + ) + val colors = entryBuilder.startSubCategory(Text.literal("Colors")).setExpanded(true) + colors.add(entryBuilder.startColorField(Text.literal("A color field"), 65535).setDefaultValue(65535).build()) + colors.add( + entryBuilder.startColorField(Text.literal("An alpha color field"), -16711681).setDefaultValue(-16711681) + .setAlphaMode(true).build() + ) + colors.add( + entryBuilder.startColorField(Text.literal("An alpha color field"), -1).setDefaultValue(-65536) + .setAlphaMode(true).build() + ) + builder.transparentBackground() + screen = builder.build() + } + +}
\ No newline at end of file diff --git a/src/main/kotlin/com/dulkirfabric/events/WidgetInitEvent.kt b/src/main/kotlin/com/dulkirfabric/events/WidgetInitEvent.kt new file mode 100644 index 0000000..9a6eebb --- /dev/null +++ b/src/main/kotlin/com/dulkirfabric/events/WidgetInitEvent.kt @@ -0,0 +1,24 @@ +/** + * 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.events + +object WidgetInitEvent { + var initialized = false + + @JvmStatic + fun get(initialized: Boolean): WidgetInitEvent { + this.initialized = initialized + return this + } +}
\ No newline at end of file diff --git a/src/main/resources/assets/dulkirmod-fabric/icon.png b/src/main/resources/assets/dulkirmod-fabric/icon.png Binary files differnew file mode 100644 index 0000000..540cf6e --- /dev/null +++ b/src/main/resources/assets/dulkirmod-fabric/icon.png diff --git a/src/main/resources/dulkirmod-fabric.mixins.json b/src/main/resources/dulkirmod-fabric.mixins.json new file mode 100644 index 0000000..8bf823d --- /dev/null +++ b/src/main/resources/dulkirmod-fabric.mixins.json @@ -0,0 +1,15 @@ +{ + "required": true, + "package": "com.dulkirfabric.mixin", + "compatibilityLevel": "JAVA_17", + "mixins": [ + "ExampleMixin" + ], + "injectors": { + "defaultRequire": 1 + }, + "client": [ + "render.ScreenMixin", + "render.GameMenuScreenMixin" + ] +}
\ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json new file mode 100644 index 0000000..e9fb65d --- /dev/null +++ b/src/main/resources/fabric.mod.json @@ -0,0 +1,49 @@ +{ + "schemaVersion": 1, + "id": "dulkirmod-fabric", + "version": "${version}", + "name": "DulkirMod-Fabric", + "description": "Utility Mod for Hypixel Skyblock", + "authors": [ + "inglettronald" + ], + "contact": { + "homepage": "https://github.com/inglettronald", + "sources": "https://github.com/FabricMC/fabric-example-mod", + "issues": "https://discord.gg/juwhqyBCgA" + }, + "license": "MPL-2.0", + "icon": "assets/dulkirmod-fabric/icon.png", + "environment": "*", + "entrypoints": { + "main": [ + { + "value": "com.dulkirfabric.DulkirModFabric", + "adapter": "kotlin" + } + ] + }, + "mixins": [ + "dulkirmod-fabric.mixins.json" + ], + "depends": { + "fabricloader": ">=0.14.21", + "minecraft": "~1.19.4", + "java": ">=17", + "fabric-api": "*", + "fabric-language-kotlin": ">=1.8.21" + }, + "suggests": { + "Farsight": "https://www.curseforge.com/minecraft/mc-mods/farsight-fabric/files", + "Borderless Mining": "https://www.curseforge.com/minecraft/mc-mods/borderless-mining", + "Iris": "https://github.com/IrisShaders/Iris", + "MemoryLeakFix": "https://github.com/fxmorin/memoryleakfix", + "Model Gap Fix": "https://www.curseforge.com/minecraft/mc-mods/model-gap-fix", + "Capes": "https://www.curseforge.com/minecraft/mc-mods/capes", + "Continuity": "https://www.curseforge.com/minecraft/mc-mods/continuity", + "Lithium, Sodium": "https://jellysquid.me/projects/", + "Mod Menu": "https://modrinth.com/mod/modmenu", + "Puzzle": "https://www.midnightdust.eu/", + "Starlight": "https://www.curseforge.com/minecraft/mc-mods/starlight" + } +}
\ No newline at end of file |