diff --git a/.settings/.gitignore b/.settings/.gitignore deleted file mode 100644 index 9976760..0000000 --- a/.settings/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/org.eclipse.core.resources.prefs -/org.eclipse.m2e.core.prefs diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 2f5cc74..4263c49 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,5 @@ -eclipse.preferences.version=1 +#Sat Jan 15 01:48:59 CST 2022 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore -org.eclipse.jdt.core.compiler.release=disabled org.eclipse.jdt.core.compiler.source=1.8 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.compliance=1.8 diff --git a/pom.xml b/pom.xml index 8e05ebb..eaf83ef 100644 --- a/pom.xml +++ b/pom.xml @@ -260,5 +260,11 @@ 4.2.0 test + + org.mockito + mockito-junit-jupiter + 4.2.0 + test + diff --git a/src/main/java/venture/Aust1n46/chat/VentureChatBungeePluginModule.java b/src/main/java/venture/Aust1n46/chat/VentureChatBungeePluginModule.java new file mode 100644 index 0000000..35035a9 --- /dev/null +++ b/src/main/java/venture/Aust1n46/chat/VentureChatBungeePluginModule.java @@ -0,0 +1,18 @@ +package venture.Aust1n46.chat; + +import com.google.inject.AbstractModule; + +import venture.Aust1n46.chat.proxy.VentureChatBungee; + +public class VentureChatBungeePluginModule extends AbstractModule { + private final VentureChatBungee plugin; + + public VentureChatBungeePluginModule(final VentureChatBungee plugin) { + this.plugin = plugin; + } + + @Override + protected void configure() { + this.bind(VentureChatBungee.class).toInstance(plugin); + } +} diff --git a/src/main/java/venture/Aust1n46/chat/controllers/VentureChatProxyFlatFileController.java b/src/main/java/venture/Aust1n46/chat/controllers/VentureChatProxyFlatFileController.java index a524f9b..5a89ab6 100644 --- a/src/main/java/venture/Aust1n46/chat/controllers/VentureChatProxyFlatFileController.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/VentureChatProxyFlatFileController.java @@ -19,8 +19,8 @@ import net.md_5.bungee.config.YamlConfiguration; import venture.Aust1n46.chat.controllers.commands.MuteContainer; import venture.Aust1n46.chat.model.SynchronizedVentureChatPlayer; import venture.Aust1n46.chat.proxy.VentureChatProxySource; -import venture.Aust1n46.chat.service.UUIDService; -import venture.Aust1n46.chat.service.VentureChatPlayerApiService; +import venture.Aust1n46.chat.service.proxy.ProxyUuidService; +import venture.Aust1n46.chat.service.proxy.VentureChatProxyPlayerApiService; /** * Class for reading and writing proxy player data. @@ -29,9 +29,9 @@ import venture.Aust1n46.chat.service.VentureChatPlayerApiService; */ public class VentureChatProxyFlatFileController { @Inject - private UUIDService uuidService; + private ProxyUuidService uuidService; @Inject - private VentureChatPlayerApiService playerApiService; + private VentureChatProxyPlayerApiService playerApiService; public void loadLegacyBungeePlayerData(File dataFolder, VentureChatProxySource source) { File sync = new File(dataFolder, "BungeePlayers.yml"); diff --git a/src/main/java/venture/Aust1n46/chat/controllers/commands/Me.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Me.java index 243b57c..f42751a 100644 --- a/src/main/java/venture/Aust1n46/chat/controllers/commands/Me.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Me.java @@ -17,7 +17,8 @@ public class Me implements VentureCommand { @Inject private VentureChatPlayerApiService playerApiService; - @Override + @SuppressWarnings("deprecation") + @Override public void execute(CommandSender sender, String command, String[] args) { if (sender.hasPermission("venturechat.me")) { if (args.length > 0) { diff --git a/src/main/java/venture/Aust1n46/chat/initiators/listeners/ChatListener.java b/src/main/java/venture/Aust1n46/chat/initiators/listeners/ChatListener.java index 707c2a1..51e71a0 100644 --- a/src/main/java/venture/Aust1n46/chat/initiators/listeners/ChatListener.java +++ b/src/main/java/venture/Aust1n46/chat/initiators/listeners/ChatListener.java @@ -37,6 +37,7 @@ import venture.Aust1n46.chat.service.VentureChatPlayerApiService; import venture.Aust1n46.chat.utilities.FormatUtils; //This class listens to chat through the chat event and handles the bulk of the chat channels and formatting. +@SuppressWarnings("deprecation") @Singleton public class ChatListener implements Listener { private final boolean essentialsDiscordHook = Bukkit.getPluginManager().isPluginEnabled("EssentialsDiscord"); @@ -54,8 +55,7 @@ public class ChatListener implements Listener { private ConfigService configService; // this event isn't always asynchronous even though the event's name starts with "Async" - // blame md_5 for that one - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onAsyncPlayerChatEvent(AsyncPlayerChatEvent event) { event.setCancelled(true); Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { @@ -564,7 +564,6 @@ public class ChatListener implements Listener { System.out.println(out.size() + " bytes size with json"); } out.writeUTF(plugin.getVaultPermission().getPrimaryGroup(mcp.getPlayer())); // look into not sending this - @SuppressWarnings("deprecation") // Paper Deprecated final String displayName = mcp.getPlayer().getDisplayName(); out.writeUTF(displayName); pluginMessageController.sendPluginMessage(byteOutStream); diff --git a/src/main/java/venture/Aust1n46/chat/initiators/listeners/CommandListener.java b/src/main/java/venture/Aust1n46/chat/initiators/listeners/CommandListener.java index c2c5fee..19795ee 100644 --- a/src/main/java/venture/Aust1n46/chat/initiators/listeners/CommandListener.java +++ b/src/main/java/venture/Aust1n46/chat/initiators/listeners/CommandListener.java @@ -246,11 +246,14 @@ public class CommandListener implements CommandExecutor, Listener { @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOW) public void InventoryClick(InventoryClickEvent e) { - ItemStack item = e.getCurrentItem(); - if(item == null || !e.getView().getTitle().contains("VentureChat")) { + if(!e.getView().getTitle().contains("VentureChat")) { return; } e.setCancelled(true); + ItemStack item = e.getCurrentItem(); + if (item == null) { + return; + } VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer((Player) e.getWhoClicked()); String playerName = e.getView().getTitle().replace(" GUI", "").replace("VentureChat: ", ""); VentureChatPlayer target = playerApiService.getMineverseChatPlayer(playerName); diff --git a/src/main/java/venture/Aust1n46/chat/initiators/listeners/SignListener.java b/src/main/java/venture/Aust1n46/chat/initiators/listeners/SignListener.java index 1a52160..dfcef96 100644 --- a/src/main/java/venture/Aust1n46/chat/initiators/listeners/SignListener.java +++ b/src/main/java/venture/Aust1n46/chat/initiators/listeners/SignListener.java @@ -18,6 +18,7 @@ public class SignListener implements Listener { @Inject private VentureChatPlayerApiService playerApiService; + @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.HIGH) public void onSignChange(SignChangeEvent event) { VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer(event.getPlayer()); diff --git a/src/main/java/venture/Aust1n46/chat/proxy/VentureChatBungee.java b/src/main/java/venture/Aust1n46/chat/proxy/VentureChatBungee.java index 7192d34..b79c739 100644 --- a/src/main/java/venture/Aust1n46/chat/proxy/VentureChatBungee.java +++ b/src/main/java/venture/Aust1n46/chat/proxy/VentureChatBungee.java @@ -7,7 +7,9 @@ import java.nio.file.Files; import java.util.List; import java.util.stream.Collectors; +import com.google.inject.Guice; import com.google.inject.Inject; +import com.google.inject.Injector; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.TextComponent; @@ -24,8 +26,9 @@ import net.md_5.bungee.config.Configuration; import net.md_5.bungee.config.ConfigurationProvider; import net.md_5.bungee.config.YamlConfiguration; import net.md_5.bungee.event.EventHandler; +import venture.Aust1n46.chat.VentureChatBungeePluginModule; import venture.Aust1n46.chat.controllers.VentureChatProxyFlatFileController; -import venture.Aust1n46.chat.service.UUIDService; +import venture.Aust1n46.chat.service.proxy.ProxyUuidService; import venture.Aust1n46.chat.utilities.FormatUtils; /** @@ -36,34 +39,37 @@ import venture.Aust1n46.chat.utilities.FormatUtils; public class VentureChatBungee extends Plugin implements Listener, VentureChatProxySource { private static Configuration bungeeConfig; private File bungeePlayerDataDirectory; - + + @Inject + private ProxyUuidService uuidService; @Inject - private UUIDService uuidService; - @Inject private VentureChatProxyFlatFileController proxyFlatFileController; @Inject private VentureChatProxy proxy; @Override public void onEnable() { - if(!getDataFolder().exists()) { + final VentureChatBungeePluginModule pluginModule = new VentureChatBungeePluginModule(this); + final Injector injector = Guice.createInjector(pluginModule); + injector.injectMembers(this); + + if (!getDataFolder().exists()) { getDataFolder().mkdir(); } File config = new File(getDataFolder(), "bungeeconfig.yml"); try { - if(!config.exists()) { + if (!config.exists()) { Files.copy(getResourceAsStream("bungeeconfig.yml"), config.toPath()); } bungeeConfig = ConfigurationProvider.getProvider(YamlConfiguration.class).load(new File(getDataFolder(), "bungeeconfig.yml")); - } - catch(Exception e) { + } catch (Exception e) { e.printStackTrace(); } - + bungeePlayerDataDirectory = new File(getDataFolder().getAbsolutePath() + "/PlayerData"); proxyFlatFileController.loadLegacyBungeePlayerData(bungeePlayerDataDirectory, this); proxyFlatFileController.loadProxyPlayerData(bungeePlayerDataDirectory, this); - + this.getProxy().registerChannel(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_STRING); this.getProxy().getPluginManager().registerListener(this, this); } @@ -72,49 +78,48 @@ public class VentureChatBungee extends Plugin implements Listener, VentureChatPr public void onDisable() { proxyFlatFileController.saveProxyPlayerData(bungeePlayerDataDirectory, this); } - + @EventHandler public void onPlayerJoin(ServerSwitchEvent event) { updatePlayerNames(); } - + @EventHandler public void onPlayerLeave(ServerDisconnectEvent event) { updatePlayerNames(); } - + @EventHandler public void onPlayerJoinNetwork(PostLoginEvent event) { uuidService.checkOfflineUUIDWarningProxy(event.getPlayer().getUniqueId(), this); } - + private void updatePlayerNames() { try { ByteArrayOutputStream outstream = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(outstream); out.writeUTF("PlayerNames"); out.writeInt(getProxy().getPlayers().size()); - for(ProxiedPlayer pp : getProxy().getPlayers()) { + for (ProxiedPlayer pp : getProxy().getPlayers()) { out.writeUTF(pp.getName()); } - - for(String send : getProxy().getServers().keySet()) { - if(getProxy().getServers().get(send).getPlayers().size() > 0) { + + for (String send : getProxy().getServers().keySet()) { + if (getProxy().getServers().get(send).getPlayers().size() > 0) { getProxy().getServers().get(send).sendData(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_STRING, outstream.toByteArray()); } } - } - catch(Exception e) { + } catch (Exception e) { e.printStackTrace(); } } @EventHandler public void onPluginMessage(PluginMessageEvent event) { - if(!event.getTag().equals(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_STRING) && !event.getTag().contains("viaversion:")) { + if (!event.getTag().equals(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_STRING) && !event.getTag().contains("viaversion:")) { return; } - if(!(event.getSender() instanceof Server)) { + if (!(event.getSender() instanceof Server)) { return; } String serverName = ((Server) event.getSender()).getInfo().getName(); @@ -128,7 +133,8 @@ public class VentureChatBungee extends Plugin implements Listener, VentureChatPr @Override public List getServers() { - return getProxy().getServers().values().stream().map(bungeeServer -> new VentureChatProxyServer(bungeeServer.getName(), bungeeServer.getPlayers().isEmpty())).collect(Collectors.toList()); + return getProxy().getServers().values().stream().map(bungeeServer -> new VentureChatProxyServer(bungeeServer.getName(), bungeeServer.getPlayers().isEmpty())) + .collect(Collectors.toList()); } @Override diff --git a/src/main/java/venture/Aust1n46/chat/proxy/VentureChatProxy.java b/src/main/java/venture/Aust1n46/chat/proxy/VentureChatProxy.java index ceb83d6..928a56b 100644 --- a/src/main/java/venture/Aust1n46/chat/proxy/VentureChatProxy.java +++ b/src/main/java/venture/Aust1n46/chat/proxy/VentureChatProxy.java @@ -12,7 +12,7 @@ import com.google.inject.Inject; import venture.Aust1n46.chat.controllers.commands.MuteContainer; import venture.Aust1n46.chat.model.SynchronizedVentureChatPlayer; import venture.Aust1n46.chat.model.TemporaryDataInstance; -import venture.Aust1n46.chat.service.VentureChatPlayerApiService; +import venture.Aust1n46.chat.service.proxy.VentureChatProxyPlayerApiService; public class VentureChatProxy { public static String PLUGIN_MESSAGING_CHANNEL_NAMESPACE = "venturechat"; @@ -20,7 +20,7 @@ public class VentureChatProxy { public static String PLUGIN_MESSAGING_CHANNEL_STRING = "venturechat:data"; @Inject - private VentureChatPlayerApiService playerApiService; + private VentureChatProxyPlayerApiService playerApiService; public void onPluginMessage(byte[] data, String serverName, VentureChatProxySource source) { ByteArrayInputStream instream = new ByteArrayInputStream(data); diff --git a/src/main/java/venture/Aust1n46/chat/service/UUIDService.java b/src/main/java/venture/Aust1n46/chat/service/UUIDService.java index aa2417f..9ab80f0 100644 --- a/src/main/java/venture/Aust1n46/chat/service/UUIDService.java +++ b/src/main/java/venture/Aust1n46/chat/service/UUIDService.java @@ -8,55 +8,31 @@ import com.google.inject.Inject; import com.google.inject.Singleton; import venture.Aust1n46.chat.initiators.application.VentureChat; -import venture.Aust1n46.chat.proxy.VentureChatProxySource; import venture.Aust1n46.chat.utilities.FormatUtils; @Singleton public class UUIDService { @Inject private VentureChat plugin; - - /** - * Returns whether the passed UUID is a v3 UUID. Offline UUIDs are v3, online are v4. - * - * @param uuid the UUID to check - * @return whether the UUID is a v3 UUID & thus is offline - */ - public boolean uuidIsOffline(UUID uuid) { - return uuid.version() == 3; - } - - public boolean shouldSkipOfflineUUID(UUID uuid) { - return (uuidIsOffline(uuid) && !plugin.getConfig().getBoolean("offline_server_acknowledgement", false)); - } - - public boolean shouldSkipOfflineUUIDProxy(UUID uuid, VentureChatProxySource source) { - return (uuidIsOffline(uuid) && !source.isOfflineServerAcknowledgementSet()); - } - - public void checkOfflineUUIDWarning(UUID uuid) { - if(shouldSkipOfflineUUID(uuid)) { - Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - Detected Offline UUID!")); - Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - If you are using BungeeCord, make sure you have properly setup IP Forwarding.")); - Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - https://www.spigotmc.org/wiki/bungeecord-ip-forwarding/")); - Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - You can access this wiki page from the log file or just Google it.")); - Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - If you're running a \"cracked\" server, player data might not be stored properly, and thus, you are on your own.")); - Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - If you run your server in offline mode, you will probably lose your player data when switching to online mode!")); - Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - No player data will be saved in offline mode unless you set the \"cracked\" server acknowledgement in the config!")); - return; + + public boolean shouldSkipOfflineUUID(UUID uuid) { + return (FormatUtils.uuidIsOffline(uuid) && !plugin.getConfig().getBoolean("offline_server_acknowledgement", false)); + } + + public void checkOfflineUUIDWarning(UUID uuid) { + if (shouldSkipOfflineUUID(uuid)) { + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - Detected Offline UUID!")); + Bukkit.getConsoleSender() + .sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - If you are using BungeeCord, make sure you have properly setup IP Forwarding.")); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - https://www.spigotmc.org/wiki/bungeecord-ip-forwarding/")); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - You can access this wiki page from the log file or just Google it.")); + Bukkit.getConsoleSender().sendMessage(FormatUtils + .FormatStringAll("&8[&eVentureChat&8]&c - If you're running a \"cracked\" server, player data might not be stored properly, and thus, you are on your own.")); + Bukkit.getConsoleSender().sendMessage(FormatUtils + .FormatStringAll("&8[&eVentureChat&8]&c - If you run your server in offline mode, you will probably lose your player data when switching to online mode!")); + Bukkit.getConsoleSender().sendMessage(FormatUtils + .FormatStringAll("&8[&eVentureChat&8]&c - No player data will be saved in offline mode unless you set the \"cracked\" server acknowledgement in the config!")); + return; } - } - - public void checkOfflineUUIDWarningProxy(UUID uuid, VentureChatProxySource source) { - if(shouldSkipOfflineUUIDProxy(uuid, source)) { - source.sendConsoleMessage("&8[&eVentureChat&8]&c - Detected Offline UUID!"); - source.sendConsoleMessage("&8[&eVentureChat&8]&c - If you are using BungeeCord, make sure you have properly setup IP Forwarding."); - source.sendConsoleMessage("&8[&eVentureChat&8]&c - https://www.spigotmc.org/wiki/bungeecord-ip-forwarding/"); - source.sendConsoleMessage("&8[&eVentureChat&8]&c - You can access this wiki page from the log file or just Google it."); - source.sendConsoleMessage("&8[&eVentureChat&8]&c - If you're running a \"cracked\" server, player data might not be stored properly, and thus, you are on your own."); - source.sendConsoleMessage("&8[&eVentureChat&8]&c - If you run your server in offline mode, you will probably lose your player data when switching to online mode!"); - source.sendConsoleMessage("&8[&eVentureChat&8]&c - No player data will be saved in offline mode unless you set the \"cracked\" server acknowledgement in the config!"); - return; - } - } + } } diff --git a/src/main/java/venture/Aust1n46/chat/service/VentureChatPlayerApiService.java b/src/main/java/venture/Aust1n46/chat/service/VentureChatPlayerApiService.java index 69a8d8d..908ae74 100644 --- a/src/main/java/venture/Aust1n46/chat/service/VentureChatPlayerApiService.java +++ b/src/main/java/venture/Aust1n46/chat/service/VentureChatPlayerApiService.java @@ -8,7 +8,8 @@ import java.util.UUID; import org.bukkit.entity.Player; -import venture.Aust1n46.chat.model.SynchronizedVentureChatPlayer; +import com.google.inject.Singleton; + import venture.Aust1n46.chat.model.VentureChatPlayer; /** @@ -17,152 +18,125 @@ import venture.Aust1n46.chat.model.VentureChatPlayer; * * @author Aust1n46 */ +@Singleton public class VentureChatPlayerApiService { - private static HashMap playerMap = new HashMap(); - private static HashMap namesMap = new HashMap(); - private static HashMap onlinePlayerMap = new HashMap(); - - private static List networkPlayerNames = new ArrayList(); - private static HashMap proxyPlayerMap = new HashMap(); - - public void addNameToMap(VentureChatPlayer mcp) { - namesMap.put(mcp.getName(), mcp.getUuid()); - } + private final HashMap playerMap = new HashMap<>(); + private final HashMap namesMap = new HashMap<>(); + private final HashMap onlinePlayerMap = new HashMap<>(); + private final List networkPlayerNames = new ArrayList<>(); - public void removeNameFromMap(String name) { - namesMap.remove(name); - } + public void addNameToMap(VentureChatPlayer mcp) { + namesMap.put(mcp.getName(), mcp.getUuid()); + } - public void clearNameMap() { - namesMap.clear(); - } + public void removeNameFromMap(String name) { + namesMap.remove(name); + } - public void addMineverseChatPlayerToMap(VentureChatPlayer mcp) { - playerMap.put(mcp.getUuid(), mcp); - } + public void clearNameMap() { + namesMap.clear(); + } - public void clearMineverseChatPlayerMap() { - playerMap.clear(); - } + public void addMineverseChatPlayerToMap(VentureChatPlayer mcp) { + playerMap.put(mcp.getUuid(), mcp); + } - public Collection getMineverseChatPlayers() { - return playerMap.values(); - } + public void clearMineverseChatPlayerMap() { + playerMap.clear(); + } - public void addMineverseChatOnlinePlayerToMap(VentureChatPlayer mcp) { - onlinePlayerMap.put(mcp.getUuid(), mcp); - } + public Collection getMineverseChatPlayers() { + return playerMap.values(); + } - public void removeMineverseChatOnlinePlayerToMap(VentureChatPlayer mcp) { - onlinePlayerMap.remove(mcp.getUuid()); - } + public void addMineverseChatOnlinePlayerToMap(VentureChatPlayer mcp) { + onlinePlayerMap.put(mcp.getUuid(), mcp); + } - public void clearOnlineMineverseChatPlayerMap() { - onlinePlayerMap.clear(); - } + public void removeMineverseChatOnlinePlayerToMap(VentureChatPlayer mcp) { + onlinePlayerMap.remove(mcp.getUuid()); + } - public Collection getOnlineMineverseChatPlayers() { - return onlinePlayerMap.values(); - } + public void clearOnlineMineverseChatPlayerMap() { + onlinePlayerMap.clear(); + } - /** - * Get a MineverseChatPlayer wrapper from a Bukkit Player instance. - * - * @param player {@link Player} object. - * @return {@link VentureChatPlayer} - */ - public VentureChatPlayer getMineverseChatPlayer(Player player) { - return getMineverseChatPlayer(player.getUniqueId()); - } + public Collection getOnlineMineverseChatPlayers() { + return onlinePlayerMap.values(); + } - /** - * Get a MineverseChatPlayer wrapper from a UUID. - * - * @param uuid {@link UUID}. - * @return {@link VentureChatPlayer} - */ - public VentureChatPlayer getMineverseChatPlayer(UUID uuid) { - return playerMap.get(uuid); - } + /** + * Get a MineverseChatPlayer wrapper from a Bukkit Player instance. + * + * @param player {@link Player} object. + * @return {@link VentureChatPlayer} + */ + public VentureChatPlayer getMineverseChatPlayer(Player player) { + return getMineverseChatPlayer(player.getUniqueId()); + } - /** - * Get a MineverseChatPlayer wrapper from a user name. - * - * @param name {@link String}. - * @return {@link VentureChatPlayer} - */ - public VentureChatPlayer getMineverseChatPlayer(String name) { - return getMineverseChatPlayer(namesMap.get(name)); - } + /** + * Get a MineverseChatPlayer wrapper from a UUID. + * + * @param uuid {@link UUID}. + * @return {@link VentureChatPlayer} + */ + public VentureChatPlayer getMineverseChatPlayer(UUID uuid) { + return playerMap.get(uuid); + } - /** - * Get a MineverseChatPlayer wrapper from a Bukkit Player instance. Only checks - * current online players. Much more efficient! - * - * @param player {@link Player} object. - * @return {@link VentureChatPlayer} - */ - public VentureChatPlayer getOnlineMineverseChatPlayer(final Player player) { - return getOnlineMineverseChatPlayer(player.getUniqueId()); - } + /** + * Get a MineverseChatPlayer wrapper from a user name. + * + * @param name {@link String}. + * @return {@link VentureChatPlayer} + */ + public VentureChatPlayer getMineverseChatPlayer(String name) { + return getMineverseChatPlayer(namesMap.get(name)); + } - /** - * Get a MineverseChatPlayer wrapper from a UUID. Only checks current online - * players. Much more efficient! - * - * @param uuid {@link UUID}. - * @return {@link VentureChatPlayer} - */ - public VentureChatPlayer getOnlineMineverseChatPlayer(UUID uuid) { - return onlinePlayerMap.get(uuid); - } + /** + * Get a MineverseChatPlayer wrapper from a Bukkit Player instance. Only checks + * current online players. Much more efficient! + * + * @param player {@link Player} object. + * @return {@link VentureChatPlayer} + */ + public VentureChatPlayer getOnlineMineverseChatPlayer(final Player player) { + return getOnlineMineverseChatPlayer(player.getUniqueId()); + } - /** - * Get a MineverseChatPlayer wrapper from a user name. Only checks current - * online players. Much more efficient! - * - * @param name {@link String}. - * @return {@link VentureChatPlayer} - */ - public VentureChatPlayer getOnlineMineverseChatPlayer(String name) { - return getOnlineMineverseChatPlayer(namesMap.get(name)); - } - - - - + /** + * Get a MineverseChatPlayer wrapper from a UUID. Only checks current online + * players. Much more efficient! + * + * @param uuid {@link UUID}. + * @return {@link VentureChatPlayer} + */ + public VentureChatPlayer getOnlineMineverseChatPlayer(UUID uuid) { + return onlinePlayerMap.get(uuid); + } - public List getNetworkPlayerNames() { - return networkPlayerNames; - } + /** + * Get a MineverseChatPlayer wrapper from a user name. Only checks current + * online players. Much more efficient! + * + * @param name {@link String}. + * @return {@link VentureChatPlayer} + */ + public VentureChatPlayer getOnlineMineverseChatPlayer(String name) { + return getOnlineMineverseChatPlayer(namesMap.get(name)); + } - public void clearNetworkPlayerNames() { - networkPlayerNames.clear(); - } + public List getNetworkPlayerNames() { + return networkPlayerNames; + } - public void addNetworkPlayerName(String name) { - networkPlayerNames.add(name); - } + public void clearNetworkPlayerNames() { + networkPlayerNames.clear(); + } - public void addSynchronizedMineverseChatPlayerToMap(SynchronizedVentureChatPlayer smcp) { - proxyPlayerMap.put(smcp.getUUID(), smcp); - } - - public void clearProxyPlayerMap() { - proxyPlayerMap.clear(); - } - - public Collection getSynchronizedMineverseChatPlayers() { - return proxyPlayerMap.values(); - } - - /** - * Get a SynchronizedMineverseChatPlayer from a UUID. - * - * @param uuid {@link UUID} - * @return {@link SynchronizedVentureChatPlayer} - */ - public SynchronizedVentureChatPlayer getSynchronizedMineverseChatPlayer(UUID uuid) { - return proxyPlayerMap.get(uuid); - } + public void addNetworkPlayerName(String name) { + networkPlayerNames.add(name); + } } diff --git a/src/main/java/venture/Aust1n46/chat/service/proxy/ProxyUuidService.java b/src/main/java/venture/Aust1n46/chat/service/proxy/ProxyUuidService.java new file mode 100644 index 0000000..1156b67 --- /dev/null +++ b/src/main/java/venture/Aust1n46/chat/service/proxy/ProxyUuidService.java @@ -0,0 +1,29 @@ +package venture.Aust1n46.chat.service.proxy; + +import java.util.UUID; + +import com.google.inject.Singleton; + +import venture.Aust1n46.chat.proxy.VentureChatProxySource; +import venture.Aust1n46.chat.utilities.FormatUtils; + +@Singleton +public class ProxyUuidService { + + public boolean shouldSkipOfflineUUIDProxy(UUID uuid, VentureChatProxySource source) { + return (FormatUtils.uuidIsOffline(uuid) && !source.isOfflineServerAcknowledgementSet()); + } + + public void checkOfflineUUIDWarningProxy(UUID uuid, VentureChatProxySource source) { + if (shouldSkipOfflineUUIDProxy(uuid, source)) { + source.sendConsoleMessage("&8[&eVentureChat&8]&c - Detected Offline UUID!"); + source.sendConsoleMessage("&8[&eVentureChat&8]&c - If you are using BungeeCord, make sure you have properly setup IP Forwarding."); + source.sendConsoleMessage("&8[&eVentureChat&8]&c - https://www.spigotmc.org/wiki/bungeecord-ip-forwarding/"); + source.sendConsoleMessage("&8[&eVentureChat&8]&c - You can access this wiki page from the log file or just Google it."); + source.sendConsoleMessage("&8[&eVentureChat&8]&c - If you're running a \"cracked\" server, player data might not be stored properly, and thus, you are on your own."); + source.sendConsoleMessage("&8[&eVentureChat&8]&c - If you run your server in offline mode, you will probably lose your player data when switching to online mode!"); + source.sendConsoleMessage("&8[&eVentureChat&8]&c - No player data will be saved in offline mode unless you set the \"cracked\" server acknowledgement in the config!"); + return; + } + } +} diff --git a/src/main/java/venture/Aust1n46/chat/service/proxy/VentureChatProxyPlayerApiService.java b/src/main/java/venture/Aust1n46/chat/service/proxy/VentureChatProxyPlayerApiService.java new file mode 100644 index 0000000..3f76426 --- /dev/null +++ b/src/main/java/venture/Aust1n46/chat/service/proxy/VentureChatProxyPlayerApiService.java @@ -0,0 +1,36 @@ +package venture.Aust1n46.chat.service.proxy; + +import java.util.Collection; +import java.util.HashMap; +import java.util.UUID; + +import com.google.inject.Singleton; + +import venture.Aust1n46.chat.model.SynchronizedVentureChatPlayer; + +@Singleton +public class VentureChatProxyPlayerApiService { + private final HashMap proxyPlayerMap = new HashMap<>(); + + public void addSynchronizedMineverseChatPlayerToMap(SynchronizedVentureChatPlayer smcp) { + proxyPlayerMap.put(smcp.getUUID(), smcp); + } + + public void clearProxyPlayerMap() { + proxyPlayerMap.clear(); + } + + public Collection getSynchronizedMineverseChatPlayers() { + return proxyPlayerMap.values(); + } + + /** + * Get a SynchronizedMineverseChatPlayer from a UUID. + * + * @param uuid {@link UUID} + * @return {@link SynchronizedVentureChatPlayer} + */ + public SynchronizedVentureChatPlayer getSynchronizedMineverseChatPlayer(UUID uuid) { + return proxyPlayerMap.get(uuid); + } +} diff --git a/src/main/java/venture/Aust1n46/chat/utilities/FormatUtils.java b/src/main/java/venture/Aust1n46/chat/utilities/FormatUtils.java index 048afb2..2f5cb2e 100644 --- a/src/main/java/venture/Aust1n46/chat/utilities/FormatUtils.java +++ b/src/main/java/venture/Aust1n46/chat/utilities/FormatUtils.java @@ -1,5 +1,6 @@ package venture.Aust1n46.chat.utilities; +import java.util.UUID; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -300,4 +301,15 @@ public class FormatUtils { public static String stripColor(String message) { return message.replaceAll("(\u00A7([a-z0-9]))", ""); } + + /** + * Returns whether the passed UUID is a v3 UUID. Offline UUIDs are v3, online + * are v4. + * + * @param uuid the UUID to check + * @return whether the UUID is a v3 UUID & thus is offline + */ + public static boolean uuidIsOffline(UUID uuid) { + return uuid.version() == 3; + } } diff --git a/src/main/resources/bungee.yml b/src/main/resources/bungee.yml index a741fd9..842149e 100644 --- a/src/main/resources/bungee.yml +++ b/src/main/resources/bungee.yml @@ -1,4 +1,4 @@ name: VentureChat -main: mineverse.Aust1n46.chat.proxy.VentureChatBungee +main: venture.Aust1n46.chat.proxy.VentureChatBungee version: ${project.version} -author: Aust1n46 \ No newline at end of file +author: Aust1n46 diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index ba3c12f..9e9c941 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: VentureChat version: ${project.version} api-version: 1.13 -main: venture.Aust1n46.chat.VentureChat +main: venture.Aust1n46.chat.initiators.application.VentureChat depend: [Vault, ProtocolLib, PlaceholderAPI] softdepend: [Towny, Factions, EssentialsDiscord] author: Aust1n46