Skip to content

Commit

Permalink
EntityViewDistanceCompat + better handling of incompat options
Browse files Browse the repository at this point in the history
  • Loading branch information
isXander committed Oct 6, 2022
1 parent 88fd828 commit e907943
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 12 deletions.
8 changes: 5 additions & 3 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,16 @@ dependencies {
modImplementation("dev.isxander:yet-another-config-lib:1.5.0")
modImplementation("maven.modrinth:sodium:mc1.19.2-0.4.4")

// sodium extra compat
// sodium extra better options compat
modImplementation("me.flashyreese.mods:sodium-extra-fabric:0.4.10+mc1.19.2-build.64") {
exclude(module = "reeses-sodium-options")
}
// moreculling compat
// moreculling category placement
modImplementation("maven.modrinth:moreculling:v0.10.0")
// iris compat
// iris category placement
modImplementation("maven.modrinth:iris:1.19.x-v1.3.1")
// entityviewdistance button option compat
modImplementation("maven.modrinth:entity-view-distance:1.0.2+1.19")

modRuntimeOnly("me.shedaniel.cloth:cloth-config-fabric:8.2.88")

Expand Down
24 changes: 18 additions & 6 deletions src/main/java/dev/isxander/xso/XandersSodiumOptions.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package dev.isxander.xso;

import dev.isxander.xso.compat.Compat;
import dev.isxander.xso.compat.IrisCompat;
import dev.isxander.xso.compat.MoreCullingCompat;
import dev.isxander.xso.compat.SodiumExtraCompat;
import dev.isxander.xso.compat.*;
import dev.isxander.xso.mixins.CyclingControlAccessor;
import dev.isxander.xso.mixins.SliderControlAccessor;
import dev.isxander.xso.utils.ClassCapture;
import dev.isxander.yacl.api.*;
import dev.isxander.yacl.gui.controllers.ActionController;
import dev.isxander.yacl.gui.controllers.EnumController;
import dev.isxander.yacl.gui.controllers.TickBoxController;
import dev.isxander.yacl.gui.controllers.slider.IntegerSliderController;
Expand Down Expand Up @@ -70,12 +68,26 @@ public static Screen wrapSodiumScreen(SodiumOptionsGUI sodiumOptionsGUI, List<Op
return builder.build().generateScreen(prevScreen);
}

private static <T> Option<T> convertOption(me.jellysquid.mods.sodium.client.gui.options.Option<T> sodiumOption) {
private static <T> Option<?> convertOption(me.jellysquid.mods.sodium.client.gui.options.Option<T> sodiumOption) {
if (Compat.ENTITY_VIEW_DIST && EntityViewDistanceCompat.isFakeOption(sodiumOption)) {
return EntityViewDistanceCompat.convertFakeOption(sodiumOption);
}

if (!(sodiumOption instanceof ClassCapture<?>)) {
// incompatible - some custom option impl
return ButtonOption.createBuilder()
.name(sodiumOption.getName())
.tooltip(sodiumOption.getTooltip(), Text.translatable("xso.incompatible.tooltip").formatted(Formatting.RED))
.available(false)
.controller(opt -> new ActionController(opt, Text.translatable("xso.incompatible.button").formatted(Formatting.RED)))
.action((screen, opt) -> {})
.build();
}

Option.Builder<T> builder = Option.createBuilder(((ClassCapture<T>) sodiumOption).getCapturedClass())
.name(sodiumOption.getName())
.tooltip(sodiumOption.getTooltip())
.flags(convertFlags(sodiumOption))
.available(sodiumOption.isAvailable())
.binding(Compat.MORE_CULLING ? MoreCullingCompat.getBinding(sodiumOption) : new SodiumBinding<>(sodiumOption))
.available(sodiumOption.isAvailable());

Expand Down
11 changes: 8 additions & 3 deletions src/main/java/dev/isxander/xso/compat/Compat.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@
import net.fabricmc.loader.api.FabricLoader;

public class Compat {
public static final boolean SODIUM_EXTRA = FabricLoader.getInstance().isModLoaded("sodium-extra");
public static final boolean MORE_CULLING = FabricLoader.getInstance().isModLoaded("moreculling");
public static final boolean IRIS = FabricLoader.getInstance().isModLoaded("iris");
public static final boolean SODIUM_EXTRA = mod("sodium-extra");
public static final boolean MORE_CULLING = mod("moreculling");
public static final boolean IRIS = mod("iris");
public static final boolean ENTITY_VIEW_DIST = mod("entity-view-distance");

private static boolean mod(String id) {
return FabricLoader.getInstance().isModLoaded(id);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package dev.isxander.xso.compat;

import dev.isxander.yacl.api.ButtonOption;
import dev.isxander.yacl.gui.controllers.ActionController;
import eu.pb4.entityviewdistance.modcompat.SodiumCompat;
import me.jellysquid.mods.sodium.client.gui.options.Option;

public class EntityViewDistanceCompat {
public static boolean isFakeOption(Option<?> sodiumOption) {
return sodiumOption instanceof SodiumCompat.FakeOptionImpl;
}

public static ButtonOption convertFakeOption(Option<?> sodiumOption) {
SodiumCompat.FakeOptionImpl fakeOption = (SodiumCompat.FakeOptionImpl) sodiumOption;
return ButtonOption.createBuilder()
.name(sodiumOption.getName())
.tooltip(sodiumOption.getTooltip())
.controller(ActionController::new)
.action(((yaclScreen, buttonOption) -> fakeOption.setValue(SodiumCompat.Void.VOID)))
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"xso.incompatible.button": "Incompatible",
"xso.incompatible.tooltip": "This option is currently incompatible with XSO. Please make an issue to get support!"
}

0 comments on commit e907943

Please sign in to comment.