aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoringlettronald <inglettronald@gmail.com>2023-06-04 14:28:53 -0500
committeringlettronald <inglettronald@gmail.com>2023-06-04 14:28:53 -0500
commit41832da25f9aa5cb37fee870752e64e5a9057c17 (patch)
treef7b6015ddee527367e1d8235b2fd36a155d62a20 /src
downloadDulkirMod-Fabric-41832da25f9aa5cb37fee870752e64e5a9057c17.tar.gz
DulkirMod-Fabric-41832da25f9aa5cb37fee870752e64e5a9057c17.tar.bz2
DulkirMod-Fabric-41832da25f9aa5cb37fee870752e64e5a9057c17.zip
initial commit
Diffstat (limited to 'src')
-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
-rw-r--r--src/main/kotlin/com/dulkirfabric/DulkirModFabric.kt55
-rw-r--r--src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt95
-rw-r--r--src/main/kotlin/com/dulkirfabric/events/WidgetInitEvent.kt24
-rw-r--r--src/main/resources/assets/dulkirmod-fabric/icon.pngbin0 -> 6849 bytes
-rw-r--r--src/main/resources/dulkirmod-fabric.mixins.json15
-rw-r--r--src/main/resources/fabric.mod.json49
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
new file mode 100644
index 0000000..540cf6e
--- /dev/null
+++ b/src/main/resources/assets/dulkirmod-fabric/icon.png
Binary files differ
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