Skip to content

Commit

Permalink
Only show relevant server whitelists
Browse files Browse the repository at this point in the history
Show Whitelist config in whitelist mode, and Blacklist in blacklist mode.

Don't show either in "no restriction" mode.
  • Loading branch information
MattSturgeon committed Jan 2, 2024
1 parent be167bb commit 18e5da9
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,6 @@ private AutoConfigExtensions() {}
public static void apply(Class<? extends ConfigData> configClass) {
GuiRegistry registry = AutoConfig.getGuiRegistry(configClass);
VariantTooltipImpl.apply(registry);
ServerRestrictionDependencies.apply(registry);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package net.xolt.freecam.config.gui;

import me.shedaniel.autoconfig.gui.registry.GuiRegistry;
import me.shedaniel.clothconfig2.gui.entries.SelectionListEntry;
import me.shedaniel.clothconfig2.gui.entries.StringListListEntry;
import net.xolt.freecam.config.ModConfig;

class ServerRestrictionDependencies {

private static SelectionListEntry<ModConfig.ServerRestriction> mode;

static void apply(GuiRegistry registry) {
// Capture a reference to the mode entry
registry.registerPredicateTransformer(
(guis, i18n, field, config, defaults, guiProvider) -> {
//noinspection unchecked
mode = guis.stream()
.filter(SelectionListEntry.class::isInstance)
.map(SelectionListEntry.class::cast)
.filter(entry -> entry.getValue() instanceof ModConfig.ServerRestriction)
.reduce((prev, next) -> { throw new IllegalStateException("Multiple selection entries added to %s.mode".formatted(ModConfig.ServerConfig.class.getSimpleName())); })
.orElseThrow(() -> new IllegalStateException("No selection entries added to %s.mode".formatted(ModConfig.ServerConfig.class.getSimpleName())));
return guis;
},
field -> field.getDeclaringClass().equals(ModConfig.ServerConfig.class) && field.getName().equals("mode")
);

// Whitelist dependency
registry.registerPredicateTransformer(
(guis, i18n, field, config, defaults, guiProvider) -> {
guis.stream()
.filter(StringListListEntry.class::isInstance)
.map(StringListListEntry.class::cast)
.forEach(entry -> entry.setDisplayRequirement(() -> mode == null || mode.getValue().equals(ModConfig.ServerRestriction.WHITELIST)));
return guis;
},
field -> field.getDeclaringClass().equals(ModConfig.ServerConfig.class) && field.getName().equals("whitelist")
);

// Blacklist dependency
registry.registerPredicateTransformer(
(guis, i18n, field, config, defaults, guiProvider) -> {
guis.stream()
.filter(StringListListEntry.class::isInstance)
.map(StringListListEntry.class::cast)
.forEach(entry -> entry.setDisplayRequirement(() -> mode == null || mode.getValue().equals(ModConfig.ServerRestriction.BLACKLIST)));
return guis;
},
field -> field.getDeclaringClass().equals(ModConfig.ServerConfig.class) && field.getName().equals("blacklist")
);
}
}

0 comments on commit 18e5da9

Please sign in to comment.