Skip to content

Commit 3707323

Browse files
authored
Merge pull request #1 from marioogg/beta
1.1 update.
2 parents 3574da1 + 1ab12ed commit 3707323

38 files changed

Lines changed: 1671 additions & 176 deletions

.github/workflows/publish.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
name: Publish
2+
3+
on:
4+
push:
5+
branches:
6+
- master
7+
8+
jobs:
9+
publish:
10+
runs-on: ubuntu-latest
11+
12+
steps:
13+
- uses: actions/checkout@v4
14+
15+
- uses: actions/setup-java@v4
16+
with:
17+
distribution: temurin
18+
java-version: 17
19+
cache: gradle
20+
21+
- run: chmod +x gradlew
22+
23+
- run: ./gradlew publish
24+
env:
25+
MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }}
26+
27+
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}

README.md

Lines changed: 400 additions & 107 deletions
Large diffs are not rendered by default.

build.gradle

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@ plugins {
55
id 'com.gradleup.shadow' version '8.3.3'
66
}
77

8-
group 'me.gleeming.command'
9-
version '1.0-SNAPSHOT'
8+
group 'me.marioogg'
9+
version '1.1'
1010

1111
repositories {
12-
mavenCentral()
13-
maven { url 'https://jitpack.io/' }
14-
maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' }
12+
maven { url 'https://maven.marioogg.dev/repository/public/' }
13+
maven { url 'https://repo.papermc.io/repository/maven-public/' }
1514
}
1615

1716
publishing {
@@ -23,7 +22,12 @@ publishing {
2322

2423
repositories {
2524
maven {
26-
url "https://maven.marioogg.dev/repository/snapshots"
25+
def isSnapshot = version.toString().endsWith("SNAPSHOT")
26+
def releasesRepoUrl = "https://maven.marioogg.dev/repository/releases"
27+
def snapshotsRepoUrl = "https://maven.marioogg.dev/repository/snapshots"
28+
29+
url = uri(isSnapshot ? snapshotsRepoUrl : releasesRepoUrl)
30+
2731
credentials {
2832
username = System.getenv("MAVEN_USERNAME")
2933
password = System.getenv("MAVEN_PASSWORD")
@@ -36,9 +40,16 @@ dependencies {
3640
compileOnly('org.spigotmc:spigot-api:1.8.8-R0.1-SNAPSHOT') {
3741
exclude group: 'net.md-5'
3842
}
43+
compileOnly('dev.folia:folia-api:1.20.1-R0.1-SNAPSHOT') {
44+
exclude group: 'net.md-5'
45+
}
46+
compileOnly 'net.md-5:bungeecord-api:1.20-R0.2-SNAPSHOT'
47+
compileOnly 'com.velocitypowered:velocity-api:3.3.0-SNAPSHOT'
48+
implementation 'org.apache.logging.log4j:log4j-api:2.23.1'
49+
implementation 'org.apache.logging.log4j:log4j-core:2.23.1'
3950
}
4051

41-
tasks.withType(JavaCompile) {
52+
tasks.withType(JavaCompile).configureEach {
4253
options.encoding = 'UTF-8'
4354
}
4455

settings.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
plugins {
22
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
33
}
4-
rootProject.name = "spigot-command-api"
4+
rootProject.name = "command"

src/main/java/me/gleeming/command/Command.java renamed to src/main/java/me/marioogg/command/Command.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package me.gleeming.command;
1+
package me.marioogg.command;
22

33
import java.lang.annotation.ElementType;
44
import java.lang.annotation.Retention;

src/main/java/me/gleeming/command/CommandHandler.java renamed to src/main/java/me/marioogg/command/CommandHandler.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
package me.gleeming.command;
1+
package me.marioogg.command;
22

33
import com.google.common.reflect.ClassPath;
44
import lombok.Getter;
55
import lombok.Setter;
66
import lombok.SneakyThrows;
7-
import me.gleeming.command.help.Help;
8-
import me.gleeming.command.help.HelpNode;
9-
import me.gleeming.command.node.CommandNode;
10-
import me.gleeming.command.parameter.ParamProcessor;
11-
import me.gleeming.command.parameter.Processor;
7+
import me.marioogg.command.help.Help;
8+
import me.marioogg.command.help.HelpNode;
9+
import me.marioogg.command.node.CommandNode;
10+
import me.marioogg.command.parameter.ParamProcessor;
11+
import me.marioogg.command.parameter.Processor;
1212
import org.bukkit.plugin.Plugin;
1313

1414
import java.util.*;

src/main/java/me/gleeming/command/bukkit/BukkitCommand.java renamed to src/main/java/me/marioogg/command/bukkit/BukkitCommand.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
package me.gleeming.command.bukkit;
1+
package me.marioogg.command.bukkit;
22

33
import lombok.Getter;
44
import lombok.SneakyThrows;
5-
import me.gleeming.command.CommandHandler;
6-
import me.gleeming.command.help.HelpNode;
7-
import me.gleeming.command.node.ArgumentNode;
8-
import me.gleeming.command.node.CommandNode;
9-
import me.gleeming.command.parameter.ParamProcessor;
5+
import me.marioogg.command.CommandHandler;
6+
import me.marioogg.command.help.HelpNode;
7+
import me.marioogg.command.node.ArgumentNode;
8+
import me.marioogg.command.node.CommandNode;
9+
import me.marioogg.command.parameter.ParamProcessor;
1010
import org.bukkit.ChatColor;
1111
import org.bukkit.command.Command;
1212
import org.bukkit.command.CommandSender;
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package me.marioogg.command.bungee;
2+
3+
import com.google.common.reflect.ClassPath;
4+
import lombok.Getter;
5+
import lombok.Setter;
6+
import lombok.SneakyThrows;
7+
import me.marioogg.command.bungee.node.BungeeCommandNode;
8+
import me.marioogg.command.bungee.parameter.BungeeParamProcessor;
9+
import me.marioogg.command.bungee.parameter.BungeeProcessor;
10+
import me.marioogg.command.help.Help;
11+
import me.marioogg.command.help.HelpNode;
12+
import net.md_5.bungee.api.plugin.Plugin;
13+
14+
import java.util.Arrays;
15+
16+
public class BungeeCommandHandler {
17+
@Getter @Setter private static Plugin plugin;
18+
19+
@SneakyThrows
20+
public static void registerCommands(String path, Plugin plugin) {
21+
ClassPath.from(plugin.getClass().getClassLoader()).getAllClasses().stream()
22+
.filter(info -> info.getPackageName().startsWith(path))
23+
.forEach(info -> registerCommands(info.load(), plugin));
24+
}
25+
26+
@SneakyThrows
27+
public static void registerCommands(Class<?> commandClass, Plugin plugin) {
28+
BungeeCommandHandler.setPlugin(plugin);
29+
registerCommands(commandClass.newInstance());
30+
}
31+
32+
@SneakyThrows
33+
public static void registerCommands(Plugin plugin, Class<?>... commandClasses) {
34+
BungeeCommandHandler.setPlugin(plugin);
35+
for (Class<?> commandClass : commandClasses) {
36+
registerCommands(commandClass.newInstance());
37+
}
38+
}
39+
40+
public static void registerCommands(Object commandClass) {
41+
Arrays.stream(commandClass.getClass().getDeclaredMethods()).forEach(method -> {
42+
me.marioogg.command.Command command = method.getAnnotation(me.marioogg.command.Command.class);
43+
if (command == null) return;
44+
new BungeeCommandNode(commandClass, method, command);
45+
});
46+
47+
Arrays.stream(commandClass.getClass().getDeclaredMethods()).forEach(method -> {
48+
Help help = method.getAnnotation(Help.class);
49+
if (help == null) return;
50+
51+
HelpNode helpNode = new HelpNode(commandClass, help.names(), help.permission(), method);
52+
BungeeCommandNode.getNodes().forEach(node -> node.getNames().forEach(name -> Arrays.stream(help.names())
53+
.map(String::toLowerCase)
54+
.filter(helpName -> name.toLowerCase().startsWith(helpName))
55+
.forEach(helpName -> node.getHelpNodes().add(helpNode))));
56+
});
57+
}
58+
59+
@SneakyThrows
60+
public static void registerProcessors(String path, Plugin plugin) {
61+
ClassPath.from(plugin.getClass().getClassLoader()).getAllClasses().stream()
62+
.filter(info -> info.getPackageName().startsWith(path))
63+
.filter(info -> info.load().getSuperclass().equals(BungeeProcessor.class))
64+
.forEach(info -> {
65+
try { BungeeParamProcessor.createProcessor((BungeeProcessor<?>) info.load().newInstance());
66+
} catch (Exception e) { e.printStackTrace(); }
67+
});
68+
}
69+
70+
public static void registerProcessor(BungeeProcessor<?> processor) {
71+
BungeeParamProcessor.createProcessor(processor);
72+
}
73+
74+
public static void registerProcessors(BungeeProcessor<?>... processors) {
75+
Arrays.stream(processors).forEach(BungeeCommandHandler::registerProcessor);
76+
}
77+
}
78+
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
package me.marioogg.command.bungee.bukkit;
2+
3+
import lombok.Getter;
4+
import lombok.SneakyThrows;
5+
import me.marioogg.command.bungee.node.BungeeCommandNode;
6+
import me.marioogg.command.bungee.parameter.BungeeParamProcessor;
7+
import me.marioogg.command.help.HelpNode;
8+
import me.marioogg.command.node.ArgumentNode;
9+
import net.md_5.bungee.api.ChatColor;
10+
import net.md_5.bungee.api.CommandSender;
11+
import net.md_5.bungee.api.chat.TextComponent;
12+
import net.md_5.bungee.api.plugin.Command;
13+
import net.md_5.bungee.api.plugin.TabExecutor;
14+
15+
import java.util.*;
16+
import java.util.stream.Collectors;
17+
18+
public class BungeeRawCommand extends Command implements TabExecutor {
19+
@Getter private static final HashMap<String, BungeeRawCommand> commands = new HashMap<>();
20+
21+
public BungeeRawCommand(String root) {
22+
super(root);
23+
commands.put(root.toLowerCase(), this);
24+
me.marioogg.command.bungee.BungeeCommandHandler.getPlugin().getProxy().getPluginManager().registerCommand(
25+
me.marioogg.command.bungee.BungeeCommandHandler.getPlugin(), this);
26+
}
27+
28+
@SneakyThrows
29+
@Override
30+
public void execute(CommandSender sender, String[] args) {
31+
List<BungeeCommandNode> sortedNodes = BungeeCommandNode.getNodes().stream()
32+
.sorted(Comparator.comparingInt(node -> node.getMatchProbability(sender, getName(), args, false)))
33+
.collect(Collectors.toList());
34+
35+
BungeeCommandNode node = sortedNodes.get(sortedNodes.size() - 1);
36+
37+
if (node.getMatchProbability(sender, getName(), args, false) < 90) {
38+
if (node.getHelpNodes().isEmpty()) {
39+
node.sendUsageMessage(sender);
40+
return;
41+
}
42+
43+
HelpNode helpNode = node.getHelpNodes().get(0);
44+
45+
if (!helpNode.getPermission().isEmpty() && !sender.hasPermission(helpNode.getPermission())) {
46+
sender.sendMessage(new TextComponent(ChatColor.RED + "I'm sorry, although you do not have permission to execute this command."));
47+
return;
48+
}
49+
50+
helpNode.getMethod().invoke(helpNode.getParentClass(), sender);
51+
return;
52+
}
53+
54+
node.execute(sender, args);
55+
}
56+
57+
@Override
58+
public Iterable<String> onTabComplete(CommandSender sender, String[] args) {
59+
try {
60+
List<BungeeCommandNode> sortedNodes = BungeeCommandNode.getNodes().stream()
61+
.sorted(Comparator.comparingInt(node -> node.getMatchProbability(sender, getName(), args, true)))
62+
.collect(Collectors.toList());
63+
64+
BungeeCommandNode node = sortedNodes.get(sortedNodes.size() - 1);
65+
66+
if (!node.isAllowComplete()) return new ArrayList<>();
67+
68+
if (node.getMatchProbability(sender, getName(), args, true) >= 50) {
69+
int extraLength = node.getNames().get(0).split(" ").length - 1;
70+
int arg = (args.length - extraLength) - 1;
71+
72+
if (arg < 0 || node.getParameters().size() < arg + 1) return new ArrayList<>();
73+
74+
ArgumentNode argumentNode = node.getParameters().get(arg);
75+
return new BungeeParamProcessor(argumentNode, args[args.length - 1], sender).getTabComplete();
76+
}
77+
78+
return sortedNodes.stream()
79+
.filter(sortedNode -> sortedNode.getPermission().isEmpty() || sender.hasPermission(sortedNode.getPermission()))
80+
.map(sortedNode -> sortedNode.getNames().stream()
81+
.map(name -> name.split(" "))
82+
.filter(splitName -> splitName[0].equalsIgnoreCase(getName()))
83+
.filter(splitName -> splitName.length > args.length)
84+
.map(splitName -> splitName[args.length])
85+
.collect(Collectors.toList()))
86+
.flatMap(List::stream)
87+
.filter(name -> name.toLowerCase().startsWith(args[args.length - 1].toLowerCase()))
88+
.collect(Collectors.toList());
89+
} catch (Exception e) {
90+
e.printStackTrace();
91+
return new ArrayList<>();
92+
}
93+
}
94+
}
95+

0 commit comments

Comments
 (0)