This repository was archived by the owner on Dec 4, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 27
Expand file tree
/
Copy pathExtraContextsPlugin.java
More file actions
92 lines (79 loc) · 3.86 KB
/
ExtraContextsPlugin.java
File metadata and controls
92 lines (79 loc) · 3.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package me.lucko.extracontexts;
import me.lucko.extracontexts.calculators.DimensionCalculator;
import me.lucko.extracontexts.calculators.GamemodeCalculator;
import me.lucko.extracontexts.calculators.HasPlayedBeforeCalculator;
import me.lucko.extracontexts.calculators.PlaceholderApiCalculator;
import me.lucko.extracontexts.calculators.TeamCalculator;
import me.lucko.extracontexts.calculators.TownyNationCalculator;
import me.lucko.extracontexts.calculators.TownyTownCalculator;
import me.lucko.extracontexts.calculators.TownyWildsCalculator;
import me.lucko.extracontexts.calculators.WhitelistedCalculator;
import me.lucko.extracontexts.calculators.WorldGuardFlagCalculator;
import me.lucko.extracontexts.calculators.WorldGuardRegionCalculator;
import net.luckperms.api.LuckPerms;
import net.luckperms.api.context.ContextCalculator;
import net.luckperms.api.context.ContextManager;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;
public class ExtraContextsPlugin extends JavaPlugin implements CommandExecutor {
private ContextManager contextManager;
private final List<ContextCalculator<Player>> registeredCalculators = new ArrayList<>();
@Override
public void onEnable() {
LuckPerms luckPerms = getServer().getServicesManager().load(LuckPerms.class);
if (luckPerms == null) {
throw new IllegalStateException("LuckPerms API not loaded.");
}
this.contextManager = luckPerms.getContextManager();
saveDefaultConfig();
setup();
}
@Override
public void onDisable() {
unregisterAll();
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
unregisterAll();
reloadConfig();
setup();
sender.sendMessage(ChatColor.GREEN + "ExtraContexts configuration reloaded.");
return true;
}
private void setup() {
register("towny-town", "Towny", TownyTownCalculator::new);
register("towny-nation", "Towny", TownyNationCalculator::new);
register("towny-wilds", "Towny", TownyWildsCalculator::new);
register("worldguard-region", "WorldGuard", WorldGuardRegionCalculator::new);
register("worldguard-flag", "WorldGuard", WorldGuardFlagCalculator::new);
register("gamemode", null, GamemodeCalculator::new);
register("whitelisted", null, WhitelistedCalculator::new);
register("dimension", null, DimensionCalculator::new);
register("team", null, TeamCalculator::new);
register("has-played-before", null, HasPlayedBeforeCalculator::new);
register("placeholderapi", "PlaceholderAPI", () -> new PlaceholderApiCalculator(getConfig().getConfigurationSection("placeholderapi-placeholders")));
}
private void register(String option, String requiredPlugin, Supplier<ContextCalculator<Player>> calculatorSupplier) {
if (getConfig().getBoolean(option, false)) {
if (requiredPlugin != null && getServer().getPluginManager().getPlugin(requiredPlugin) == null) {
getLogger().info(requiredPlugin + " not present. Skipping registration of '" + option + "'...");
} else {
getLogger().info("Registering '" + option + "' calculator.");
ContextCalculator<Player> calculator = calculatorSupplier.get();
this.contextManager.registerCalculator(calculator);
this.registeredCalculators.add(calculator);
}
}
}
private void unregisterAll() {
this.registeredCalculators.forEach(c -> this.contextManager.unregisterCalculator(c));
this.registeredCalculators.clear();
}
}