Skip to content

Commit fa993d0

Browse files
committed
feat: Make the bukkit module modular.
Temporarily disable the compilation of brigadier module.
1 parent c114fb0 commit fa993d0

32 files changed

+311
-90
lines changed

bukkit/commandmap/pom.xml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
<parent>
7+
<groupId>team.unnamed</groupId>
8+
<artifactId>commandflow-bukkit</artifactId>
9+
<version>${revision}</version>
10+
<relativePath>../pom.xml</relativePath>
11+
</parent>
12+
13+
<artifactId>commandflow-bukkit-commandmap</artifactId>
14+
15+
<dependencies>
16+
<dependency>
17+
<groupId>team.unnamed</groupId>
18+
<artifactId>commandflow-bukkit-common</artifactId>
19+
<version>${project.version}</version>
20+
</dependency>
21+
</dependencies>
22+
</project>

bukkit/src/main/java/team/unnamed/commandflow/bukkit/BukkitCommandWrapper.java renamed to bukkit/commandmap/src/main/java/bukkit/BukkitCommandWrapper.java

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
1-
package team.unnamed.commandflow.bukkit;
1+
package bukkit;
22

33

44
import team.unnamed.commandflow.Authorizer;
55
import team.unnamed.commandflow.CommandContext;
6-
import team.unnamed.commandflow.CommandManager;
76
import team.unnamed.commandflow.Namespace;
87
import team.unnamed.commandflow.SimpleCommandContext;
8+
import team.unnamed.commandflow.bukkit.BukkitCommandManager;
99
import team.unnamed.commandflow.exception.CommandException;
1010
import team.unnamed.commandflow.translator.Translator;
1111
import net.kyori.adventure.text.Component;
1212
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
13-
import net.md_5.bungee.api.chat.BaseComponent;
1413
import org.bukkit.command.Command;
1514
import org.bukkit.command.CommandSender;
1615
import org.jetbrains.annotations.NotNull;
@@ -20,12 +19,12 @@
2019
import java.util.List;
2120

2221
public class BukkitCommandWrapper extends Command {
23-
protected final CommandManager commandManager;
22+
protected final BukkitCommandManager commandManager;
2423
protected final Component permissionMessage;
2524
protected final Translator translator;
2625

2726
public BukkitCommandWrapper(team.unnamed.commandflow.command.Command command,
28-
CommandManager dispatcher,
27+
BukkitCommandManager dispatcher,
2928
Translator translator) {
3029
super(command.getName());
3130

@@ -60,7 +59,7 @@ public boolean execute(CommandSender commandSender, String label, String[] args)
6059

6160
Namespace namespace = Namespace.create();
6261

63-
namespace.setObject(CommandSender.class, BukkitCommandManager.SENDER_NAMESPACE, commandSender);
62+
namespace.setObject(CommandSender.class, BukkitMapCommandManager.SENDER_NAMESPACE, commandSender);
6463
namespace.setObject(String.class, "label", label);
6564

6665

@@ -89,7 +88,7 @@ public List<String> tabComplete(CommandSender sender, String alias, String[] arg
8988
argumentLine.add(0, alias);
9089

9190
Namespace namespace = Namespace.create();
92-
namespace.setObject(CommandSender.class, BukkitCommandManager.SENDER_NAMESPACE, sender);
91+
namespace.setObject(CommandSender.class, BukkitMapCommandManager.SENDER_NAMESPACE, sender);
9392

9493
return commandManager.getSuggestions(namespace, argumentLine);
9594
}
@@ -98,12 +97,11 @@ public List<String> tabComplete(CommandSender sender, String alias, String[] arg
9897
public boolean testPermission(@NotNull CommandSender target) {
9998
if (!testPermissionSilent(target)) {
10099
Namespace namespace = Namespace.create();
101-
namespace.setObject(CommandSender.class, BukkitCommandManager.SENDER_NAMESPACE, target);
100+
namespace.setObject(CommandSender.class, BukkitMapCommandManager.SENDER_NAMESPACE, target);
102101

103102
Component translatedPermissionMessage = translator.translate(permissionMessage, namespace);
104103

105-
BaseComponent[] components = MessageUtils.kyoriToBungee(translatedPermissionMessage);
106-
MessageUtils.sendMessage(target, components);
104+
commandManager.getMessageSender().sendMessage(target, translatedPermissionMessage);
107105

108106
return false;
109107
}
@@ -117,20 +115,8 @@ public boolean testPermissionSilent(CommandSender target) {
117115
Authorizer authorizer = commandManager.getAuthorizer();
118116

119117
Namespace namespace = Namespace.create();
120-
namespace.setObject(CommandSender.class, BukkitCommandManager.SENDER_NAMESPACE, target);
118+
namespace.setObject(CommandSender.class, BukkitMapCommandManager.SENDER_NAMESPACE, target);
121119

122120
return authorizer.isAuthorized(namespace, getPermission());
123121
}
124-
125-
protected static void sendMessageToSender(CommandException exception, Namespace namespace) {
126-
CommandManager commandManager = namespace.getObject(CommandManager.class, "commandManager");
127-
CommandSender sender = namespace.getObject(CommandSender.class, BukkitCommandManager.SENDER_NAMESPACE);
128-
129-
Component component = exception.getMessageComponent();
130-
Component translatedComponent = commandManager.getTranslator().translate(component, namespace);
131-
132-
BaseComponent[] components = MessageUtils.kyoriToBungee(translatedComponent);
133-
134-
MessageUtils.sendMessage(sender, components);
135-
}
136122
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package bukkit;
2+
3+
import team.unnamed.commandflow.CommandManager;
4+
import team.unnamed.commandflow.SimpleCommandManager;
5+
import team.unnamed.commandflow.bukkit.BukkitAuthorizer;
6+
import team.unnamed.commandflow.bukkit.BukkitCommandManager;
7+
import team.unnamed.commandflow.bukkit.BukkitDefaultTranslationProvider;
8+
import team.unnamed.commandflow.command.Command;
9+
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
10+
import org.bukkit.Bukkit;
11+
import org.bukkit.command.CommandMap;
12+
13+
import java.lang.reflect.Field;
14+
import java.util.HashMap;
15+
import java.util.Map;
16+
import java.util.logging.Level;
17+
18+
public class BukkitMapCommandManager extends BukkitCommandManager {
19+
20+
public static final String SENDER_NAMESPACE = "SENDER";
21+
22+
protected CommandMap bukkitCommandMap;
23+
protected final String fallbackPrefix;
24+
25+
protected final Map<String, BukkitCommandWrapper> wrapperMap;
26+
27+
public BukkitMapCommandManager(CommandManager delegate, String fallbackPrefix) {
28+
super(delegate);
29+
this.fallbackPrefix = fallbackPrefix;
30+
wrapperMap = new HashMap<>();
31+
32+
try {
33+
Field commandMapField = Bukkit.getServer().getClass().getDeclaredField("commandMap");
34+
commandMapField.setAccessible(true);
35+
36+
bukkitCommandMap = (CommandMap) commandMapField.get(Bukkit.getServer());
37+
} catch (NoSuchFieldException | IllegalAccessException ex) {
38+
Bukkit.getLogger().log(Level.SEVERE, "Failed to get command map: ", ex);
39+
}
40+
41+
}
42+
43+
public BukkitMapCommandManager(String fallbackPrefix) {
44+
this(new SimpleCommandManager(), fallbackPrefix);
45+
46+
setAuthorizer(new BukkitAuthorizer());
47+
getTranslator().setProvider(new BukkitDefaultTranslationProvider());
48+
getTranslator().setConverterFunction(LegacyComponentSerializer.legacyAmpersand()::deserialize);
49+
}
50+
51+
@Override
52+
protected void _register(Command command) {
53+
BukkitCommandWrapper bukkitCommand = new BukkitCommandWrapper(command,
54+
this, getTranslator());
55+
56+
for (String alias : command.getAliases()) {
57+
registerCommand(fallbackPrefix + ":" + alias, command);
58+
}
59+
60+
registerCommand(fallbackPrefix + ":" + command.getName(), command);
61+
62+
wrapperMap.put(command.getName(), bukkitCommand);
63+
bukkitCommandMap.register(fallbackPrefix, bukkitCommand);
64+
}
65+
66+
@Override
67+
protected void _unregister(Command command) {
68+
BukkitCommandWrapper wrapper = wrapperMap.get(command.getName());
69+
if (wrapper != null) {
70+
wrapper.unregister(bukkitCommandMap);
71+
}
72+
}
73+
74+
}

bukkit/common/pom.xml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
<parent>
7+
<groupId>team.unnamed</groupId>
8+
<artifactId>commandflow-bukkit</artifactId>
9+
<version>${revision}</version>
10+
<relativePath>../pom.xml</relativePath>
11+
</parent>
12+
13+
<artifactId>commandflow-bukkit-common</artifactId>
14+
</project>

bukkit/src/main/java/team/unnamed/commandflow/bukkit/BukkitAuthorizer.java renamed to bukkit/common/src/main/java/team/unnamed/commandflow/bukkit/BukkitAuthorizer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public boolean isAuthorized(Namespace namespace, String permission) {
1212
return true;
1313
}
1414

15-
CommandSender sender = namespace.getObject(CommandSender.class, BukkitCommandManager.SENDER_NAMESPACE);
15+
CommandSender sender = namespace.getObject(CommandSender.class, BukkitCommonConstants.SENDER_NAMESPACE);
1616

1717
return sender.hasPermission(permission);
1818
}

0 commit comments

Comments
 (0)