diff --git a/eldependenci-addon/pom.xml b/eldependenci-addon/pom.xml index a2927bf..e88afe4 100644 --- a/eldependenci-addon/pom.xml +++ b/eldependenci-addon/pom.xml @@ -5,7 +5,7 @@ eldependenci org.eldependenci - 2.0.1 + 2.0.2 4.0.0 diff --git a/eldependenci-bukkit-plugin/paper-plugin/pom.xml b/eldependenci-bukkit-plugin/paper-plugin/pom.xml index 4faaae4..b5dfc76 100644 --- a/eldependenci-bukkit-plugin/paper-plugin/pom.xml +++ b/eldependenci-bukkit-plugin/paper-plugin/pom.xml @@ -5,7 +5,7 @@ eldependenci-bukkit-plugin org.eldependenci - 2.0.1 + 2.0.2 4.0.0 diff --git a/eldependenci-bukkit-plugin/paper-plugin/src/main/java/com/ericlam/mc/eld/ELDependenci.java b/eldependenci-bukkit-plugin/paper-plugin/src/main/java/com/ericlam/mc/eld/ELDependenci.java index 2442672..89f71bf 100644 --- a/eldependenci-bukkit-plugin/paper-plugin/src/main/java/com/ericlam/mc/eld/ELDependenci.java +++ b/eldependenci-bukkit-plugin/paper-plugin/src/main/java/com/ericlam/mc/eld/ELDependenci.java @@ -1,5 +1,6 @@ package com.ericlam.mc.eld; +import com.destroystokyo.paper.profile.ProfileProperty; import com.ericlam.mc.eld.annotations.Commander; import com.ericlam.mc.eld.bukkit.CommandNode; import com.ericlam.mc.eld.commands.CommandProcessor; @@ -7,6 +8,7 @@ import com.ericlam.mc.eld.commands.BukkitCommandHandler; import com.ericlam.mc.eld.exceptions.ArgumentParseException; import com.ericlam.mc.eld.implement.ELDMessageConfig; +import com.ericlam.mc.eld.services.factory.SkullSkinHandler; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.command.Command; @@ -15,13 +17,15 @@ import org.bukkit.command.SimpleCommandMap; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.profile.PlayerProfile; import java.lang.reflect.Field; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.logging.Logger; import java.util.stream.Collectors; -public class ELDependenci extends BukkitPlugin { +public class ELDependenci extends BukkitPlugin implements SkullSkinHandler { private static ELDependenciAPI api; @@ -32,6 +36,7 @@ public static ELDependenciAPI getApi() { @Override public void onLoad() { super.onLoad(); + elDependenciCore.baseModule.bindInstance(SkullSkinHandler.class, this); api = elDependenciCore; } @Override @@ -105,4 +110,20 @@ private void printDebug(PluginCommand command, Logger logger){ e.printStackTrace(); } } + + @Override + public PlayerProfile buildProfile(String skullKey) { + String textures = """ + { + "textures":{ + "SKIN":{ + "url": "https://textures.minecraft.net/texture/%s" + } + } + } + """.trim().formatted(skullKey); + com.destroystokyo.paper.profile.PlayerProfile profile = Bukkit.createProfile(UUID.randomUUID()); + profile.setProperty(new ProfileProperty("textures", Base64.getEncoder().encodeToString(textures.getBytes(StandardCharsets.UTF_8)))); + return profile; + } } diff --git a/eldependenci-bukkit-plugin/pom.xml b/eldependenci-bukkit-plugin/pom.xml index a9623d2..a961bab 100644 --- a/eldependenci-bukkit-plugin/pom.xml +++ b/eldependenci-bukkit-plugin/pom.xml @@ -5,7 +5,7 @@ eldependenci org.eldependenci - 2.0.1 + 2.0.2 pom diff --git a/eldependenci-bukkit-plugin/spigot-based/pom.xml b/eldependenci-bukkit-plugin/spigot-based/pom.xml index f8b9c30..2ccf1ac 100644 --- a/eldependenci-bukkit-plugin/spigot-based/pom.xml +++ b/eldependenci-bukkit-plugin/spigot-based/pom.xml @@ -5,7 +5,7 @@ eldependenci-bukkit-plugin org.eldependenci - 2.0.1 + 2.0.2 4.0.0 diff --git a/eldependenci-bukkit-plugin/spigot-based/src/main/java/com/ericlam/mc/eld/BukkitModule.java b/eldependenci-bukkit-plugin/spigot-based/src/main/java/com/ericlam/mc/eld/BukkitModule.java index e68688e..c301c97 100644 --- a/eldependenci-bukkit-plugin/spigot-based/src/main/java/com/ericlam/mc/eld/BukkitModule.java +++ b/eldependenci-bukkit-plugin/spigot-based/src/main/java/com/ericlam/mc/eld/BukkitModule.java @@ -1,6 +1,6 @@ package com.ericlam.mc.eld; -import com.ericlam.mc.eld.module.ELDPluginModule; +import com.ericlam.mc.eld.guice.ELDPluginModule; import com.ericlam.mc.eld.services.ItemStackService; import com.ericlam.mc.eld.services.ScheduleService; import com.ericlam.mc.eld.services.factory.ELDItemStackService; diff --git a/eldependenci-bukkit-plugin/spigot-based/src/main/java/com/ericlam/mc/eld/BukkitPlugin.java b/eldependenci-bukkit-plugin/spigot-based/src/main/java/com/ericlam/mc/eld/BukkitPlugin.java index 7a4035b..59d0e99 100644 --- a/eldependenci-bukkit-plugin/spigot-based/src/main/java/com/ericlam/mc/eld/BukkitPlugin.java +++ b/eldependenci-bukkit-plugin/spigot-based/src/main/java/com/ericlam/mc/eld/BukkitPlugin.java @@ -9,7 +9,7 @@ import com.ericlam.mc.eld.implement.ELDMessageConfig; import com.ericlam.mc.eld.listener.LifeCycleListener; import com.ericlam.mc.eld.managers.ItemInteractManager; -import com.ericlam.mc.eld.module.ELDPluginModule; +import com.ericlam.mc.eld.guice.ELDPluginModule; import com.fasterxml.jackson.databind.module.SimpleModule; import net.md_5.bungee.api.chat.BaseComponent; import org.bukkit.Bukkit; diff --git a/eldependenci-bukkit-plugin/spigot-based/src/main/java/com/ericlam/mc/eld/services/factory/ELDItemStackService.java b/eldependenci-bukkit-plugin/spigot-based/src/main/java/com/ericlam/mc/eld/services/factory/ELDItemStackService.java index 8acb177..2454e6c 100644 --- a/eldependenci-bukkit-plugin/spigot-based/src/main/java/com/ericlam/mc/eld/services/factory/ELDItemStackService.java +++ b/eldependenci-bukkit-plugin/spigot-based/src/main/java/com/ericlam/mc/eld/services/factory/ELDItemStackService.java @@ -3,8 +3,10 @@ import com.ericlam.mc.eld.ItemInteractListener; import com.ericlam.mc.eld.managers.ItemInteractManager; import com.ericlam.mc.eld.services.ItemStackService; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.OfflinePlayer; import org.bukkit.enchantments.Enchantment; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; @@ -12,8 +14,10 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; +import org.bukkit.profile.PlayerProfile; import javax.inject.Inject; import java.util.*; @@ -22,8 +26,10 @@ @SuppressWarnings("deprecated") public final class ELDItemStackService implements ItemStackService { - - + + @Inject + private SkullSkinHandler skullSkinHandler; + private final ItemInteractListener itemInteractManager; @Inject @@ -135,6 +141,31 @@ public ItemFactory enchant(Consumer> enchantEditor) { return this; } + @Override + public ItemFactory head(OfflinePlayer player) { + if (itemStack.getType() != Material.PLAYER_HEAD || itemStack.getType() != Material.PLAYER_WALL_HEAD) { + throw new IllegalStateException("ItemStack is not a head"); + } + SkullMeta meta = (SkullMeta) itemStack.getItemMeta(); + if (meta == null) return this; + meta.setOwningPlayer(player); + itemStack.setItemMeta(meta); + return this; + } + + @Override + public ItemFactory head(String skullKey) { + if (itemStack.getType() != Material.PLAYER_HEAD || itemStack.getType() != Material.PLAYER_WALL_HEAD) { + throw new IllegalStateException("ItemStack is not a head"); + } + SkullMeta meta = (SkullMeta) itemStack.getItemMeta(); + if (meta == null) return this; + PlayerProfile profile = skullSkinHandler.buildProfile(skullKey); + meta.setOwnerProfile(profile); + itemStack.setItemMeta(meta); + return this; + } + @Override public ItemFactory unbreakable(boolean unbreakable) { var meta = itemStack.getItemMeta(); diff --git a/eldependenci-bukkit-plugin/spigot-based/src/main/java/com/ericlam/mc/eld/services/factory/SkullSkinHandler.java b/eldependenci-bukkit-plugin/spigot-based/src/main/java/com/ericlam/mc/eld/services/factory/SkullSkinHandler.java new file mode 100644 index 0000000..4ad052a --- /dev/null +++ b/eldependenci-bukkit-plugin/spigot-based/src/main/java/com/ericlam/mc/eld/services/factory/SkullSkinHandler.java @@ -0,0 +1,9 @@ +package com.ericlam.mc.eld.services.factory; + +import org.bukkit.profile.PlayerProfile; + +public interface SkullSkinHandler { + + PlayerProfile buildProfile(String skullKey); + +} diff --git a/eldependenci-bukkit-plugin/spigot-plugin/pom.xml b/eldependenci-bukkit-plugin/spigot-plugin/pom.xml index 18785f6..1405aa5 100644 --- a/eldependenci-bukkit-plugin/spigot-plugin/pom.xml +++ b/eldependenci-bukkit-plugin/spigot-plugin/pom.xml @@ -5,7 +5,7 @@ eldependenci-bukkit-plugin org.eldependenci - 2.0.1 + 2.0.2 4.0.0 diff --git a/eldependenci-bukkit-plugin/spigot-plugin/src/main/java/com/ericlam/mc/eld/ELDependenci.java b/eldependenci-bukkit-plugin/spigot-plugin/src/main/java/com/ericlam/mc/eld/ELDependenci.java index f5b3df7..109dbd9 100644 --- a/eldependenci-bukkit-plugin/spigot-plugin/src/main/java/com/ericlam/mc/eld/ELDependenci.java +++ b/eldependenci-bukkit-plugin/spigot-plugin/src/main/java/com/ericlam/mc/eld/ELDependenci.java @@ -4,6 +4,8 @@ import com.ericlam.mc.eld.bukkit.CommandNode; import com.ericlam.mc.eld.commands.BukkitCommandHandler; import com.ericlam.mc.eld.commands.CommandProcessor; +import com.ericlam.mc.eld.services.factory.SkullSkinHandler; +import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.PluginCommand; @@ -11,11 +13,15 @@ import org.bukkit.plugin.Plugin; import org.bukkit.plugin.SimplePluginManager; import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.profile.PlayerProfile; +import org.bukkit.profile.PlayerTextures; import java.lang.reflect.Field; +import java.net.MalformedURLException; +import java.net.URL; import java.util.*; -public class ELDependenci extends BukkitPlugin { +public class ELDependenci extends BukkitPlugin implements SkullSkinHandler { private static ELDependenciAPI api; @@ -26,6 +32,7 @@ public static ELDependenciAPI getApi() { @Override public void onLoad() { super.onLoad(); + elDependenciCore.baseModule.bindInstance(SkullSkinHandler.class, this); api = elDependenciCore; } @@ -78,4 +85,18 @@ public void registerCommand(JavaPlugin plugin, Set eldependenci org.eldependenci - 2.0.1 + 2.0.2 4.0.0 diff --git a/eldependenci-bukkit/src/main/java/com/ericlam/mc/eld/services/ItemStackService.java b/eldependenci-bukkit/src/main/java/com/ericlam/mc/eld/services/ItemStackService.java index 4008083..60645f3 100644 --- a/eldependenci-bukkit/src/main/java/com/ericlam/mc/eld/services/ItemStackService.java +++ b/eldependenci-bukkit/src/main/java/com/ericlam/mc/eld/services/ItemStackService.java @@ -1,6 +1,7 @@ package com.ericlam.mc.eld.services; import org.bukkit.Material; +import org.bukkit.OfflinePlayer; import org.bukkit.enchantments.Enchantment; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; @@ -108,6 +109,22 @@ interface ItemFactory { */ ItemFactory enchant(Consumer> enchantEditor); + /** + * 設置頭顱皮膚, 物品必須為 PLAYER_HEAD + * @deprecated 不建議使用,因為每次使用都會請求 URL, 建議使用 {@link #head(String)} + * @param player 玩家 + * @return this + */ + @Deprecated + ItemFactory head(OfflinePlayer player); + + /** + * 設置頭顱皮膚, 物品必須為 PLAYER_HEAD + * @param skullKey 皮膚ID + * @return this + */ + ItemFactory head(String skullKey); + /** * 設置不可破壞 * @param unbreakable 不可破壞 diff --git a/eldependenci-bungee-plugin/pom.xml b/eldependenci-bungee-plugin/pom.xml index 40dc69b..cbfdbe1 100644 --- a/eldependenci-bungee-plugin/pom.xml +++ b/eldependenci-bungee-plugin/pom.xml @@ -5,7 +5,7 @@ eldependenci org.eldependenci - 2.0.1 + 2.0.2 4.0.0 diff --git a/eldependenci-bungee-plugin/src/main/java/com/ericlam/mc/eld/BungeePluginModule.java b/eldependenci-bungee-plugin/src/main/java/com/ericlam/mc/eld/BungeePluginModule.java index 7101e8e..1733e6b 100644 --- a/eldependenci-bungee-plugin/src/main/java/com/ericlam/mc/eld/BungeePluginModule.java +++ b/eldependenci-bungee-plugin/src/main/java/com/ericlam/mc/eld/BungeePluginModule.java @@ -1,6 +1,6 @@ package com.ericlam.mc.eld; -import com.ericlam.mc.eld.module.ELDPluginModule; +import com.ericlam.mc.eld.guice.ELDPluginModule; import net.md_5.bungee.api.plugin.Plugin; public class BungeePluginModule extends ELDPluginModule { diff --git a/eldependenci-bungee-plugin/src/main/java/com/ericlam/mc/eld/ELDependenci.java b/eldependenci-bungee-plugin/src/main/java/com/ericlam/mc/eld/ELDependenci.java index b1e33ca..17e98f9 100644 --- a/eldependenci-bungee-plugin/src/main/java/com/ericlam/mc/eld/ELDependenci.java +++ b/eldependenci-bungee-plugin/src/main/java/com/ericlam/mc/eld/ELDependenci.java @@ -6,7 +6,7 @@ import com.ericlam.mc.eld.exceptions.ArgumentParseException; import com.ericlam.mc.eld.implement.ELDMessageConfig; import com.ericlam.mc.eld.listener.LifeCycleListener; -import com.ericlam.mc.eld.module.ELDPluginModule; +import com.ericlam.mc.eld.guice.ELDPluginModule; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.ComponentBuilder; diff --git a/eldependenci-bungee/pom.xml b/eldependenci-bungee/pom.xml index 90f0877..bb7695f 100644 --- a/eldependenci-bungee/pom.xml +++ b/eldependenci-bungee/pom.xml @@ -5,7 +5,7 @@ eldependenci org.eldependenci - 2.0.1 + 2.0.2 4.0.0 diff --git a/eldependenci-common/pom.xml b/eldependenci-common/pom.xml index 5d67290..134e383 100644 --- a/eldependenci-common/pom.xml +++ b/eldependenci-common/pom.xml @@ -5,7 +5,7 @@ eldependenci org.eldependenci - 2.0.1 + 2.0.2 4.0.0 diff --git a/eldependenci-common/src/main/java/com/ericlam/mc/eld/ELDCommonModule.java b/eldependenci-common/src/main/java/com/ericlam/mc/eld/ELDCommonModule.java index 5be6029..157c500 100644 --- a/eldependenci-common/src/main/java/com/ericlam/mc/eld/ELDCommonModule.java +++ b/eldependenci-common/src/main/java/com/ericlam/mc/eld/ELDCommonModule.java @@ -2,6 +2,8 @@ import com.ericlam.mc.eld.components.Configuration; import com.ericlam.mc.eld.components.Overridable; +import com.ericlam.mc.eld.services.ELDMessageService; +import com.ericlam.mc.eld.services.MessageService; import com.google.inject.Binder; import com.google.inject.Module; import com.google.inject.Scopes; @@ -53,6 +55,9 @@ private void setScope(ScopedBindingBuilder bindingBuilder) { @Override public void configure(Binder binder) { + // bind internal service + binder.bind(MessageService.class).to(ELDMessageService.class).in(Scopes.SINGLETON); + modules.forEach(binder::install); singleton.forEach(cls -> setScope(binder.bind(cls))); serviceProviders.forEach((service, provider) -> setScope(binder.bind(service).toProvider(provider))); diff --git a/eldependenci-common/src/main/java/com/ericlam/mc/eld/ELDependenciCore.java b/eldependenci-common/src/main/java/com/ericlam/mc/eld/ELDependenciCore.java index 1c5cd0f..c72e353 100644 --- a/eldependenci-common/src/main/java/com/ericlam/mc/eld/ELDependenciCore.java +++ b/eldependenci-common/src/main/java/com/ericlam/mc/eld/ELDependenciCore.java @@ -11,13 +11,10 @@ import com.ericlam.mc.eld.implement.ELDMessageConfig; import com.ericlam.mc.eld.listener.LifeCycleListener; import com.ericlam.mc.eld.misc.DebugLogger; -import com.ericlam.mc.eld.module.ELDConfigModule; -import com.ericlam.mc.eld.module.ELDLoggingModule; -import com.ericlam.mc.eld.module.ELDPluginModule; -import com.ericlam.mc.eld.services.ArgParserService; -import com.ericlam.mc.eld.services.ELDConfigPoolService; -import com.ericlam.mc.eld.services.ELDReflectionService; -import com.ericlam.mc.eld.services.LoggingService; +import com.ericlam.mc.eld.guice.ELDConfigModule; +import com.ericlam.mc.eld.guice.ELDLoggingModule; +import com.ericlam.mc.eld.guice.ELDPluginModule; +import com.ericlam.mc.eld.services.*; import com.ericlam.mc.eld.services.logging.ELDLoggingService; import com.google.inject.Guice; import com.google.inject.Injector; @@ -86,8 +83,9 @@ public void onMainLoad() { groupConfigService = new ELDConfigPoolService(coreConfig.fileWalker, configHandler); this.baseModule.setDefaultSingleton(coreConfig.defaultSingleton); this.sharePluginInstance = coreConfig.sharePluginInstance; - this.baseModule.addModule(new ELDConfigModule(groupConfigService, new ELDReflectionService())); - this.baseModule.addModule(new ELDLoggingModule(new ELDLoggingService(coreConfig, this.mcPlugin.getLogger()))); + final ReflectionService reflectionService = new ELDReflectionService(); + this.baseModule.addModule(new ELDConfigModule(groupConfigService, reflectionService)); + this.baseModule.addModule(new ELDLoggingModule(new ELDLoggingService(coreConfig, this.mcPlugin.getLogger()), reflectionService)); this.customInstallation(AddonInstallation.class, this); this.installModule(eldPluginModule); } diff --git a/eldependenci-common/src/main/java/com/ericlam/mc/eld/Registration.java b/eldependenci-common/src/main/java/com/ericlam/mc/eld/Registration.java index ae902b6..9c5a9f9 100644 --- a/eldependenci-common/src/main/java/com/ericlam/mc/eld/Registration.java +++ b/eldependenci-common/src/main/java/com/ericlam/mc/eld/Registration.java @@ -5,7 +5,7 @@ import com.ericlam.mc.eld.commands.ELDArgumentManager; import com.ericlam.mc.eld.common.CommonCommandNode; import com.ericlam.mc.eld.listener.LifeCycleListener; -import com.ericlam.mc.eld.module.ELDPluginModule; +import com.ericlam.mc.eld.guice.ELDPluginModule; import java.util.Map; import java.util.Set; diff --git a/eldependenci-common/src/main/java/com/ericlam/mc/eld/configurations/ELDConfigManager.java b/eldependenci-common/src/main/java/com/ericlam/mc/eld/configurations/ELDConfigManager.java index c886f7d..5b69290 100644 --- a/eldependenci-common/src/main/java/com/ericlam/mc/eld/configurations/ELDConfigManager.java +++ b/eldependenci-common/src/main/java/com/ericlam/mc/eld/configurations/ELDConfigManager.java @@ -143,7 +143,7 @@ public T initConfiguration(Class config, File f) th } public T initConfiguration(Class config, File f, T ins) throws Exception { - class FileControllerImpl implements FileController { + class FileControllerImpl implements FileController, FileLocator { private final Field[] fields; @@ -173,6 +173,11 @@ public boolean reload() { public void save() throws IOException { YAML_MAPPER.writeValue(f, ins); } + + @Override + public File getLocator() { + return f; + } } Field controller = Configuration.class.getDeclaredField("controller"); diff --git a/eldependenci-common/src/main/java/com/ericlam/mc/eld/configurations/SimpleGroupConfig.java b/eldependenci-common/src/main/java/com/ericlam/mc/eld/configurations/SimpleGroupConfig.java index 0d1286e..dcf1aae 100644 --- a/eldependenci-common/src/main/java/com/ericlam/mc/eld/configurations/SimpleGroupConfig.java +++ b/eldependenci-common/src/main/java/com/ericlam/mc/eld/configurations/SimpleGroupConfig.java @@ -20,7 +20,7 @@ import java.util.function.Predicate; import java.util.stream.Collectors; -public class SimpleGroupConfig implements GroupConfig, PreLoadable { +public class SimpleGroupConfig implements GroupConfig, PreLoadable, FileLocator { private final static Logger LOGGER = LoggerFactory.getLogger(GroupConfig.class); @@ -182,6 +182,12 @@ public synchronized void loadAll() { }); } + + @Override + public File getLocator() { + return folder; + } + private static class YamlPage implements Page { private final List content; diff --git a/eldependenci-common/src/main/java/com/ericlam/mc/eld/configurations/SimpleGroupLang.java b/eldependenci-common/src/main/java/com/ericlam/mc/eld/configurations/SimpleGroupLang.java index 699dd76..8378cd6 100644 --- a/eldependenci-common/src/main/java/com/ericlam/mc/eld/configurations/SimpleGroupLang.java +++ b/eldependenci-common/src/main/java/com/ericlam/mc/eld/configurations/SimpleGroupLang.java @@ -15,7 +15,7 @@ import static com.ericlam.mc.eld.configurations.ELDConfigManager.ConfigUtils.setField; -public class SimpleGroupLang implements GroupLang, PreLoadable { +public class SimpleGroupLang implements GroupLang, PreLoadable, FileLocator { private final static Logger LOGGER = LoggerFactory.getLogger(GroupLang.class); @@ -106,4 +106,9 @@ private T getDefaultLanguage(String defaultLang) { throw new IllegalStateException("Error while loading default language: " + e.getMessage(), e); } } + + @Override + public File getLocator() { + return folder; + } } \ No newline at end of file diff --git a/eldependenci-common/src/main/java/com/ericlam/mc/eld/module/ELDConfigModule.java b/eldependenci-common/src/main/java/com/ericlam/mc/eld/guice/ELDConfigModule.java similarity index 80% rename from eldependenci-common/src/main/java/com/ericlam/mc/eld/module/ELDConfigModule.java rename to eldependenci-common/src/main/java/com/ericlam/mc/eld/guice/ELDConfigModule.java index 5b11b5a..51c5798 100644 --- a/eldependenci-common/src/main/java/com/ericlam/mc/eld/module/ELDConfigModule.java +++ b/eldependenci-common/src/main/java/com/ericlam/mc/eld/guice/ELDConfigModule.java @@ -1,6 +1,5 @@ -package com.ericlam.mc.eld.module; +package com.ericlam.mc.eld.guice; -import com.ericlam.mc.eld.ELDTypeListener; import com.ericlam.mc.eld.configurations.ELDConfigManager; import com.ericlam.mc.eld.services.ConfigPoolService; import com.ericlam.mc.eld.services.ELDConfigPoolService; @@ -14,9 +13,9 @@ public final class ELDConfigModule extends AbstractModule { private final ELDConfigPoolService groupConfigService; - private final ELDReflectionService reflectionService; + private final ReflectionService reflectionService; - public ELDConfigModule(ELDConfigPoolService groupConfigService, ELDReflectionService reflectionService) { + public ELDConfigModule(ELDConfigPoolService groupConfigService, ReflectionService reflectionService) { this.groupConfigService = groupConfigService; this.reflectionService = reflectionService; } @@ -27,6 +26,6 @@ protected void configure() { bind(ObjectMapper.class).annotatedWith(Names.named("eld-json")).toInstance(ELDConfigManager.JSON_MAPPER); bind(ConfigPoolService.class).toInstance(groupConfigService); bind(ReflectionService.class).toInstance(reflectionService); - bindListener(Matchers.any(), new ELDTypeListener(groupConfigService, reflectionService)); + bindListener(Matchers.any(), new ELDConfigPoolListener(groupConfigService, reflectionService)); } } diff --git a/eldependenci-common/src/main/java/com/ericlam/mc/eld/ELDTypeListener.java b/eldependenci-common/src/main/java/com/ericlam/mc/eld/guice/ELDConfigPoolListener.java similarity index 73% rename from eldependenci-common/src/main/java/com/ericlam/mc/eld/ELDTypeListener.java rename to eldependenci-common/src/main/java/com/ericlam/mc/eld/guice/ELDConfigPoolListener.java index b28f88e..c25ec4b 100644 --- a/eldependenci-common/src/main/java/com/ericlam/mc/eld/ELDTypeListener.java +++ b/eldependenci-common/src/main/java/com/ericlam/mc/eld/guice/ELDConfigPoolListener.java @@ -1,4 +1,4 @@ -package com.ericlam.mc.eld; +package com.ericlam.mc.eld.guice; import com.ericlam.mc.eld.annotations.InjectPool; import com.ericlam.mc.eld.components.GroupConfiguration; @@ -16,12 +16,12 @@ import java.lang.reflect.ParameterizedType; @SuppressWarnings("unchecked") -public final class ELDTypeListener implements TypeListener { +public final class ELDConfigPoolListener implements TypeListener { private final ConfigPoolService configPoolService; private final ReflectionService reflectionService; - public ELDTypeListener(ConfigPoolService configPoolService, ReflectionService reflectionService) { + public ELDConfigPoolListener(ConfigPoolService configPoolService, ReflectionService reflectionService) { this.configPoolService = configPoolService; this.reflectionService = reflectionService; } @@ -43,25 +43,4 @@ public void hear(TypeLiteral typeLiteral, TypeEncounter typeEncounter) } } - private static class InstanceInjector implements MembersInjector { - - private final Field field; - private final Object value; - - public InstanceInjector(Field field, Object value) { - this.field = field; - this.value = value; - field.setAccessible(true); - } - - - @Override - public void injectMembers(T t) { - try { - field.set(t, value); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } } diff --git a/eldependenci-common/src/main/java/com/ericlam/mc/eld/guice/ELDDebugLoggerListener.java b/eldependenci-common/src/main/java/com/ericlam/mc/eld/guice/ELDDebugLoggerListener.java new file mode 100644 index 0000000..25c27bc --- /dev/null +++ b/eldependenci-common/src/main/java/com/ericlam/mc/eld/guice/ELDDebugLoggerListener.java @@ -0,0 +1,34 @@ +package com.ericlam.mc.eld.guice; + +import com.ericlam.mc.eld.annotations.InjectLogger; +import com.ericlam.mc.eld.misc.DebugLogger; +import com.ericlam.mc.eld.services.LoggingService; +import com.ericlam.mc.eld.services.ReflectionService; +import com.google.inject.TypeLiteral; +import com.google.inject.spi.TypeEncounter; +import com.google.inject.spi.TypeListener; + +import java.lang.reflect.Field; + +public class ELDDebugLoggerListener implements TypeListener { + + private final ReflectionService reflectionService; + private final LoggingService loggingService; + + public ELDDebugLoggerListener(ReflectionService reflectionService, LoggingService loggingService) { + this.reflectionService = reflectionService; + this.loggingService = loggingService; + } + + @Override + public void hear(TypeLiteral type, TypeEncounter encounter) { + for (Field field : reflectionService.getDeclaredFieldsUpTo(type.getRawType(), null)) { + if (!field.isAnnotationPresent(InjectLogger.class) || field.getType() != DebugLogger.class) continue; + var name = field.getAnnotation(InjectLogger.class).name(); + var loggerName = name.isBlank() ? type.getRawType().getName() : name; + var logger = loggingService.getLogger(loggerName); + encounter.register(new InstanceInjector<>(field, logger)); + } + } + +} diff --git a/eldependenci-common/src/main/java/com/ericlam/mc/eld/guice/ELDLoggingModule.java b/eldependenci-common/src/main/java/com/ericlam/mc/eld/guice/ELDLoggingModule.java new file mode 100644 index 0000000..624bccf --- /dev/null +++ b/eldependenci-common/src/main/java/com/ericlam/mc/eld/guice/ELDLoggingModule.java @@ -0,0 +1,23 @@ +package com.ericlam.mc.eld.guice; + +import com.ericlam.mc.eld.services.LoggingService; +import com.ericlam.mc.eld.services.ReflectionService; +import com.google.inject.AbstractModule; +import com.google.inject.matcher.Matchers; + +public final class ELDLoggingModule extends AbstractModule { + + private final LoggingService loggingService; + private final ReflectionService reflectionService; + + public ELDLoggingModule(LoggingService loggingService, ReflectionService reflectionService) { + this.loggingService = loggingService; + this.reflectionService = reflectionService; + } + + @Override + protected void configure() { + bind(LoggingService.class).toInstance(loggingService); + bindListener(Matchers.any(), new ELDDebugLoggerListener(reflectionService, loggingService)); + } +} diff --git a/eldependenci-common/src/main/java/com/ericlam/mc/eld/module/ELDPluginModule.java b/eldependenci-common/src/main/java/com/ericlam/mc/eld/guice/ELDPluginModule.java similarity index 88% rename from eldependenci-common/src/main/java/com/ericlam/mc/eld/module/ELDPluginModule.java rename to eldependenci-common/src/main/java/com/ericlam/mc/eld/guice/ELDPluginModule.java index 95a26b6..defac5c 100644 --- a/eldependenci-common/src/main/java/com/ericlam/mc/eld/module/ELDPluginModule.java +++ b/eldependenci-common/src/main/java/com/ericlam/mc/eld/guice/ELDPluginModule.java @@ -1,8 +1,6 @@ -package com.ericlam.mc.eld.module; +package com.ericlam.mc.eld.guice; import com.google.inject.AbstractModule; -import com.google.inject.Scopes; -import com.google.inject.TypeLiteral; import com.google.inject.multibindings.MapBinder; import java.util.Map; diff --git a/eldependenci-common/src/main/java/com/ericlam/mc/eld/guice/InstanceInjector.java b/eldependenci-common/src/main/java/com/ericlam/mc/eld/guice/InstanceInjector.java new file mode 100644 index 0000000..dc26689 --- /dev/null +++ b/eldependenci-common/src/main/java/com/ericlam/mc/eld/guice/InstanceInjector.java @@ -0,0 +1,27 @@ +package com.ericlam.mc.eld.guice; + +import com.google.inject.MembersInjector; + +import java.lang.reflect.Field; + +public class InstanceInjector implements MembersInjector { + + private final Field field; + private final Object value; + + public InstanceInjector(Field field, Object value) { + this.field = field; + this.value = value; + field.setAccessible(true); + } + + + @Override + public void injectMembers(T t) { + try { + field.set(t, value); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } +} diff --git a/eldependenci-common/src/main/java/com/ericlam/mc/eld/module/ELDLoggingModule.java b/eldependenci-common/src/main/java/com/ericlam/mc/eld/module/ELDLoggingModule.java deleted file mode 100644 index 8f40610..0000000 --- a/eldependenci-common/src/main/java/com/ericlam/mc/eld/module/ELDLoggingModule.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.ericlam.mc.eld.module; - -import com.ericlam.mc.eld.services.LoggingService; -import com.google.inject.AbstractModule; - -public final class ELDLoggingModule extends AbstractModule { - - private final LoggingService loggingService; - - public ELDLoggingModule(LoggingService loggingService) { - this.loggingService = loggingService; - } - - @Override - protected void configure() { - bind(LoggingService.class).toInstance(loggingService); - } -} diff --git a/eldependenci-common/src/main/java/com/ericlam/mc/eld/services/logging/ELDLogger.java b/eldependenci-common/src/main/java/com/ericlam/mc/eld/services/logging/ELDLogger.java index 67536c7..a03d9c3 100644 --- a/eldependenci-common/src/main/java/com/ericlam/mc/eld/services/logging/ELDLogger.java +++ b/eldependenci-common/src/main/java/com/ericlam/mc/eld/services/logging/ELDLogger.java @@ -41,12 +41,6 @@ public ELDLogger(String name, ELDConfig config, Logger parent) { this(name, null, config, parent); } - - public ELDLogger(Class cls, ELDConfig config,Logger parent) { - this(cls.getName(), null, config, parent); - } - - @Override public void debug(String message, Object... args) { if (config.debugLogging) { diff --git a/eldependenci-common/src/main/java/com/ericlam/mc/eld/services/logging/ELDLoggingService.java b/eldependenci-common/src/main/java/com/ericlam/mc/eld/services/logging/ELDLoggingService.java index cfe95d6..037fdfe 100644 --- a/eldependenci-common/src/main/java/com/ericlam/mc/eld/services/logging/ELDLoggingService.java +++ b/eldependenci-common/src/main/java/com/ericlam/mc/eld/services/logging/ELDLoggingService.java @@ -11,8 +11,7 @@ public final class ELDLoggingService implements LoggingService { - private final Map, DebugLogger> loggerMap = new ConcurrentHashMap<>(); - private final Map loggerNameMap = new ConcurrentHashMap<>(); + private final Map loggerMap = new ConcurrentHashMap<>(); private final ELDConfig config; private final Logger parent; @@ -24,18 +23,14 @@ public ELDLoggingService(ELDConfig config, Logger parent) { @Override public DebugLogger getLogger(Class cls) { - return Optional.ofNullable(loggerMap.get(cls)).orElseGet(() -> { - var logger = new ELDLogger(cls, config, parent); - loggerMap.put(cls, logger); - return logger; - }); + return this.getLogger(cls.getName()); } @Override public DebugLogger getLogger(String name) { - return Optional.ofNullable(loggerNameMap.get(name)).orElseGet(() -> { + return Optional.ofNullable(loggerMap.get(name)).orElseGet(() -> { var logger = new ELDLogger(name, config, parent); - loggerNameMap.put(name, logger); + loggerMap.put(name, logger); return logger; }); } diff --git a/eldependenci-common/src/test/java/com/ericlam/mc/eldtest/TestAnnotationPresent.java b/eldependenci-common/src/test/java/com/ericlam/mc/eldtest/TestAnnotationPresent.java index 9b19c3f..aaae006 100644 --- a/eldependenci-common/src/test/java/com/ericlam/mc/eldtest/TestAnnotationPresent.java +++ b/eldependenci-common/src/test/java/com/ericlam/mc/eldtest/TestAnnotationPresent.java @@ -1,12 +1,17 @@ package com.ericlam.mc.eldtest; import com.ericlam.mc.eld.annotations.Commander; +import com.ericlam.mc.eld.components.Configuration; +import com.ericlam.mc.eld.configurations.FileLocator; import javax.inject.Singleton; +import java.io.File; import java.util.Arrays; public class TestAnnotationPresent { + + public static void main(String[] args) { System.out.println(Impl.class.isAnnotationPresent(Commander.class)); System.out.println(Impl.class.getAnnotation(Commander.class) != null); diff --git a/eldependenci-framework/pom.xml b/eldependenci-framework/pom.xml index 8eb2d55..384ef72 100644 --- a/eldependenci-framework/pom.xml +++ b/eldependenci-framework/pom.xml @@ -5,7 +5,7 @@ eldependenci org.eldependenci - 2.0.1 + 2.0.2 4.0.0 diff --git a/eldependenci-framework/src/main/java/com/ericlam/mc/eld/annotations/InjectLogger.java b/eldependenci-framework/src/main/java/com/ericlam/mc/eld/annotations/InjectLogger.java new file mode 100644 index 0000000..ffd52c9 --- /dev/null +++ b/eldependenci-framework/src/main/java/com/ericlam/mc/eld/annotations/InjectLogger.java @@ -0,0 +1,21 @@ +package com.ericlam.mc.eld.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 透過標註注入 DebugLogger + */ +@Target({ElementType.FIELD, ElementType.TYPE_PARAMETER, ElementType.PARAMETER}) +@Retention(RetentionPolicy.RUNTIME) +public @interface InjectLogger { + + /** + * DebugLogger 的名稱,如無則以注入 class 作為名稱 + * @return 自定義名稱 + */ + String name() default ""; + +} diff --git a/eldependenci-framework/src/main/java/com/ericlam/mc/eld/configurations/FileLocator.java b/eldependenci-framework/src/main/java/com/ericlam/mc/eld/configurations/FileLocator.java new file mode 100644 index 0000000..202327b --- /dev/null +++ b/eldependenci-framework/src/main/java/com/ericlam/mc/eld/configurations/FileLocator.java @@ -0,0 +1,23 @@ +package com.ericlam.mc.eld.configurations; + +import java.io.File; + +/** + * 獲取根文件的接口,可在以下的類別進行形態轉換使用: + *
    + *
  • {@link com.ericlam.mc.eld.controllers.FileController}
  • + *
  • {@link GroupConfig}
  • + *
  • {@link GroupLang}
  • + *
+ */ +public interface FileLocator { + + /** + * 獲取文件檔案,如果是文件池則獲取文件池資料夾 + *

獲取文件池資料夾: {@link GroupConfig}, {@link GroupLang}

+ *

獲取文件檔案: {@link com.ericlam.mc.eld.controllers.FileController}

+ * @return 文件檔案或文件池資料夾 + */ + File getLocator(); + +} diff --git a/eldependenci-framework/src/main/java/com/ericlam/mc/eld/controllers/FileController.java b/eldependenci-framework/src/main/java/com/ericlam/mc/eld/controllers/FileController.java index 6be80ce..7aa55a9 100644 --- a/eldependenci-framework/src/main/java/com/ericlam/mc/eld/controllers/FileController.java +++ b/eldependenci-framework/src/main/java/com/ericlam/mc/eld/controllers/FileController.java @@ -1,5 +1,6 @@ package com.ericlam.mc.eld.controllers; +import java.io.File; import java.io.IOException; /** diff --git a/pom.xml b/pom.xml index 8c7170e..08f06f8 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.eldependenci eldependenci pom - 2.0.1 + 2.0.2 eldependenci-framework @@ -43,10 +43,10 @@ - 2.13.3 - 1.18.2-R0.1-SNAPSHOT + 2.13.4 + 1.19-R0.1-SNAPSHOT 1.18-R0.1-SNAPSHOT - 2.0.1.2 + 2.0.2 @@ -78,7 +78,7 @@ org.yaml snakeyaml - 1.30 + 1.31 provided @@ -126,6 +126,12 @@ jackson-dataformat-yaml ${jackson.version} compile + + + org.snakeyaml + snakeyaml + + com.fasterxml.jackson.core