diff --git a/build.gradle b/build.gradle index 1dd18d1..2605296 100644 --- a/build.gradle +++ b/build.gradle @@ -10,11 +10,17 @@ archivesBaseName = project.archives_base_name version = project.mod_version group = project.maven_group +repositories { + maven { url 'https://jitpack.io' } +} + dependencies { //to change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" + + modImplementation 'com.github.jellysquid3:sodium-fabric:mc1.16.3-0.1.0' } processResources { diff --git a/gradle.properties b/gradle.properties index 1aa8f19..acdaff4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,6 +6,6 @@ minecraft_version=1.16.3 yarn_mappings=1.16.3+build.27 loader_version=0.10.0+build.208 # Mod Properties -mod_version=1.0 +mod_version=1.1 maven_group=io.gitlab.jfronny archives_base_name=Slyde diff --git a/src/main/java/io/gitlab/jfronny/slyde/Cfg.java b/src/main/java/io/gitlab/jfronny/slyde/Cfg.java new file mode 100644 index 0000000..3298975 --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/slyde/Cfg.java @@ -0,0 +1,51 @@ +package io.gitlab.jfronny.slyde; + +import net.fabricmc.loader.api.FabricLoader; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Properties; + +public class Cfg { + public boolean sodiumCompat = true; + public boolean forceSodiumCompat = false; + + private static Cfg conf = null; + + public static Cfg get() { + if (conf == null) + load(); + return conf; + } + + private static void load() { + Properties p = new Properties(); + conf = new Cfg(); + Path c = FabricLoader.getInstance().getConfigDir().resolve("slyde.cfg"); + try (InputStream s = Files.newInputStream(c)) { + p.load(s); + } catch (IOException e) { + e.printStackTrace(); + } + conf.sodiumCompat = getBool(p, "sodiumCompat", conf.sodiumCompat); + conf.forceSodiumCompat = getBool(p, "forceSodiumCompat", conf.forceSodiumCompat); + try { + p.store(Files.newOutputStream(c), "Slyde config"); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private static boolean getBool(Properties p, String name, boolean def) { + Object o = p.get(name); + if (o instanceof Boolean) + return (Boolean) o; + if (o instanceof String) + return Boolean.parseBoolean((String) o); + p.put(name, Boolean.toString(def)); + return def; + } + +} diff --git a/src/main/java/io/gitlab/jfronny/slyde/Plugin.java b/src/main/java/io/gitlab/jfronny/slyde/Plugin.java new file mode 100644 index 0000000..61bc11a --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/slyde/Plugin.java @@ -0,0 +1,51 @@ +package io.gitlab.jfronny.slyde; + +import io.gitlab.jfronny.slyde.mixin.SodiumSliderControlMixin; +import net.fabricmc.loader.api.FabricLoader; +import org.objectweb.asm.tree.ClassNode; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import java.util.List; +import java.util.Objects; +import java.util.Set; + +public class Plugin implements IMixinConfigPlugin { + @Override + public void onLoad(String mixinPackage) { + + } + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + if ("io.gitlab.jfronny.slyde.mixin.SodiumSliderControlMixin".equals(mixinClassName)) + return Cfg.get().forceSodiumCompat || (Cfg.get().sodiumCompat && FabricLoader.getInstance().isModLoaded("sodium")); + else + return true; + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) { + + } + + @Override + public List getMixins() { + return null; + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } +} diff --git a/src/main/java/io/gitlab/jfronny/slyde/client/SlydeClient.java b/src/main/java/io/gitlab/jfronny/slyde/client/SlydeClient.java index 20119d5..5b9d35e 100644 --- a/src/main/java/io/gitlab/jfronny/slyde/client/SlydeClient.java +++ b/src/main/java/io/gitlab/jfronny/slyde/client/SlydeClient.java @@ -1,5 +1,6 @@ package io.gitlab.jfronny.slyde.client; +import io.gitlab.jfronny.slyde.Cfg; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -8,6 +9,6 @@ import net.fabricmc.api.Environment; public class SlydeClient implements ClientModInitializer { @Override public void onInitializeClient() { - + Cfg.get(); } } diff --git a/src/main/java/io/gitlab/jfronny/slyde/mixin/SodiumSliderControlMixin.java b/src/main/java/io/gitlab/jfronny/slyde/mixin/SodiumSliderControlMixin.java new file mode 100644 index 0000000..f647b32 --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/slyde/mixin/SodiumSliderControlMixin.java @@ -0,0 +1,32 @@ +package io.gitlab.jfronny.slyde.mixin; + +import me.jellysquid.mods.sodium.client.gui.options.Option; +import me.jellysquid.mods.sodium.client.gui.options.control.ControlElement; +import me.jellysquid.mods.sodium.client.util.Dim2i; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(targets = "me.jellysquid.mods.sodium.client.gui.options.control.SliderControl$Button") +public abstract class SodiumSliderControlMixin extends ControlElement { + @Shadow(remap = false) private double thumbPosition; + + public SodiumSliderControlMixin(Option option, Dim2i dim) { + super(option, dim); + } + + @Shadow(remap = false) public abstract int getIntValue(); + + /** + * @author JFronny + * @reason Removing the MathHelper.clamp call would be a pain any other way + */ + @Overwrite(remap = false) + private void setValue(double d) { + this.thumbPosition = d; + int value = this.getIntValue(); + if (this.option.getValue() != value) { + this.option.setValue(value); + } + } +} diff --git a/src/main/resources/slyde.mixins.json b/src/main/resources/slyde.mixins.json index f7bd52e..c08ab7f 100644 --- a/src/main/resources/slyde.mixins.json +++ b/src/main/resources/slyde.mixins.json @@ -3,11 +3,13 @@ "minVersion": "0.8", "package": "io.gitlab.jfronny.slyde.mixin", "compatibilityLevel": "JAVA_8", + "plugin": "io.gitlab.jfronny.slyde.Plugin", "mixins": [ ], "client": [ + "DoubleOptionMixin", "SliderWidgetMixin", - "DoubleOptionMixin" + "SodiumSliderControlMixin" ], "injectors": { "defaultRequire": 1