refactor/feat: remove bungeecord, uncluttered code

This commit is contained in:
aro 2023-03-06 19:30:53 +01:00
parent a4999a28a1
commit 31f5c4d88e
69 changed files with 260 additions and 556 deletions

View file

@ -160,18 +160,6 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.cache2k</groupId>
<artifactId>cache2k-api</artifactId>
<version>2.6.1.Final</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.cache2k</groupId>
<artifactId>cache2k-core</artifactId>
<version>2.6.1.Final</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<properties>
<cache2k-version>2.6.1.Final</cache2k-version>

View file

@ -115,17 +115,6 @@
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.14.0-rc1</version>
</dependency>
<dependency>
<groupId>org.cache2k</groupId>
<artifactId>cache2k-api</artifactId>
<version>${cache2k-version}</version>
</dependency>
<dependency>
<groupId>org.cache2k</groupId>
<artifactId>cache2k-core</artifactId>
<version>${cache2k-version}</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>

View file

@ -1,80 +0,0 @@
package net.artelnatif.nicko;
import net.artelnatif.nicko.config.Configuration;
import net.artelnatif.nicko.config.ConfigurationManager;
import net.artelnatif.nicko.mojang.MojangAPI;
import net.artelnatif.nicko.storage.PlayerDataStore;
import net.md_5.bungee.api.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
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;
private MojangAPI mojangAPI;
private Configuration config;
private PlayerDataStore dataStore;
public void initBungeecord(Plugin bungee) {
logger = bungee.getLogger();
dataFolder = bungee.getDataFolder();
initNicko();
}
public void initBukkit(JavaPlugin bukkit) {
logger = bukkit.getLogger();
dataFolder = bukkit.getDataFolder();
initNicko();
}
private void initNicko() {
configManager = new ConfigurationManager(this);
configManager.saveDefaultConfig();
mojangAPI = new MojangAPI(this);
dataStore = new PlayerDataStore(this);
}
public Logger getLogger() {
return logger;
}
public PlayerDataStore getDataStore() {
return dataStore;
}
public File getDataFolder() {
return dataFolder;
}
public MojangAPI getMojangAPI() {
return mojangAPI;
}
public ConfigurationManager getConfigManager() {
return configManager;
}
public Configuration getConfig() {
try {
if (config == null) { return config = configManager.load(); }
return config;
} catch (IOException e) {
logger.severe("Failed to load configuration file: " + e.getMessage());
return null;
}
}
public void setConfig(Configuration config) {
this.config = config;
}
}

View file

@ -1,19 +1,21 @@
package net.artelnatif.nicko.bukkit;
package net.artelnatif.nicko;
import de.studiocode.invui.gui.structure.Structure;
import de.studiocode.invui.item.builder.ItemBuilder;
import de.studiocode.invui.item.impl.SimpleItem;
import net.artelnatif.nicko.Nicko;
import net.artelnatif.nicko.bukkit.command.NickoCommand;
import net.artelnatif.nicko.bukkit.event.PlayerJoinListener;
import net.artelnatif.nicko.bukkit.event.PlayerQuitListener;
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.command.NickoCommand;
import net.artelnatif.nicko.config.ConfigurationManager;
import net.artelnatif.nicko.event.PlayerJoinListener;
import net.artelnatif.nicko.event.PlayerQuitListener;
import net.artelnatif.nicko.gui.items.main.ExitGUI;
import net.artelnatif.nicko.i18n.Locale;
import net.artelnatif.nicko.i18n.LocaleFileManager;
import net.artelnatif.nicko.mojang.MojangAPI;
import net.artelnatif.nicko.placeholder.PlaceHolderHook;
import net.artelnatif.nicko.config.Configuration;
import net.artelnatif.nicko.impl.Internals;
import net.artelnatif.nicko.impl.InternalsProvider;
import net.artelnatif.nicko.storage.PlayerDataStore;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.PluginCommand;
@ -22,11 +24,18 @@ import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.plugin.java.JavaPluginLoader;
import java.io.File;
import java.io.IOException;
import java.util.logging.Logger;
public class NickoBukkit extends JavaPlugin {
private static NickoBukkit plugin;
private final Nicko nicko = new Nicko();
private ConfigurationManager configManager;
private Logger logger;
private File dataFolder;
private MojangAPI mojangAPI;
private Configuration configuration;
private PlayerDataStore dataStore;
private final boolean unitTesting;
private LocaleFileManager localeFileManager;
@ -36,22 +45,26 @@ public class NickoBukkit extends JavaPlugin {
/**
* Used by MockBukkit
*/
protected NickoBukkit(JavaPluginLoader loader, PluginDescriptionFile description, File dataFolder, File file, Configuration config) {
protected NickoBukkit(JavaPluginLoader loader, PluginDescriptionFile description, File dataFolder, File file, Configuration configuration) {
super(loader, description, dataFolder, file);
unitTesting = true;
nicko.setConfig(config);
this.configuration = configuration;
getLogger().info("Unit Testing Mode enabled.");
}
@Override
public void onEnable() {
plugin = this;
nicko.initBukkit(this);
configManager = new ConfigurationManager(getDataFolder());
configManager.saveDefaultConfig();
if (!nicko.getDataStore().getStorage().isError()) {
mojangAPI = new MojangAPI();
dataStore = new PlayerDataStore(mojangAPI, configuration);
if (!getDataStore().getStorage().isError()) {
getLogger().info("Loading persistence...");
if (!nicko.getDataStore().getStorage().getProvider().init()) {
nicko.getDataStore().getStorage().setError(true);
if (!getDataStore().getStorage().getProvider().init()) {
getDataStore().getStorage().setError(true);
getLogger().severe("Failed to open persistence, data will NOT be saved!");
}
}
@ -60,13 +73,13 @@ public class NickoBukkit extends JavaPlugin {
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);
getDataStore().getStorage().setError(true);
getServer().getPluginManager().disablePlugin(this);
}
localeFileManager = new LocaleFileManager();
if (nicko.getConfig().isCustomLocale()) {
if (getNickoConfig().isCustomLocale()) {
if (localeFileManager.dumpFromLocale(Locale.ENGLISH)) {
getLogger().info("Successfully loaded custom language file.");
} else {
@ -88,42 +101,21 @@ public class NickoBukkit extends JavaPlugin {
getServer().getPluginManager().registerEvents(new PlayerJoinListener(), this);
getServer().getPluginManager().registerEvents(new PlayerQuitListener(), this);
final BungeeCordSupport support = new BungeeCordSupport(this);
support.warnNickoNotHookedToBungeeCord();
if (nicko.getConfig().isBungeecord()) {
if (support.stopIfBungeeCordIsNotEnabled()) {
getLogger().info("Enabling BungeeCord support...");
//TODO: Enable BungeeCord
}
}
getLogger().info("Nicko (Bukkit) has been enabled.");
}
}
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()) {
if (!getDataStore().getStorage().isError()) {
getLogger().info("Closing persistence...");
nicko.getDataStore().removeAllNames();
Bukkit.getOnlinePlayers().forEach(player -> nicko.getDataStore().saveData(player));
if (!nicko.getDataStore().getStorage().getProvider().close()) {
getDataStore().removeAllNames();
Bukkit.getOnlinePlayers().forEach(player -> getDataStore().saveData(player));
if (!getDataStore().getStorage().getProvider().close()) {
getLogger().severe("Failed to close persistence!");
}
}
if (nicko.getConfig().isBungeecord()) {
getServer().getMessenger().unregisterIncomingPluginChannel(this);
getServer().getMessenger().unregisterOutgoingPluginChannel(this);
}
getLogger().info("Nicko (Bukkit) has been disabled.");
}
@ -131,8 +123,22 @@ public class NickoBukkit extends JavaPlugin {
return plugin;
}
public Nicko getNicko() {
return nicko;
public Configuration getNickoConfig() {
try {
if (configuration == null) { return configuration = configManager.load(); }
return configuration;
} catch (IOException e) {
logger.severe("Failed to load configuration file: " + e.getMessage());
return null;
}
}
public PlayerDataStore getDataStore() {
return dataStore;
}
public MojangAPI getMojangAPI() {
return mojangAPI;
}
public LocaleFileManager getLocaleFileManager() {

View file

@ -1,10 +1,10 @@
package net.artelnatif.nicko.bukkit.anvil;
package net.artelnatif.nicko.anvil;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.bukkit.appearance.AppearanceManager;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.appearance.AppearanceManager;
import net.artelnatif.nicko.disguise.ActionResult;
import net.artelnatif.nicko.bukkit.i18n.I18N;
import net.artelnatif.nicko.bukkit.i18n.I18NDict;
import net.artelnatif.nicko.i18n.I18N;
import net.artelnatif.nicko.i18n.I18NDict;
import net.artelnatif.nicko.mojang.MojangUtils;
import net.wesjd.anvilgui.AnvilGUI;
import org.bukkit.Material;

View file

@ -1,6 +1,6 @@
package net.artelnatif.nicko.bukkit.appearance;
package net.artelnatif.nicko.appearance;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.disguise.ActionResult;
import net.artelnatif.nicko.disguise.NickoProfile;
import net.artelnatif.nicko.storage.PlayerDataStore;
@ -13,7 +13,7 @@ public class AppearanceManager {
private final NickoProfile profile;
private final Player player;
private final NickoBukkit instance = NickoBukkit.getInstance();
private final PlayerDataStore dataStore = instance.getNicko().getDataStore();
private final PlayerDataStore dataStore = instance.getDataStore();
private AppearanceManager(UUID uuid) {
this.player = Bukkit.getPlayer(uuid);

View file

@ -1,37 +0,0 @@
package net.artelnatif.nicko.bukkit;
import org.bukkit.Server;
import org.bukkit.configuration.file.YamlConfiguration;
public class BungeeCordSupport {
private final NickoBukkit instance;
public BungeeCordSupport(NickoBukkit instance) {
this.instance = instance;
}
public void warnNickoNotHookedToBungeeCord() {
final Server server = instance.getServer();
final YamlConfiguration config = server.spigot().getConfig();
if (config.getConfigurationSection("settings").getBoolean("bungeecord") && !instance.getNicko().getConfig().isBungeecord()) {
instance.getLogger().warning("Hummm. Your server is hooked to BungeeCord, but it seems");
instance.getLogger().warning("that BungeeCord support is not enabled inside Nicko.");
instance.getLogger().warning("If this is intentional, you can safely ignore this message.");
instance.getLogger().warning("Otherwise, you can enable BungeeCord support inside Nicko's configuration file.");
}
}
public boolean stopIfBungeeCordIsNotEnabled() {
final Server server = instance.getServer();
final YamlConfiguration config = server.spigot().getConfig();
if (!config.getConfigurationSection("settings").getBoolean("bungeecord") && instance.getNicko().getConfig().isBungeecord()) {
instance.getLogger().severe("Hummm. You have enabled BungeeCord support inside Nicko,");
instance.getLogger().severe("but it seems that your server is not hooked to your BungeeCord instance.");
instance.getLogger().severe("Please enable BungeeCord support inside your spigot.yml as well.");
instance.getLogger().severe("The plugin will not continue.");
instance.getServer().getPluginManager().disablePlugin(instance);
return false;
}
return true;
}
}

View file

@ -1,57 +0,0 @@
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.UUID;
public class NickoBungee extends Plugin {
private final Cache<UUID, NickoProfile> profileCache = Cache2kBuilder.of(UUID.class, NickoProfile.class).build();
private final Nicko nicko = new Nicko();
private static NickoBungee plugin;
@Override
public void onEnable() {
plugin = this;
nicko.initBungeecord(this);
getLogger().info("Loading persistence...");
if (!nicko.getDataStore().getStorage().isError()) {
if (!nicko.getDataStore().getStorage().getProvider().init()) {
getLogger().severe("Failed to load persistence!");
getLogger().severe("Nicko can't enable BungeeCord support without SQL storage.");
getLogger().severe("The plugin will not continue.");
nicko.getDataStore().getStorage().setError(true);
onDisable();
return;
}
getProxy().registerChannel(Nicko.MESSAGE_FETCH);
getProxy().registerChannel(Nicko.MESSAGE_UPDATE);
getLogger().info("Nicko (Bungee) has been enabled.");
}
}
@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<UUID, NickoProfile> getProfileCache() { return profileCache; }
public Nicko getNicko() {
return nicko;
}
public static NickoBungee getInstance() {
return plugin;
}
}

View file

@ -1,37 +0,0 @@
package net.artelnatif.nicko.bungee;
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 {
public static void send(final ServerInfo info, final String channel, final ArrayList<String> payload) {
if (info == null) { return; }
final ByteArrayDataOutput output = ByteStreams.newDataOutput();
output.writeInt(payload.size());
for (String elt : payload) {
output.writeUTF(elt);
}
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");
}
}
}

View file

@ -1,44 +0,0 @@
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<UUID, NickoProfile> 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);
}
}
}

View file

@ -1,9 +1,9 @@
package net.artelnatif.nicko.bukkit.command;
package net.artelnatif.nicko.command;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.bukkit.command.sub.NickoCheckSubCmd;
import net.artelnatif.nicko.bukkit.command.sub.NickoDebugSubCmd;
import net.artelnatif.nicko.bukkit.gui.MainGUI;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.command.sub.NickoCheckSubCmd;
import net.artelnatif.nicko.command.sub.NickoDebugSubCmd;
import net.artelnatif.nicko.gui.MainGUI;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;

View file

@ -1,9 +1,9 @@
package net.artelnatif.nicko.bukkit.command.sub;
package net.artelnatif.nicko.command.sub;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.bukkit.appearance.AppearanceManager;
import net.artelnatif.nicko.bukkit.i18n.I18N;
import net.artelnatif.nicko.bukkit.i18n.I18NDict;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.appearance.AppearanceManager;
import net.artelnatif.nicko.i18n.I18N;
import net.artelnatif.nicko.i18n.I18NDict;
import net.artelnatif.nicko.mojang.MojangUtils;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@ -28,7 +28,7 @@ public class NickoCheckSubCmd {
}
final StringJoiner builder = new StringJoiner("\n");
builder.add("§c" + NickoBukkit.getInstance().getNicko().getConfig().getPrefix() + "§6Check for: §f§o" + targetName);
builder.add("§c" + NickoBukkit.getInstance().getNickoConfig().getPrefix() + "§6Check for: §f§o" + targetName);
if (!appearanceManager.hasData()) {
builder.add("§cThis player has not data.");
} else {

View file

@ -1,7 +1,7 @@
package net.artelnatif.nicko.bukkit.command.sub;
package net.artelnatif.nicko.command.sub;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.bukkit.appearance.AppearanceManager;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.appearance.AppearanceManager;
import net.artelnatif.nicko.mojang.MojangUtils;
import org.bukkit.Bukkit;
import org.bukkit.Sound;
@ -10,7 +10,7 @@ import org.bukkit.entity.Player;
public class NickoDebugSubCmd {
public void execute(CommandSender sender, String[] args) {
final String prefix = NickoBukkit.getInstance().getNicko().getConfig().getPrefix();
final String prefix = NickoBukkit.getInstance().getNickoConfig().getPrefix();
Player target;
String name, skin;

View file

@ -6,21 +6,19 @@ public class Configuration {
private final String password;
private final String prefix;
private final Boolean local;
private final Boolean bungeecord;
private final Boolean customLocale;
public Configuration(String address, String username, String password, String prefix, Boolean local, Boolean bungeecord, Boolean customLocale) {
public Configuration(String address, String username, String password, String prefix, Boolean local, Boolean customLocale) {
this.address = address;
this.username = username;
this.password = password;
this.prefix = prefix;
this.local = local;
this.bungeecord = bungeecord;
this.customLocale = customLocale;
}
public Configuration() {
this("", "", "", "", false, false, false);
this("", "", "", "", false, false);
}
public String getAddress() {
@ -43,10 +41,6 @@ public class Configuration {
return local;
}
public Boolean isBungeecord() {
return bungeecord;
}
public Boolean isCustomLocale() {
return customLocale;
}

View file

@ -2,21 +2,18 @@ package net.artelnatif.nicko.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import net.artelnatif.nicko.Nicko;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.logging.Logger;
public class ConfigurationManager {
private final Nicko nicko;
private final Logger logger = Logger.getLogger("ConfigurationManager");
private final ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
private final File directory;
private final File file;
public ConfigurationManager(Nicko nicko) {
this.nicko = nicko;
this.directory = nicko.getDataFolder();
public ConfigurationManager(File directory) {
this.file = new File(directory, "config.yml");
}
@ -32,7 +29,7 @@ public class ConfigurationManager {
try {
final InputStream input = getClass().getResourceAsStream("/config.yml");
if (input != null) {
nicko.getLogger().info("Saved default configuration as config.yml");
logger.info("Saved default configuration as config.yml");
Files.createDirectories(file.getParentFile().toPath());
Files.createFile(file.toPath());
Files.copy(input, file.toPath(), StandardCopyOption.REPLACE_EXISTING);

View file

@ -1,6 +1,6 @@
package net.artelnatif.nicko.disguise;
import net.artelnatif.nicko.bukkit.i18n.I18NDict;
import net.artelnatif.nicko.i18n.I18NDict;
public class ActionResult<R> {
private final I18NDict errorMessage;

View file

@ -1,6 +1,6 @@
package net.artelnatif.nicko.disguise;
import net.artelnatif.nicko.bukkit.i18n.Locale;
import net.artelnatif.nicko.i18n.Locale;
public class NickoProfile implements Cloneable {
public static final NickoProfile EMPTY_PROFILE = new NickoProfile(null, null, Locale.ENGLISH, true);

View file

@ -1,12 +1,11 @@
package net.artelnatif.nicko.bukkit.event;
package net.artelnatif.nicko.event;
import net.artelnatif.nicko.Nicko;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.bukkit.appearance.AppearanceManager;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.appearance.AppearanceManager;
import net.artelnatif.nicko.disguise.ActionResult;
import net.artelnatif.nicko.bukkit.i18n.I18N;
import net.artelnatif.nicko.bukkit.i18n.I18NDict;
import net.artelnatif.nicko.disguise.NickoProfile;
import net.artelnatif.nicko.i18n.I18N;
import net.artelnatif.nicko.i18n.I18NDict;
import net.artelnatif.nicko.storage.PlayerDataStore;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@ -18,16 +17,12 @@ public class PlayerJoinListener implements Listener {
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
final Player player = event.getPlayer();
final Nicko nicko = NickoBukkit.getInstance().getNicko();
final PlayerDataStore dataStore = nicko.getDataStore();
final PlayerDataStore dataStore = NickoBukkit.getInstance().getDataStore();
dataStore.storeName(player);
if (nicko.getConfig().isBungeecord()) {
}
// TODO: 2/20/23 BungeeCord transfer
dataStore.performProfileUpdate(player.getUniqueId(), NickoProfile.EMPTY_PROFILE);
Bukkit.getScheduler().runTaskLater(NickoBukkit.getInstance(), () -> {
final AppearanceManager appearanceManager = AppearanceManager.get(player);

View file

@ -1,6 +1,6 @@
package net.artelnatif.nicko.bukkit.event;
package net.artelnatif.nicko.event;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.disguise.ActionResult;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@ -11,7 +11,7 @@ public class PlayerQuitListener implements Listener {
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
final Player player = event.getPlayer();
final ActionResult<Void> result = NickoBukkit.getInstance().getNicko().getDataStore().saveData(player);
final ActionResult<Void> result = NickoBukkit.getInstance().getDataStore().saveData(player);
if (result.isError()) {
NickoBukkit.getInstance().getLogger().warning("Failed to save data for " + player.getName());
}

View file

@ -1,11 +1,11 @@
package net.artelnatif.nicko.bukkit.gui;
package net.artelnatif.nicko.gui;
import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.gui.builder.GUIBuilder;
import de.studiocode.invui.gui.builder.guitype.GUIType;
import de.studiocode.invui.window.impl.single.SimpleWindow;
import net.artelnatif.nicko.bukkit.gui.items.common.GoBack;
import net.artelnatif.nicko.bukkit.gui.items.admin.ManageCache;
import net.artelnatif.nicko.gui.items.common.GoBack;
import net.artelnatif.nicko.gui.items.admin.ManageCache;
import org.bukkit.entity.Player;
public class AdminGUI {

View file

@ -1,13 +1,13 @@
package net.artelnatif.nicko.bukkit.gui;
package net.artelnatif.nicko.gui;
import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.gui.builder.GUIBuilder;
import de.studiocode.invui.gui.builder.guitype.GUIType;
import de.studiocode.invui.window.impl.single.SimpleWindow;
import net.artelnatif.nicko.bukkit.gui.items.common.GoBack;
import net.artelnatif.nicko.bukkit.gui.items.skin.ChangeSkin;
import net.artelnatif.nicko.bukkit.gui.items.skin.ChangeName;
import net.artelnatif.nicko.bukkit.gui.items.skin.ChangeNameAndSkin;
import net.artelnatif.nicko.gui.items.common.GoBack;
import net.artelnatif.nicko.gui.items.skin.ChangeSkin;
import net.artelnatif.nicko.gui.items.skin.ChangeName;
import net.artelnatif.nicko.gui.items.skin.ChangeNameAndSkin;
import org.bukkit.entity.Player;
public class AppearanceManagerGUI {

View file

@ -1,13 +1,13 @@
package net.artelnatif.nicko.bukkit.gui;
package net.artelnatif.nicko.gui;
import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.gui.builder.GUIBuilder;
import de.studiocode.invui.gui.builder.guitype.GUIType;
import de.studiocode.invui.window.impl.single.SimpleWindow;
import net.artelnatif.nicko.bukkit.gui.items.main.AdminSubGUI;
import net.artelnatif.nicko.bukkit.gui.items.main.AppearanceManagerSubGUI;
import net.artelnatif.nicko.bukkit.gui.items.main.ResetAppearance;
import net.artelnatif.nicko.bukkit.gui.items.main.SettingsSubGUI;
import net.artelnatif.nicko.gui.items.main.AdminSubGUI;
import net.artelnatif.nicko.gui.items.main.AppearanceManagerSubGUI;
import net.artelnatif.nicko.gui.items.main.ResetAppearance;
import net.artelnatif.nicko.gui.items.main.SettingsSubGUI;
import org.bukkit.entity.Player;
public class MainGUI {

View file

@ -1,15 +1,13 @@
package net.artelnatif.nicko.bukkit.gui;
package net.artelnatif.nicko.gui;
import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.gui.builder.GUIBuilder;
import de.studiocode.invui.gui.builder.guitype.GUIType;
import de.studiocode.invui.window.impl.single.SimpleWindow;
import net.artelnatif.nicko.Nicko;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.bukkit.gui.items.settings.LanguageCycling;
import net.artelnatif.nicko.bukkit.gui.items.common.GoBack;
import net.artelnatif.nicko.bukkit.gui.items.settings.BungeeCordCycling;
import net.artelnatif.nicko.bukkit.gui.items.settings.OptionUnavailable;
import net.artelnatif.nicko.gui.items.common.GoBack;
import net.artelnatif.nicko.gui.items.settings.BungeeCordCycling;
import net.artelnatif.nicko.gui.items.settings.LanguageCycling;
import net.artelnatif.nicko.gui.items.settings.OptionUnavailable;
import org.bukkit.entity.Player;
public class SettingsGUI {
@ -23,10 +21,8 @@ public class SettingsGUI {
"B # # # # # # # #"
};
final Nicko nicko = NickoBukkit.getInstance().getNicko();
if (!nicko.getConfig().isBungeecord()) {
dynamicStructure[1] = dynamicStructure[1].replace("T", "U");
}
// TODO: 3/6/23 Replace when Redis is not enabled
dynamicStructure[1] = dynamicStructure[1].replace("T", "U");
this.gui = new GUIBuilder<>(GUIType.NORMAL)
.setStructure(dynamicStructure)

View file

@ -1,14 +1,14 @@
package net.artelnatif.nicko.bukkit.gui.admin;
package net.artelnatif.nicko.gui.admin;
import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.gui.builder.GUIBuilder;
import de.studiocode.invui.gui.builder.guitype.GUIType;
import de.studiocode.invui.window.impl.single.SimpleWindow;
import net.artelnatif.nicko.bukkit.gui.AdminGUI;
import net.artelnatif.nicko.bukkit.gui.items.admin.cache.CacheDetailed;
import net.artelnatif.nicko.bukkit.gui.items.admin.cache.CacheInvalidate;
import net.artelnatif.nicko.bukkit.gui.items.admin.cache.CacheOverview;
import net.artelnatif.nicko.bukkit.gui.items.common.GoBack;
import net.artelnatif.nicko.gui.AdminGUI;
import net.artelnatif.nicko.gui.items.admin.cache.CacheDetailed;
import net.artelnatif.nicko.gui.items.admin.cache.CacheInvalidate;
import net.artelnatif.nicko.gui.items.admin.cache.CacheOverview;
import net.artelnatif.nicko.gui.items.common.GoBack;
import org.bukkit.entity.Player;
public class CacheManagementGUI {

View file

@ -1,4 +1,4 @@
package net.artelnatif.nicko.bukkit.gui.admin.cache;
package net.artelnatif.nicko.gui.admin.cache;
import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.gui.builder.GUIBuilder;
@ -6,12 +6,12 @@ import de.studiocode.invui.gui.builder.guitype.GUIType;
import de.studiocode.invui.gui.structure.Markers;
import de.studiocode.invui.item.Item;
import de.studiocode.invui.window.impl.single.SimpleWindow;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.bukkit.gui.items.admin.cache.SkinPlaceholder;
import net.artelnatif.nicko.bukkit.gui.admin.CacheManagementGUI;
import net.artelnatif.nicko.bukkit.gui.items.common.GoBack;
import net.artelnatif.nicko.bukkit.gui.items.common.ScrollDown;
import net.artelnatif.nicko.bukkit.gui.items.common.ScrollUp;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.gui.items.admin.cache.SkinPlaceholder;
import net.artelnatif.nicko.gui.admin.CacheManagementGUI;
import net.artelnatif.nicko.gui.items.common.GoBack;
import net.artelnatif.nicko.gui.items.common.ScrollDown;
import net.artelnatif.nicko.gui.items.common.ScrollUp;
import net.artelnatif.nicko.mojang.MojangSkin;
import org.bukkit.entity.Player;
@ -26,7 +26,7 @@ public class CacheDetailledGUI {
private final GUI gui;
public CacheDetailledGUI(Player player) {
final ConcurrentMap<String, Optional<MojangSkin>> skins = NickoBukkit.getInstance().getNicko().getMojangAPI().getCache().asMap();
final ConcurrentMap<String, Optional<MojangSkin>> skins = NickoBukkit.getInstance().getMojangAPI().getCache().asMap();
final List<String> loadedSkins = skins.entrySet().stream()
.filter(entry -> entry.getValue().isPresent())
.map(Map.Entry::getKey)

View file

@ -1,9 +1,9 @@
package net.artelnatif.nicko.bukkit.gui.items.admin;
package net.artelnatif.nicko.gui.items.admin;
import de.studiocode.invui.item.builder.ItemBuilder;
import de.studiocode.invui.item.builder.SkullBuilder;
import de.studiocode.invui.item.impl.AsyncItem;
import net.artelnatif.nicko.bukkit.gui.admin.CacheManagementGUI;
import net.artelnatif.nicko.gui.admin.CacheManagementGUI;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;

View file

@ -1,9 +1,9 @@
package net.artelnatif.nicko.bukkit.gui.items.admin.cache;
package net.artelnatif.nicko.gui.items.admin.cache;
import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.item.builder.ItemBuilder;
import de.studiocode.invui.item.impl.BaseItem;
import net.artelnatif.nicko.bukkit.gui.admin.cache.CacheDetailledGUI;
import net.artelnatif.nicko.gui.admin.cache.CacheDetailledGUI;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;

View file

@ -1,11 +1,11 @@
package net.artelnatif.nicko.bukkit.gui.items.admin.cache;
package net.artelnatif.nicko.gui.items.admin.cache;
import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.item.builder.ItemBuilder;
import de.studiocode.invui.item.impl.BaseItem;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.bukkit.i18n.I18N;
import net.artelnatif.nicko.bukkit.i18n.I18NDict;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.i18n.I18N;
import net.artelnatif.nicko.i18n.I18NDict;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
@ -31,7 +31,7 @@ public class CacheInvalidate extends BaseItem {
if (clickType.isLeftClick() || clickType.isRightClick()) {
event.getView().close();
player.sendMessage(I18N.translate(player, I18NDict.Event.Admin.CACHE_CLEAN));
NickoBukkit.getInstance().getNicko().getMojangAPI().getCache().invalidateAll();
NickoBukkit.getInstance().getMojangAPI().getCache().invalidateAll();
}
}
}

View file

@ -1,11 +1,11 @@
package net.artelnatif.nicko.bukkit.gui.items.admin.cache;
package net.artelnatif.nicko.gui.items.admin.cache;
import com.google.common.cache.CacheStats;
import com.google.common.cache.LoadingCache;
import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.item.builder.ItemBuilder;
import de.studiocode.invui.item.impl.BaseItem;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.mojang.MojangSkin;
import org.bukkit.Material;
import org.bukkit.entity.Player;
@ -19,7 +19,7 @@ public class CacheOverview extends BaseItem {
@Override
public ItemProvider getItemProvider() {
final ItemBuilder builder = new ItemBuilder(Material.OAK_SIGN);
final LoadingCache<String, Optional<MojangSkin>> cache = NickoBukkit.getInstance().getNicko().getMojangAPI().getCache();
final LoadingCache<String, Optional<MojangSkin>> cache = NickoBukkit.getInstance().getMojangAPI().getCache();
final CacheStats stats = cache.stats();
builder.setDisplayName("§6Skin cache §foverview:");
builder.addLoreLines(

View file

@ -1,4 +1,4 @@
package net.artelnatif.nicko.bukkit.gui.items.admin.cache;
package net.artelnatif.nicko.gui.items.admin.cache;
import de.studiocode.invui.item.builder.ItemBuilder;
import de.studiocode.invui.item.builder.SkullBuilder;

View file

@ -1,4 +1,4 @@
package net.artelnatif.nicko.bukkit.gui.items.common;
package net.artelnatif.nicko.gui.items.common;
import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.item.ItemProvider;

View file

@ -1,4 +1,4 @@
package net.artelnatif.nicko.bukkit.gui.items.common;
package net.artelnatif.nicko.gui.items.common;
import de.studiocode.invui.gui.impl.ScrollGUI;
import de.studiocode.invui.item.ItemProvider;

View file

@ -1,4 +1,4 @@
package net.artelnatif.nicko.bukkit.gui.items.common;
package net.artelnatif.nicko.gui.items.common;
import de.studiocode.invui.gui.impl.ScrollGUI;
import de.studiocode.invui.item.ItemProvider;

View file

@ -1,9 +1,9 @@
package net.artelnatif.nicko.bukkit.gui.items.main;
package net.artelnatif.nicko.gui.items.main;
import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.item.builder.ItemBuilder;
import de.studiocode.invui.item.impl.BaseItem;
import net.artelnatif.nicko.bukkit.gui.AdminGUI;
import net.artelnatif.nicko.gui.AdminGUI;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;

View file

@ -1,9 +1,9 @@
package net.artelnatif.nicko.bukkit.gui.items.main;
package net.artelnatif.nicko.gui.items.main;
import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.item.builder.ItemBuilder;
import de.studiocode.invui.item.impl.BaseItem;
import net.artelnatif.nicko.bukkit.gui.AppearanceManagerGUI;
import net.artelnatif.nicko.gui.AppearanceManagerGUI;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;

View file

@ -1,4 +1,4 @@
package net.artelnatif.nicko.bukkit.gui.items.main;
package net.artelnatif.nicko.gui.items.main;
import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.item.builder.ItemBuilder;

View file

@ -1,11 +1,11 @@
package net.artelnatif.nicko.bukkit.gui.items.main;
package net.artelnatif.nicko.gui.items.main;
import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.item.builder.ItemBuilder;
import de.studiocode.invui.item.impl.BaseItem;
import net.artelnatif.nicko.bukkit.appearance.AppearanceManager;
import net.artelnatif.nicko.bukkit.i18n.I18N;
import net.artelnatif.nicko.bukkit.i18n.I18NDict;
import net.artelnatif.nicko.appearance.AppearanceManager;
import net.artelnatif.nicko.i18n.I18N;
import net.artelnatif.nicko.i18n.I18NDict;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;

View file

@ -1,9 +1,9 @@
package net.artelnatif.nicko.bukkit.gui.items.main;
package net.artelnatif.nicko.gui.items.main;
import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.item.builder.ItemBuilder;
import de.studiocode.invui.item.impl.BaseItem;
import net.artelnatif.nicko.bukkit.gui.SettingsGUI;
import net.artelnatif.nicko.gui.SettingsGUI;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;

View file

@ -1,11 +1,11 @@
package net.artelnatif.nicko.bukkit.gui.items.settings;
package net.artelnatif.nicko.gui.items.settings;
import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.item.builder.ItemBuilder;
import de.studiocode.invui.item.impl.BaseItem;
import de.studiocode.invui.item.impl.CycleItem;
import de.studiocode.invui.item.impl.SimpleItem;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.disguise.NickoProfile;
import org.bukkit.Material;
import org.bukkit.Sound;
@ -20,7 +20,7 @@ public class BungeeCordCycling {
};
public BaseItem get(Player player) {
Optional<NickoProfile> profile = NickoBukkit.getInstance().getNicko().getDataStore().getData(player.getUniqueId());
Optional<NickoProfile> profile = NickoBukkit.getInstance().getDataStore().getData(player.getUniqueId());
if (profile.isPresent()) {
final NickoProfile nickoProfile = profile.get();
int startingState = nickoProfile.isBungeecordTransfer() ? 0 : 1;

View file

@ -1,13 +1,13 @@
package net.artelnatif.nicko.bukkit.gui.items.settings;
package net.artelnatif.nicko.gui.items.settings;
import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.item.builder.ItemBuilder;
import de.studiocode.invui.item.impl.BaseItem;
import de.studiocode.invui.item.impl.CycleItem;
import de.studiocode.invui.item.impl.SimpleItem;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.disguise.NickoProfile;
import net.artelnatif.nicko.bukkit.i18n.Locale;
import net.artelnatif.nicko.i18n.Locale;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
@ -19,7 +19,7 @@ public class LanguageCycling {
public BaseItem get(Player player) {
final NickoBukkit instance = NickoBukkit.getInstance();
Optional<NickoProfile> profile = instance.getNicko().getDataStore().getData(player.getUniqueId());
Optional<NickoProfile> profile = instance.getDataStore().getData(player.getUniqueId());
if (profile.isPresent()) {
final NickoProfile nickoProfile = profile.get();
int localeOrdinal = nickoProfile.getLocale().ordinal();
@ -52,7 +52,7 @@ public class LanguageCycling {
final ArrayList<Locale> localesToGenerate = new ArrayList<>();
Collections.addAll(localesToGenerate, Locale.values());
if (!instance.getNicko().getConfig().isCustomLocale()) {
if (!instance.getNickoConfig().isCustomLocale()) {
localesToGenerate.remove(Locale.CUSTOM);
}
localesToGenerate.forEach(locale -> items.add(generateItem(locale, localesToGenerate)));

View file

@ -1,4 +1,4 @@
package net.artelnatif.nicko.bukkit.gui.items.settings;
package net.artelnatif.nicko.gui.items.settings;
import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.item.builder.ItemBuilder;

View file

@ -1,9 +1,9 @@
package net.artelnatif.nicko.bukkit.gui.items.skin;
package net.artelnatif.nicko.gui.items.skin;
import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.item.builder.ItemBuilder;
import de.studiocode.invui.item.impl.BaseItem;
import net.artelnatif.nicko.bukkit.anvil.AnvilManager;
import net.artelnatif.nicko.anvil.AnvilManager;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;

View file

@ -1,9 +1,9 @@
package net.artelnatif.nicko.bukkit.gui.items.skin;
package net.artelnatif.nicko.gui.items.skin;
import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.item.builder.ItemBuilder;
import de.studiocode.invui.item.impl.BaseItem;
import net.artelnatif.nicko.bukkit.anvil.AnvilManager;
import net.artelnatif.nicko.anvil.AnvilManager;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;

View file

@ -1,9 +1,9 @@
package net.artelnatif.nicko.bukkit.gui.items.skin;
package net.artelnatif.nicko.gui.items.skin;
import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.item.builder.ItemBuilder;
import de.studiocode.invui.item.impl.BaseItem;
import net.artelnatif.nicko.bukkit.anvil.AnvilManager;
import net.artelnatif.nicko.anvil.AnvilManager;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;

View file

@ -1,7 +1,7 @@
package net.artelnatif.nicko.bukkit.i18n;
package net.artelnatif.nicko.i18n;
import com.github.jsixface.YamlConfig;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.disguise.NickoProfile;
import org.bukkit.entity.Player;
@ -15,7 +15,7 @@ public class I18N {
private static Locale getLocale(Player player) {
final NickoBukkit instance = NickoBukkit.getInstance();
try {
final Optional<NickoProfile> profile = instance.getNicko().getDataStore().getData(player.getUniqueId());
final Optional<NickoProfile> profile = instance.getDataStore().getData(player.getUniqueId());
return !profile.isPresent() ? Locale.FALLBACK_LOCALE : profile.get().getLocale();
} catch (IllegalArgumentException exception) {
instance.getLogger().severe("Invalid locale provided by " + player.getName() + ", defaulting to " + Locale.FALLBACK_LOCALE.getCode() + ".");
@ -29,9 +29,9 @@ public class I18N {
try {
formatter.applyPattern(translation);
return instance.getNicko().getConfig().getPrefix() + formatter.format(arguments);
return instance.getNickoConfig().getPrefix() + formatter.format(arguments);
} catch (Exception e) {
return instance.getNicko().getConfig().getPrefix() + key.key();
return instance.getNickoConfig().getPrefix() + key.key();
}
}

View file

@ -1,4 +1,4 @@
package net.artelnatif.nicko.bukkit.i18n;
package net.artelnatif.nicko.i18n;
public class I18NDict {
private final String key;

View file

@ -1,4 +1,4 @@
package net.artelnatif.nicko.bukkit.i18n;
package net.artelnatif.nicko.i18n;
import java.io.Serializable;

View file

@ -1,8 +1,8 @@
package net.artelnatif.nicko.bukkit.i18n;
package net.artelnatif.nicko.i18n;
import com.github.jsixface.YamlConfig;
import de.studiocode.invui.util.IOUtils;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import java.io.*;

View file

@ -1,9 +1,9 @@
package net.artelnatif.nicko.impl;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.disguise.NickoProfile;
import net.artelnatif.nicko.disguise.ActionResult;
import net.artelnatif.nicko.bukkit.i18n.I18NDict;
import net.artelnatif.nicko.i18n.I18NDict;
import net.artelnatif.nicko.mojang.MojangAPI;
import net.artelnatif.nicko.mojang.MojangSkin;
import org.bukkit.entity.Player;
@ -22,7 +22,7 @@ public interface Internals {
default ActionResult<MojangSkin> fetchSkinTextures(NickoProfile profile, boolean reset) {
Optional<MojangSkin> skin;
try {
final MojangAPI mojang = NickoBukkit.getInstance().getNicko().getMojangAPI();
final MojangAPI mojang = NickoBukkit.getInstance().getMojangAPI();
final Optional<String> uuid = mojang.getUUID(profile.getSkin());
if (uuid.isPresent()) {
skin = (reset ? mojang.getSkinWithoutCaching(uuid.get()) : mojang.getSkin(uuid.get()));

View file

@ -7,7 +7,6 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.JsonParser;
import net.artelnatif.nicko.Nicko;
import javax.annotation.Nonnull;
import javax.net.ssl.HttpsURLConnection;
@ -18,11 +17,14 @@ import java.net.URL;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;
public class MojangAPI {
public static final String URL_NAME = "https://api.mojang.com/users/profiles/minecraft/{name}";
public static final String URL_SKIN = "https://sessionserver.mojang.com/session/minecraft/profile/{uuid}?unsigned=false";
private final Logger logger = Logger.getLogger("MojangAPI");
private final CacheLoader<String, Optional<MojangSkin>> loader = new CacheLoader<String, Optional<MojangSkin>>() {
@Nonnull
public Optional<MojangSkin> load(@Nonnull String uuid) throws Exception {
@ -36,12 +38,6 @@ public class MojangAPI {
.expireAfterWrite(24, TimeUnit.HOURS)
.build(loader);
private final Nicko nicko;
public MojangAPI(Nicko nicko) {
this.nicko = nicko;
}
public Optional<MojangSkin> getSkin(String uuid) throws IOException, ExecutionException {
return cache.get(uuid);
}
@ -78,10 +74,10 @@ public class MojangAPI {
switch (con.getResponseCode()) {
case 400:
nicko.getLogger().warning("Failed to parse request: Invalid Name");
logger.warning("Failed to parse request: Invalid Name");
return getErrorObject();
case 429:
nicko.getLogger().warning("Failed to parse request: The connection is throttled.");
logger.warning("Failed to parse request: The connection is throttled.");
return getErrorObject();
case 200:
final BufferedReader input = new BufferedReader(new InputStreamReader(con.getInputStream()));
@ -95,11 +91,11 @@ public class MojangAPI {
final JsonElement jsonElt = JsonParser.parseString(builder.toString());
return jsonElt.getAsJsonObject();
} catch (JsonParseException | IllegalStateException exception) {
nicko.getLogger().warning("Failed to parse request (" + parametrizedUrl + ")!");
logger.warning("Failed to parse request (" + parametrizedUrl + ")!");
return getErrorObject();
}
default:
nicko.getLogger().warning("Unhandled response code from Mojang: " + con.getResponseCode());
logger.warning("Unhandled response code from Mojang: " + con.getResponseCode());
return getErrorObject();
}
}

View file

@ -1,7 +1,7 @@
package net.artelnatif.nicko.bukkit.placeholder;
package net.artelnatif.nicko.placeholder;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.disguise.NickoProfile;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
@ -48,7 +48,7 @@ public class NickoExpansion extends PlaceholderExpansion {
locale = "N/A";
bungeecord = true;
final Optional<NickoProfile> optionalProfile = instance.getNicko().getDataStore().getData(player.getUniqueId());
final Optional<NickoProfile> optionalProfile = instance.getDataStore().getData(player.getUniqueId());
if (optionalProfile.isPresent()) {
final NickoProfile profile = optionalProfile.get();
if (!profile.isEmpty()) {

View file

@ -1,6 +1,6 @@
package net.artelnatif.nicko.bukkit.placeholder;
package net.artelnatif.nicko.placeholder;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import org.bukkit.Bukkit;
public class PlaceHolderHook {

View file

@ -1,9 +1,10 @@
package net.artelnatif.nicko.storage;
import net.artelnatif.nicko.Nicko;
import net.artelnatif.nicko.bukkit.i18n.I18NDict;
import net.artelnatif.nicko.config.Configuration;
import net.artelnatif.nicko.i18n.I18NDict;
import net.artelnatif.nicko.disguise.ActionResult;
import net.artelnatif.nicko.disguise.NickoProfile;
import net.artelnatif.nicko.mojang.MojangAPI;
import net.artelnatif.nicko.mojang.MojangUtils;
import net.artelnatif.nicko.storage.json.JSONStorage;
import net.artelnatif.nicko.storage.sql.SQLStorage;
@ -16,13 +17,13 @@ import java.util.UUID;
public class PlayerDataStore {
private final Storage storage;
private final Nicko nicko;
private final MojangAPI mojangAPI;
private final HashMap<UUID, NickoProfile> profiles = new HashMap<>();
private final HashMap<UUID, String> names = new HashMap<>();
public PlayerDataStore(Nicko nicko) {
this.nicko = nicko;
this.storage = nicko.getConfig().isLocal() && !nicko.getConfig().isBungeecord() ? new JSONStorage(nicko) : new SQLStorage(nicko);
public PlayerDataStore(MojangAPI mojangAPI, Configuration configuration) {
this.mojangAPI = mojangAPI;
this.storage = configuration.isLocal() ? new JSONStorage() : new SQLStorage(configuration);
}
public void storeName(Player player) {
@ -76,7 +77,7 @@ public class PlayerDataStore {
}
try {
final Optional<String> uuidTrimmed = nicko.getMojangAPI().getUUID(name);
final Optional<String> uuidTrimmed = mojangAPI.getUUID(name);
if (uuidTrimmed.isPresent()) {
final UUID uuid = MojangUtils.fromTrimmed(uuidTrimmed.get());
return getData(uuid);

View file

@ -2,27 +2,25 @@ package net.artelnatif.nicko.storage.json;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import net.artelnatif.nicko.Nicko;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.disguise.ActionResult;
import net.artelnatif.nicko.disguise.NickoProfile;
import net.artelnatif.nicko.bukkit.i18n.I18NDict;
import net.artelnatif.nicko.i18n.I18NDict;
import net.artelnatif.nicko.storage.Storage;
import net.artelnatif.nicko.storage.StorageProvider;
import java.io.*;
import java.util.Optional;
import java.util.UUID;
import java.util.logging.Logger;
public class JSONStorage extends Storage {
private final Nicko nicko;
private final Logger logger = Logger.getLogger("JSONStorage");
private final Gson gson = new GsonBuilder().serializeNulls().setPrettyPrinting().create();
private final File directory = new File(NickoBukkit.getInstance().getDataFolder() + "/players/");
private JSONStorageProvider provider;
public JSONStorage(Nicko nicko) { this.nicko = nicko; }
@Override
public StorageProvider getProvider() {
if (provider == null) {
@ -43,12 +41,12 @@ public class JSONStorage extends Storage {
writer.write(profileToJson);
}
} catch (IOException e) {
nicko.getLogger().warning("Could not write to file.");
logger.warning("Could not write to file.");
return new ActionResult<>(I18NDict.Error.JSON_ERROR);
}
}
} catch (IOException e) {
nicko.getLogger().warning("Could not create file.");
logger.warning("Could not create file.");
return new ActionResult<>(I18NDict.Error.JSON_ERROR);
}

View file

@ -1,31 +1,36 @@
package net.artelnatif.nicko.storage.sql;
import net.artelnatif.nicko.Nicko;
import net.artelnatif.nicko.bukkit.i18n.I18NDict;
import net.artelnatif.nicko.bukkit.i18n.Locale;
import net.artelnatif.nicko.config.Configuration;
import net.artelnatif.nicko.disguise.ActionResult;
import net.artelnatif.nicko.disguise.NickoProfile;
import net.artelnatif.nicko.i18n.I18NDict;
import net.artelnatif.nicko.i18n.Locale;
import net.artelnatif.nicko.storage.Storage;
import java.io.ByteArrayInputStream;
import java.nio.ByteBuffer;
import java.sql.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Optional;
import java.util.UUID;
import java.util.logging.Logger;
public class SQLStorage extends Storage {
private final Nicko nicko;
private final Logger logger = Logger.getLogger("SQLStorage");
private final Configuration configuration;
private SQLStorageProvider provider;
public SQLStorage(Nicko nicko) {
this.nicko = nicko;
public SQLStorage(Configuration configuration) {
this.configuration = configuration;
}
@Override
public SQLStorageProvider getProvider() {
if (provider == null) {
provider = new SQLStorageProvider(nicko);
provider = new SQLStorageProvider(configuration);
}
return provider;
}
@ -41,7 +46,7 @@ public class SQLStorage extends Storage {
statement.executeUpdate();
return new ActionResult<>();
} catch (SQLException e) {
nicko.getLogger().warning("Couldn't send SQL Request: " + e.getMessage());
logger.warning("Couldn't send SQL Request: " + e.getMessage());
return new ActionResult<>(I18NDict.Error.SQL_ERROR);
}
}
@ -60,7 +65,7 @@ public class SQLStorage extends Storage {
final ResultSet resultSet = statement.executeQuery();
return resultSet.next();
} catch (SQLException e) {
nicko.getLogger().warning("Couldn't check if data is present: " + e.getMessage());
logger.warning("Couldn't check if data is present: " + e.getMessage());
return false;
}
}
@ -91,7 +96,7 @@ public class SQLStorage extends Storage {
final NickoProfile profile = new NickoProfile(name, skin, Locale.fromCode(locale), bungeecord);
return Optional.of(profile);
} catch (SQLException e) {
nicko.getLogger().warning("Couldn't fetch profile: " + e.getMessage());
logger.warning("Couldn't fetch profile: " + e.getMessage());
return Optional.empty();
}
}

View file

@ -1,6 +1,5 @@
package net.artelnatif.nicko.storage.sql;
import net.artelnatif.nicko.Nicko;
import net.artelnatif.nicko.config.Configuration;
import net.artelnatif.nicko.storage.StorageProvider;
import org.mariadb.jdbc.MariaDbDataSource;
@ -8,25 +7,27 @@ import org.mariadb.jdbc.MariaDbDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.logging.Logger;
public class SQLStorageProvider implements StorageProvider {
private final Nicko nicko;
private final Logger logger = Logger.getLogger("SQLStorageProvider");
private final Configuration configuration;
private Connection connection;
private final String schemaName = "nicko";
public SQLStorageProvider(Nicko nicko) {
this.nicko = nicko;
public SQLStorageProvider(Configuration configuration) {
this.configuration = configuration;
}
@Override
public boolean init() {
try {
final Configuration config = nicko.getConfig();
final MariaDbDataSource dataSource = new MariaDbDataSource();
dataSource.setUrl("jdbc:mariadb://" + config.getAddress());
dataSource.setUser(config.getUsername());
dataSource.setPassword(config.getPassword());
dataSource.setUrl("jdbc:mariadb://" + configuration.getAddress());
dataSource.setUser(configuration.getUsername());
dataSource.setPassword(configuration.getPassword());
connection = dataSource.getConnection();
final boolean initialized = connection != null && !connection.isClosed();
@ -36,7 +37,7 @@ public class SQLStorageProvider implements StorageProvider {
createTable();
return true;
} catch (SQLException e) {
nicko.getLogger().severe("Couldn't establish a connection to the MySQL database: " + e.getMessage());
logger.severe("Couldn't establish a connection to the MySQL database: " + e.getMessage());
return false;
}
}

View file

@ -1,4 +0,0 @@
name: ${project.parent.name}
main: net.artelnatif.nicko.bungee.NickoBungee
version: ${project.version}
author: Aro

View file

@ -1,5 +1,5 @@
name: Nicko
main: net.artelnatif.nicko.bukkit.NickoBukkit
main: net.artelnatif.nicko.NickoBukkit
version: 1.0-SNAPSHOT
author: Aro
api-version: 1.19

View file

@ -1,7 +1,7 @@
package net.artelnatif.nicko.test;
import be.seeseemelk.mockbukkit.MockBukkit;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.config.Configuration;
import org.junit.jupiter.api.*;
@ -16,7 +16,6 @@ public class NickoPluginTest {
"",
"",
true,
false,
false);
MockBukkit.mock();
plugin = MockBukkit.load(NickoBukkit.class, config);
@ -25,8 +24,8 @@ public class NickoPluginTest {
@Test
@DisplayName("Plugin Initialization")
public void testPluginInitialization() {
Assertions.assertNotNull(plugin.getNicko().getDataStore().getStorage().getProvider());
Assertions.assertNotNull(plugin.getNicko().getConfig());
Assertions.assertNotNull(plugin.getDataStore().getStorage().getProvider());
Assertions.assertNotNull(plugin.getConfig());
}
@AfterAll

View file

@ -3,7 +3,7 @@ package net.artelnatif.nicko.test.storage;
import be.seeseemelk.mockbukkit.MockBukkit;
import be.seeseemelk.mockbukkit.ServerMock;
import be.seeseemelk.mockbukkit.entity.PlayerMock;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.config.Configuration;
import net.artelnatif.nicko.disguise.ActionResult;
import net.artelnatif.nicko.disguise.NickoProfile;
@ -24,7 +24,6 @@ public class BrokenSQLTest {
"INVALID_PASSWORD",
"",
false,
false,
false);
server = MockBukkit.mock();
plugin = MockBukkit.load(NickoBukkit.class, config);
@ -34,22 +33,22 @@ public class BrokenSQLTest {
@Test
@DisplayName("Fail to create Tables")
public void createSQLTables() {
Assertions.assertTrue(plugin.getNicko().getDataStore().getStorage().isError());
Assertions.assertTrue(plugin.getDataStore().getStorage().isError());
}
@Test
@DisplayName("Fail to Store Player Via SQL")
public void storePlayer() {
final Optional<NickoProfile> optionalProfile = plugin.getNicko().getDataStore().getData(player.getUniqueId());
final Optional<NickoProfile> optionalProfile = plugin.getDataStore().getData(player.getUniqueId());
Assertions.assertFalse(optionalProfile.isPresent());
ActionResult<Void> result = plugin.getNicko().getDataStore().saveData(player);
ActionResult<Void> result = plugin.getDataStore().saveData(player);
Assertions.assertTrue(result.isError());
}
@Test
@DisplayName("Fail to Retrieve Player Via SQL")
public void retrievePlayer() {
final Optional<NickoProfile> storeAction = plugin.getNicko().getDataStore().getData(player.getUniqueId());
final Optional<NickoProfile> storeAction = plugin.getDataStore().getData(player.getUniqueId());
Assertions.assertFalse(storeAction.isPresent());
}

View file

@ -3,8 +3,8 @@ package net.artelnatif.nicko.test.storage;
import be.seeseemelk.mockbukkit.MockBukkit;
import be.seeseemelk.mockbukkit.ServerMock;
import be.seeseemelk.mockbukkit.entity.PlayerMock;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.bukkit.i18n.Locale;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.i18n.Locale;
import net.artelnatif.nicko.config.Configuration;
import net.artelnatif.nicko.disguise.ActionResult;
import net.artelnatif.nicko.disguise.NickoProfile;
@ -26,7 +26,6 @@ public class SQLStorageTest {
"12345",
"",
false,
false,
false);
server = MockBukkit.mock();
plugin = MockBukkit.load(NickoBukkit.class, config);
@ -37,14 +36,14 @@ public class SQLStorageTest {
@DisplayName("Create SQL Tables")
@Order(1)
public void createSQLTables() {
Assertions.assertFalse(plugin.getNicko().getDataStore().getStorage().isError());
Assertions.assertFalse(plugin.getDataStore().getStorage().isError());
}
@Test
@DisplayName("Store Player Via SQL")
@Order(2)
public void storePlayer() {
final Optional<NickoProfile> optionalProfile = plugin.getNicko().getDataStore().getData(player.getUniqueId());
final Optional<NickoProfile> optionalProfile = plugin.getDataStore().getData(player.getUniqueId());
Assertions.assertTrue(optionalProfile.isPresent());
}
@ -52,7 +51,7 @@ public class SQLStorageTest {
@DisplayName("Retrieve Player Via SQL")
@Order(3)
public void retrievePlayer() {
final Optional<NickoProfile> storeAction = plugin.getNicko().getDataStore().getData(player.getUniqueId());
final Optional<NickoProfile> storeAction = plugin.getDataStore().getData(player.getUniqueId());
Assertions.assertTrue(storeAction.isPresent());
}
@ -60,7 +59,7 @@ public class SQLStorageTest {
@DisplayName("Update Player Via SQL")
@Order(4)
public void updatePlayer() {
final Optional<NickoProfile> optionalProfile = plugin.getNicko().getDataStore().getData(player.getUniqueId());
final Optional<NickoProfile> optionalProfile = plugin.getDataStore().getData(player.getUniqueId());
Assertions.assertTrue(optionalProfile.isPresent());
final NickoProfile profile = optionalProfile.get();
@ -74,10 +73,10 @@ public class SQLStorageTest {
profile.setLocale(Locale.FRENCH);
profile.setBungeecordTransfer(false);
final ActionResult<Void> result = plugin.getNicko().getDataStore().saveData(player);
final ActionResult<Void> result = plugin.getDataStore().saveData(player);
Assertions.assertFalse(result.isError());
final Optional<NickoProfile> optionalUpdatedProfile = plugin.getNicko().getDataStore().getData(player.getUniqueId());
final Optional<NickoProfile> optionalUpdatedProfile = plugin.getDataStore().getData(player.getUniqueId());
Assertions.assertTrue(optionalUpdatedProfile.isPresent());
final NickoProfile updatedProfile = optionalProfile.get();
Assertions.assertEquals(updatedProfile.getName(), "Notch");
@ -90,7 +89,7 @@ public class SQLStorageTest {
@DisplayName("Remove Player Disguise Via SQL")
@Order(5)
public void removePlayerDisguise() {
final Optional<NickoProfile> optionalProfile = plugin.getNicko().getDataStore().getData(player.getUniqueId());
final Optional<NickoProfile> optionalProfile = plugin.getDataStore().getData(player.getUniqueId());
Assertions.assertTrue(optionalProfile.isPresent());
final NickoProfile profile = optionalProfile.get();
@ -98,10 +97,10 @@ public class SQLStorageTest {
profile.setName(null);
profile.setSkin(null);
final ActionResult<Void> result = plugin.getNicko().getDataStore().saveData(player);
final ActionResult<Void> result = plugin.getDataStore().saveData(player);
Assertions.assertFalse(result.isError());
final Optional<NickoProfile> optionalUpdatedProfile = plugin.getNicko().getDataStore().getData(player.getUniqueId());
final Optional<NickoProfile> optionalUpdatedProfile = plugin.getDataStore().getData(player.getUniqueId());
Assertions.assertTrue(optionalUpdatedProfile.isPresent());
final NickoProfile updatedProfile = optionalProfile.get();
Assertions.assertNull(updatedProfile.getName());

View file

@ -4,7 +4,7 @@ import com.google.common.collect.Lists;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import com.mojang.authlib.properties.PropertyMap;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.disguise.ActionResult;
import net.artelnatif.nicko.disguise.NickoProfile;
import net.artelnatif.nicko.mojang.MojangSkin;

View file

@ -4,7 +4,7 @@ import com.google.common.collect.Lists;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import com.mojang.authlib.properties.PropertyMap;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.disguise.ActionResult;
import net.artelnatif.nicko.disguise.NickoProfile;
import net.artelnatif.nicko.mojang.MojangSkin;

View file

@ -4,7 +4,7 @@ import com.google.common.collect.Lists;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import com.mojang.authlib.properties.PropertyMap;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.disguise.ActionResult;
import net.artelnatif.nicko.disguise.NickoProfile;
import net.artelnatif.nicko.mojang.MojangSkin;

View file

@ -4,7 +4,7 @@ import com.google.common.collect.Lists;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import com.mojang.authlib.properties.PropertyMap;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.disguise.ActionResult;
import net.artelnatif.nicko.disguise.NickoProfile;
import net.artelnatif.nicko.mojang.MojangSkin;

View file

@ -4,7 +4,7 @@ import com.google.common.collect.Lists;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import com.mojang.authlib.properties.PropertyMap;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.disguise.ActionResult;
import net.artelnatif.nicko.disguise.NickoProfile;
import net.artelnatif.nicko.mojang.MojangSkin;

View file

@ -4,7 +4,7 @@ import com.google.common.collect.Lists;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import com.mojang.authlib.properties.PropertyMap;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.disguise.ActionResult;
import net.artelnatif.nicko.disguise.NickoProfile;
import net.artelnatif.nicko.mojang.MojangSkin;

View file

@ -4,7 +4,7 @@ import com.google.common.collect.Lists;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import com.mojang.authlib.properties.PropertyMap;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.disguise.ActionResult;
import net.artelnatif.nicko.disguise.NickoProfile;
import net.artelnatif.nicko.mojang.MojangSkin;

View file

@ -3,7 +3,7 @@ package net.artelnatif.nicko.impl;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import com.mojang.authlib.properties.PropertyMap;
import net.artelnatif.nicko.bukkit.NickoBukkit;
import net.artelnatif.nicko.NickoBukkit;
import net.artelnatif.nicko.disguise.ActionResult;
import net.artelnatif.nicko.disguise.NickoProfile;
import net.artelnatif.nicko.mojang.MojangSkin;