commit 5a281d4b85adfe1b4883da735af079c3b21f5df4 Author: sebseb7 Date: Wed Jun 28 23:55:53 2023 +0200 genesis (using a stripped down itemscroller for template) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7f6823b --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.gradle +build/ diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..414ebd0 --- /dev/null +++ b/build.gradle @@ -0,0 +1,40 @@ +plugins { + id 'fabric-loom' version '1.2-SNAPSHOT' +} + +sourceCompatibility = JavaVersion.VERSION_17 +targetCompatibility = JavaVersion.VERSION_17 + +repositories { + maven { url 'https://masa.dy.fi/maven' } + maven { url 'https://maven.terraformersmc.com/releases/' } +} + +dependencies { + minecraft "com.mojang:minecraft:${project.minecraft_version}" + mappings "net.fabricmc:yarn:${project.mappings_version}:v2" + modImplementation "net.fabricmc:fabric-loader:${project.fabric_loader_version}" + modImplementation "fi.dy.masa.malilib:malilib-fabric-${project.minecraft_version_out}:${project.malilib_version}" + modCompileOnly "com.terraformersmc:modmenu:${project.mod_menu_version}" +} + +group = project.group + "." + project.mod_id +archivesBaseName = project.mod_file_name + '-' + project.minecraft_version_out +version = project.mod_version + +if (version.endsWith('-dev')) { + version += "." + new Date().format('yyyyMMdd.HHmmss') +} + +processResources { + inputs.property "mod_version", project.mod_version + + filesMatching("fabric.mod.json") { + expand "mod_version": project.mod_version + } +} + +tasks.withType(JavaCompile).configureEach { + it.options.encoding = "UTF-8" + it.options.release = 17 +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..7997376 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,18 @@ +# Done to increase the memory available to gradle. +org.gradle.jvmargs=-Xmx1G + +group = com.github.sebseb7 +mod_id = autotrade +mod_name = AutoTrade +author = sebseb7 +mod_file_name = autotrade-fabric + +mod_version = 0.0.1 + +malilib_version = 0.16.0 + +minecraft_version_out = 1.20.1 +minecraft_version = 1.20.1 +mappings_version = 1.20.1+build.2 +fabric_loader_version = 0.14.21 +mod_menu_version = 7.0.1 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..29953ea Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..87048d3 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..cccdd3d --- /dev/null +++ b/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..e95643d --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..027b233 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,9 @@ +pluginManagement { + repositories { + maven { + name = 'Fabric' + url = 'https://maven.fabricmc.net/' + } + gradlePluginPortal() + } +} diff --git a/src/main/java/com/github/sebseb7/autotrade/AutoTrade.java b/src/main/java/com/github/sebseb7/autotrade/AutoTrade.java new file mode 100644 index 0000000..c369ca1 --- /dev/null +++ b/src/main/java/com/github/sebseb7/autotrade/AutoTrade.java @@ -0,0 +1,16 @@ +package com.github.sebseb7.autotrade; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import fi.dy.masa.malilib.event.InitializationHandler; +import net.fabricmc.api.ModInitializer; + +public class AutoTrade implements ModInitializer +{ + public static final Logger logger = LogManager.getLogger(Reference.MOD_ID); + + @Override + public void onInitialize() + { + } +} diff --git a/src/main/java/com/github/sebseb7/autotrade/Reference.java b/src/main/java/com/github/sebseb7/autotrade/Reference.java new file mode 100644 index 0000000..d84fca4 --- /dev/null +++ b/src/main/java/com/github/sebseb7/autotrade/Reference.java @@ -0,0 +1,10 @@ +package com.github.sebseb7.autotrade; + +import fi.dy.masa.malilib.util.StringUtils; + +public class Reference +{ + public static final String MOD_ID = "autotrade"; + public static final String MOD_NAME = "Auto Trade"; + public static final String MOD_VERSION = StringUtils.getModVersionString(MOD_ID); +} diff --git a/src/main/java/com/github/sebseb7/autotrade/compat/modmenu/ModMenuImpl.java b/src/main/java/com/github/sebseb7/autotrade/compat/modmenu/ModMenuImpl.java new file mode 100644 index 0000000..618fe14 --- /dev/null +++ b/src/main/java/com/github/sebseb7/autotrade/compat/modmenu/ModMenuImpl.java @@ -0,0 +1,18 @@ +package com.github.sebseb7.autotrade.compat.modmenu; + +import com.terraformersmc.modmenu.api.ConfigScreenFactory; +import com.terraformersmc.modmenu.api.ModMenuApi; +import com.github.sebseb7.autotrade.gui.GuiConfigs; + +public class ModMenuImpl implements ModMenuApi +{ + @Override + public ConfigScreenFactory getModConfigScreenFactory() + { + return (screen) -> { + GuiConfigs gui = new GuiConfigs(); + gui.setParent(screen); + return gui; + }; + } +} diff --git a/src/main/java/com/github/sebseb7/autotrade/config/Configs.java b/src/main/java/com/github/sebseb7/autotrade/config/Configs.java new file mode 100644 index 0000000..42d8d3c --- /dev/null +++ b/src/main/java/com/github/sebseb7/autotrade/config/Configs.java @@ -0,0 +1,122 @@ +package com.github.sebseb7.autotrade.config; + +import java.io.File; +import java.util.HashSet; +import java.util.Set; +import com.google.common.collect.ImmutableList; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import fi.dy.masa.malilib.config.ConfigUtils; +import fi.dy.masa.malilib.config.IConfigHandler; +import fi.dy.masa.malilib.config.IConfigValue; +import fi.dy.masa.malilib.config.options.ConfigBoolean; +import fi.dy.masa.malilib.config.options.ConfigInteger; +import fi.dy.masa.malilib.util.FileUtils; +import fi.dy.masa.malilib.util.JsonUtils; +import com.github.sebseb7.autotrade.Reference; + +public class Configs implements IConfigHandler +{ + private static final String CONFIG_FILE_NAME = Reference.MOD_ID + ".json"; + + public static class Generic + { + public static final ImmutableList OPTIONS = ImmutableList.of( + ); + } + + public static class Toggles + { + public static final ImmutableList OPTIONS = ImmutableList.of( + ); + } + + public static final Set GUI_BLACKLIST = new HashSet<>(); + public static final Set SLOT_BLACKLIST = new HashSet<>(); + + public static void loadFromFile() + { + File configFile = new File(FileUtils.getConfigDirectory(), CONFIG_FILE_NAME); + + if (configFile.exists() && configFile.isFile() && configFile.canRead()) + { + JsonElement element = JsonUtils.parseJsonFile(configFile); + + if (element != null && element.isJsonObject()) + { + JsonObject root = element.getAsJsonObject(); + + ConfigUtils.readConfigBase(root, "Generic", Generic.OPTIONS); + ConfigUtils.readConfigBase(root, "Hotkeys", Hotkeys.HOTKEY_LIST); + ConfigUtils.readConfigBase(root, "Toggles", Toggles.OPTIONS); + + getStrings(root, GUI_BLACKLIST, "guiBlacklist"); + getStrings(root, SLOT_BLACKLIST, "slotBlacklist"); + } + } + + } + + public static void saveToFile() + { + File dir = FileUtils.getConfigDirectory(); + + if ((dir.exists() && dir.isDirectory()) || dir.mkdirs()) + { + JsonObject root = new JsonObject(); + + ConfigUtils.writeConfigBase(root, "Generic", Generic.OPTIONS); + ConfigUtils.writeConfigBase(root, "Hotkeys", Hotkeys.HOTKEY_LIST); + ConfigUtils.writeConfigBase(root, "Toggles", Toggles.OPTIONS); + + writeStrings(root, GUI_BLACKLIST, "guiBlacklist"); + writeStrings(root, SLOT_BLACKLIST, "slotBlacklist"); + + JsonUtils.writeJsonToFile(root, new File(dir, CONFIG_FILE_NAME)); + } + } + + @Override + public void load() + { + loadFromFile(); + } + + @Override + public void save() + { + saveToFile(); + } + + private static void getStrings(JsonObject obj, Set outputSet, String arrayName) + { + outputSet.clear(); + + if (JsonUtils.hasArray(obj, arrayName)) + { + JsonArray arr = obj.getAsJsonArray(arrayName); + final int size = arr.size(); + + for (int i = 0; i < size; i++) + { + outputSet.add(arr.get(i).getAsString()); + } + } + } + + private static void writeStrings(JsonObject obj, Set inputSet, String arrayName) + { + if (inputSet.isEmpty() == false) + { + JsonArray arr = new JsonArray(); + + for (String str : inputSet) + { + arr.add(str); + } + + obj.add(arrayName, arr); + } + } +} diff --git a/src/main/java/com/github/sebseb7/autotrade/config/Hotkeys.java b/src/main/java/com/github/sebseb7/autotrade/config/Hotkeys.java new file mode 100644 index 0000000..4710996 --- /dev/null +++ b/src/main/java/com/github/sebseb7/autotrade/config/Hotkeys.java @@ -0,0 +1,13 @@ +package com.github.sebseb7.autotrade.config; + +import java.util.List; +import com.google.common.collect.ImmutableList; +import fi.dy.masa.malilib.config.options.ConfigHotkey; +import fi.dy.masa.malilib.hotkeys.KeyAction; +import fi.dy.masa.malilib.hotkeys.KeybindSettings; + +public class Hotkeys +{ + public static final List HOTKEY_LIST = ImmutableList.of( + ); +} diff --git a/src/main/java/com/github/sebseb7/autotrade/gui/GuiConfigs.java b/src/main/java/com/github/sebseb7/autotrade/gui/GuiConfigs.java new file mode 100644 index 0000000..3d12b78 --- /dev/null +++ b/src/main/java/com/github/sebseb7/autotrade/gui/GuiConfigs.java @@ -0,0 +1,130 @@ +package com.github.sebseb7.autotrade.gui; + +import java.util.Collections; +import java.util.List; +import com.google.common.collect.ImmutableList; +import com.github.sebseb7.autotrade.Reference; +import com.github.sebseb7.autotrade.config.Configs; +import com.github.sebseb7.autotrade.config.Hotkeys; +import fi.dy.masa.malilib.config.IConfigBase; +import fi.dy.masa.malilib.gui.GuiConfigsBase; +import fi.dy.masa.malilib.gui.button.ButtonBase; +import fi.dy.masa.malilib.gui.button.ButtonGeneric; +import fi.dy.masa.malilib.gui.button.IButtonActionListener; +import fi.dy.masa.malilib.util.StringUtils; + +public class GuiConfigs extends GuiConfigsBase +{ + private static ConfigGuiTab tab = ConfigGuiTab.GENERIC; + + public GuiConfigs() + { + super(10, 50, Reference.MOD_ID, null, "autotrade.gui.title.configs"); + } + + @Override + public void initGui() + { + super.initGui(); + this.clearOptions(); + + int x = 10; + int y = 26; + + for (ConfigGuiTab tab : ConfigGuiTab.VALUES) + { + x += this.createButton(x, y, -1, tab); + } + } + + private int createButton(int x, int y, int width, ConfigGuiTab tab) + { + ButtonGeneric button = new ButtonGeneric(x, y, width, 20, tab.getDisplayName()); + button.setEnabled(GuiConfigs.tab != tab); + this.addButton(button, new ButtonListener(tab, this)); + + return button.getWidth() + 2; + } + + @Override + protected int getConfigWidth() + { + ConfigGuiTab tab = GuiConfigs.tab; + + if (tab == ConfigGuiTab.GENERIC || tab == ConfigGuiTab.TOGGLES) + { + return 100; + } + + return super.getConfigWidth(); + } + + @Override + public List getConfigs() + { + List configs; + ConfigGuiTab tab = GuiConfigs.tab; + + if (tab == ConfigGuiTab.GENERIC) + { + configs = Configs.Generic.OPTIONS; + } + else if (tab == ConfigGuiTab.TOGGLES) + { + configs = Configs.Toggles.OPTIONS; + } + else if (tab == ConfigGuiTab.HOTKEYS) + { + configs = Hotkeys.HOTKEY_LIST; + } + else + { + return Collections.emptyList(); + } + + return ConfigOptionWrapper.createFor(configs); + } + + private static class ButtonListener implements IButtonActionListener + { + private final GuiConfigs parent; + private final ConfigGuiTab tab; + + public ButtonListener(ConfigGuiTab tab, GuiConfigs parent) + { + this.tab = tab; + this.parent = parent; + } + + @Override + public void actionPerformedWithButton(ButtonBase button, int mouseButton) + { + GuiConfigs.tab = this.tab; + + this.parent.reCreateListWidget(); // apply the new config width + this.parent.getListWidget().resetScrollbarPosition(); + this.parent.initGui(); + } + } + + public enum ConfigGuiTab + { + GENERIC ("autotrade.gui.button.config_gui.generic"), + TOGGLES ("autotrade.gui.button.config_gui.toggles"), + HOTKEYS ("autotrade.gui.button.config_gui.hotkeys"); + + private final String translationKey; + + public static final ImmutableList VALUES = ImmutableList.copyOf(values()); + + ConfigGuiTab(String translationKey) + { + this.translationKey = translationKey; + } + + public String getDisplayName() + { + return StringUtils.translate(this.translationKey); + } + } +} diff --git a/src/main/resources/assets/autotrade/icon.png b/src/main/resources/assets/autotrade/icon.png new file mode 100644 index 0000000..e7d9b38 Binary files /dev/null and b/src/main/resources/assets/autotrade/icon.png differ diff --git a/src/main/resources/assets/autotrade/lang/en_us.json b/src/main/resources/assets/autotrade/lang/en_us.json new file mode 100644 index 0000000..f1d4786 --- /dev/null +++ b/src/main/resources/assets/autotrade/lang/en_us.json @@ -0,0 +1,7 @@ +{ + "autotrade.gui.button.config_gui.generic": "Generic", + "autotrade.gui.button.config_gui.hotkeys": "Hotkeys", + "autotrade.gui.button.config_gui.toggles": "Toggles", + + "autotrade.gui.title.configs": "AutoTrade" +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json new file mode 100644 index 0000000..cf2d857 --- /dev/null +++ b/src/main/resources/fabric.mod.json @@ -0,0 +1,36 @@ +{ + "schemaVersion": 1, + "id": "autotrade", + "name": "Auto Trade", + "version": "${mod_version}", + + "description": "AFK trade with villagers", + "authors": [ + "sebseb7" + ], + "contact": { + "homepage": "", + "issues": "", + "sources": "" + }, + + "license": "0BSD", + "icon": "assets/autotrade/icon.png", + "environment": "client", + "entrypoints": { + "main": [ + "com.github.sebseb7.autotrade.AutoTrade" + ], + "modmenu": [ + "com.github.sebseb7.autotrade.compat.modmenu.ModMenuImpl" + ] + }, + + "mixins": [ + ], + + "depends": { + "minecraft": "1.20.x", + "malilib": "0.16.x" + } +}