diff options
| author | LMBishop <13875753+LMBishop@users.noreply.github.com> | 2021-06-21 01:02:06 +0100 |
|---|---|---|
| committer | LMBishop <13875753+LMBishop@users.noreply.github.com> | 2021-06-21 01:02:06 +0100 |
| commit | a835e7b48765f3b3fe1bc1c35adff0e867181e91 (patch) | |
| tree | ec6b3c0a83aaf0a5639a2adc58c3943458a3c63e /bukkit/src | |
| parent | af7e1e435f577bbf9742bb526ac00a71a21c219c (diff) | |
Start BungeeCord synchronisation with plugin messaging channelfix/sync
- See #180
Diffstat (limited to 'bukkit/src')
7 files changed, 72 insertions, 34 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java index eeb359bc..5fce8a31 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java @@ -64,6 +64,7 @@ import com.leonardobishop.quests.bukkit.util.Messages; import com.leonardobishop.quests.common.config.ConfigProblem; import com.leonardobishop.quests.common.config.ConfigProblemDescriptions; import com.leonardobishop.quests.common.config.QuestsConfig; +import com.leonardobishop.quests.common.enums.PluginMessagingChannels; import com.leonardobishop.quests.common.logger.QuestsLogger; import com.leonardobishop.quests.common.player.QPlayerManager; import com.leonardobishop.quests.common.plugin.Quests; @@ -82,6 +83,7 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.plugin.messaging.PluginMessageListener; import org.bukkit.scheduler.BukkitTask; import org.jetbrains.annotations.NotNull; @@ -214,7 +216,7 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { MetricsLite metrics = new MetricsLite(this, 3443); if (metrics.isEnabled()) { - this.getQuestsLogger().info("Metrics started. This can be disabled at /plugins/bStats/config.yml."); + this.questsLogger.info("Metrics started. This can be disabled at /plugins/bStats/config.yml."); } if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) { @@ -247,6 +249,31 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { super.getServer().getPluginManager().registerEvents(menuController, this); super.getServer().getPluginManager().registerEvents(new PlayerLeaveListener(this), this); + // TODO https://github.com/LMBishop/Quests/issues/180 +// this.getServer().getMessenger().registerOutgoingPluginChannel(this, PluginMessagingChannels.QUESTS_LOCKS_CHANNEL); +// this.getServer().getMessenger().registerIncomingPluginChannel(this, PluginMessagingChannels.QUESTS_LOCKS_CHANNEL, new PluginMessageListener() { +// @Override +// public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, @NotNull byte[] message) { +// System.out.println("A PLUGIN MESSAGE HAS BEEN RECEIVED"); +// } +// }); +// +// this.questsLogger.warning("#########################################################"); +// this.questsLogger.warning("WARNING WARNING WARNING WARNING WARNING WARNING WARNING"); +// this.questsLogger.warning(""); +// this.questsLogger.warning("You have BungeeCord synchronisation enabled, however"); +// this.questsLogger.warning("Quests does not appear to be present on the proxy server."); +// this.questsLogger.warning(""); +// this.questsLogger.warning("Player data will not be loaded if the BungeeCord plugin"); +// this.questsLogger.warning("is missing!"); +// this.questsLogger.warning(""); +// this.questsLogger.warning("You must install Quests onto your BungeeCord server, in"); +// this.questsLogger.warning("addition to this installation, in order for synchronisation"); +// this.questsLogger.warning("to work!"); +// this.questsLogger.warning(""); +// this.questsLogger.warning("For more info: "); //TODO write wiki page +// this.questsLogger.warning("#########################################################"); + // register task types after the server has fully started Bukkit.getScheduler().runTask(this, () -> { taskTypeManager.registerTaskType(new MiningTaskType(this)); @@ -317,6 +344,11 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { } @Override + public void onDisable() { + this.getServer().getMessenger().unregisterOutgoingPluginChannel(this); + } + + @Override public void reloadQuests() { if (this.reloadBaseConfiguration()) { BukkitQuestsLoader questsLoader = new BukkitQuestsLoader(this); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommand.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommand.java index 37a388fb..03a13ea1 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommand.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/QuestsCommand.java @@ -6,6 +6,7 @@ import com.leonardobishop.quests.bukkit.util.Messages; import com.leonardobishop.quests.common.config.ConfigProblem; import com.leonardobishop.quests.common.enums.QuestStartResult; import com.leonardobishop.quests.common.player.QPlayer; +import com.leonardobishop.quests.common.player.QPlayerManager; import com.leonardobishop.quests.common.player.questprogressfile.QuestProgressFile; import com.leonardobishop.quests.common.quest.Category; import com.leonardobishop.quests.common.quest.Quest; @@ -41,7 +42,6 @@ public class QuestsCommand implements TabExecutor { this.plugin = plugin; } - @SuppressWarnings("deprecation") @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if (plugin.getTaskTypeManager().areRegistrationsAccepted()) { diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerJoinListener.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerJoinListener.java index 2fe15860..103c4fcb 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerJoinListener.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerJoinListener.java @@ -1,13 +1,15 @@ package com.leonardobishop.quests.bukkit.listener; +import com.google.common.io.ByteArrayDataOutput; +import com.google.common.io.ByteStreams; import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; import com.leonardobishop.quests.bukkit.util.Messages; +import com.leonardobishop.quests.common.enums.PluginMessagingChannels; import com.leonardobishop.quests.common.player.QPlayer; import org.bukkit.Bukkit; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.bukkit.event.player.PlayerJoinEvent; import java.util.UUID; @@ -20,15 +22,8 @@ public class PlayerJoinListener implements Listener { this.plugin = plugin; } - @EventHandler(priority = EventPriority.MONITOR) - public void onAsyncJoin(AsyncPlayerPreLoginEvent event) { - plugin.getPlayerManager().loadPlayer(event.getUniqueId()); - } - @EventHandler - public void onEvent(PlayerJoinEvent event) { - UUID playerUuid = event.getPlayer().getUniqueId(); - plugin.getPlayerManager().loadPlayer(playerUuid); + public void onJoin(PlayerJoinEvent event) { if (plugin.getDescription().getVersion().contains("beta") && event.getPlayer().hasPermission("quests.admin")) { event.getPlayer().sendMessage(Messages.BETA_REMINDER.getMessage()); } @@ -41,11 +36,29 @@ public class PlayerJoinListener implements Listener { Bukkit.getScheduler().runTaskLater(this.plugin, () -> event.getPlayer().sendMessage(updateMessage), 50L); } - QPlayer qPlayer = plugin.getPlayerManager().getPlayer(playerUuid); - if (qPlayer == null) return; + Player player = event.getPlayer(); + +// Bukkit.getScheduler().runTaskLater(plugin, () -> { +// if (!player.isOnline()) return; +// +// ByteArrayDataOutput out = ByteStreams.newDataOutput(); +// out.writeUTF("acquireLock"); +// out.writeUTF(player.getUniqueId().toString()); +// player.sendPluginMessage(plugin, PluginMessagingChannels.QUESTS_LOCKS_CHANNEL, out.toByteArray()); +// }, 20L); + + + plugin.getScheduler().doAsync(() -> { + plugin.getPlayerManager().loadPlayer(player.getUniqueId()); + + plugin.getScheduler().doSync(() -> { + QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId()); + if (qPlayer == null) return; - // run a full check to check for any missed quest completions - plugin.getQuestCompleter().queueFullCheck(qPlayer.getQuestProgressFile()); + // run a full check to check for any missed quest completions + plugin.getQuestCompleter().queueFullCheck(qPlayer.getQuestProgressFile()); + }); + }); } } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerLeaveListener.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerLeaveListener.java index 1f41344a..db8bb698 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerLeaveListener.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/listener/PlayerLeaveListener.java @@ -16,9 +16,7 @@ public class PlayerLeaveListener implements Listener { @EventHandler public void onEvent(PlayerQuitEvent event) { - QPlayer qPlayer = plugin.getPlayerManager().getPlayer(event.getPlayer().getUniqueId()); - if (qPlayer == null) return; - plugin.getPlayerManager().removePlayer(qPlayer.getPlayerUUID()); + plugin.getPlayerManager().removePlayer(event.getPlayer().getUniqueId()); } } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java index fd473af6..5482c63a 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/MySqlStorageProvider.java @@ -126,7 +126,7 @@ public class MySqlStorageProvider implements StorageProvider { @Override public QuestProgressFile loadProgressFile(UUID uuid) { - if (fault) return null; + if (fault) throw new RuntimeException("storage provider encountered a fault during initialization and cannot be used"); QuestProgressFile questProgressFile = new QuestProgressFile(uuid, plugin); try (Connection connection = hikari.getConnection()) { plugin.getQuestsLogger().debug("Querying player " + uuid); @@ -197,16 +197,14 @@ public class MySqlStorageProvider implements StorageProvider { questProgressFile.addQuestProgress(questProgress); } } catch (SQLException e) { - plugin.getQuestsLogger().severe("Failed to load player: " + uuid + "!"); - e.printStackTrace(); - return null; + throw new RuntimeException(e); } return questProgressFile; } @Override public void saveProgressFile(UUID uuid, QuestProgressFile questProgressFile) { - if (fault) return; + if (fault) throw new RuntimeException("storage provider encountered a fault during initialization and cannot be used"); try (Connection connection = hikari.getConnection()) { try (PreparedStatement writeQuestProgress = connection.prepareStatement(this.statementProcessor.apply(WRITE_PLAYER_QUEST_PROGRESS)); PreparedStatement writeTaskProgress = connection.prepareStatement(this.statementProcessor.apply(WRITE_PLAYER_TASK_PROGRESS))) { @@ -269,8 +267,7 @@ public class MySqlStorageProvider implements StorageProvider { writeTaskProgress.executeBatch(); } } catch (SQLException e) { - plugin.getQuestsLogger().severe("Failed to save player: " + uuid + "!"); - e.printStackTrace(); + throw new RuntimeException(e); } } } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java index 75e271f9..0a272abc 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/storage/YamlStorageProvider.java @@ -79,10 +79,6 @@ public class YamlStorageProvider implements StorageProvider { plugin.getQuestsLogger().debug("Player " + uuid + " does not have a quest progress file."); } } - } catch (Exception ex) { - plugin.getQuestsLogger().severe("Failed to load player: " + uuid + "! This WILL cause errors."); - ex.printStackTrace(); - // fuck } finally { lock.unlock(); } @@ -104,7 +100,7 @@ public class YamlStorageProvider implements StorageProvider { try { file.createNewFile(); } catch (IOException e) { - e.printStackTrace(); + throw new RuntimeException(e); } } @@ -128,8 +124,7 @@ public class YamlStorageProvider implements StorageProvider { data.save(file); plugin.getQuestsLogger().debug("Write of player " + uuid + " to disk complete."); } catch (IOException e) { - plugin.getQuestsLogger().debug("Failed to write player: " + uuid + "!."); - e.printStackTrace(); + throw new RuntimeException(e); } } finally { lock.unlock(); diff --git a/bukkit/src/main/resources/resources/bukkit/config.yml b/bukkit/src/main/resources/resources/bukkit/config.yml index f7084505..7e007ba2 100644 --- a/bukkit/src/main/resources/resources/bukkit/config.yml +++ b/bukkit/src/main/resources/resources/bukkit/config.yml @@ -237,8 +237,11 @@ options: # Storage options - please see the following: https://github.com/LMBishop/Quests/wiki/Storage-Providers storage: # Either 'yaml' (flatfile) or 'mysql' (network) - # Please read the following before using MySQL https://github.com/LMBishop/Quests/wiki/Storage-Providers#network + # You must read the following before using MySQL https://github.com/LMBishop/Quests/wiki/Storage-Providers#network provider: "yaml" + # Please see the following wiki page before changing these options: + synchronisation: + bungeecord: false # The following is only applicable for database storage providers (e.g. mysql) database-settings: network: |
