diff --git a/README.md b/README.md index 026e274..75b2d0b 100644 --- a/README.md +++ b/README.md @@ -2,15 +2,15 @@ ```xml - zhira-repo - https://maven.zhira.net/repository/ + zhdev-repo + https://maven.zhdev.org/repository/ ``` ```xml - net.zhira.varioutil + org.zhdev.varioutil all 1.0-SNAPSHOT @@ -22,7 +22,7 @@ ```xml - net.zhira.varioutil + org.zhdev.varioutil common 1.0-SNAPSHOT @@ -32,7 +32,7 @@ ```java import java.lang.reflect.Field; -import net.zhira.varioutil.ReflectionUtils; +import org.zhdev.varioutil.ReflectionUtils; import org.bukkit.Bukkit; public class BukkitFields { @@ -53,7 +53,7 @@ public class BukkitFields { ```xml - net.zhira.varioutil + org.zhdev.varioutil io 1.0-SNAPSHOT @@ -62,8 +62,8 @@ public class BukkitFields { #### Code ```java -import net.zhira.varioutil.Config; -import net.zhira.varioutil.YamlConfig; +import org.zhdev.varioutil.Config; +import org.zhdev.varioutil.YamlConfig; import java.util.List; diff --git a/all/pom.xml b/all/pom.xml index 5f6ac5a..715d7cd 100644 --- a/all/pom.xml +++ b/all/pom.xml @@ -1,12 +1,9 @@ - - + 4.0.0 parent - net.zhira.varioutil + org.zhdev.varioutil 1.0-SNAPSHOT diff --git a/bukkit/pom.xml b/bukkit/pom.xml index 3f72d70..3b84186 100644 --- a/bukkit/pom.xml +++ b/bukkit/pom.xml @@ -1,11 +1,8 @@ - - + 4.0.0 - net.zhira.varioutil + org.zhdev.varioutil parent 1.0-SNAPSHOT @@ -17,10 +14,6 @@ spigot-repo https://hub.spigotmc.org/nexus/content/repositories/snapshots/ - - minecraft-repo - https://libraries.minecraft.net/ - @@ -47,7 +40,7 @@ org.spigotmc spigot-api - 1.21.1-R0.1-SNAPSHOT + 1.20-R0.1-SNAPSHOT provided @@ -57,9 +50,9 @@ - com.mojang - authlib - 4.0.43 + org.spigotmc + spigot + 1.20-R0.1-SNAPSHOT provided diff --git a/bukkit/src/main/java/net/zhira/varioutil/util/BukkitReflectionUtils.java b/bukkit/src/main/java/net/zhira/varioutil/util/BukkitReflectionUtils.java deleted file mode 100644 index 8e05db3..0000000 --- a/bukkit/src/main/java/net/zhira/varioutil/util/BukkitReflectionUtils.java +++ /dev/null @@ -1,132 +0,0 @@ -package net.zhira.varioutil.util; - -import com.mojang.authlib.GameProfile; -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandMap; -import org.bukkit.command.SimpleCommandMap; -import org.bukkit.inventory.meta.SkullMeta; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.function.Supplier; - -class BukkitReflectionUtils { - private static final String OBC_PACKAGE = Bukkit.getServer().getClass().getPackage().getName(); - - private static final Class __CraftServer__CLASS = ReflectionUtils.searchType(OBC_PACKAGE + ".CraftServer"); - private static final Class __CraftMetaSkull__CLASS = ReflectionUtils.searchType(OBC_PACKAGE + ".inventory.CraftMetaSkull"); - - private static final Field __commandMap__CraftServer__FIELD = ReflectionUtils.fieldSearcher() - .type(__CraftServer__CLASS) - .fieldOf("commandMap") - .fieldType(CommandMap.class) - .search(); - private static final Field __knownCommands__SimpleCommandMap__FIELD = ReflectionUtils.fieldSearcher() - .type(SimpleCommandMap.class) - .fieldOf("knownCommands") - .fieldType(Map.class) - .search(); - - private static final GameProfileConsumer GAME_PROFILE_CONSUMER; - - static CommandMap getCommandMap() { - return (CommandMap) ReflectionUtils.getFieldValue(Bukkit.getServer(), __commandMap__CraftServer__FIELD); - } - - @SuppressWarnings("unchecked") - static Map getKnownCommands() { - return (Map) ReflectionUtils.getFieldValue(getCommandMap(), __knownCommands__SimpleCommandMap__FIELD); - } - - static void setProfile(SkullMeta meta, GameProfile profile) { - GAME_PROFILE_CONSUMER.accept(meta, profile); - } - - private interface GameProfileConsumer { - void accept(SkullMeta meta, GameProfile profile); - } - - private static class ModernGameProfileConsumer implements GameProfileConsumer { - private final Class __ResolvableProfile_CLASS = ReflectionUtils.getType("net.minecraft.world.item.component.ResolvableProfile"); - private final Constructor __ResolvableProfile_CONSTRUCTOR; - protected final Method __setProfile__CraftMetaSkull__METHOD = ReflectionUtils.methodSearcher() - .type(__CraftMetaSkull__CLASS) - .methodOf("setProfile") - .parameters(__ResolvableProfile_CLASS) - .returns(void.class) - .search(); - - ModernGameProfileConsumer() { - Constructor resolvableConstructor; - try { - resolvableConstructor = __ResolvableProfile_CLASS.getConstructor(GameProfile.class); - } catch (NoSuchMethodException e) { - throw new NoSuchMethodError("Cannot get constructor of " + __ResolvableProfile_CLASS); - } - __ResolvableProfile_CONSTRUCTOR = resolvableConstructor; - } - - @Override - public void accept(SkullMeta meta, GameProfile profile) { - try { - Object resolvableProfile = __ResolvableProfile_CONSTRUCTOR.newInstance(profile); - ReflectionUtils.invokeMethod(meta, __setProfile__CraftMetaSkull__METHOD, resolvableProfile); - } catch (ReflectiveOperationException e) { - throw new RuntimeException(e); - } - } - } - - private static class LegacyGameProfileConsumer implements GameProfileConsumer { - protected final Method __setProfile__CraftMetaSkull__METHOD = ReflectionUtils.methodSearcher() - .type(__CraftMetaSkull__CLASS) - .methodOf("setProfile") - .parameters(GameProfile.class) - .returns(void.class) - .search(); - - @Override - public void accept(SkullMeta meta, GameProfile profile) { - ReflectionUtils.invokeMethod(meta, __setProfile__CraftMetaSkull__METHOD, profile); - } - } - - private static class AncientGameProfileConsumer implements GameProfileConsumer { - private final Field __profile__CraftMetaSkull__FIELD = ReflectionUtils.fieldSearcher() - .type(__CraftMetaSkull__CLASS) - .fieldOf("profile") - .fieldType(GameProfile.class) - .search(); - - @Override - public void accept(SkullMeta meta, GameProfile profile) { - ReflectionUtils.setFieldValue(meta, __profile__CraftMetaSkull__FIELD, profile); - } - } - - @SafeVarargs - private static GameProfileConsumer tryCreateGameProfileConsumer(Supplier... suppliers) { - List errorMessages = new ArrayList<>(); - for (Supplier supplier : suppliers) { - try { - return supplier.get(); - } catch (Exception | Error e) { - errorMessages.add(e.getClass() + ": " + e.getMessage()); - } - } - throw new IllegalStateException("Cannot create GameProfileConsumer: " + String.join("; ", errorMessages)); - } - - static { - GAME_PROFILE_CONSUMER = tryCreateGameProfileConsumer( - ModernGameProfileConsumer::new, - LegacyGameProfileConsumer::new, - AncientGameProfileConsumer::new - ); - } -} diff --git a/bukkit/src/main/java/net/zhira/varioutil/BukkitPlugin.java b/bukkit/src/main/java/org/zhdev/varioutil/BukkitPlugin.java similarity index 98% rename from bukkit/src/main/java/net/zhira/varioutil/BukkitPlugin.java rename to bukkit/src/main/java/org/zhdev/varioutil/BukkitPlugin.java index 3a2ecea..377eafe 100644 --- a/bukkit/src/main/java/net/zhira/varioutil/BukkitPlugin.java +++ b/bukkit/src/main/java/org/zhdev/varioutil/BukkitPlugin.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil; +package org.zhdev.varioutil; import org.bukkit.Bukkit; import org.bukkit.command.Command; diff --git a/bukkit/src/main/java/net/zhira/varioutil/BukkitPreparedPlugin.java b/bukkit/src/main/java/org/zhdev/varioutil/BukkitPreparedPlugin.java similarity index 89% rename from bukkit/src/main/java/net/zhira/varioutil/BukkitPreparedPlugin.java rename to bukkit/src/main/java/org/zhdev/varioutil/BukkitPreparedPlugin.java index b5db48e..6c13df5 100644 --- a/bukkit/src/main/java/net/zhira/varioutil/BukkitPreparedPlugin.java +++ b/bukkit/src/main/java/org/zhdev/varioutil/BukkitPreparedPlugin.java @@ -1,8 +1,5 @@ -package net.zhira.varioutil; +package org.zhdev.varioutil; -import net.zhira.varioutil.language.Language; -import net.zhira.varioutil.util.CollectionUtils; -import net.zhira.varioutil.util.ColorUtils; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.PluginIdentifiableCommand; @@ -12,14 +9,16 @@ import org.bukkit.event.Listener; import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.java.JavaPluginLoader; import org.jetbrains.annotations.NotNull; -import net.zhira.varioutil.bukkit.command.PreparedPluginCommand; -import net.zhira.varioutil.config.BukkitYamlConfig; -import net.zhira.varioutil.config.Config; -import net.zhira.varioutil.config.ConfigSection; -import net.zhira.varioutil.config.YamlConfig; -import net.zhira.varioutil.sql.SqlAdapter; -import net.zhira.varioutil.util.BukkitUtils; -import net.zhira.varioutil.util.ConfigUtils; +import org.zhdev.varioutil.bukkit.command.PreparedPluginCommand; +import org.zhdev.varioutil.config.BukkitYamlConfig; +import org.zhdev.varioutil.config.Config; +import org.zhdev.varioutil.config.ConfigSection; +import org.zhdev.varioutil.language.Language; +import org.zhdev.varioutil.sql.SqlAdapter; +import org.zhdev.varioutil.util.BukkitUtils; +import org.zhdev.varioutil.util.CollectionUtils; +import org.zhdev.varioutil.util.ColorUtils; +import org.zhdev.varioutil.util.ConfigUtils; import java.io.File; import java.nio.file.Path; @@ -125,10 +124,10 @@ public abstract class BukkitPreparedPlugin extends BukkitPlugin implements Liste protected void loadPhrases() { ConfigSection languageSection = defaultConfig.getOrCreateSection("language"); String locale = languageSection.getString("locale", "default"); - Config languageConfig = new YamlConfig("language/" + locale + ".yml"); - loadConfig(languageConfig, "language.yml", true); - loadConfig(languageConfig, "language/default.yml", true); - loadConfig(languageConfig, true); + Config languageConfig = new BukkitYamlConfig("language/" + locale + ".yml"); + loadConfig(languageConfig, "language.yml"); + loadConfig(languageConfig, "language/default.yml"); + loadConfig(languageConfig); ConfigUtils.addPhrases(language, languageConfig, ColorUtils::translateAlternateColorCodes); } diff --git a/bukkit/src/main/java/net/zhira/varioutil/bukkit/LegacyMaterial.java b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/LegacyMaterial.java similarity index 97% rename from bukkit/src/main/java/net/zhira/varioutil/bukkit/LegacyMaterial.java rename to bukkit/src/main/java/org/zhdev/varioutil/bukkit/LegacyMaterial.java index c145309..c6f1fef 100644 --- a/bukkit/src/main/java/net/zhira/varioutil/bukkit/LegacyMaterial.java +++ b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/LegacyMaterial.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.bukkit; +package org.zhdev.varioutil.bukkit; import org.bukkit.Material; diff --git a/bukkit/src/main/java/net/zhira/varioutil/bukkit/command/AbstractPluginCommand.java b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/command/AbstractPluginCommand.java similarity index 98% rename from bukkit/src/main/java/net/zhira/varioutil/bukkit/command/AbstractPluginCommand.java rename to bukkit/src/main/java/org/zhdev/varioutil/bukkit/command/AbstractPluginCommand.java index 57c7723..b41319e 100644 --- a/bukkit/src/main/java/net/zhira/varioutil/bukkit/command/AbstractPluginCommand.java +++ b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/command/AbstractPluginCommand.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.bukkit.command; +package org.zhdev.varioutil.bukkit.command; import org.bukkit.command.*; import org.bukkit.plugin.Plugin; diff --git a/bukkit/src/main/java/net/zhira/varioutil/bukkit/command/PreparedPluginCommand.java b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/command/PreparedPluginCommand.java similarity index 95% rename from bukkit/src/main/java/net/zhira/varioutil/bukkit/command/PreparedPluginCommand.java rename to bukkit/src/main/java/org/zhdev/varioutil/bukkit/command/PreparedPluginCommand.java index 4525ca6..c3866e2 100644 --- a/bukkit/src/main/java/net/zhira/varioutil/bukkit/command/PreparedPluginCommand.java +++ b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/command/PreparedPluginCommand.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.bukkit.command; +package org.zhdev.varioutil.bukkit.command; import org.bukkit.command.*; import org.bukkit.plugin.Plugin; diff --git a/bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/ClickHandler.java b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/ClickHandler.java similarity index 83% rename from bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/ClickHandler.java rename to bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/ClickHandler.java index c988f56..7c9aef7 100644 --- a/bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/ClickHandler.java +++ b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/ClickHandler.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.bukkit.gui; +package org.zhdev.varioutil.bukkit.gui; import org.bukkit.event.inventory.InventoryClickEvent; diff --git a/bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/Gui.java b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/Gui.java similarity index 98% rename from bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/Gui.java rename to bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/Gui.java index a22c4d6..59d87dd 100644 --- a/bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/Gui.java +++ b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/Gui.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.bukkit.gui; +package org.zhdev.varioutil.bukkit.gui; import org.bukkit.Material; import org.bukkit.entity.Player; diff --git a/bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/GuiConfig.java b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/GuiConfig.java similarity index 95% rename from bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/GuiConfig.java rename to bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/GuiConfig.java index 824d7c5..f3dbe05 100644 --- a/bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/GuiConfig.java +++ b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/GuiConfig.java @@ -1,6 +1,6 @@ -package net.zhira.varioutil.bukkit.gui; +package org.zhdev.varioutil.bukkit.gui; -import net.zhira.varioutil.config.ConfigSection; +import org.zhdev.varioutil.config.ConfigSection; import java.util.Collections; import java.util.HashMap; diff --git a/bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/GuiHolder.java b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/GuiHolder.java similarity index 92% rename from bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/GuiHolder.java rename to bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/GuiHolder.java index b9532bd..ab31d90 100644 --- a/bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/GuiHolder.java +++ b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/GuiHolder.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.bukkit.gui; +package org.zhdev.varioutil.bukkit.gui; import org.bukkit.Bukkit; import org.bukkit.inventory.Inventory; diff --git a/bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/GuiIcon.java b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/GuiIcon.java similarity index 97% rename from bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/GuiIcon.java rename to bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/GuiIcon.java index 2cdba1d..ca641b7 100644 --- a/bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/GuiIcon.java +++ b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/GuiIcon.java @@ -1,11 +1,11 @@ -package net.zhira.varioutil.bukkit.gui; +package org.zhdev.varioutil.bukkit.gui; import org.bukkit.Material; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.SkullMeta; -import net.zhira.varioutil.util.BukkitUtils; +import org.zhdev.varioutil.util.BukkitUtils; import java.util.Arrays; import java.util.Collections; diff --git a/bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/GuiIconConfig.java b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/GuiIconConfig.java similarity index 87% rename from bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/GuiIconConfig.java rename to bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/GuiIconConfig.java index c175571..6a4cd08 100644 --- a/bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/GuiIconConfig.java +++ b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/GuiIconConfig.java @@ -1,9 +1,9 @@ -package net.zhira.varioutil.bukkit.gui; +package org.zhdev.varioutil.bukkit.gui; -import net.zhira.varioutil.config.ConfigSection; -import net.zhira.varioutil.util.StringUtils; import org.bukkit.Material; -import net.zhira.varioutil.bukkit.LegacyMaterial; +import org.zhdev.varioutil.bukkit.LegacyMaterial; +import org.zhdev.varioutil.config.ConfigSection; +import org.zhdev.varioutil.util.StringUtils; public class GuiIconConfig { protected final Material type; diff --git a/bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/GuiListener.java b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/GuiListener.java similarity index 98% rename from bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/GuiListener.java rename to bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/GuiListener.java index a52cc44..43fac37 100644 --- a/bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/GuiListener.java +++ b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/GuiListener.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.bukkit.gui; +package org.zhdev.varioutil.bukkit.gui; import org.bukkit.Bukkit; import org.bukkit.entity.Player; diff --git a/bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/GuiType.java b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/GuiType.java similarity index 96% rename from bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/GuiType.java rename to bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/GuiType.java index 5479726..250be28 100644 --- a/bukkit/src/main/java/net/zhira/varioutil/bukkit/gui/GuiType.java +++ b/bukkit/src/main/java/org/zhdev/varioutil/bukkit/gui/GuiType.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.bukkit.gui; +package org.zhdev.varioutil.bukkit.gui; import org.bukkit.Bukkit; import org.bukkit.event.inventory.InventoryType; diff --git a/bukkit/src/main/java/net/zhira/varioutil/config/BukkitYamlConfig.java b/bukkit/src/main/java/org/zhdev/varioutil/config/BukkitYamlConfig.java similarity index 97% rename from bukkit/src/main/java/net/zhira/varioutil/config/BukkitYamlConfig.java rename to bukkit/src/main/java/org/zhdev/varioutil/config/BukkitYamlConfig.java index 5295f26..323102e 100644 --- a/bukkit/src/main/java/net/zhira/varioutil/config/BukkitYamlConfig.java +++ b/bukkit/src/main/java/org/zhdev/varioutil/config/BukkitYamlConfig.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.config; +package org.zhdev.varioutil.config; import org.bukkit.configuration.serialization.ConfigurationSerializable; import org.bukkit.configuration.serialization.ConfigurationSerialization; diff --git a/bukkit/src/main/java/org/zhdev/varioutil/util/BukkitReflectionUtils.java b/bukkit/src/main/java/org/zhdev/varioutil/util/BukkitReflectionUtils.java new file mode 100644 index 0000000..31dfba8 --- /dev/null +++ b/bukkit/src/main/java/org/zhdev/varioutil/util/BukkitReflectionUtils.java @@ -0,0 +1,51 @@ +package org.zhdev.varioutil.util; + +import com.mojang.authlib.GameProfile; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandMap; +import org.bukkit.command.SimpleCommandMap; +import org.bukkit.inventory.meta.SkullMeta; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Map; + +import static org.zhdev.varioutil.util.ReflectionUtils.*; + +class BukkitReflectionUtils { + private static final String VERSION = Bukkit.getServer().getClass().getName().split("\\.")[3]; + + private static final Class __CraftServer__CLASS = searchType("org.bukkit.craftbukkit." + VERSION + ".CraftServer"); + + private static final Method __setProfile__CraftMetaSkull__METHOD = ReflectionUtils.methodSearcher() + .typeOf("org.bukkit.craftbukkit." + VERSION + ".inventory.CraftMetaSkull") + .methodOf("setProfile") + .parameters(GameProfile.class) + .returns(void.class) + .search(); + + private static final Field __commandMap__CraftServer__FIELD = fieldSearcher() + .fieldOf("commandMap") + .type(__CraftServer__CLASS) + .fieldType(CommandMap.class) + .search(); + private static final Field __knownCommands__SimpleCommandMap__FIELD = fieldSearcher() + .fieldOf("knownCommands") + .type(SimpleCommandMap.class) + .fieldType(Map.class) + .search(); + + static CommandMap getCommandMap() { + return (CommandMap) getFieldValue(__commandMap__CraftServer__FIELD, Bukkit.getServer()); + } + + @SuppressWarnings("unchecked") + static Map getKnownCommands() { + return (Map) getFieldValue(__knownCommands__SimpleCommandMap__FIELD, getCommandMap()); + } + + static void setProfile(SkullMeta meta, GameProfile profile) { + ReflectionUtils.invokeMethod(meta, __setProfile__CraftMetaSkull__METHOD, profile); + } +} diff --git a/bukkit/src/main/java/net/zhira/varioutil/util/BukkitUtils.java b/bukkit/src/main/java/org/zhdev/varioutil/util/BukkitUtils.java similarity index 86% rename from bukkit/src/main/java/net/zhira/varioutil/util/BukkitUtils.java rename to bukkit/src/main/java/org/zhdev/varioutil/util/BukkitUtils.java index 1be5413..cc75588 100644 --- a/bukkit/src/main/java/net/zhira/varioutil/util/BukkitUtils.java +++ b/bukkit/src/main/java/org/zhdev/varioutil/util/BukkitUtils.java @@ -1,8 +1,7 @@ -package net.zhira.varioutil.util; +package org.zhdev.varioutil.util; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; -import net.zhira.varioutil.Version; import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandMap; @@ -10,11 +9,15 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.SkullMeta; import org.bukkit.util.io.BukkitObjectInputStream; import org.bukkit.util.io.BukkitObjectOutputStream; +import org.zhdev.varioutil.Version; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.util.*; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; import java.util.function.Predicate; public class BukkitUtils { @@ -25,8 +28,6 @@ public class BukkitUtils { private static final Map PROFILE_CACHE = new HashMap<>(); - private static final String PROFILE_NAME_CHARACTERS = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890_"; - public static Command getCommand(String label) { return KNOWN_COMMANDS.get(label); } @@ -54,12 +55,7 @@ public class BukkitUtils { public static void setSkullTexture(SkullMeta meta, String base64) { GameProfile profile = PROFILE_CACHE.get(base64); if (profile == null) { - Random random = new Random(); - char[] buffer = new char[16]; - for (int i = 0; i < 16; i++) { - buffer[i] = PROFILE_NAME_CHARACTERS.charAt(random.nextInt(PROFILE_NAME_CHARACTERS.length())); - } - profile = new GameProfile(UUID.randomUUID(), String.valueOf(buffer)); + profile = new GameProfile(UUID.randomUUID(), base64); profile.getProperties().put("textures", new Property("textures", base64)); PROFILE_CACHE.put(base64, profile); } diff --git a/common/pom.xml b/common/pom.xml index c2ebc50..d09b582 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -1,12 +1,9 @@ - - + 4.0.0 parent - net.zhira.varioutil + org.zhdev.varioutil 1.0-SNAPSHOT diff --git a/common/src/main/java/net/zhira/varioutil/Version.java b/common/src/main/java/org/zhdev/varioutil/Version.java similarity index 99% rename from common/src/main/java/net/zhira/varioutil/Version.java rename to common/src/main/java/org/zhdev/varioutil/Version.java index 03729e5..fe36e98 100644 --- a/common/src/main/java/net/zhira/varioutil/Version.java +++ b/common/src/main/java/org/zhdev/varioutil/Version.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil; +package org.zhdev.varioutil; import org.jetbrains.annotations.NotNull; diff --git a/common/src/main/java/net/zhira/varioutil/language/Language.java b/common/src/main/java/org/zhdev/varioutil/language/Language.java similarity index 96% rename from common/src/main/java/net/zhira/varioutil/language/Language.java rename to common/src/main/java/org/zhdev/varioutil/language/Language.java index 639b9e5..a8b6ec6 100644 --- a/common/src/main/java/net/zhira/varioutil/language/Language.java +++ b/common/src/main/java/org/zhdev/varioutil/language/Language.java @@ -1,6 +1,6 @@ -package net.zhira.varioutil.language; +package org.zhdev.varioutil.language; -import net.zhira.varioutil.util.StringUtils; +import org.zhdev.varioutil.util.StringUtils; import java.util.HashMap; import java.util.LinkedHashMap; diff --git a/common/src/main/java/net/zhira/varioutil/reflection/FieldSearcher.java b/common/src/main/java/org/zhdev/varioutil/reflection/FieldSearcher.java similarity index 93% rename from common/src/main/java/net/zhira/varioutil/reflection/FieldSearcher.java rename to common/src/main/java/org/zhdev/varioutil/reflection/FieldSearcher.java index 6086f75..2f39cc3 100644 --- a/common/src/main/java/net/zhira/varioutil/reflection/FieldSearcher.java +++ b/common/src/main/java/org/zhdev/varioutil/reflection/FieldSearcher.java @@ -1,6 +1,6 @@ -package net.zhira.varioutil.reflection; +package org.zhdev.varioutil.reflection; -import net.zhira.varioutil.util.ReflectionUtils; +import org.zhdev.varioutil.util.ReflectionUtils; import java.lang.reflect.Field; @@ -74,7 +74,7 @@ public class FieldSearcher { } public Object get() { - return ReflectionUtils.getFieldValue(instance, search()); + return ReflectionUtils.getFieldValue(search(), instance); } public T get(Class type) { diff --git a/common/src/main/java/net/zhira/varioutil/reflection/MethodSearcher.java b/common/src/main/java/org/zhdev/varioutil/reflection/MethodSearcher.java similarity index 96% rename from common/src/main/java/net/zhira/varioutil/reflection/MethodSearcher.java rename to common/src/main/java/org/zhdev/varioutil/reflection/MethodSearcher.java index 6ca9c81..dc754de 100644 --- a/common/src/main/java/net/zhira/varioutil/reflection/MethodSearcher.java +++ b/common/src/main/java/org/zhdev/varioutil/reflection/MethodSearcher.java @@ -1,6 +1,6 @@ -package net.zhira.varioutil.reflection; +package org.zhdev.varioutil.reflection; -import net.zhira.varioutil.util.ReflectionUtils; +import org.zhdev.varioutil.util.ReflectionUtils; import java.lang.reflect.Method; diff --git a/common/src/main/java/net/zhira/varioutil/util/ArrayUtils.java b/common/src/main/java/org/zhdev/varioutil/util/ArrayUtils.java similarity index 98% rename from common/src/main/java/net/zhira/varioutil/util/ArrayUtils.java rename to common/src/main/java/org/zhdev/varioutil/util/ArrayUtils.java index 1941b5f..52ea91a 100644 --- a/common/src/main/java/net/zhira/varioutil/util/ArrayUtils.java +++ b/common/src/main/java/org/zhdev/varioutil/util/ArrayUtils.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.util; +package org.zhdev.varioutil.util; import java.util.Collection; import java.util.function.Function; diff --git a/common/src/main/java/net/zhira/varioutil/util/CollectionUtils.java b/common/src/main/java/org/zhdev/varioutil/util/CollectionUtils.java similarity index 98% rename from common/src/main/java/net/zhira/varioutil/util/CollectionUtils.java rename to common/src/main/java/org/zhdev/varioutil/util/CollectionUtils.java index eb0c4eb..8123340 100644 --- a/common/src/main/java/net/zhira/varioutil/util/CollectionUtils.java +++ b/common/src/main/java/org/zhdev/varioutil/util/CollectionUtils.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.util; +package org.zhdev.varioutil.util; import java.util.Collection; import java.util.List; diff --git a/common/src/main/java/net/zhira/varioutil/util/DateTimeUtils.java b/common/src/main/java/org/zhdev/varioutil/util/DateTimeUtils.java similarity index 99% rename from common/src/main/java/net/zhira/varioutil/util/DateTimeUtils.java rename to common/src/main/java/org/zhdev/varioutil/util/DateTimeUtils.java index a82cfe1..3d1f791 100644 --- a/common/src/main/java/net/zhira/varioutil/util/DateTimeUtils.java +++ b/common/src/main/java/org/zhdev/varioutil/util/DateTimeUtils.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.util; +package org.zhdev.varioutil.util; import java.time.*; import java.time.format.DateTimeFormatter; diff --git a/common/src/main/java/net/zhira/varioutil/util/EnumUtils.java b/common/src/main/java/org/zhdev/varioutil/util/EnumUtils.java similarity index 98% rename from common/src/main/java/net/zhira/varioutil/util/EnumUtils.java rename to common/src/main/java/org/zhdev/varioutil/util/EnumUtils.java index a04c031..a8b3b36 100644 --- a/common/src/main/java/net/zhira/varioutil/util/EnumUtils.java +++ b/common/src/main/java/org/zhdev/varioutil/util/EnumUtils.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.util; +package org.zhdev.varioutil.util; public class EnumUtils { private static > T[] getValues(T eNum) { diff --git a/common/src/main/java/net/zhira/varioutil/util/ReflectionUtils.java b/common/src/main/java/org/zhdev/varioutil/util/ReflectionUtils.java similarity index 90% rename from common/src/main/java/net/zhira/varioutil/util/ReflectionUtils.java rename to common/src/main/java/org/zhdev/varioutil/util/ReflectionUtils.java index 5f9e433..c44a143 100644 --- a/common/src/main/java/net/zhira/varioutil/util/ReflectionUtils.java +++ b/common/src/main/java/org/zhdev/varioutil/util/ReflectionUtils.java @@ -1,7 +1,7 @@ -package net.zhira.varioutil.util; +package org.zhdev.varioutil.util; -import net.zhira.varioutil.reflection.FieldSearcher; -import net.zhira.varioutil.reflection.MethodSearcher; +import org.zhdev.varioutil.reflection.FieldSearcher; +import org.zhdev.varioutil.reflection.MethodSearcher; import java.io.File; import java.io.IOException; @@ -61,8 +61,7 @@ public class ReflectionUtils { for (String typeName : typeNames) { try { return Class.forName(typeName); - } catch (ClassNotFoundException ignored) { - } + } catch (ClassNotFoundException ignored) {} } throw new NoClassDefFoundError(String.join(", ", typeNames)); @@ -82,12 +81,11 @@ public class ReflectionUtils { for (String typeName : typeNames) { try { return Class.forName(packageName + '.' + typeName); - } catch (ClassNotFoundException ignored) { - } + } catch (ClassNotFoundException ignored) {} } } - throw new NoClassDefFoundError(String.join(", ", typeNames) + " in " + String.join(", ", packageNames)); + throw new NoClassDefFoundError(String.join(", ", typeNames) + " in " + String.join(", ", packageNames)); } public static Method getMethod(Class type, String methodName, Class... parameterTypes) throws NoSuchMethodError { @@ -105,8 +103,7 @@ public class ReflectionUtils { return checkMethodType(getMethod0(type, methodName, parameterTypes), returnType); } catch (IllegalStateException e) { exception = e; - } catch (NoSuchMethodException ignored) { - } + } catch (NoSuchMethodException ignored) { } } if (parameterTypes.length > 0) { @@ -147,8 +144,7 @@ public class ReflectionUtils { return checkFieldType(getField0(type, fieldName), fieldType); } catch (IllegalStateException e) { exception = e; - } catch (NoSuchFieldException ignored) { - } + } catch (NoSuchFieldException ignored) {} } if (exception != null) { @@ -158,7 +154,7 @@ public class ReflectionUtils { throw new NoSuchFieldError(String.join(", ", fieldNames) + " in " + type); } - public static Object getFieldValue(Object instance, Field field) throws IllegalStateException { + public static Object getFieldValue(Field field, Object instance) throws IllegalStateException { try { return field.get(instance); } catch (IllegalAccessException e) { @@ -166,7 +162,7 @@ public class ReflectionUtils { } } - public static void setFieldValue(Object instance, Field field, Object value) throws IllegalStateException { + public static void setFieldValue(Field field, Object instance, Object value) throws IllegalStateException { try { field.set(instance, value); } catch (IllegalAccessException e) { @@ -190,8 +186,7 @@ public class ReflectionUtils { if (packagePath.equals(packageName)) { try { consumer.accept(loader.loadClass(link)); - } catch (ClassNotFoundException ignored) { - } + } catch (ClassNotFoundException ignored) {} } } } diff --git a/common/src/main/java/net/zhira/varioutil/util/ResourceUtils.java b/common/src/main/java/org/zhdev/varioutil/util/ResourceUtils.java similarity index 60% rename from common/src/main/java/net/zhira/varioutil/util/ResourceUtils.java rename to common/src/main/java/org/zhdev/varioutil/util/ResourceUtils.java index 575a999..7fe8e21 100644 --- a/common/src/main/java/net/zhira/varioutil/util/ResourceUtils.java +++ b/common/src/main/java/org/zhdev/varioutil/util/ResourceUtils.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.util; +package org.zhdev.varioutil.util; import java.io.*; import java.net.URL; @@ -26,44 +26,41 @@ public class ResourceUtils { return getResource(path, ResourceUtils.class.getClassLoader()); } - public static boolean saveResource(InputStream inputStream, Path outPath) throws IOException { - Path parent = outPath.getParent(); - if (parent != null && Files.notExists(parent)) { - Files.createDirectories(parent); + public static boolean saveResource(String resourcePath, Path outPath, ClassLoader loader) throws IllegalStateException { + if (resourcePath == null || resourcePath.equals("")) { + return false; } - if (Files.notExists(outPath) || Files.size(outPath) == 0) { - OutputStream outputStream = Files.newOutputStream(outPath); - byte[] buf = new byte[1024]; - int len; - while ((len = inputStream.read(buf)) > 0) { - outputStream.write(buf, 0, len); + resourcePath = resourcePath.replace('\\', '/'); + InputStream in = getResource(resourcePath, loader); + if (in == null) { + return false; + } + + try { + Path parent = outPath.getParent(); + if (parent != null && Files.notExists(parent)) { + Files.createDirectories(parent); } - outputStream.close(); - inputStream.close(); - return true; + + if (Files.notExists(outPath) || Files.size(outPath) == 0) { + OutputStream stream = Files.newOutputStream(outPath); + byte[] buf = new byte[1024]; + int len; + while ((len = in.read(buf)) > 0) { + stream.write(buf, 0, len); + } + stream.close(); + in.close(); + return true; + } + } catch (IOException e) { + throw new IllegalStateException("Could not save resource " + resourcePath + " to " + outPath, e); } return false; } - public static boolean saveResource(String resourcePath, Path outPath, ClassLoader loader) throws IllegalStateException { - if (resourcePath == null || resourcePath.isEmpty()) { - return false; - } - - resourcePath = resourcePath.replace('\\', '/'); - InputStream inputStream = getResource(resourcePath, loader); - if (inputStream == null) { - return false; - } - - try { - return saveResource(inputStream, outPath); - } catch (IOException e) { - throw new IllegalStateException("Could not save resource " + resourcePath + " to " + outPath, e); - } - } public static boolean saveResource(String resourcePath, Path outPath) throws IllegalStateException { return saveResource(resourcePath, outPath, ResourceUtils.class.getClassLoader()); diff --git a/common/src/main/java/net/zhira/varioutil/util/StringUtils.java b/common/src/main/java/org/zhdev/varioutil/util/StringUtils.java similarity index 99% rename from common/src/main/java/net/zhira/varioutil/util/StringUtils.java rename to common/src/main/java/org/zhdev/varioutil/util/StringUtils.java index 1ff7e81..32617a8 100644 --- a/common/src/main/java/net/zhira/varioutil/util/StringUtils.java +++ b/common/src/main/java/org/zhdev/varioutil/util/StringUtils.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.util; +package org.zhdev.varioutil.util; import java.util.ArrayList; import java.util.Iterator; diff --git a/db/pom.xml b/db/pom.xml index 6cb6c2a..6f8c071 100644 --- a/db/pom.xml +++ b/db/pom.xml @@ -1,12 +1,9 @@ - - + 4.0.0 parent - net.zhira.varioutil + org.zhdev.varioutil 1.0-SNAPSHOT diff --git a/db/src/main/java/net/zhira/varioutil/sql/AbstractProvider.java b/db/src/main/java/org/zhdev/varioutil/sql/AbstractProvider.java similarity index 94% rename from db/src/main/java/net/zhira/varioutil/sql/AbstractProvider.java rename to db/src/main/java/org/zhdev/varioutil/sql/AbstractProvider.java index 8843c44..a0b83f6 100644 --- a/db/src/main/java/net/zhira/varioutil/sql/AbstractProvider.java +++ b/db/src/main/java/org/zhdev/varioutil/sql/AbstractProvider.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.sql; +package org.zhdev.varioutil.sql; import java.sql.Connection; import java.sql.SQLException; diff --git a/db/src/main/java/net/zhira/varioutil/sql/ConnectionProvider.java b/db/src/main/java/org/zhdev/varioutil/sql/ConnectionProvider.java similarity index 93% rename from db/src/main/java/net/zhira/varioutil/sql/ConnectionProvider.java rename to db/src/main/java/org/zhdev/varioutil/sql/ConnectionProvider.java index 1cdcdca..a3b0059 100644 --- a/db/src/main/java/net/zhira/varioutil/sql/ConnectionProvider.java +++ b/db/src/main/java/org/zhdev/varioutil/sql/ConnectionProvider.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.sql; +package org.zhdev.varioutil.sql; import java.sql.Connection; import java.sql.SQLException; diff --git a/db/src/main/java/net/zhira/varioutil/sql/H2Provider.java b/db/src/main/java/org/zhdev/varioutil/sql/H2Provider.java similarity index 72% rename from db/src/main/java/net/zhira/varioutil/sql/H2Provider.java rename to db/src/main/java/org/zhdev/varioutil/sql/H2Provider.java index 2b22bcd..cbee2a0 100644 --- a/db/src/main/java/net/zhira/varioutil/sql/H2Provider.java +++ b/db/src/main/java/org/zhdev/varioutil/sql/H2Provider.java @@ -1,6 +1,6 @@ -package net.zhira.varioutil.sql; +package org.zhdev.varioutil.sql; -import net.zhira.varioutil.util.SqlUtils; +import org.zhdev.varioutil.util.SqlUtils; public class H2Provider extends AbstractProvider { public H2Provider(String path, String username, String password) { diff --git a/db/src/main/java/net/zhira/varioutil/sql/MysqlProvider.java b/db/src/main/java/org/zhdev/varioutil/sql/MysqlProvider.java similarity index 77% rename from db/src/main/java/net/zhira/varioutil/sql/MysqlProvider.java rename to db/src/main/java/org/zhdev/varioutil/sql/MysqlProvider.java index ad7de21..919f858 100644 --- a/db/src/main/java/net/zhira/varioutil/sql/MysqlProvider.java +++ b/db/src/main/java/org/zhdev/varioutil/sql/MysqlProvider.java @@ -1,6 +1,6 @@ -package net.zhira.varioutil.sql; +package org.zhdev.varioutil.sql; -import net.zhira.varioutil.util.SqlUtils; +import org.zhdev.varioutil.util.SqlUtils; public class MysqlProvider extends AbstractProvider { public MysqlProvider(String address, String dbname, String username, String password, boolean ssl) { diff --git a/db/src/main/java/net/zhira/varioutil/sql/NullProvider.java b/db/src/main/java/org/zhdev/varioutil/sql/NullProvider.java similarity index 89% rename from db/src/main/java/net/zhira/varioutil/sql/NullProvider.java rename to db/src/main/java/org/zhdev/varioutil/sql/NullProvider.java index 8ff1efa..0b4c25b 100644 --- a/db/src/main/java/net/zhira/varioutil/sql/NullProvider.java +++ b/db/src/main/java/org/zhdev/varioutil/sql/NullProvider.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.sql; +package org.zhdev.varioutil.sql; import java.sql.Connection; @@ -9,6 +9,7 @@ class NullProvider implements ConnectionProvider { this.message = message; } + @Override public Connection getConnection() { throw new SqlException(message); diff --git a/db/src/main/java/net/zhira/varioutil/sql/SqlAdapter.java b/db/src/main/java/org/zhdev/varioutil/sql/SqlAdapter.java similarity index 97% rename from db/src/main/java/net/zhira/varioutil/sql/SqlAdapter.java rename to db/src/main/java/org/zhdev/varioutil/sql/SqlAdapter.java index f4b20e9..09ee96a 100644 --- a/db/src/main/java/net/zhira/varioutil/sql/SqlAdapter.java +++ b/db/src/main/java/org/zhdev/varioutil/sql/SqlAdapter.java @@ -1,6 +1,6 @@ -package net.zhira.varioutil.sql; +package org.zhdev.varioutil.sql; -import net.zhira.varioutil.util.CheckedFunction; +import org.zhdev.varioutil.util.CheckedFunction; import java.sql.PreparedStatement; import java.sql.ResultSet; diff --git a/db/src/main/java/net/zhira/varioutil/sql/SqlException.java b/db/src/main/java/org/zhdev/varioutil/sql/SqlException.java similarity index 90% rename from db/src/main/java/net/zhira/varioutil/sql/SqlException.java rename to db/src/main/java/org/zhdev/varioutil/sql/SqlException.java index 8eeaf60..4eb0e4c 100644 --- a/db/src/main/java/net/zhira/varioutil/sql/SqlException.java +++ b/db/src/main/java/org/zhdev/varioutil/sql/SqlException.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.sql; +package org.zhdev.varioutil.sql; public class SqlException extends RuntimeException { public SqlException() { diff --git a/db/src/main/java/net/zhira/varioutil/sql/SqliteProvider.java b/db/src/main/java/org/zhdev/varioutil/sql/SqliteProvider.java similarity index 68% rename from db/src/main/java/net/zhira/varioutil/sql/SqliteProvider.java rename to db/src/main/java/org/zhdev/varioutil/sql/SqliteProvider.java index 94f5841..40c2e09 100644 --- a/db/src/main/java/net/zhira/varioutil/sql/SqliteProvider.java +++ b/db/src/main/java/org/zhdev/varioutil/sql/SqliteProvider.java @@ -1,6 +1,6 @@ -package net.zhira.varioutil.sql; +package org.zhdev.varioutil.sql; -import net.zhira.varioutil.util.SqlUtils; +import org.zhdev.varioutil.util.SqlUtils; public class SqliteProvider extends AbstractProvider { public SqliteProvider(String path) { diff --git a/db/src/main/java/net/zhira/varioutil/util/CheckedFunction.java b/db/src/main/java/org/zhdev/varioutil/util/CheckedFunction.java similarity index 76% rename from db/src/main/java/net/zhira/varioutil/util/CheckedFunction.java rename to db/src/main/java/org/zhdev/varioutil/util/CheckedFunction.java index 8c14d40..fe399a7 100755 --- a/db/src/main/java/net/zhira/varioutil/util/CheckedFunction.java +++ b/db/src/main/java/org/zhdev/varioutil/util/CheckedFunction.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.util; +package org.zhdev.varioutil.util; @FunctionalInterface public interface CheckedFunction { diff --git a/db/src/main/java/net/zhira/varioutil/util/SqlUtils.java b/db/src/main/java/org/zhdev/varioutil/util/SqlUtils.java similarity index 84% rename from db/src/main/java/net/zhira/varioutil/util/SqlUtils.java rename to db/src/main/java/org/zhdev/varioutil/util/SqlUtils.java index f013d04..738d7a4 100644 --- a/db/src/main/java/net/zhira/varioutil/util/SqlUtils.java +++ b/db/src/main/java/org/zhdev/varioutil/util/SqlUtils.java @@ -1,11 +1,8 @@ -package net.zhira.varioutil.util; +package org.zhdev.varioutil.util; -import net.zhira.varioutil.sql.SqlException; +import org.zhdev.varioutil.sql.SqlException; import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -18,22 +15,13 @@ public class SqlUtils { private static boolean h2; private static boolean mysql; - private static String encodeUrlValue(String value) throws UnsupportedEncodingException { - return URLEncoder.encode(value, StandardCharsets.UTF_8.toString()); - } - public static Connection createMysqlConnection(String address, String dbname, String username, String password, boolean ssl) throws SqlException { try { - String[] addressParts = address.split(":", 2); - int port; - if (addressParts.length > 1) { - port = Integer.parseInt(encodeUrlValue(addressParts[1])); - address = addressParts[0]; - } else { - port = 3306; + if (!address.contains(":")) { + address = address + ":3306"; } - return DriverManager.getConnection("jdbc:mysql://" + encodeUrlValue(address) + ':' + port + '/' + encodeUrlValue(dbname) + "?useSSL=" + ssl, username, password); - } catch (SQLException | UnsupportedEncodingException e) { + return DriverManager.getConnection("jdbc:mysql://" + address + '/' + dbname + "?useSSL=" + ssl, username, password); + } catch (SQLException e) { throw new SqlException(e); } } diff --git a/io/pom.xml b/io/pom.xml index ed17190..80ba09b 100644 --- a/io/pom.xml +++ b/io/pom.xml @@ -1,12 +1,9 @@ - - + 4.0.0 parent - net.zhira.varioutil + org.zhdev.varioutil 1.0-SNAPSHOT diff --git a/io/src/main/java/net/zhira/varioutil/config/Config.java b/io/src/main/java/org/zhdev/varioutil/config/Config.java similarity index 98% rename from io/src/main/java/net/zhira/varioutil/config/Config.java rename to io/src/main/java/org/zhdev/varioutil/config/Config.java index fe7da4a..0dae20a 100644 --- a/io/src/main/java/net/zhira/varioutil/config/Config.java +++ b/io/src/main/java/org/zhdev/varioutil/config/Config.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.config; +package org.zhdev.varioutil.config; import java.io.*; import java.nio.charset.StandardCharsets; diff --git a/io/src/main/java/net/zhira/varioutil/config/ConfigException.java b/io/src/main/java/org/zhdev/varioutil/config/ConfigException.java similarity index 90% rename from io/src/main/java/net/zhira/varioutil/config/ConfigException.java rename to io/src/main/java/org/zhdev/varioutil/config/ConfigException.java index 55b80bd..58d78cf 100644 --- a/io/src/main/java/net/zhira/varioutil/config/ConfigException.java +++ b/io/src/main/java/org/zhdev/varioutil/config/ConfigException.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.config; +package org.zhdev.varioutil.config; public class ConfigException extends RuntimeException { public ConfigException() { diff --git a/io/src/main/java/net/zhira/varioutil/config/ConfigSection.java b/io/src/main/java/org/zhdev/varioutil/config/ConfigSection.java similarity index 99% rename from io/src/main/java/net/zhira/varioutil/config/ConfigSection.java rename to io/src/main/java/org/zhdev/varioutil/config/ConfigSection.java index de6eee5..feb05e4 100644 --- a/io/src/main/java/net/zhira/varioutil/config/ConfigSection.java +++ b/io/src/main/java/org/zhdev/varioutil/config/ConfigSection.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.config; +package org.zhdev.varioutil.config; import java.util.List; import java.util.Map; diff --git a/io/src/main/java/net/zhira/varioutil/config/ConfigSectionNode.java b/io/src/main/java/org/zhdev/varioutil/config/ConfigSectionNode.java similarity index 90% rename from io/src/main/java/net/zhira/varioutil/config/ConfigSectionNode.java rename to io/src/main/java/org/zhdev/varioutil/config/ConfigSectionNode.java index 7339292..b38c609 100644 --- a/io/src/main/java/net/zhira/varioutil/config/ConfigSectionNode.java +++ b/io/src/main/java/org/zhdev/varioutil/config/ConfigSectionNode.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.config; +package org.zhdev.varioutil.config; final class ConfigSectionNode { Object value; diff --git a/io/src/main/java/net/zhira/varioutil/config/MapConfigSection.java b/io/src/main/java/org/zhdev/varioutil/config/MapConfigSection.java similarity index 99% rename from io/src/main/java/net/zhira/varioutil/config/MapConfigSection.java rename to io/src/main/java/org/zhdev/varioutil/config/MapConfigSection.java index 5d2a427..f25c97c 100644 --- a/io/src/main/java/net/zhira/varioutil/config/MapConfigSection.java +++ b/io/src/main/java/org/zhdev/varioutil/config/MapConfigSection.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.config; +package org.zhdev.varioutil.config; import java.util.*; import java.util.function.Function; diff --git a/io/src/main/java/net/zhira/varioutil/config/YamlConfig.java b/io/src/main/java/org/zhdev/varioutil/config/YamlConfig.java similarity index 99% rename from io/src/main/java/net/zhira/varioutil/config/YamlConfig.java rename to io/src/main/java/org/zhdev/varioutil/config/YamlConfig.java index d257297..d89b157 100644 --- a/io/src/main/java/net/zhira/varioutil/config/YamlConfig.java +++ b/io/src/main/java/org/zhdev/varioutil/config/YamlConfig.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.config; +package org.zhdev.varioutil.config; import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.LoaderOptions; diff --git a/io/src/main/java/net/zhira/varioutil/config/YamlConfigConstructor.java b/io/src/main/java/org/zhdev/varioutil/config/YamlConfigConstructor.java similarity index 91% rename from io/src/main/java/net/zhira/varioutil/config/YamlConfigConstructor.java rename to io/src/main/java/org/zhdev/varioutil/config/YamlConfigConstructor.java index ae0dfa4..7444f79 100644 --- a/io/src/main/java/net/zhira/varioutil/config/YamlConfigConstructor.java +++ b/io/src/main/java/org/zhdev/varioutil/config/YamlConfigConstructor.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.config; +package org.zhdev.varioutil.config; import org.yaml.snakeyaml.LoaderOptions; import org.yaml.snakeyaml.constructor.SafeConstructor; diff --git a/io/src/main/java/net/zhira/varioutil/config/YamlConfigRepresenter.java b/io/src/main/java/org/zhdev/varioutil/config/YamlConfigRepresenter.java similarity index 86% rename from io/src/main/java/net/zhira/varioutil/config/YamlConfigRepresenter.java rename to io/src/main/java/org/zhdev/varioutil/config/YamlConfigRepresenter.java index 6f84666..dc563d0 100644 --- a/io/src/main/java/net/zhira/varioutil/config/YamlConfigRepresenter.java +++ b/io/src/main/java/org/zhdev/varioutil/config/YamlConfigRepresenter.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.config; +package org.zhdev.varioutil.config; import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.representer.Representer; diff --git a/misc/pom.xml b/misc/pom.xml index 9a909a8..0328263 100644 --- a/misc/pom.xml +++ b/misc/pom.xml @@ -1,12 +1,9 @@ - - + 4.0.0 parent - net.zhira.varioutil + org.zhdev.varioutil 1.0-SNAPSHOT diff --git a/misc/src/main/java/net/zhira/varioutil/PreparedPlugin.java b/misc/src/main/java/org/zhdev/varioutil/PreparedPlugin.java similarity index 53% rename from misc/src/main/java/net/zhira/varioutil/PreparedPlugin.java rename to misc/src/main/java/org/zhdev/varioutil/PreparedPlugin.java index 024f935..cc50f37 100644 --- a/misc/src/main/java/net/zhira/varioutil/PreparedPlugin.java +++ b/misc/src/main/java/org/zhdev/varioutil/PreparedPlugin.java @@ -1,16 +1,15 @@ -package net.zhira.varioutil; +package org.zhdev.varioutil; -import net.zhira.varioutil.config.Config; -import net.zhira.varioutil.config.ConfigException; -import net.zhira.varioutil.language.Language; -import net.zhira.varioutil.util.ResourceUtils; -import net.zhira.varioutil.sql.SqlAdapter; +import org.zhdev.varioutil.config.Config; +import org.zhdev.varioutil.config.ConfigException; +import org.zhdev.varioutil.language.Language; +import org.zhdev.varioutil.sql.SqlAdapter; +import org.zhdev.varioutil.util.ResourceUtils; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.logging.Logger; public interface PreparedPlugin { @@ -24,35 +23,26 @@ public interface PreparedPlugin { Path getDataDirectory(); - default Path loadConfig(Config config, String pathname, boolean resourcePreload) { + default Path loadConfig(Config config, String pathname) { ClassLoader classLoader = getClass().getClassLoader(); - Path path = Paths.get(getDataDirectory().toString() + '/' + pathname); - try (InputStream stream = ResourceUtils.getResource(pathname, classLoader)) { - if (stream != null) { - if (resourcePreload) { - config.load(stream); - } + InputStream stream = ResourceUtils.getResource(pathname, classLoader); + if (stream != null) { + config.load(stream); + } - if (Files.notExists(path) || Files.size(path) == 0) { - ResourceUtils.saveResource(stream, path); + Path path = config.load(getDataDirectory().toString() + '/' + pathname); + try { + if (Files.notExists(path) || Files.size(path) == 0) { + if (ResourceUtils.saveResource(pathname, path, classLoader)) { + config.load(path); } } - - if (Files.exists(path)) config.load(path); } catch (IOException e) { throw new ConfigException(e); } return path; } - default Path loadConfig(Config config, String pathname) { - return loadConfig(config, pathname, false); - } - - default Path loadConfig(Config config, boolean resourcePreload) { - return loadConfig(config, config.getKey(), resourcePreload); - } - default Path loadConfig(Config config) { return loadConfig(config, config.getKey()); } diff --git a/misc/src/main/java/org/zhdev/varioutil/color/ChatColor.java b/misc/src/main/java/org/zhdev/varioutil/color/ChatColor.java new file mode 100644 index 0000000..892885d --- /dev/null +++ b/misc/src/main/java/org/zhdev/varioutil/color/ChatColor.java @@ -0,0 +1,49 @@ +package org.zhdev.varioutil.color; + +public interface ChatColor { + char CHAR = '§'; + + NamedChatColor BLACK = new NamedChatColor(0x000000, "black", '0'); + NamedChatColor DARK_BLUE = new NamedChatColor(0x0000aa, "dark_blue", '1'); + NamedChatColor DARK_GREEN = new NamedChatColor(0x00aa00, "dark_green", '2'); + NamedChatColor DARK_AQUA = new NamedChatColor(0x00aaaa, "dark_aqua", '3'); + NamedChatColor DARK_RED = new NamedChatColor(0xaa0000, "dark_red", '4'); + NamedChatColor DARK_PURPLE = new NamedChatColor(0xaa00aa, "dark_purple", '5'); + NamedChatColor GOLD = new NamedChatColor(0xffaa00, "gold", '6'); + NamedChatColor GRAY = new NamedChatColor(0xaaaaaa, "gray", '7'); + NamedChatColor DARK_GRAY = new NamedChatColor(0x555555, "dark_gray", '8'); + NamedChatColor BLUE = new NamedChatColor(0x5555ff, "blue", '9'); + NamedChatColor GREEN = new NamedChatColor(0x55ff55, "green", 'a'); + NamedChatColor AQUA = new NamedChatColor(0x55ffff, "aqua", 'b'); + NamedChatColor RED = new NamedChatColor(0xff5555, "red", 'c'); + NamedChatColor LIGHT_PURPLE = new NamedChatColor(0xff55ff, "light_purple", 'd'); + NamedChatColor YELLOW = new NamedChatColor(0xffff55, "yellow", 'e'); + NamedChatColor WHITE = new NamedChatColor(0xffffff, "white", 'f'); + + NamedChatColor OBFUSCATED = new NamedChatColor("obfuscated", 'k'); + NamedChatColor BOLD = new NamedChatColor("bold", 'l'); + NamedChatColor STRIKETHROUGH = new NamedChatColor("strikethrough", 'm'); + NamedChatColor UNDERLINED = new NamedChatColor("underlined", 'n'); + NamedChatColor ITALIC = new NamedChatColor("italic", 'o'); + NamedChatColor RESET = new NamedChatColor("reset", 'r'); + + int getValue(); + + String getName(); + + static ChatColor valueOf(int value) { + return ChatColorCache.BY_VALUE.computeIfAbsent(value, HexChatColor::new); + } + + static ChatColor valueOf(char code) { + return ChatColorCache.BY_CODE.get(code); + } + + static ChatColor valueOf(String name) { + return ChatColorCache.BY_NAME.get(name); + } + + static ChatColor[] values() { + return ChatColorCache.BY_NAME.values().toArray(new ChatColor[0]); + } +} diff --git a/misc/src/main/java/org/zhdev/varioutil/color/ChatColorCache.java b/misc/src/main/java/org/zhdev/varioutil/color/ChatColorCache.java new file mode 100644 index 0000000..1aa0be6 --- /dev/null +++ b/misc/src/main/java/org/zhdev/varioutil/color/ChatColorCache.java @@ -0,0 +1,11 @@ +package org.zhdev.varioutil.color; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +final class ChatColorCache { + static final Map BY_VALUE = new ConcurrentHashMap<>(); + static final Map BY_CODE = new LinkedHashMap<>(21); + static final Map BY_NAME = new LinkedHashMap<>(21); +} diff --git a/misc/src/main/java/org/zhdev/varioutil/color/HexChatColor.java b/misc/src/main/java/org/zhdev/varioutil/color/HexChatColor.java new file mode 100644 index 0000000..df84c31 --- /dev/null +++ b/misc/src/main/java/org/zhdev/varioutil/color/HexChatColor.java @@ -0,0 +1,48 @@ +package org.zhdev.varioutil.color; + +public class HexChatColor implements ChatColor { + final int value; + final String name; + + final String string; + + HexChatColor(int value, String name, String string) { + this.value = value; + this.name = name; + this.string = string; + } + + private HexChatColor(int value, String name) { + this(value, name, hexToCode(name)); + } + + HexChatColor(int value) { + this(value, "#" + Integer.toHexString(value)); + } + + public int getValue() { + return value; + } + + @Override + public String getName() { + return name; + } + + @Override + public String toString() { + return string; + } + + public static String hexToCode(String hexValue, char colorChar) { + StringBuilder builder = new StringBuilder().append(colorChar).append('x'); + for (int i = 0; i < hexValue.length(); i++) { + builder.append(colorChar).append(hexValue.charAt(i)); + } + return builder.toString(); + } + + public static String hexToCode(String hexValue) { + return hexToCode(hexValue, CHAR); + } +} diff --git a/misc/src/main/java/org/zhdev/varioutil/color/NamedChatColor.java b/misc/src/main/java/org/zhdev/varioutil/color/NamedChatColor.java new file mode 100644 index 0000000..8f650c5 --- /dev/null +++ b/misc/src/main/java/org/zhdev/varioutil/color/NamedChatColor.java @@ -0,0 +1,22 @@ +package org.zhdev.varioutil.color; + +public final class NamedChatColor extends HexChatColor { + private final char code; + + NamedChatColor(int value, String name, char code) { + super(value, name, String.valueOf(CHAR) + code); + this.code = code; + + if (value != -1) ChatColorCache.BY_VALUE.put(value, this); + ChatColorCache.BY_CODE.put(code, this); + ChatColorCache.BY_NAME.put(name, this); + } + + NamedChatColor(String name, char code) { + this(-1, name, code); + } + + public char getCode() { + return code; + } +} diff --git a/misc/src/main/java/org/zhdev/varioutil/component/ClickEvent.java b/misc/src/main/java/org/zhdev/varioutil/component/ClickEvent.java new file mode 100755 index 0000000..3913d21 --- /dev/null +++ b/misc/src/main/java/org/zhdev/varioutil/component/ClickEvent.java @@ -0,0 +1,20 @@ +package org.zhdev.varioutil.component; + +public enum ClickEvent { + OPEN_URL("open_url"), + RUN_COMMAND("run_command"), + SUGGEST_COMMAND("suggest_command"), + CHANGE_PAGE("change_page"), + COPY_TO_CLIPBOARD("copy_to_clipboard"); + + private final String value; + + ClickEvent(String value) { + this.value = value; + } + + @Override + public String toString() { + return value; + } +} diff --git a/misc/src/main/java/org/zhdev/varioutil/component/Component.java b/misc/src/main/java/org/zhdev/varioutil/component/Component.java new file mode 100755 index 0000000..b5f3a63 --- /dev/null +++ b/misc/src/main/java/org/zhdev/varioutil/component/Component.java @@ -0,0 +1,400 @@ +package org.zhdev.varioutil.component; + +import org.zhdev.varioutil.color.ChatColor; + +import java.util.*; + +public final class Component { + public static final Component EMPTY = new Component(ComponentType.TEXT, ""); + + private final ComponentType type; + + private final String value; + + private final Boolean bold; + private final Boolean italic; + private final Boolean underlined; + private final Boolean strikethrough; + private final Boolean obfuscated; + + private final MinecraftFont font; + private final ChatColor color; + + private final String insertion; + + private final ClickEvent clickEvent; + private final String clickEventValue; + + private final HoverEvent hoverEvent; + private final Component[] hoverEventValue; + + private final Component[] extra; + private final Component[] with; + + public Component(ComponentType type, String value, Boolean bold, Boolean italic, Boolean underlined, Boolean strikethrough, Boolean obfuscated, MinecraftFont font, ChatColor color, String insertion, ClickEvent clickEvent, String clickEventValue, HoverEvent hoverEvent, Component[] hoverEventValue, Component[] extra, Component[] with) { + this.type = type; + this.value = value; + this.bold = bold; + this.italic = italic; + this.underlined = underlined; + this.strikethrough = strikethrough; + this.obfuscated = obfuscated; + this.font = font; + this.color = color; + this.insertion = insertion; + this.clickEvent = clickEvent; + this.clickEventValue = clickEventValue; + this.hoverEvent = hoverEvent; + this.hoverEventValue = hoverEventValue; + this.extra = extra; + this.with = with; + } + + public Component(String value, Boolean bold, Boolean italic, Boolean underlined, Boolean strikethrough, Boolean obfuscated, ChatColor color, ClickEvent clickEvent, String clickEventValue) { + this(ComponentType.TEXT, value, bold, italic, underlined, strikethrough, obfuscated, null, color, null, clickEvent, clickEventValue, null, null, null, null); + } + + public Component(String value, Boolean bold, Boolean italic, Boolean underlined, Boolean strikethrough, Boolean obfuscated, ChatColor color) { + this(value, bold, italic, underlined, strikethrough, obfuscated, color, null, null); + } + + public Component(ComponentType type, String value) { + this(type, value, null, null, null, null, null, null, null, null, null, null, null, null, null, null); + } + + public ComponentType getType() { + return type; + } + + public String getValue() { + return value; + } + + public Boolean getBold() { + return bold; + } + + public Boolean getItalic() { + return italic; + } + + public Boolean getUnderlined() { + return underlined; + } + + public Boolean getStrikethrough() { + return strikethrough; + } + + public Boolean getObfuscated() { + return obfuscated; + } + + public MinecraftFont getFont() { + return font; + } + + public ChatColor getColor() { + return color; + } + + public String getInsertion() { + return insertion; + } + + public ClickEvent getClickEvent() { + return clickEvent; + } + + public String getClickEventValue() { + return clickEventValue; + } + + public HoverEvent getHoverEvent() { + return hoverEvent; + } + + public Component[] getHoverEventValue() { + return hoverEventValue; + } + + public Component[] getExtra() { + return extra; + } + + public Component[] getWith() { + return with; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Component component = (Component) o; + + if (type != component.type) return false; + if (!Objects.equals(value, component.value)) return false; + if (!Objects.equals(bold, component.bold)) return false; + if (!Objects.equals(italic, component.italic)) return false; + if (!Objects.equals(underlined, component.underlined)) return false; + if (!Objects.equals(strikethrough, component.strikethrough)) + return false; + if (!Objects.equals(obfuscated, component.obfuscated)) return false; + if (font != component.font) return false; + if (!Objects.equals(color, component.color)) return false; + if (!Objects.equals(insertion, component.insertion)) return false; + if (clickEvent != component.clickEvent) return false; + if (!Objects.equals(clickEventValue, component.clickEventValue)) + return false; + if (hoverEvent != component.hoverEvent) return false; + if (!Arrays.equals(hoverEventValue, component.hoverEventValue)) return false; + if (!Arrays.equals(extra, component.extra)) return false; + return Arrays.equals(with, component.with); + } + + @Override + public int hashCode() { + int result = type != null ? type.hashCode() : 0; + result = 31 * result + (value != null ? value.hashCode() : 0); + result = 31 * result + (bold != null ? bold.hashCode() : 0); + result = 31 * result + (italic != null ? italic.hashCode() : 0); + result = 31 * result + (underlined != null ? underlined.hashCode() : 0); + result = 31 * result + (strikethrough != null ? strikethrough.hashCode() : 0); + result = 31 * result + (obfuscated != null ? obfuscated.hashCode() : 0); + result = 31 * result + (font != null ? font.hashCode() : 0); + result = 31 * result + (color != null ? color.hashCode() : 0); + result = 31 * result + (insertion != null ? insertion.hashCode() : 0); + result = 31 * result + (clickEvent != null ? clickEvent.hashCode() : 0); + result = 31 * result + (clickEventValue != null ? clickEventValue.hashCode() : 0); + result = 31 * result + (hoverEvent != null ? hoverEvent.hashCode() : 0); + result = 31 * result + Arrays.hashCode(hoverEventValue); + result = 31 * result + Arrays.hashCode(extra); + result = 31 * result + Arrays.hashCode(with); + return result; + } + + @Override + public String toString() { + return "Component{" + "type=" + type + ", value='" + value + "', bold=" + bold + ", italic=" + italic + ", underlined=" + underlined + ", strikethrough=" + strikethrough + ", obfuscated=" + obfuscated + ", font=" + font + ", color=" + color + ", insertion='" + insertion + "', clickEvent=" + clickEvent + ", clickEventValue='" + clickEventValue + "', hoverEvent=" + hoverEvent + ", hoverEventValue=" + Arrays.toString(hoverEventValue) + ", extra=" + Arrays.toString(extra) + ", with=" + Arrays.toString(with) + '}'; + } + + public static Builder of(String value) { + return new Builder(value); + } + + public static Builder textOf(String value) { + return new Builder(value).type(ComponentType.TEXT); + } + + public static Builder translateOf(String value) { + return of(value).type(ComponentType.TRANSLATE); + } + + public static Builder keybindOf(String value) { + return of(value).type(ComponentType.KEYBIND); + } + + public static Builder scoreOf(String value) { + return of(value).type(ComponentType.SCORE); + } + + public static Builder selectorOf(String value) { + return of(value).type(ComponentType.SELECTOR); + } + + public static final class Builder { + private final List components; + + private ComponentType type = ComponentType.TEXT; + private String value; + private Boolean bold; + private Boolean italic; + private Boolean underlined; + private Boolean strikethrough; + private Boolean obfuscated; + private MinecraftFont font; + private ChatColor color; + private String insertion; + private ClickEvent clickEvent; + private String clickEventValue; + private HoverEvent hoverEvent; + private Component[] hoverEventValue; + private Component[] extra; + private Component[] with; + + public Builder(String value, int initialCapacity) { + this.components = new ArrayList<>(initialCapacity); + this.value = value; + } + + public Builder(String value) { + this.components = new ArrayList<>(); + this.value = value; + } + + public Builder type(ComponentType type) { + this.type = type; + return this; + } + + public Builder value(String value) { + this.value = value; + return this; + } + + public Builder text(String value) { + this.type = ComponentType.TEXT; + this.value = value; + return this; + } + + public Builder translate(String value) { + this.type = ComponentType.TRANSLATE; + this.value = value; + return this; + } + + public Builder keybind(String value) { + this.type = ComponentType.KEYBIND; + this.value = value; + return this; + } + + public Builder score(String value) { + this.type = ComponentType.SCORE; + this.value = value; + return this; + } + + public Builder selector(String value) { + this.type = ComponentType.SELECTOR; + this.value = value; + return this; + } + + public Builder bold(Boolean bold) { + this.bold = bold; + return this; + } + + public Builder italic(Boolean italic) { + this.italic = italic; + return this; + } + + public Builder underlined(Boolean underlined) { + this.underlined = underlined; + return this; + } + + public Builder strikethrough(Boolean strikethrough) { + this.strikethrough = strikethrough; + return this; + } + + public Builder obfuscated(Boolean obfuscated) { + this.obfuscated = obfuscated; + return this; + } + + public Builder font(MinecraftFont font) { + this.font = font; + return this; + } + + public Builder color(ChatColor color) { + this.color = color; + return this; + } + + public Builder insertion(String insertion) { + this.insertion = insertion; + return this; + } + + public Builder click(ClickEvent clickEvent, String clickEventValue) { + this.clickEvent = clickEvent; + this.clickEventValue = clickEventValue; + return this; + } + + public Builder click(String clickEventValue) { + return click(ClickEvent.OPEN_URL, clickEventValue); + } + + public Builder hover(HoverEvent hoverEvent, Component... hoverEventValue) { + this.hoverEvent = hoverEvent; + this.hoverEventValue = hoverEventValue; + return this; + } + + public Builder hover(Component... hoverEventValue) { + return hover(HoverEvent.SHOW_TEXT, hoverEventValue); + } + + public Builder extra(Component... extra) { + this.extra = extra; + return this; + } + + public Builder with(Component... with) { + this.with = with; + return this; + } + + public Component create() { + return new Component(type, value, bold, italic, underlined, strikethrough, obfuscated, font, color, insertion, clickEvent, clickEventValue, hoverEvent, hoverEventValue, extra, with); + } + + public Builder push() { + Component component = create(); + components.add(component); + return this; + } + + public void add(Component component) { + this.components.add(component); + } + + public void addAll(Collection components) { + this.components.addAll(components); + } + + public void addAll(Component... components) { + Collections.addAll(this.components, components); + } + + public Builder append(String value) { + return push().value(value); + } + + public Builder appendText(String value) { + return push().type(ComponentType.TEXT).value(value); + } + + public Builder appendTranslate(String value) { + return push().type(ComponentType.TRANSLATE).value(value); + } + + public Builder appendKeybind(String value) { + return push().type(ComponentType.KEYBIND).value(value); + } + + public Builder appendScore(String value) { + return push().type(ComponentType.SCORE).value(value); + } + + public Builder appendSelector(String value) { + return push().type(ComponentType.SELECTOR).value(value); + } + + public Component[] result() { + return components.toArray(new Component[0]); + } + + public Component[] build() { + return push().result(); + } + } +} diff --git a/misc/src/main/java/org/zhdev/varioutil/component/ComponentSerializer.java b/misc/src/main/java/org/zhdev/varioutil/component/ComponentSerializer.java new file mode 100644 index 0000000..5d9075c --- /dev/null +++ b/misc/src/main/java/org/zhdev/varioutil/component/ComponentSerializer.java @@ -0,0 +1,385 @@ +package org.zhdev.varioutil.component; + +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.JSONValue; +import org.zhdev.varioutil.color.ChatColor; +import org.zhdev.varioutil.color.NamedChatColor; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class ComponentSerializer { + private static final Pattern URL_PATTERN = Pattern.compile("^(https?://)?([-\\w_.]{2,}\\.[a-z]{2,63})(/\\S*)?$"); + + private static String readAsString(JSONObject object, String key) { + Object element = object.get(key); + return element instanceof String ? (String) element : null; + } + + private static Boolean readAsBoolean(JSONObject object, String key) { + Object element = object.get(key); + return element instanceof Boolean ? (Boolean) element : null; + } + + private static > T readAsEnum(JSONObject object, Class enumClass) { + Object element = object.get("action"); + if (!(element instanceof String)) { + return null; + } + + try { + return Enum.valueOf(enumClass, ((String) element).toUpperCase()); + } catch (IllegalArgumentException e) { + return null; + } + } + + private static ChatColor readAsColor(JSONObject object) { + Object element = object.get("color"); + if (!(element instanceof String)) { + return null; + } + + String value = (String) element; + try { + return value.startsWith("#") ? ChatColor.valueOf(Integer.decode(value)) : ChatColor.valueOf(value.toLowerCase()); + } catch (IllegalArgumentException e) { + return null; + } + } + + private static JSONObject readAsObject(JSONObject object, String key) { + Object element = object.get(key); + return element instanceof JSONObject ? (JSONObject) element : null; + } + + private static void writeRawProperty(StringBuilder builder, String key, String value) { + builder.append(',').append('"').append(JSONValue.escape(key)).append('"').append(':').append(value); + } + + private static void writeRawPropertyWithoutComma(StringBuilder builder, String key, String value) { + builder.append('"').append(JSONValue.escape(key)).append('"').append(':').append(value); + } + + private static void writeProperty(StringBuilder builder, String key, Object value) { + if (value != null) writeRawProperty(builder, key, JSONValue.toJSONString(value)); + } + + private static void writePropertyWithoutComma(StringBuilder builder, String key, Object value) { + if (value != null) writeRawPropertyWithoutComma(builder, key, JSONValue.toJSONString(value)); + } + + private static void writeProperty(StringBuilder builder, ChatColor value) { + if (value != null) writeRawProperty(builder, "color", JSONValue.toJSONString(value.getName())); + } + + private static Component deserialize0(JSONObject object) { + ComponentType type; + + Object element; + if ((element = object.get("text")) != null) { + type = ComponentType.TEXT; + } else if ((element = object.get("translate")) != null) { + type = ComponentType.TRANSLATE; + } else if ((element = object.get("keybind")) != null) { + type = ComponentType.KEYBIND; + } else if ((element = object.get("score")) != null) { + type = ComponentType.SCORE; + } else if ((element = object.get("selector")) != null) { + type = ComponentType.SELECTOR; + } else { + return Component.EMPTY; + } + + String value = element.toString(); + Boolean bold = readAsBoolean(object, "bold"); + Boolean italic = readAsBoolean(object, "italic"); + Boolean underlined = readAsBoolean(object, "underlined"); + Boolean strikethrough = readAsBoolean(object, "strikethrough"); + Boolean obfuscated = readAsBoolean(object, "obfuscated"); + MinecraftFont font = MinecraftFont.byNamespace(readAsString(object, "font")); + ChatColor color = readAsColor(object); + String insertion = readAsString(object, "insertion"); + + ClickEvent clickEvent; + String clickEventValue; + + JSONObject clickEventObject = readAsObject(object, "clickEvent"); + if (clickEventObject != null) { + clickEvent = readAsEnum(clickEventObject, ClickEvent.class); + clickEventValue = readAsString(clickEventObject, "value"); + } else { + clickEvent = null; + clickEventValue = null; + } + + HoverEvent hoverEvent; + Component[] hoverEventValue; + + JSONObject hoverEventObject = readAsObject(object, "hoverEvent"); + if (hoverEventObject != null) { + hoverEvent = readAsEnum(hoverEventObject, HoverEvent.class); + hoverEventValue = deserialize(readAsObject(hoverEventObject, "value")); + } else { + hoverEvent = null; + hoverEventValue = null; + } + + Component[] extra = null; + + Object extraElement = object.get("extra"); + if (extraElement != null) { + extra = deserialize(extraElement); + } + + Component[] with = null; + + Object withElement = object.get("with"); + if (withElement != null) { + with = deserialize(withElement); + } + + return new Component(type, value, bold, italic, underlined, strikethrough, obfuscated, font, color, insertion, + clickEvent, clickEventValue, hoverEvent, hoverEventValue, extra, with); + } + + public static Component[] deserialize(Object json) { + Component[] components; + if (json instanceof JSONArray) { + JSONArray array = (JSONArray) json; + components = new Component[array.size()]; + for (int i = 0; i < components.length; i++) { + Object e = array.get(i); + if (!(e instanceof JSONObject)) { + continue; + } + components[i] = deserialize0((JSONObject) e); + } + } else if (json instanceof JSONObject) { + components = new Component[] {deserialize0((JSONObject) json)}; + } else { + components = new Component[] {Component.EMPTY}; + } + + return components; + } + + public static Component[] deserialize(String json) { + return deserialize(JSONValue.parse(json)); + } + + public static Component[] deserializeLegacy(String value, char colorChar, ChatColor resetColor) { + List components = new ArrayList<>(); + + StringBuilder valueBuilder = new StringBuilder(); + int lastIndex = value.length() - 1; + Matcher urlMatcher = URL_PATTERN.matcher(value); + + ChatColor color = null; + Boolean bold = null; + Boolean italic = null; + Boolean underlined = null; + Boolean strikethrough = null; + Boolean obfuscated = null; + + for (int i = 0; i < value.length(); i++) { + char currentChar = value.charAt(i); + if (currentChar == colorChar) { + int j = i + 1; + if (j > lastIndex) { + valueBuilder.append(colorChar); + break; + } + + ChatColor nextColor; + char nextChar = Character.toLowerCase(value.charAt(j)); + if (nextChar == 'x') { + StringBuilder hexValueBuilder = new StringBuilder(7).append('#'); + j++; + int n = j + 12; + if (n > lastIndex) { + valueBuilder.append(colorChar); + continue; + } + for (; j < n; j++) { + nextChar = value.charAt(j); + if (nextChar == colorChar) { + continue; + } + hexValueBuilder.append(nextChar); + } + + if (hexValueBuilder.length() < 7) { + valueBuilder.append(colorChar); + continue; + } + + try { + nextColor = ChatColor.valueOf(Integer.decode(hexValueBuilder.toString())); + if (nextColor == null) { + valueBuilder.append(colorChar); + continue; + } + } catch (NumberFormatException e) { + valueBuilder.append(colorChar); + continue; + } + i = j - 1; + } else { + nextColor = ChatColor.valueOf(nextChar); + if (nextColor == null) { + valueBuilder.append(colorChar); + continue; + } + i++; + } + + if (valueBuilder.length() > 0) { + components.add(new Component(valueBuilder.toString(), bold, italic, underlined, strikethrough, + obfuscated, color)); + valueBuilder.setLength(0); + } + + if (nextColor instanceof NamedChatColor) { + if (nextColor == NamedChatColor.BOLD) { + bold = true; + continue; + } else if (nextColor == NamedChatColor.ITALIC) { + italic = true; + continue; + } else if (nextColor == NamedChatColor.UNDERLINED) { + underlined = true; + continue; + } else if (nextColor == NamedChatColor.STRIKETHROUGH) { + strikethrough = true; + continue; + } else if (nextColor == NamedChatColor.OBFUSCATED) { + obfuscated = true; + continue; + } else if (nextColor == NamedChatColor.RESET) { + nextColor = resetColor; + } + } + + bold = null; + italic = null; + underlined = null; + strikethrough = null; + obfuscated = null; + color = nextColor; + continue; + } + + int nextIndex = value.indexOf(' ', i); + if (nextIndex == -1) { + nextIndex = value.length(); + } + + if (urlMatcher.region(i, nextIndex).find()) { + if (valueBuilder.length() > 0) { + components.add(new Component(valueBuilder.toString(), bold, italic, underlined, strikethrough, + obfuscated, color)); + valueBuilder.setLength(0); + } + + String proto = urlMatcher.group(1); + + StringBuilder urlBuilder = new StringBuilder(); + if (proto == null || proto.length() == 0) { + urlBuilder.append("http://"); + } else { + urlBuilder.append(proto); + } + + String domain = urlMatcher.group(2); + urlBuilder.append(domain); + + String uri = urlMatcher.group(3); + if (uri != null && uri.length() > 0) { + urlBuilder.append(uri); + } + + String url = urlBuilder.toString(); + components.add(new Component(urlMatcher.group(), bold, italic, underlined, strikethrough, obfuscated, + color, ClickEvent.OPEN_URL, url)); + + i += nextIndex - i - 1; + continue; + } + + valueBuilder.append(currentChar); + } + + components.add(new Component(valueBuilder.toString(), bold, italic, underlined, strikethrough, obfuscated, color)); + + return components.toArray(new Component[0]); + } + + public static Component[] deserializeLegacy(String value, char colorChar) { + return deserializeLegacy(value, colorChar, null); + } + + public static Component[] deserializeLegacy(String value) { + return deserializeLegacy(value, ChatColor.CHAR); + } + + public static String serialize(Component component) { + StringBuilder builder = new StringBuilder().append('{'); + String value = component.getValue(); + writePropertyWithoutComma(builder, component.getType().toString(), value); + writeProperty(builder, "bold", component.getBold()); + writeProperty(builder, "italic", component.getItalic()); + writeProperty(builder, "underlined", component.getUnderlined()); + writeProperty(builder, "strikethrough", component.getStrikethrough()); + writeProperty(builder, "obfuscated", component.getObfuscated()); + writeProperty(builder, "font", component.getFont()); + writeProperty(builder, component.getColor()); + writeProperty(builder, "insertion", component.getInsertion()); + + if (component.getClickEvent() != null) { + StringBuilder clickEventBuilder = new StringBuilder().append('{'); + writePropertyWithoutComma(clickEventBuilder, "action", component.getClickEvent().toString()); + writeProperty(clickEventBuilder, "value", component.getClickEventValue()); + writeRawProperty(builder, "clickEvent", clickEventBuilder.append('}').toString()); + } + + if (component.getHoverEvent() != null) { + StringBuilder hoverEventBuilder = new StringBuilder().append('{'); + writePropertyWithoutComma(hoverEventBuilder, "action", component.getHoverEvent().toString()); + writeRawProperty(hoverEventBuilder, "value", serialize(component.getHoverEventValue())); + writeRawProperty(builder, "hoverEvent", hoverEventBuilder.append('}').toString()); + } + + if (component.getExtra() != null) { + writeRawProperty(builder, "extra", serialize(component.getExtra())); + } + + if (component.getWith() != null) { + writeRawProperty(builder, "with", serialize(component.getWith())); + } + + return builder.append('}').toString(); + } + + public static String serialize(Component... components) { + if (components.length == 0) { + return "{\"text\":\"\"}"; + } else if (components.length == 1) { + return serialize(components[0]); + } else { + StringBuilder builder = new StringBuilder(); + for (Component component : components) { + if (builder.length() == 0) { + builder.append('['); + } else { + builder.append(','); + } + builder.append(serialize(component)); + } + return builder.append(']').toString(); + } + } +} diff --git a/misc/src/main/java/org/zhdev/varioutil/component/ComponentType.java b/misc/src/main/java/org/zhdev/varioutil/component/ComponentType.java new file mode 100755 index 0000000..b314ca3 --- /dev/null +++ b/misc/src/main/java/org/zhdev/varioutil/component/ComponentType.java @@ -0,0 +1,20 @@ +package org.zhdev.varioutil.component; + +public enum ComponentType { + TEXT("text"), + TRANSLATE("translate"), + KEYBIND("keybind"), + SCORE("score"), + SELECTOR("selector"); + + private final String key; + + ComponentType(String key) { + this.key = key; + } + + @Override + public String toString() { + return key; + } +} \ No newline at end of file diff --git a/misc/src/main/java/org/zhdev/varioutil/component/HoverEvent.java b/misc/src/main/java/org/zhdev/varioutil/component/HoverEvent.java new file mode 100755 index 0000000..a03ce3f --- /dev/null +++ b/misc/src/main/java/org/zhdev/varioutil/component/HoverEvent.java @@ -0,0 +1,18 @@ +package org.zhdev.varioutil.component; + +public enum HoverEvent { + SHOW_TEXT("show_text"), + SHOW_ITEM("show_item"), + SHOW_ENTITY("show_entity"); + + private final String value; + + HoverEvent(String value) { + this.value = value; + } + + @Override + public String toString() { + return value; + } +} diff --git a/misc/src/main/java/org/zhdev/varioutil/component/MinecraftFont.java b/misc/src/main/java/org/zhdev/varioutil/component/MinecraftFont.java new file mode 100755 index 0000000..c4c8c9d --- /dev/null +++ b/misc/src/main/java/org/zhdev/varioutil/component/MinecraftFont.java @@ -0,0 +1,32 @@ +package org.zhdev.varioutil.component; + +import java.util.LinkedHashMap; +import java.util.Map; + +public enum MinecraftFont { + UNIFORM("minecraft:uniform"), + ALT("minecraft:alt"), + DEFAULT("minecraft:default"); + private static final Map BY_NAMESPACE = new LinkedHashMap<>(); + + private final String value; + + MinecraftFont(String value) { + this.value = value; + } + + @Override + public String toString() { + return value; + } + + public static MinecraftFont byNamespace(String namespace) { + return BY_NAMESPACE.get(namespace); + } + + static { + for (MinecraftFont font : values()) { + BY_NAMESPACE.put(font.value, font); + } + } +} \ No newline at end of file diff --git a/misc/src/main/java/net/zhira/varioutil/util/ColorUtils.java b/misc/src/main/java/org/zhdev/varioutil/util/ColorUtils.java similarity index 79% rename from misc/src/main/java/net/zhira/varioutil/util/ColorUtils.java rename to misc/src/main/java/org/zhdev/varioutil/util/ColorUtils.java index 0f03f61..825f6f4 100644 --- a/misc/src/main/java/net/zhira/varioutil/util/ColorUtils.java +++ b/misc/src/main/java/org/zhdev/varioutil/util/ColorUtils.java @@ -1,21 +1,13 @@ -package net.zhira.varioutil.util; +package org.zhdev.varioutil.util; -import java.util.HashMap; -import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ColorUtils { public static final char COLOR_CHAR = '§'; - private static final Map COMPILED_PATTERNS = new HashMap<>(); - - private static Pattern getPattern(String regexp) { - return COMPILED_PATTERNS.computeIfAbsent(regexp, s -> Pattern.compile(regexp)); - } - public static void translateAlternateColorCodes(StringBuilder builder, char replaceChar) { - Matcher m = getPattern(Pattern.quote(String.valueOf(replaceChar)) + "(#[0-9a-fA-F]{6})").matcher(builder); + Matcher m = Pattern.compile(Pattern.quote(String.valueOf(replaceChar)) + "(#[0-9a-fA-F]{6})").matcher(builder); int start = 0; while (m.find(start)) { String hex = m.group(1); diff --git a/misc/src/main/java/net/zhira/varioutil/util/ConfigUtils.java b/misc/src/main/java/org/zhdev/varioutil/util/ConfigUtils.java similarity index 90% rename from misc/src/main/java/net/zhira/varioutil/util/ConfigUtils.java rename to misc/src/main/java/org/zhdev/varioutil/util/ConfigUtils.java index b6535aa..32ecdfb 100644 --- a/misc/src/main/java/net/zhira/varioutil/util/ConfigUtils.java +++ b/misc/src/main/java/org/zhdev/varioutil/util/ConfigUtils.java @@ -1,11 +1,12 @@ -package net.zhira.varioutil.util; +package org.zhdev.varioutil.util; -import net.zhira.varioutil.config.ConfigSection; -import net.zhira.varioutil.language.Language; -import net.zhira.varioutil.sql.*; +import org.zhdev.varioutil.config.ConfigSection; +import org.zhdev.varioutil.language.Language; +import org.zhdev.varioutil.sql.*; import java.io.File; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.function.Function; @@ -49,8 +50,8 @@ public class ConfigUtils { } case "mysql": { String address = config.getString("address", "127.0.0.1"); - String dbname = config.getString("dbname", System.getProperty("user.name")); - String username = config.getString("username", System.getProperty("user.name")); + String dbname = config.getString("dbname", System.getProperty("user.home")); + String username = config.getString("username", System.getProperty("user.home")); String password = config.getString("password"); boolean ssl = config.getBoolean("ssl", false); provider = new MysqlProvider(address, dbname, username, password, ssl); diff --git a/pom.xml b/pom.xml index 484bfe6..d605d45 100644 --- a/pom.xml +++ b/pom.xml @@ -1,10 +1,7 @@ - - + 4.0.0 - net.zhira.varioutil + org.zhdev.varioutil parent 1.0-SNAPSHOT pom @@ -24,13 +21,6 @@ all - - - zhira-repo - https://maven.zhira.net/repository/ - - - install @@ -117,6 +107,9 @@ org.apache.maven.plugins maven-deploy-plugin 2.7 + + local::default::file:${project.basedir}/target/deploy + deploy diff --git a/velocity/pom.xml b/velocity/pom.xml index 09e890a..3015227 100644 --- a/velocity/pom.xml +++ b/velocity/pom.xml @@ -1,24 +1,14 @@ - - + 4.0.0 parent - net.zhira.varioutil + org.zhdev.varioutil 1.0-SNAPSHOT velocity - - - papermc - https://repo.papermc.io/repository/maven-public/ - - - ${project.groupId} diff --git a/velocity/src/main/java/net/zhira/varioutil/VelocityPlugin.java b/velocity/src/main/java/org/zhdev/varioutil/VelocityPlugin.java similarity index 96% rename from velocity/src/main/java/net/zhira/varioutil/VelocityPlugin.java rename to velocity/src/main/java/org/zhdev/varioutil/VelocityPlugin.java index 85cd04b..b2aa9b6 100644 --- a/velocity/src/main/java/net/zhira/varioutil/VelocityPlugin.java +++ b/velocity/src/main/java/org/zhdev/varioutil/VelocityPlugin.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil; +package org.zhdev.varioutil; import com.velocitypowered.api.proxy.ProxyServer; import org.slf4j.Logger; diff --git a/velocity/src/main/java/net/zhira/varioutil/VelocityPreparedPlugin.java b/velocity/src/main/java/org/zhdev/varioutil/VelocityPreparedPlugin.java similarity index 80% rename from velocity/src/main/java/net/zhira/varioutil/VelocityPreparedPlugin.java rename to velocity/src/main/java/org/zhdev/varioutil/VelocityPreparedPlugin.java index df55cf9..bc61bd3 100644 --- a/velocity/src/main/java/net/zhira/varioutil/VelocityPreparedPlugin.java +++ b/velocity/src/main/java/org/zhdev/varioutil/VelocityPreparedPlugin.java @@ -1,17 +1,17 @@ -package net.zhira.varioutil; +package org.zhdev.varioutil; import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.proxy.ProxyInitializeEvent; import com.velocitypowered.api.event.proxy.ProxyShutdownEvent; import com.velocitypowered.api.proxy.ProxyServer; -import net.zhira.varioutil.config.ConfigSection; -import net.zhira.varioutil.language.Language; -import net.zhira.varioutil.util.ColorUtils; import org.slf4j.Logger; -import net.zhira.varioutil.config.Config; -import net.zhira.varioutil.config.VelocityTomlConfig; -import net.zhira.varioutil.sql.SqlAdapter; -import net.zhira.varioutil.util.ConfigUtils; +import org.zhdev.varioutil.config.Config; +import org.zhdev.varioutil.config.ConfigSection; +import org.zhdev.varioutil.config.VelocityTomlConfig; +import org.zhdev.varioutil.language.Language; +import org.zhdev.varioutil.sql.SqlAdapter; +import org.zhdev.varioutil.util.ColorUtils; +import org.zhdev.varioutil.util.ConfigUtils; import java.nio.file.Path; @@ -32,9 +32,9 @@ public abstract class VelocityPreparedPlugin extends VelocityPlugin implements P ConfigSection languageSection = defaultConfig.getOrCreateSection("language"); String locale = languageSection.getString("locale", "default"); Config languageConfig = new VelocityTomlConfig("language/" + locale + ".toml"); - loadConfig(languageConfig, "language.toml", true); - loadConfig(languageConfig, "language/default.toml", true); - loadConfig(languageConfig, true); + loadConfig(languageConfig, "language.toml"); + loadConfig(languageConfig, "language/default.toml"); + loadConfig(languageConfig); ConfigUtils.addPhrases(language, languageConfig, ColorUtils::translateAlternateColorCodes); } diff --git a/velocity/src/main/java/net/zhira/varioutil/config/VelocityTomlConfig.java b/velocity/src/main/java/org/zhdev/varioutil/config/VelocityTomlConfig.java similarity index 99% rename from velocity/src/main/java/net/zhira/varioutil/config/VelocityTomlConfig.java rename to velocity/src/main/java/org/zhdev/varioutil/config/VelocityTomlConfig.java index ffaf8f6..beb9483 100644 --- a/velocity/src/main/java/net/zhira/varioutil/config/VelocityTomlConfig.java +++ b/velocity/src/main/java/org/zhdev/varioutil/config/VelocityTomlConfig.java @@ -1,4 +1,4 @@ -package net.zhira.varioutil.config; +package org.zhdev.varioutil.config; import com.electronwill.nightconfig.core.CommentedConfig; import com.electronwill.nightconfig.toml.TomlFormat;