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;