Add support for Sodium GUI sliders
This commit is contained in:
parent
dd6879da5c
commit
80c466b114
|
@ -10,11 +10,17 @@ archivesBaseName = project.archives_base_name
|
||||||
version = project.mod_version
|
version = project.mod_version
|
||||||
group = project.maven_group
|
group = project.maven_group
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
maven { url 'https://jitpack.io' }
|
||||||
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
//to change the versions see the gradle.properties file
|
//to change the versions see the gradle.properties file
|
||||||
minecraft "com.mojang:minecraft:${project.minecraft_version}"
|
minecraft "com.mojang:minecraft:${project.minecraft_version}"
|
||||||
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
|
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
|
||||||
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
|
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
|
||||||
|
|
||||||
|
modImplementation 'com.github.jellysquid3:sodium-fabric:mc1.16.3-0.1.0'
|
||||||
}
|
}
|
||||||
|
|
||||||
processResources {
|
processResources {
|
||||||
|
|
|
@ -6,6 +6,6 @@ minecraft_version=1.16.3
|
||||||
yarn_mappings=1.16.3+build.27
|
yarn_mappings=1.16.3+build.27
|
||||||
loader_version=0.10.0+build.208
|
loader_version=0.10.0+build.208
|
||||||
# Mod Properties
|
# Mod Properties
|
||||||
mod_version=1.0
|
mod_version=1.1
|
||||||
maven_group=io.gitlab.jfronny
|
maven_group=io.gitlab.jfronny
|
||||||
archives_base_name=Slyde
|
archives_base_name=Slyde
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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<String> myTargets, Set<String> otherTargets) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> 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) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
package io.gitlab.jfronny.slyde.client;
|
package io.gitlab.jfronny.slyde.client;
|
||||||
|
|
||||||
|
import io.gitlab.jfronny.slyde.Cfg;
|
||||||
import net.fabricmc.api.ClientModInitializer;
|
import net.fabricmc.api.ClientModInitializer;
|
||||||
import net.fabricmc.api.EnvType;
|
import net.fabricmc.api.EnvType;
|
||||||
import net.fabricmc.api.Environment;
|
import net.fabricmc.api.Environment;
|
||||||
|
@ -8,6 +9,6 @@ import net.fabricmc.api.Environment;
|
||||||
public class SlydeClient implements ClientModInitializer {
|
public class SlydeClient implements ClientModInitializer {
|
||||||
@Override
|
@Override
|
||||||
public void onInitializeClient() {
|
public void onInitializeClient() {
|
||||||
|
Cfg.get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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<Integer> {
|
||||||
|
@Shadow(remap = false) private double thumbPosition;
|
||||||
|
|
||||||
|
public SodiumSliderControlMixin(Option<Integer> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,11 +3,13 @@
|
||||||
"minVersion": "0.8",
|
"minVersion": "0.8",
|
||||||
"package": "io.gitlab.jfronny.slyde.mixin",
|
"package": "io.gitlab.jfronny.slyde.mixin",
|
||||||
"compatibilityLevel": "JAVA_8",
|
"compatibilityLevel": "JAVA_8",
|
||||||
|
"plugin": "io.gitlab.jfronny.slyde.Plugin",
|
||||||
"mixins": [
|
"mixins": [
|
||||||
],
|
],
|
||||||
"client": [
|
"client": [
|
||||||
|
"DoubleOptionMixin",
|
||||||
"SliderWidgetMixin",
|
"SliderWidgetMixin",
|
||||||
"DoubleOptionMixin"
|
"SodiumSliderControlMixin"
|
||||||
],
|
],
|
||||||
"injectors": {
|
"injectors": {
|
||||||
"defaultRequire": 1
|
"defaultRequire": 1
|
||||||
|
|
Loading…
Reference in New Issue