Merge pull request #50 from qianmo2233/alpha

24/1/12 更新 版本 6.0.5
pull/54/head
wisdommen 2 years ago committed by GitHub
commit a73cded4e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -8,7 +8,6 @@ import com.ultikits.ultitools.annotations.command.*;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
import java.util.Arrays;
@ -17,9 +16,11 @@ import java.util.List;
@CmdTarget(CmdTarget.CmdTargetType.PLAYER)
@CmdExecutor(permission = "ultikits.home.command.all", description = "家功能", alias = {"home"})
public class HomeCommands extends AbstractCommendExecutor {
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
@Autowired
private HomeService homeService;
private final HomeService homeService;
public HomeCommands(HomeService homeService) {
this.homeService = homeService;
}
@CmdMapping(format = "list")
public void openList(@CmdSender Player player) {

@ -1,11 +1,12 @@
package com.ultikits.ultitools.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.stereotype.Component;
import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Component
public @interface EventListener {
}

@ -1,5 +1,7 @@
package com.ultikits.ultitools.annotations.command;
import org.springframework.stereotype.Component;
import java.lang.annotation.*;
/**
@ -11,6 +13,7 @@ import java.lang.annotation.*;
@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Component
public @interface CmdExecutor {
/**

@ -2,8 +2,11 @@ package com.ultikits.ultitools.context;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
@Configuration
@ComponentScan("com.ultikits.ultitools")
@ComponentScan(basePackages = "com.ultikits.ultitools", excludeFilters = {
@ComponentScan.Filter(type = FilterType.REGEX, pattern = "com\\.ultikits\\.ultitools\\.commands\\..*")
})
public class ContextConfig {
}

@ -6,6 +6,7 @@ import com.ultikits.ultitools.abstracts.UltiToolsPlugin;
import com.ultikits.ultitools.annotations.command.CmdExecutor;
import com.ultikits.ultitools.utils.PackageScanUtils;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandMap;
import org.bukkit.command.PluginCommand;
@ -15,30 +16,38 @@ import org.bukkit.plugin.SimplePluginManager;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.Objects;
import java.util.Set;
import java.util.*;
public class CommandManager {
private final Map<UltiToolsPlugin, List<Command>> commandListMap = new HashMap<>();
public void register(CommandExecutor commandExecutor, String permission, String description, String... aliases) {
public void register (UltiToolsPlugin plugin, CommandExecutor commandExecutor, String permission, String description, String... aliases) {
PluginCommand command = getCommand(aliases[0], UltiTools.getInstance());
command.setAliases(Arrays.asList(aliases));
command.setPermission(permission);
command.setDescription(description);
getCommandMap().register(UltiTools.getInstance().getDescription().getName(), command);
command.setExecutor(commandExecutor);
commandListMap.computeIfAbsent(plugin, k -> new ArrayList<>());
List<Command> commands = commandListMap.get(plugin);
if (!commands.contains(command)) {
commands.add(command);
}
}
public void register(UltiToolsPlugin plugin, CommandExecutor commandExecutor) {
plugin.getContext().getAutowireCapableBeanFactory().autowireBean(commandExecutor);
register(commandExecutor);
}
Class<? extends CommandExecutor> clazz = commandExecutor.getClass();
public void unregister(String name) {
PluginCommand command = getCommand(name, UltiTools.getInstance());
command.unregister(getCommandMap());
if (clazz.isAnnotationPresent(CmdExecutor.class)) {
CmdExecutor cmdExecutor = clazz.getAnnotation(CmdExecutor.class);
register(commandExecutor, cmdExecutor.permission(), cmdExecutor.description(), cmdExecutor.alias());
} else {
Bukkit.getLogger().warning("CommandExecutor " + clazz.getName() + " is not annotated with @CmdExecutor, please use legacy method to register command.");
}
if (plugin.getContext().getBeanNamesForType(CommandExecutor.class).length == 0) {
plugin.getContext().getAutowireCapableBeanFactory().autowireBean(commandExecutor);
}
register(commandExecutor);
}
public void registerAll(UltiToolsPlugin plugin, String packageName) {
@ -60,6 +69,38 @@ public class CommandManager {
}
}
public void registerAll(UltiToolsPlugin plugin) {
for(String cmdBean : plugin.getContext().getBeanNamesForType(CommandExecutor.class)) {
CommandExecutor commandExecutor = plugin.getContext().getBean(cmdBean, CommandExecutor.class);
register(plugin, commandExecutor);
}
}
public void unregister(String name) {
PluginCommand command = getCommand(name, UltiTools.getInstance());
command.unregister(getCommandMap());
}
public void unregisterAll(UltiToolsPlugin plugin) {
List<Command> commands = commandListMap.get(plugin);
if (commands == null) return;
for (Command command : commands) {
unregister(command.getName());
}
}
@Deprecated
public void register(CommandExecutor commandExecutor, String permission, String description, String... aliases) {
PluginCommand command = getCommand(aliases[0], UltiTools.getInstance());
command.setAliases(Arrays.asList(aliases));
command.setPermission(permission);
command.setDescription(description);
getCommandMap().register(UltiTools.getInstance().getDescription().getName(), command);
command.setExecutor(commandExecutor);
}
@Deprecated
public void register(CommandExecutor commandExecutor) {
Class<? extends CommandExecutor> clazz = commandExecutor.getClass();

@ -42,6 +42,13 @@ public class ListenerManager {
}
}
public void registerAll(UltiToolsPlugin plugin) {
for (String listenerBean : plugin.getContext().getBeanNamesForType(Listener.class)) {
Listener listener = plugin.getContext().getBean(listenerBean, Listener.class);
register(plugin, listener);
}
}
public void unregister(Listener listener) {
HandlerList.unregisterAll(listener);
}

@ -14,7 +14,11 @@ import org.springframework.core.annotation.AnnotationUtils;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.*;
import java.security.CodeSource;
import java.security.ProtectionDomain;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
@ -81,7 +85,7 @@ public class PluginManager {
}
boolean result = invokeRegisterSelf(plugin);
if (result) {
registerBukkit(plugin);
registerBukkit(plugin, true);
}
return result;
}
@ -95,6 +99,19 @@ public class PluginManager {
int minUltiToolsVersion,
String mainClass
) {
URLClassLoader urlClassLoader = (URLClassLoader) pluginClass.getClassLoader();
Method method;
try {
method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
}
method.setAccessible(true);
try {
method.invoke(urlClassLoader, getServerJar());
} catch (IllegalAccessException | InvocationTargetException e) {
throw new RuntimeException(e);
}
UltiToolsPlugin plugin;
try {
plugin = initializePlugin(
@ -109,7 +126,7 @@ public class PluginManager {
}
boolean result = invokeRegisterSelf(plugin);
if (result) {
registerBukkit(plugin);
registerBukkit(plugin, false);
}
return result;
}
@ -139,7 +156,7 @@ public class PluginManager {
}
boolean result = invokeRegisterSelf(plugin);
if (result) {
registerBukkit(plugin);
registerBukkit(plugin, false);
}
return result;
}
@ -175,7 +192,10 @@ public class PluginManager {
try {
@SuppressWarnings("resource")
URLClassLoader classLoader = new URLClassLoader(
new URL[]{new URL(URLDecoder.decode(pluginJar.toURI().toASCIIString(), "UTF-8"))},
new URL[]{
new URL(URLDecoder.decode(pluginJar.toURI().toASCIIString(), "UTF-8")),
getServerJar()
},
UltiTools.getInstance().getPluginClassLoader()
);
try (JarFile jarFile = new JarFile(pluginJar)) {
@ -237,7 +257,6 @@ public class PluginManager {
}
try {
boolean registerSelf = plugin.registerSelf();
registerBukkit(plugin);
if (registerSelf) {
pluginList.add(plugin);
Bukkit.getLogger().log(
@ -273,7 +292,7 @@ public class PluginManager {
return plugin;
}
private void registerBukkit(UltiToolsPlugin plugin) {
private void registerBukkit(UltiToolsPlugin plugin, boolean flag) {
EnableAutoRegister annotation = AnnotationUtils.findAnnotation(plugin.getClass(), EnableAutoRegister.class);
if (annotation == null) {
return;
@ -281,11 +300,28 @@ public class PluginManager {
String[] packages = CommonUtils.getPluginPackages(plugin);
for (String packageName : packages) {
if (annotation.cmdExecutor()) {
UltiTools.getInstance().getCommandManager().registerAll(plugin, packageName);
if (flag) {
UltiTools.getInstance().getCommandManager().registerAll(plugin);
} else {
UltiTools.getInstance().getCommandManager().registerAll(plugin, packageName);
}
}
if (annotation.eventListener()) {
UltiTools.getInstance().getListenerManager().registerAll(plugin, packageName);
if (flag) {
UltiTools.getInstance().getListenerManager().registerAll(plugin);
} else {
UltiTools.getInstance().getListenerManager().registerAll(plugin, packageName);
}
}
}
}
private URL getServerJar() {
ProtectionDomain protectionDomain = Bukkit.class.getProtectionDomain();
CodeSource codeSource = protectionDomain.getCodeSource();
if (codeSource == null) {
return null;
}
return codeSource.getLocation();
}
}

Loading…
Cancel
Save