diff --git a/.gitignore b/.gitignore
index 53ad6af..785cb64 100644
--- a/.gitignore
+++ b/.gitignore
@@ -43,4 +43,7 @@ v1_19_R1/target
.idea
# Build folder
-target
\ No newline at end of file
+target
+
+# Maven Dependency Reduced Pom
+core/dependency-reduced-pom.xml
\ No newline at end of file
diff --git a/core/dependency-reduced-pom.xml b/core/dependency-reduced-pom.xml
index cb568d5..31583cc 100644
--- a/core/dependency-reduced-pom.xml
+++ b/core/dependency-reduced-pom.xml
@@ -160,8 +160,21 @@
+
+ org.cache2k
+ cache2k-api
+ 2.6.1.Final
+ compile
+
+
+ org.cache2k
+ cache2k-core
+ 2.6.1.Final
+ runtime
+
+ 2.6.1.Final
UTF-8
diff --git a/core/pom.xml b/core/pom.xml
index 8cf7eec..b939201 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -15,6 +15,7 @@
UTF-8
+ 2.6.1.Final
@@ -114,6 +115,17 @@
jackson-dataformat-yaml
2.14.0-rc1
+
+ org.cache2k
+ cache2k-api
+ ${cache2k-version}
+
+
+ org.cache2k
+ cache2k-core
+ ${cache2k-version}
+ runtime
+
diff --git a/core/src/main/java/net/artelnatif/nicko/Nicko.java b/core/src/main/java/net/artelnatif/nicko/Nicko.java
index 4f4c1d1..4711c1f 100644
--- a/core/src/main/java/net/artelnatif/nicko/Nicko.java
+++ b/core/src/main/java/net/artelnatif/nicko/Nicko.java
@@ -12,6 +12,10 @@ import java.io.IOException;
import java.util.logging.Logger;
public class Nicko {
+ public static final String CHANNEL = "nicko:";
+ public static final String MESSAGE_UPDATE = CHANNEL + "update";
+ public static final String MESSAGE_FETCH = CHANNEL + "fetch";
+
private ConfigurationManager configManager;
private Logger logger;
private File dataFolder;
diff --git a/core/src/main/java/net/artelnatif/nicko/bukkit/NickoBukkit.java b/core/src/main/java/net/artelnatif/nicko/bukkit/NickoBukkit.java
index c5cccbf..f35c424 100644
--- a/core/src/main/java/net/artelnatif/nicko/bukkit/NickoBukkit.java
+++ b/core/src/main/java/net/artelnatif/nicko/bukkit/NickoBukkit.java
@@ -11,8 +11,6 @@ import net.artelnatif.nicko.bukkit.gui.items.main.ExitGUI;
import net.artelnatif.nicko.bukkit.i18n.Locale;
import net.artelnatif.nicko.bukkit.i18n.LocaleFileManager;
import net.artelnatif.nicko.bukkit.placeholder.PlaceHolderHook;
-import net.artelnatif.nicko.bukkit.messaging.PluginMessageEvent;
-import net.artelnatif.nicko.bungee.NickoBungee;
import net.artelnatif.nicko.config.Configuration;
import net.artelnatif.nicko.impl.Internals;
import net.artelnatif.nicko.impl.InternalsProvider;
@@ -50,31 +48,22 @@ public class NickoBukkit extends JavaPlugin {
plugin = this;
nicko.initBukkit(this);
- if (unitTesting) onUnitTestingStartup();
- else onPluginStartup();
- }
-
- public void onUnitTestingStartup() {
- if (!nicko.getDataStore().getStorage().getProvider().init()) {
- nicko.getDataStore().getStorage().setError(true);
- getLogger().severe("Failed to open persistence, data will NOT be saved!");
- }
- }
-
- public void onPluginStartup() {
- getLogger().info("Loading internals...");
- if (getInternals() == null) {
- getLogger().severe("Nicko could not find a valid implementation for this server version. Is your server supported?");
- nicko.getDataStore().getStorage().setError(true);
- getServer().getPluginManager().disablePlugin(this);
- }
-
- if (getServer().getPluginManager().isPluginEnabled(this) && !nicko.getDataStore().getStorage().isError()) {
+ if (!nicko.getDataStore().getStorage().isError()) {
getLogger().info("Loading persistence...");
if (!nicko.getDataStore().getStorage().getProvider().init()) {
nicko.getDataStore().getStorage().setError(true);
getLogger().severe("Failed to open persistence, data will NOT be saved!");
}
+ }
+
+ if (!unitTesting) {
+ getLogger().info("Loading internals...");
+ if (getInternals() == null) {
+ getLogger().severe("Nicko could not find a valid implementation for this server version. Is your server supported?");
+ nicko.getDataStore().getStorage().setError(true);
+ getServer().getPluginManager().disablePlugin(this);
+ }
+
localeFileManager = new LocaleFileManager();
if (nicko.getConfig().isCustomLocale()) {
@@ -104,7 +93,7 @@ public class NickoBukkit extends JavaPlugin {
if (nicko.getConfig().isBungeecord()) {
if (support.stopIfBungeeCordIsNotEnabled()) {
getLogger().info("Enabling BungeeCord support...");
- getServer().getMessenger().registerIncomingPluginChannel(this, NickoBungee.PROXY_UPDATE, new PluginMessageEvent());
+ //TODO: Enable BungeeCord
}
}
@@ -112,6 +101,13 @@ public class NickoBukkit extends JavaPlugin {
}
}
+ public void onUnitTestingStartup() {
+ if (!nicko.getDataStore().getStorage().getProvider().init()) {
+ nicko.getDataStore().getStorage().setError(true);
+ getLogger().severe("Failed to open persistence, data will NOT be saved!");
+ }
+ }
+
@Override
public void onDisable() {
if (!nicko.getDataStore().getStorage().isError()) {
diff --git a/core/src/main/java/net/artelnatif/nicko/bungee/NickoBungee.java b/core/src/main/java/net/artelnatif/nicko/bungee/NickoBungee.java
index 19fca8c..39adf0b 100644
--- a/core/src/main/java/net/artelnatif/nicko/bungee/NickoBungee.java
+++ b/core/src/main/java/net/artelnatif/nicko/bungee/NickoBungee.java
@@ -3,12 +3,13 @@ package net.artelnatif.nicko.bungee;
import net.artelnatif.nicko.Nicko;
import net.artelnatif.nicko.disguise.NickoProfile;
import net.md_5.bungee.api.plugin.Plugin;
+import org.cache2k.Cache;
+import org.cache2k.Cache2kBuilder;
-import java.util.HashMap;
import java.util.UUID;
public class NickoBungee extends Plugin {
- private final HashMap profiles = new HashMap<>();
+ private final Cache profileCache = Cache2kBuilder.of(UUID.class, NickoProfile.class).build();
private final Nicko nicko = new Nicko();
private static NickoBungee plugin;
@@ -29,6 +30,8 @@ public class NickoBungee extends Plugin {
return;
}
+ getProxy().registerChannel(Nicko.MESSAGE_FETCH);
+ getProxy().registerChannel(Nicko.MESSAGE_UPDATE);
getLogger().info("Nicko (Bungee) has been enabled.");
}
}
@@ -36,10 +39,14 @@ public class NickoBungee extends Plugin {
@Override
public void onDisable() {
if (!nicko.getDataStore().getStorage().isError()) {
+ getProxy().unregisterChannel(Nicko.MESSAGE_FETCH);
+ getProxy().unregisterChannel(Nicko.MESSAGE_UPDATE);
getLogger().info("Nicko (Bungee) has been disabled.");
}
}
+ public Cache getProfileCache() { return profileCache; }
+
public Nicko getNicko() {
return nicko;
}
diff --git a/core/src/main/java/net/artelnatif/nicko/bungee/PluginMessageSender.java b/core/src/main/java/net/artelnatif/nicko/bungee/PluginMessageSender.java
index b75baef..b75c179 100644
--- a/core/src/main/java/net/artelnatif/nicko/bungee/PluginMessageSender.java
+++ b/core/src/main/java/net/artelnatif/nicko/bungee/PluginMessageSender.java
@@ -4,6 +4,9 @@ import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import net.md_5.bungee.api.config.ServerInfo;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
import java.util.ArrayList;
public class PluginMessageSender {
@@ -17,4 +20,18 @@ public class PluginMessageSender {
}
info.sendData(channel, output.toByteArray(), true);
}
+
+ public static void sendObject(final ServerInfo info, final String channel, final Object payload) {
+ if (info == null) { return; }
+
+ try {
+ final ByteArrayDataOutput output = ByteStreams.newDataOutput();
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ ObjectOutputStream os = new ObjectOutputStream(out);
+ os.writeObject(payload);
+ info.sendData(channel, output.toByteArray(), true);
+ } catch (IOException exception) {
+ System.out.println("massive f");
+ }
+ }
}
diff --git a/core/src/main/java/net/artelnatif/nicko/bungee/in/MessageHandler.java b/core/src/main/java/net/artelnatif/nicko/bungee/in/MessageHandler.java
new file mode 100644
index 0000000..c7455c7
--- /dev/null
+++ b/core/src/main/java/net/artelnatif/nicko/bungee/in/MessageHandler.java
@@ -0,0 +1,44 @@
+package net.artelnatif.nicko.bungee.in;
+
+import com.google.common.io.ByteArrayDataInput;
+import com.google.common.io.ByteStreams;
+import net.artelnatif.nicko.Nicko;
+import net.artelnatif.nicko.bungee.NickoBungee;
+import net.artelnatif.nicko.bungee.PluginMessageSender;
+import net.artelnatif.nicko.disguise.NickoProfile;
+import net.md_5.bungee.api.config.ServerInfo;
+import net.md_5.bungee.api.event.PluginMessageEvent;
+import net.md_5.bungee.api.plugin.Listener;
+import net.md_5.bungee.event.EventHandler;
+import org.cache2k.Cache;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.util.UUID;
+
+public class MessageHandler implements Listener {
+ @EventHandler
+ public void onMessage(PluginMessageEvent event) {
+ final Cache cache = NickoBungee.getInstance().getProfileCache();
+ if (event.getTag().equalsIgnoreCase(Nicko.MESSAGE_UPDATE)) {
+ try {
+ final ByteArrayInputStream inputStream = new ByteArrayInputStream(event.getData());
+ final ObjectInputStream objectStream = new ObjectInputStream(inputStream);
+
+ final String uuid = objectStream.readUTF();
+ final NickoProfile profile = (NickoProfile) objectStream.readObject();
+ cache.put(UUID.fromString(uuid), profile);
+ } catch (IOException | ClassNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ } else if (event.getTag().equalsIgnoreCase(Nicko.MESSAGE_FETCH)) {
+ final ByteArrayDataInput input = ByteStreams.newDataInput(event.getData());
+ final String stringUuid = input.readUTF();
+ final UUID uuid = UUID.fromString(stringUuid);
+ final ServerInfo info = NickoBungee.getInstance().getProxy().getPlayer(uuid).getServer().getInfo();
+ final NickoProfile profile = cache.peekAndRemove(uuid);
+ PluginMessageSender.sendObject(info, Nicko.MESSAGE_FETCH, profile);
+ }
+ }
+}