diff --git a/src/main/java/maxsuperman/addons/roller/gui/screens/EnchantmentSelectScreen.java b/src/main/java/maxsuperman/addons/roller/gui/screens/EnchantmentSelectScreen.java index ff75659..4e7f473 100644 --- a/src/main/java/maxsuperman/addons/roller/gui/screens/EnchantmentSelectScreen.java +++ b/src/main/java/maxsuperman/addons/roller/gui/screens/EnchantmentSelectScreen.java @@ -15,6 +15,7 @@ import net.minecraft.registry.tag.EnchantmentTags; import net.minecraft.util.Identifier; +import java.util.ArrayList; import java.util.List; import static meteordevelopment.meteorclient.MeteorClient.mc; @@ -23,11 +24,13 @@ public class EnchantmentSelectScreen extends WindowScreen { private final GuiTheme theme; private final EnchantmentSelectCallback callback; private String filterText = ""; + private final boolean onlyTradable; - public EnchantmentSelectScreen(GuiTheme theme, EnchantmentSelectCallback callback) { + public EnchantmentSelectScreen(GuiTheme theme, boolean onlyTradable, EnchantmentSelectCallback callback) { super(theme, "Select enchantment"); this.theme = theme; this.callback = callback; + this.onlyTradable = onlyTradable; } public interface EnchantmentSelectCallback { @@ -69,12 +72,18 @@ private void fillTable(WTable table) { return; } var reg = mc.world.getRegistryManager().get(RegistryKeys.ENCHANTMENT); - List> available; - var l = reg.getEntryList(EnchantmentTags.TRADEABLE); - if (l.isEmpty()) { - return; + List> available = new ArrayList<>(); + if (this.onlyTradable) { + var l = reg.getEntryList(EnchantmentTags.TRADEABLE); + if (l.isEmpty()) { + return; + } + available = l.get().stream().toList(); + } else { + for (var a : reg.getIndexedEntries()) { + available.add(a); + } } - available = l.get().stream().toList(); for (RegistryEntry e : available.stream().sorted((o1, o2) -> Names.get(o1).compareToIgnoreCase(Names.get(o2))).toList()) { if (!filterText.isEmpty() && !Names.get(e).toLowerCase().startsWith(filterText.toLowerCase())) { continue; diff --git a/src/main/java/maxsuperman/addons/roller/modules/VillagerRoller.java b/src/main/java/maxsuperman/addons/roller/modules/VillagerRoller.java index 2085c1c..82cd2a6 100644 --- a/src/main/java/maxsuperman/addons/roller/modules/VillagerRoller.java +++ b/src/main/java/maxsuperman/addons/roller/modules/VillagerRoller.java @@ -158,6 +158,13 @@ public class VillagerRoller extends Module { .build() ); + private final Setting onlyTradable = sgGeneral.add(new BoolSetting.Builder() + .name("only-tradable") + .description("Hide enchantments that are not marked as tradable") + .defaultValue(false) + .build() + ); + private final Setting sortEnchantments = sgGeneral.add(new BoolSetting.Builder() .name("sort-enchantments") .description("Show enchantments sorted by their name") @@ -375,7 +382,7 @@ private void fillWidget(GuiTheme theme, WVerticalList list) { WHorizontalList label = theme.horizontalList(); WButton c = label.add(theme.button("Change")).widget(); - c.action = () -> mc.setScreen(new EnchantmentSelectScreen(theme, (RollingEnchantment sel) -> { + c.action = () -> mc.setScreen(new EnchantmentSelectScreen(theme, onlyTradable.get(), sel -> { searchingEnchants.set(si, sel); list.clear(); fillWidget(theme, list); @@ -427,7 +434,7 @@ private void fillWidget(GuiTheme theme, WVerticalList list) { }; WButton add = controls.add(theme.button("Add")).expandX().widget(); - add.action = () -> mc.setScreen(new EnchantmentSelectScreen(theme, e -> { + add.action = () -> mc.setScreen(new EnchantmentSelectScreen(theme, onlyTradable.get(), e -> { e.minLevel = 1; e.maxCost = 64; e.enabled = true; @@ -441,7 +448,7 @@ private void fillWidget(GuiTheme theme, WVerticalList list) { list.clear(); searchingEnchants.clear(); if (reg != null) { - for (RegistryEntry e : getTradableEnchants()) { + for (RegistryEntry e : getEnchants(onlyTradable.get())) { searchingEnchants.add(new RollingEnchantment(reg.getId(e.value()), e.value().getMaxLevel(), getMinimumPrice(e), true)); } } @@ -509,14 +516,21 @@ private void fillWidget(GuiTheme theme, WVerticalList list) { } - public List> getTradableEnchants() { + public List> getEnchants(boolean onlyTradable) { if (mc.world == null) { return Collections.emptyList(); } var reg = mc.world.getRegistryManager().get(RegistryKeys.ENCHANTMENT); - List> available; - var l = reg.getEntryList(EnchantmentTags.TRADEABLE); - return l.map(registryEntries -> registryEntries.stream().toList()).orElse(Collections.emptyList()); + List> available = new ArrayList<>(); + if (onlyTradable) { + var l = reg.getEntryList(EnchantmentTags.TRADEABLE); + return l.map(registryEntries -> registryEntries.stream().toList()).orElse(Collections.emptyList()); + } else { + for (var a : reg.getIndexedEntries()) { + available.add(a); + } + return available; + } } public static int getMinimumPrice(RegistryEntry e) {