Skip to content

Commit 47808cd

Browse files
committed
correctly handle the "ALL" config enchant entry
1 parent cbfbe97 commit 47808cd

File tree

2 files changed

+48
-14
lines changed

2 files changed

+48
-14
lines changed

src/main/java/pro/cloudnode/smp/enchantbookplus/ConfigEnchantmentEntry.java

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,43 +12,43 @@
1212
import java.util.Optional;
1313
import java.util.stream.Collectors;
1414

15-
public final class ConfigEnchantmentEntry {
15+
public class ConfigEnchantmentEntry {
1616
/**
1717
* Name of the enchantment.
1818
*/
19-
private final @NotNull String name;
19+
public final @NotNull String name;
2020

2121
/**
2222
* Maximum level of the enchantment.
2323
*/
24-
private final @Nullable Integer maxLevel;
24+
protected final @Nullable Integer maxLevel;
2525

2626
/**
2727
* Max level relative
2828
*/
29-
private final boolean maxLevelRelative;
29+
protected final boolean maxLevelRelative;
3030

3131
/**
3232
* Cost of the enchantment.
3333
*/
34-
private final int cost;
34+
protected final int cost;
3535

3636
/**
3737
* Multiply cost by level.
3838
*/
39-
private final boolean multiplyCostByLevel;
39+
protected final boolean multiplyCostByLevel;
4040

4141
/**
4242
* Name of the enchantment.
4343
*/
44-
public @NotNull String getName() {
44+
public final @NotNull String getName() {
4545
return name;
4646
}
4747

4848
/**
4949
* Maximum level of the enchantment.
5050
*/
51-
public @NotNull Optional<@NotNull Integer> getMaxLevel() {
51+
public final @NotNull Optional<@NotNull Integer> getMaxLevel() {
5252
if (Optional.ofNullable(maxLevel).isEmpty()) return Optional.empty();
5353
if (maxLevelRelative) return Optional.of(getEnchantment().getMaxLevel() + maxLevel);
5454
return Optional.of(maxLevel);
@@ -57,21 +57,21 @@ public final class ConfigEnchantmentEntry {
5757
/**
5858
* Cost of the enchantment.
5959
*/
60-
public int getCost() {
60+
public final int getCost() {
6161
return cost;
6262
}
6363

6464
/**
6565
* Multiply cost by level.
6666
*/
67-
public boolean getMultiplyCostByLevel() {
67+
public final boolean getMultiplyCostByLevel() {
6868
return multiplyCostByLevel;
6969
}
7070

7171
/**
7272
* Get enchantment
7373
*/
74-
public Enchantment getEnchantment() {
74+
public final Enchantment getEnchantment() {
7575
return Enchantment.getByKey(NamespacedKey.minecraft(name));
7676
}
7777

@@ -80,7 +80,7 @@ public Enchantment getEnchantment() {
8080
*
8181
* @param enchantment The enchantment
8282
*/
83-
public boolean isEnchantment(final @NotNull Enchantment enchantment) {
83+
public final boolean isEnchantment(final @NotNull Enchantment enchantment) {
8484
return name.equalsIgnoreCase(enchantment.getKey().getKey());
8585
}
8686

@@ -192,4 +192,18 @@ private static boolean isValidConfigValue(final @Nullable Object configValue) {
192192
if (!isValidConfigValue(configValue)) throw new IllegalArgumentException("Invalid config value");
193193
return configArray((ArrayList<HashMap<String, Object>>) configValue);
194194
}
195+
196+
public static final class AllConfigEnchantmentEntry extends ConfigEnchantmentEntry {
197+
private AllConfigEnchantmentEntry(final @Nullable Integer maxLevel, final boolean maxLevelRelative, final int cost, final boolean multiplyCostByLevel) {
198+
super("ALL", maxLevel, maxLevelRelative, cost, multiplyCostByLevel);
199+
}
200+
201+
public static @NotNull AllConfigEnchantmentEntry from(final @NotNull ConfigEnchantmentEntry configEnchantmentEntry) {
202+
return new AllConfigEnchantmentEntry(configEnchantmentEntry.maxLevel, configEnchantmentEntry.maxLevelRelative, configEnchantmentEntry.cost, configEnchantmentEntry.multiplyCostByLevel);
203+
}
204+
205+
public @NotNull ConfigEnchantmentEntry enchant(final @NotNull Enchantment enchantment) {
206+
return new ConfigEnchantmentEntry(enchantment.getKey().getKey(), this.maxLevel, maxLevelRelative, cost, multiplyCostByLevel);
207+
}
208+
}
195209
}

src/main/java/pro/cloudnode/smp/enchantbookplus/EnchantBookPlus.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
import org.bukkit.enchantments.Enchantment;
44
import org.bukkit.plugin.java.JavaPlugin;
55
import org.jetbrains.annotations.NotNull;
6+
import org.jetbrains.annotations.Nullable;
67
import pro.cloudnode.smp.enchantbookplus.event.PrepareAnvil;
78

89
import java.util.ArrayList;
910
import java.util.List;
1011
import java.util.Objects;
1112
import java.util.Optional;
1213
import java.util.logging.Level;
14+
import java.util.stream.Collectors;
1315

1416
public final class EnchantBookPlus extends JavaPlugin {
1517
/**
@@ -38,28 +40,46 @@ private void registerEvents() {
3840
return configEnchantments;
3941
}
4042

43+
/**
44+
* "ALL" enchantment cache
45+
*/
46+
private @Nullable ConfigEnchantmentEntry.AllConfigEnchantmentEntry allConfigEnchantment;
47+
48+
/**
49+
* "ALL" enchantment cache
50+
*/
51+
public @NotNull Optional<ConfigEnchantmentEntry.@NotNull AllConfigEnchantmentEntry> getAllConfigEnchantment() {
52+
return Optional.ofNullable(allConfigEnchantment);
53+
}
54+
4155
/**
4256
* Get enchantment from cache
4357
*
4458
* @param enchantment The Minecraft enchantment
4559
*/
4660
public @NotNull Optional<@NotNull ConfigEnchantmentEntry> getConfigEnchantment(final @NotNull Enchantment enchantment) {
4761
final @NotNull Optional<@NotNull ConfigEnchantmentEntry> entry = getConfigEnchantments().stream().filter(c -> c.isEnchantment(enchantment)).findFirst();
48-
return entry.isEmpty() ? getConfigEnchantments().stream().filter(c -> c.getName().equalsIgnoreCase("ALL")).findFirst() : entry;
62+
getLogger().info(configEnchantments.stream().map(c -> c.name).collect(Collectors.joining(", ")));
63+
return entry.isEmpty() ? getAllConfigEnchantment().map(a -> a.enchant(enchantment)) : entry;
4964
}
5065

5166
/**
5267
* Reload config
5368
*/
5469
public void reload() {
5570
reloadConfig();
71+
final @NotNull List<@NotNull ConfigEnchantmentEntry> enchants;
5672
try {
57-
configEnchantments = ConfigEnchantmentEntry.config(getConfig().get("enchantments"));
73+
enchants = ConfigEnchantmentEntry.config(getConfig().get("enchantments"));
5874
}
5975
catch (final @NotNull Exception exception) {
6076
getLogger().log(Level.SEVERE, "Failed to load config", exception);
6177
getServer().getPluginManager().disablePlugin(this);
78+
return;
6279
}
80+
allConfigEnchantment = enchants.stream()
81+
.filter(c -> c.name.equalsIgnoreCase("ALL")).findFirst().map(ConfigEnchantmentEntry.AllConfigEnchantmentEntry::from).orElse(null);
82+
configEnchantments = enchants.stream().filter(c -> !c.name.equalsIgnoreCase("ALL")).collect(Collectors.toList());
6383
}
6484

6585
@Override

0 commit comments

Comments
 (0)