1
mirror of https://github.com/CarmJos/EasyPlugin.git synced 2026-06-05 00:58:17 +08:00

Compare commits

...

9 Commits

Author SHA1 Message Date
carm 9448c21810 docs(repo): 修改Github依赖地址 2022-05-30 04:24:35 +08:00
carm e30f7ce795 ci(deploy): 添加 repo-deploy 配置 2022-05-30 04:16:38 +08:00
carm 1a9024ca40 ci(deploy): 添加 repo-deploy 配置 2022-05-30 04:11:59 +08:00
carm 0005ce13b4 ci(deploy): 添加 repo-deploy 配置 2022-05-30 04:10:54 +08:00
carm c7190274d7 fix(command): 修复SimpleCompleter使用异常 2022-05-23 00:48:32 +08:00
carm be798a981a feat(command): 为SubCommand支持Alias构造函数 2022-05-23 00:32:02 +08:00
carm bbdfe313d5 feat(command): 为SubCommand支持Alias构造函数 2022-05-23 00:28:32 +08:00
carm 2acc81185a feat(command): 为SubCommand支持Alias构造函数 2022-05-23 00:28:24 +08:00
carm 5886f162af feat(command): 新增快捷子指令制作的相关API
新增指令相关API,便于快速制作指令与子指令。
2022-05-23 00:16:02 +08:00
15 changed files with 223 additions and 125 deletions
+57 -9
View File
@@ -11,7 +11,7 @@ on:
types: [ published ]
jobs:
maven-deploy:
github-deploy:
runs-on: ubuntu-latest
@@ -28,12 +28,60 @@ jobs:
server-password: MAVEN_TOKEN
- name: "Maven Deploy"
run: mvn -B deploy --file pom.xml -DskipTests
run: mvn -B -Pgithub deploy --file pom.xml -DskipTests
env:
MAVEN_USERNAME: ${{ github.repository_owner }}
MAVEN_TOKEN: ${{secrets.GITHUB_TOKEN}}
local-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: "Set up JDK"
uses: actions/setup-java@v2
with:
java-version: '8'
distribution: 'adopt'
cache: maven
- name: "Maven Deploy"
run: mvn -B -Plocal deploy --file pom.xml -DskipTests
- name: "Copy artifacts"
run: |
rm -rf deploy
mkdir -vp deploy
cp -vrf $HOME/local-deploy/* deploy/
- name: "Configure Git"
env:
DEPLOY_PRI: ${{secrets.DEPLOY_PRI}}
run: |
sudo timedatectl set-timezone "Asia/Shanghai"
mkdir -p ~/.ssh/
echo "$DEPLOY_PRI" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.name '${{ github.repository_owner }}'
git config --global user.email '${{ github.repository_owner }}@users.noreply.github.com'
- name: "Commit files"
run: |
cd deploy
git init
git remote add origin git@github.com:${{ github.repository_owner }}/${{ github.event.repository.name }}.git
git checkout -b repo
git add -A
git commit -m "Maven project deployment."
- name: "Push files"
run: |
cd deploy
git push origin HEAD:repo --force
javadoc-deploy:
runs-on: ubuntu-latest
@@ -61,7 +109,7 @@ jobs:
id: sitemap
uses: cicirello/generate-sitemap@v1
with:
base-url-path: https://carmjos.github.io/EasyPlugin
base-url-path: https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}
path-to-root: docs
- name: Output stats
@@ -71,7 +119,7 @@ jobs:
echo "excluded-count = ${{ steps.sitemap.outputs.excluded-count }}"
ls -l docs
- name: Configure Git
- name: "Configure Git"
env:
DEPLOY_PRI: ${{secrets.DEPLOY_PRI}}
run: |
@@ -80,19 +128,19 @@ jobs:
echo "$DEPLOY_PRI" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.name 'CarmJos'
git config --global user.email 'carm@carm.cc'
git config --global user.name '${{ github.repository_owner }}'
git config --global user.email '${{ github.repository_owner }}@users.noreply.github.com'
- name: Commit documentation changes
- name: "Commit documentation"
run: |
cd docs
git init
git remote add origin git@github.com:CarmJos/EasyPlugin.git
git remote add origin git@github.com:${{ github.repository_owner }}/${{ github.event.repository.name }}.git
git checkout -b gh-pages
git add -A
git commit -m "API Document generated."
- name: Javadoc Website Push
- name: "Push Javadoc website"
run: |
cd docs
git push origin HEAD:gh-pages --force
+3 -3
View File
@@ -67,10 +67,10 @@
<repositories>
<repository>
<!--采用github依赖库,安全稳定,但需要配置 (推荐)-->
<!--采用github-repo依赖库(推荐)-->
<id>EasyPlugin</id>
<name>GitHub Packages</name>
<url>https://maven.pkg.github.com/CarmJos/EasyPlugin</url>
<url>https://raw.githubusercontent.com/CarmJos/EasyPlugin/repo/</url>
</repository>
<repository>
@@ -121,7 +121,7 @@
```groovy
repositories {
// 采用github依赖库,安全稳定,但需要配置 (推荐)
maven { url 'https://maven.pkg.github.com/CarmJos/EasyPlugin' }
maven { url 'https://raw.githubusercontent.com/CarmJos/EasyPlugin/repo/' }
// 采用我的私人依赖库,简单方便,但可能因为变故而无法使用
maven { url 'https://repo.carm.cc/repository/maven-public/' }
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<artifactId>easyplugin-parent</artifactId>
<groupId>cc.carm.lib</groupId>
<version>1.4.1</version>
<version>1.4.4</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -7,6 +7,7 @@ import org.bukkit.command.TabExecutor;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.util.StringUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
import java.util.stream.Collectors;
@@ -15,17 +16,25 @@ public abstract class CommandHandler implements TabExecutor, NamedExecutor {
protected final @NotNull JavaPlugin plugin;
protected final @NotNull String cmd;
protected final @NotNull List<String> aliases;
protected final @NotNull Map<String, SubCommand> registeredCommands = new HashMap<>();
protected final @NotNull Map<String, CommandHandler> registeredHandlers = new HashMap<>();
protected final @NotNull Map<String, String> aliasesMap = new HashMap<>();
public CommandHandler(@NotNull JavaPlugin plugin) {
this(plugin, plugin.getName());
}
public CommandHandler(@NotNull JavaPlugin plugin, @NotNull String cmd) {
this(plugin, cmd, new String[0]);
}
public CommandHandler(@NotNull JavaPlugin plugin, @NotNull String cmd, @NotNull String... aliases) {
this.plugin = plugin;
this.cmd = cmd;
this.aliases = Arrays.asList(aliases);
}
public abstract void noArgs(CommandSender sender);
@@ -34,27 +43,26 @@ public abstract class CommandHandler implements TabExecutor, NamedExecutor {
public abstract void noPermission(CommandSender sender);
@Override
public @NotNull List<String> getAliases() {
return aliases;
}
@Override
public String getName() {
return this.cmd;
}
public void registerSubCommand(SubCommand command) {
for (String alias : command.getAliases()) {
if (this.registeredCommands.containsKey(alias)) {
this.plugin.getLogger().warning("Conflicting command aliases '" + alias + "' for '" + command.getName() + "', overwriting.");
}
this.registeredCommands.put(alias, command);
}
String name = command.getName().toLowerCase();
this.registeredCommands.put(name, command);
command.getAliases().forEach(alias -> this.aliasesMap.put(alias.toLowerCase(), name));
}
public void registerHandler(CommandHandler handler) {
for (String alias : handler.getAliases()) {
if (this.registeredCommands.containsKey(alias)) {
this.plugin.getLogger().warning("Conflicting command aliases '" + alias + "' for '" + handler.getName() + "', overwriting.");
}
this.registeredHandlers.put(alias, handler);
}
String name = handler.getName().toLowerCase();
this.registeredHandlers.put(name, handler);
handler.getAliases().forEach(alias -> this.aliasesMap.put(alias.toLowerCase(), name));
}
@Override
@@ -62,28 +70,30 @@ public abstract class CommandHandler implements TabExecutor, NamedExecutor {
if (args.length == 0) {
this.noArgs(sender);
} else {
String sub = args[0].toLowerCase();
CommandHandler handler = this.registeredHandlers.get(sub);
String input = args[0].toLowerCase();
CommandHandler handler = getHandler(input);
if (handler != null) {
if (!handler.hasPermission(sender)) {
this.noPermission(sender);
} else {
handler.onCommand(sender, command, label, this.shortenArgs(args));
}
}
SubCommand subCommand = getSubCommand(input);
if (subCommand == null) {
this.unknownCommand(sender, args);
} else if (!subCommand.hasPermission(sender)) {
this.noPermission(sender);
} else {
SubCommand subCommand = this.registeredCommands.get(sub);
if (subCommand == null) {
try {
subCommand.execute(this.plugin, sender, this.shortenArgs(args));
} catch (ArrayIndexOutOfBoundsException var9) {
this.unknownCommand(sender, args);
} else if (!subCommand.hasPermission(sender)) {
this.noPermission(sender);
} else {
try {
subCommand.execute(this.plugin, sender, this.shortenArgs(args));
} catch (ArrayIndexOutOfBoundsException var9) {
this.unknownCommand(sender, args);
}
}
}
}
return true;
}
@@ -101,12 +111,12 @@ public abstract class CommandHandler implements TabExecutor, NamedExecutor {
.collect(Collectors.toList());
} else {
CommandHandler handler = this.registeredHandlers.get(input);
CommandHandler handler = getHandler(input);
if (handler != null && handler.hasPermission(sender)) {
return handler.onTabComplete(sender, command, alias, this.shortenArgs(args));
}
SubCommand subCommand = this.registeredCommands.get(input);
SubCommand subCommand = getSubCommand(input);
if (subCommand != null && subCommand.hasPermission(sender)) {
return subCommand.tabComplete(this.plugin, sender, this.shortenArgs(args));
}
@@ -124,6 +134,24 @@ public abstract class CommandHandler implements TabExecutor, NamedExecutor {
return sortedExecutors;
}
protected @Nullable CommandHandler getHandler(@NotNull String name) {
CommandHandler fromName = this.registeredHandlers.get(name);
if (fromName != null) return fromName;
String nameFromAlias = this.aliasesMap.get(name);
if (nameFromAlias == null) return null;
else return this.registeredHandlers.get(nameFromAlias);
}
protected @Nullable SubCommand getSubCommand(@NotNull String name) {
SubCommand fromName = this.registeredCommands.get(name);
if (fromName != null) return fromName;
String nameFromAlias = this.aliasesMap.get(name);
if (nameFromAlias == null) return null;
else return this.registeredCommands.get(nameFromAlias);
}
protected String[] shortenArgs(String[] args) {
if (args.length == 0) {
return args;
@@ -2,16 +2,13 @@ package cc.carm.lib.easyplugin.command;
import org.bukkit.permissions.Permissible;
import java.util.Collections;
import java.util.List;
public interface NamedExecutor {
String getName();
default List<String> getAliases() {
return Collections.singletonList(getName());
}
List<String> getAliases();
default boolean hasPermission(Permissible permissible) {
return true;
@@ -13,6 +13,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class SimpleCompleter {
@@ -21,9 +22,13 @@ public class SimpleCompleter {
}
public static @NotNull List<String> objects(@NotNull String input, int limit, List<?> objects) {
return objects.stream().filter(Objects::nonNull).map(Object::toString)
return objects(input, limit, objects.stream());
}
public static @NotNull List<String> objects(@NotNull String input, int limit, Stream<?> stream) {
return stream.filter(Objects::nonNull).map(Object::toString)
.filter(s -> StringUtil.startsWithIgnoreCase(s, input))
.limit(Math.min(0, limit)).collect(Collectors.toList());
.limit(Math.max(0, limit)).collect(Collectors.toList());
}
public static @NotNull List<String> text(@NotNull String input, String... texts) {
@@ -47,7 +52,7 @@ public class SimpleCompleter {
}
public static @NotNull List<String> onlinePlayers(@NotNull String input, int limit) {
return text(input, limit, Bukkit.getOnlinePlayers().stream().map(HumanEntity::getName).collect(Collectors.toList()));
return objects(input, limit, Bukkit.getOnlinePlayers().stream().map(HumanEntity::getName));
}
public static @NotNull List<String> allPlayers(@NotNull String input) {
@@ -55,7 +60,7 @@ public class SimpleCompleter {
}
public static @NotNull List<String> allPlayers(@NotNull String input, int limit) {
return text(input, limit, Arrays.stream(Bukkit.getOfflinePlayers()).map(OfflinePlayer::getName).collect(Collectors.toList()));
return objects(input, limit, Arrays.stream(Bukkit.getOfflinePlayers()).map(OfflinePlayer::getName));
}
public static @NotNull List<String> worlds(@NotNull String input) {
@@ -63,7 +68,7 @@ public class SimpleCompleter {
}
public static @NotNull List<String> worlds(@NotNull String input, int limit) {
return text(input, limit, Bukkit.getWorlds().stream().map(World::getName).collect(Collectors.toList()));
return objects(input, limit, Bukkit.getWorlds().stream().map(World::getName));
}
public static @NotNull List<String> materials(@NotNull String input) {
@@ -71,7 +76,7 @@ public class SimpleCompleter {
}
public static @NotNull List<String> materials(@NotNull String input, int limit) {
return text(input, limit, Arrays.stream(Material.values()).map(Enum::name).collect(Collectors.toList()));
return objects(input, limit, Arrays.stream(Material.values()).map(Enum::name));
}
public static @NotNull List<String> effects(@NotNull String input) {
@@ -79,7 +84,7 @@ public class SimpleCompleter {
}
public static @NotNull List<String> effects(@NotNull String input, int limit) {
return text(input, limit, Arrays.stream(PotionEffectType.values()).map(PotionEffectType::getName).collect(Collectors.toList()));
return objects(input, limit, Arrays.stream(PotionEffectType.values()).map(PotionEffectType::getName));
}
}
@@ -3,15 +3,34 @@ package cc.carm.lib.easyplugin.command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@SuppressWarnings("UnusedReturnValue")
public abstract class SubCommand implements NamedExecutor {
private final String name;
private final List<String> aliases;
public SubCommand(String name) {
this(name, new String[0]);
}
public SubCommand(String name, String... aliases) {
this.name = name;
this.aliases = Arrays.asList(aliases);
}
@Override
public String getName() {
return this.name;
}
@Override
public List<String> getAliases() {
return this.aliases;
}
public abstract Void execute(JavaPlugin plugin, CommandSender sender, String[] args);
@@ -20,9 +39,5 @@ public abstract class SubCommand implements NamedExecutor {
return Collections.emptyList();
}
@Override
public String getName() {
return this.name;
}
}
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<artifactId>easyplugin-parent</artifactId>
<groupId>cc.carm.lib</groupId>
<version>1.4.1</version>
<version>1.4.4</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<artifactId>easyplugin-parent</artifactId>
<groupId>cc.carm.lib</groupId>
<version>1.4.1</version>
<version>1.4.4</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<artifactId>easyplugin-parent</artifactId>
<groupId>cc.carm.lib</groupId>
<version>1.4.1</version>
<version>1.4.4</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
+7 -50
View File
@@ -5,7 +5,7 @@
<parent>
<artifactId>easyplugin-parent</artifactId>
<groupId>cc.carm.lib</groupId>
<version>1.4.1</version>
<version>1.4.4</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -50,39 +50,6 @@
<url>https://github.com/CarmJos/EasyPlugin/actions/workflows/maven.yml</url>
</ciManagement>
<distributionManagement>
<downloadUrl>https://github.com/CarmJos/EasyPlugin/releases</downloadUrl>
<repository>
<id>github</id>
<name>GitHub Packages</name>
<url>https://maven.pkg.github.com/CarmJos/EasyPlugin</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>carm-repo</id>
<name>Carm's Repo</name>
<url>https://repo.carm.cc/repository/maven-public/</url>
</repository>
<repository>
<id>central</id>
<url>https://repo1.maven.org/maven2/</url>
</repository>
<repository>
<id>github</id>
<name>GitHub Packages</name>
<url>https://maven.pkg.github.com/CarmJos/*</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependencyManagement>
<dependencies>
<dependency>
@@ -90,21 +57,11 @@
<artifactId>easyplugin-main</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>easyplugin-configuration</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>easyplugin-command</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>easyplugin-database</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>easyplugin-gui</artifactId>
@@ -112,7 +69,7 @@
</dependency>
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>easyplugin-placeholderapi</artifactId>
<artifactId>easyplugin-papi</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency>
@@ -120,11 +77,6 @@
<artifactId>easyplugin-vault</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>easyplugin-lp</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
@@ -139,6 +91,11 @@
<artifactId>easyplugin-gui</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>easyplugin-command</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>easyplugin-placeholderapi</artifactId>
+1 -9
View File
@@ -5,7 +5,7 @@
<parent>
<artifactId>easyplugin-parent</artifactId>
<groupId>cc.carm.lib</groupId>
<version>1.4.1</version>
<version>1.4.4</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -60,18 +60,10 @@
<type>pom</type>
<exclusions>
<exclusion>
<groupId>cc.carm.lib</groupId>
<artifactId>easyplugin-github</artifactId>
</exclusion>
<exclusion>
<groupId>cc.carm.lib</groupId>
<artifactId>easyplugin-placeholderapi</artifactId>
</exclusion>
<exclusion>
<groupId>cc.carm.lib</groupId>
<artifactId>easyplugin-lp</artifactId>
</exclusion>
<exclusion>
<groupId>cc.carm.lib</groupId>
<artifactId>easyplugin-vault</artifactId>
+12 -1
View File
@@ -5,7 +5,7 @@
<parent>
<artifactId>easyplugin-parent</artifactId>
<groupId>cc.carm.lib</groupId>
<version>1.4.1</version>
<version>1.4.4</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -22,4 +22,15 @@
<name>EasyPlugin-PlaceholderAPI</name>
<dependencies>
<dependency>
<groupId>me.clip</groupId>
<artifactId>placeholderapi</artifactId>
<version>2.10.9</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<artifactId>easyplugin-parent</artifactId>
<groupId>cc.carm.lib</groupId>
<version>1.4.1</version>
<version>1.4.4</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
+52 -7
View File
@@ -15,10 +15,11 @@
<groupId>cc.carm.lib</groupId>
<artifactId>easyplugin-parent</artifactId>
<packaging>pom</packaging>
<version>1.4.1</version>
<version>1.4.4</version>
<modules>
<module>base/main</module>
<module>base/command</module>
<module>base/gui</module>
<module>extension/papi</module>
@@ -27,7 +28,6 @@
<module>collection/all</module>
<module>collection/bom</module>
<module>collection/common</module>
<module>base/command</module>
</modules>
@@ -35,6 +35,13 @@
<description>轻松插件类库,简单快捷的通用Spigot插件基础类库。</description>
<url>https://github.com/CarmJos/EasyPlugin</url>
<scm>
<connection>scm:git:git@github.com:CarmJos/EasyPlugin.git</connection>
<developerConnection>scm:git:git@github.com:CarmJos/EasyPlugin.git</developerConnection>
<url>https://github.com/CarmJos/EasyPlugin</url>
<tag>HEAD</tag>
</scm>
<developers>
<developer>
<id>CarmJos</id>
@@ -63,11 +70,6 @@
<distributionManagement>
<downloadUrl>https://github.com/CarmJos/EasyPlugin/releases</downloadUrl>
<repository>
<id>github</id>
<name>GitHub Packages</name>
<url>https://maven.pkg.github.com/CarmJos/EasyPlugin</url>
</repository>
</distributionManagement>
<repositories>
@@ -221,4 +223,47 @@
</build>
<profiles>
<profile>
<id>ossrh</id>
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</profile>
<profile>
<id>github</id>
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub Packages</name>
<url>https://maven.pkg.github.com/CarmJos/EasyPlugin</url>
</repository>
</distributionManagement>
</profile>
<profile>
<id>local</id>
<distributionManagement>
<snapshotRepository>
<id>localRepository</id>
<url>file:${user.home}/local-deploy/</url>
</snapshotRepository>
<repository>
<id>localRepository</id>
<url>file:${user.home}/local-deploy/</url>
</repository>
</distributionManagement>
</profile>
</profiles>
</project>