Skip to content

Commit d2601ae

Browse files
authored
Merge pull request #50 from Jasupa/master
Integrate Block Palette GUI (BPG) (v2)
2 parents 85ab683 + 84d019a commit d2601ae

File tree

13 files changed

+2084
-184
lines changed

13 files changed

+2084
-184
lines changed

src/main/java/net/buildtheearth/BuildTeamTools.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,13 @@ public void onEnable() {
4444

4545
// Register Modules
4646
ModuleHandler.getInstance().registerModules(
47-
CommonModule.getInstance(),
48-
NetworkModule.getInstance(),
49-
GeneratorModule.getInstance(),
50-
NavigationModule.getInstance(),
51-
PlotSystemModule.getInstance(),
52-
StatsModule.getInstance(),
53-
MiscModule.getInstance()
47+
CommonModule.getInstance(),
48+
NetworkModule.getInstance(),
49+
GeneratorModule.getInstance(),
50+
NavigationModule.getInstance(),
51+
PlotSystemModule.getInstance(),
52+
StatsModule.getInstance(),
53+
MiscModule.getInstance()
5454
);
5555
ModuleHandler.getInstance().enableAll(null, true);
5656
}
@@ -88,4 +88,4 @@ public void saveConfig() {
8888
public File getPluginFile() {
8989
return this.getFile();
9090
}
91-
}
91+
}

src/main/java/net/buildtheearth/modules/miscellaneous/MiscModule.java

Lines changed: 64 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,18 @@
22

33
import net.buildtheearth.modules.Module;
44
import net.buildtheearth.modules.miscellaneous.blockpalettegui.BlockPaletteGUI;
5-
import net.buildtheearth.modules.miscellaneous.signtextgenerator.SignTextGenerator;
5+
import net.buildtheearth.modules.miscellaneous.blockpalettegui.BlockPaletteManager;
6+
import net.buildtheearth.modules.miscellaneous.blockpalettegui.BlockPaletteCommand;
7+
import org.bukkit.command.CommandExecutor;
8+
import org.bukkit.command.PluginCommand;
9+
import org.bukkit.command.TabCompleter;
10+
import org.bukkit.plugin.java.JavaPlugin;
11+
12+
import java.lang.reflect.Constructor;
613

714
public class MiscModule extends Module {
815

916
private BlockPaletteGUI blockPaletteGUI;
10-
private SignTextGenerator signTextGenerator;
11-
1217
private static MiscModule instance = null;
1318

1419
public MiscModule() {
@@ -19,29 +24,76 @@ public static MiscModule getInstance() {
1924
return instance == null ? instance = new MiscModule() : instance;
2025
}
2126

22-
23-
2427
@Override
2528
public void enable() {
2629
super.enable();
2730

28-
blockPaletteGUI = new BlockPaletteGUI();
29-
signTextGenerator = new SignTextGenerator();
31+
JavaPlugin plugin = resolvePlugin();
32+
33+
blockPaletteGUI = new BlockPaletteGUI(plugin);
34+
blockPaletteGUI.enable();
35+
36+
registerCommandSafely(plugin, "blockpalette", blockPaletteGUI.getManager());
3037
}
3138

3239
@Override
3340
public void disable() {
34-
if(!isEnabled())
35-
return;
41+
if (!isEnabled()) return;
3642

37-
blockPaletteGUI.disable();
38-
signTextGenerator.disable();
43+
if (blockPaletteGUI != null) {
44+
blockPaletteGUI.disable();
45+
blockPaletteGUI = null;
46+
}
3947

4048
super.disable();
4149
}
4250

4351
@Override
4452
public void registerListeners() {
45-
//super.registerListeners(new Listener());
53+
}
54+
55+
private JavaPlugin resolvePlugin() {
56+
try {
57+
return JavaPlugin.getProvidingPlugin(MiscModule.class);
58+
} catch (Throwable t) {
59+
throw new IllegalStateException("Cannot resolve JavaPlugin for MiscModule", t);
60+
}
61+
}
62+
63+
private void registerCommandSafely(JavaPlugin plugin, String name, BlockPaletteManager manager) {
64+
PluginCommand cmd = plugin.getCommand(name);
65+
if (cmd == null) {
66+
return;
67+
}
68+
69+
Object obj = createCommandInstance(manager, plugin);
70+
if (obj instanceof CommandExecutor exec) cmd.setExecutor(exec);
71+
if (obj instanceof TabCompleter tab) cmd.setTabCompleter(tab);
72+
}
73+
74+
private Object createCommandInstance(BlockPaletteManager manager, JavaPlugin plugin) {
75+
try {
76+
Class<?> c = BlockPaletteCommand.class;
77+
Constructor<?> k;
78+
79+
try {
80+
k = c.getConstructor(BlockPaletteManager.class, JavaPlugin.class);
81+
return k.newInstance(manager, plugin);
82+
} catch (NoSuchMethodException ignored) {}
83+
84+
try {
85+
k = c.getConstructor(BlockPaletteManager.class);
86+
return k.newInstance(manager);
87+
} catch (NoSuchMethodException ignored) {}
88+
89+
try {
90+
k = c.getConstructor(JavaPlugin.class);
91+
return k.newInstance(plugin);
92+
} catch (NoSuchMethodException ignored) {}
93+
94+
return c.getDeclaredConstructor().newInstance();
95+
} catch (Throwable t) {
96+
throw new RuntimeException("Cannot construct BlockPaletteCommand", t);
97+
}
4698
}
4799
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package net.buildtheearth.modules.miscellaneous.blockpalettegui;
2+
3+
import org.bukkit.command.Command;
4+
import org.bukkit.command.CommandExecutor;
5+
import org.bukkit.command.CommandSender;
6+
import org.bukkit.command.TabCompleter;
7+
import org.bukkit.entity.Player;
8+
import org.bukkit.plugin.java.JavaPlugin;
9+
import org.bukkit.util.StringUtil;
10+
11+
import java.util.*;
12+
13+
/**
14+
* /bp
15+
* /bp menu
16+
* /bp filter
17+
* /bp filter <filter1> <filter2> …
18+
*/
19+
public class BlockPaletteCommand implements CommandExecutor, TabCompleter {
20+
21+
private final BlockPaletteManager blockPalletManager;
22+
private final JavaPlugin plugin;
23+
24+
public BlockPaletteCommand(BlockPaletteManager blockPalletManager, JavaPlugin plugin) {
25+
this.blockPalletManager = blockPalletManager;
26+
this.plugin = plugin;
27+
}
28+
29+
@Override
30+
public boolean onCommand(CommandSender sender,
31+
Command command,
32+
String label,
33+
String[] args) {
34+
if (!(sender instanceof Player)) {
35+
sender.sendMessage("This command can only be used by players.");
36+
return true;
37+
}
38+
Player player = (Player) sender;
39+
40+
// /bp or /bp menu ⇒ default filters + open block menu
41+
if (args.length == 0
42+
|| (args.length == 1 && args[0].equalsIgnoreCase("menu"))) {
43+
blockPalletManager.setPlayerFiltersAndOpen(player);
44+
return true;
45+
}
46+
47+
// /bp filter ⇒ just open the filter GUI
48+
if (args.length == 1 && args[0].equalsIgnoreCase("filter")) {
49+
new ChoosePaletteMenu(blockPalletManager, player, plugin).open();
50+
return true;
51+
}
52+
53+
// /bp filter <f1> <f2> … ⇒ apply filters + open filter GUI
54+
if (args.length > 1 && args[0].equalsIgnoreCase("filter")) {
55+
Set<String> newFilters = new HashSet<>(
56+
Arrays.asList(Arrays.copyOfRange(args, 1, args.length))
57+
);
58+
blockPalletManager.updatePlayerFilters(player, newFilters);
59+
new ChoosePaletteMenu(blockPalletManager, player, plugin).open();
60+
return true;
61+
}
62+
63+
// invalid usage ⇒ show help
64+
sender.sendMessage("§cUsage: §7/bp menu\n"
65+
+ "§c or §7/bp filter\n"
66+
+ "§c or §7/bp filter <filter1> <filter2> …");
67+
return true;
68+
}
69+
70+
@Override
71+
public List<String> onTabComplete(CommandSender sender,
72+
Command cmd,
73+
String alias,
74+
String[] args) {
75+
List<String> completions = new ArrayList<>();
76+
77+
if (args.length == 1) {
78+
// only "menu" or "filter"
79+
List<String> top = Arrays.asList("menu", "filter");
80+
StringUtil.copyPartialMatches(args[0], top, completions);
81+
}
82+
else if (args.length > 1 && args[0].equalsIgnoreCase("filter")) {
83+
// suggest from BlockPalletMenuType.FILTER_OPTIONS
84+
StringUtil.copyPartialMatches(
85+
args[args.length - 1],
86+
BlockPaletteMenuType.FILTER_OPTIONS,
87+
completions
88+
);
89+
}
90+
91+
Collections.sort(completions, String.CASE_INSENSITIVE_ORDER);
92+
return completions;
93+
}
94+
}
Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,27 @@
11
package net.buildtheearth.modules.miscellaneous.blockpalettegui;
22

33
import net.buildtheearth.modules.ModuleComponent;
4+
import org.bukkit.plugin.java.JavaPlugin;
45

56
public class BlockPaletteGUI extends ModuleComponent {
67

78
private static final String COMPONENT_NAME = "BlockPaletteGUI";
89

9-
public BlockPaletteGUI() {
10+
private final JavaPlugin plugin;
11+
private final BlockPaletteManager manager;
12+
13+
public BlockPaletteGUI(JavaPlugin plugin) {
1014
super(COMPONENT_NAME);
15+
this.plugin = plugin;
16+
this.manager = new BlockPaletteManager(plugin);
17+
}
18+
19+
public JavaPlugin getPlugin() {
20+
return plugin;
21+
}
22+
23+
public BlockPaletteManager getManager() {
24+
return manager;
1125
}
1226

1327
@Override
@@ -17,9 +31,7 @@ public void enable() {
1731

1832
@Override
1933
public void disable() {
20-
if(!isEnabled())
21-
return;
22-
34+
if (!isEnabled()) return;
2335
super.disable();
2436
}
2537
}

0 commit comments

Comments
 (0)