From 88f85d2b15932dbe9816da07fa031c4fbdc28970 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Sat, 21 Jan 2017 23:01:58 +0100 Subject: [PATCH] Fixed rename method, player data and other stuff --- .../buttondevteam/core/PlayerListener.java | 8 +- .../core/ScheduledRestartCommand.java | 4 +- .../lib/player/ChromaGamerBase.java | 19 ++-- .../lib/player/TBMCPlayerAddEvent.java | 36 -------- .../lib/player/TBMCPlayerBase.java | 89 +++++++++++++++++++ .../lib/player/TBMCPlayerJoinEvent.java | 6 +- .../lib/player/TBMCPlayerLoadEvent.java | 13 +-- .../lib/player/TBMCPlayerQuitEvent.java | 6 +- .../lib/player/TBMCPlayerSaveEvent.java | 12 +-- 9 files changed, 119 insertions(+), 74 deletions(-) delete mode 100644 src/main/java/buttondevteam/lib/player/TBMCPlayerAddEvent.java diff --git a/src/main/java/buttondevteam/core/PlayerListener.java b/src/main/java/buttondevteam/core/PlayerListener.java index 9261b21..0328dac 100644 --- a/src/main/java/buttondevteam/core/PlayerListener.java +++ b/src/main/java/buttondevteam/core/PlayerListener.java @@ -6,6 +6,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; +import buttondevteam.lib.TBMCCoreAPI; import buttondevteam.lib.player.TBMCPlayer; public class PlayerListener implements Listener { @@ -13,9 +14,10 @@ public class PlayerListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST) public void OnPlayerJoin(PlayerJoinEvent event) { TBMCPlayer player = TBMCPlayer.loadPlayer(event.getPlayer()); - if (player == null) - event.getPlayer().sendMessage("§c[TBMC] Failed to load player data! Please contact a mod."); - else + if (player == null) { + TBMCCoreAPI.SendException("Error on player join!", new Exception("Player is null")); + event.getPlayer().sendMessage("§c[TBMC] Failed to load player data! The error has been sent to the devs."); + } else TBMCPlayer.joinPlayer(player); } diff --git a/src/main/java/buttondevteam/core/ScheduledRestartCommand.java b/src/main/java/buttondevteam/core/ScheduledRestartCommand.java index 2bec03b..77bc185 100644 --- a/src/main/java/buttondevteam/core/ScheduledRestartCommand.java +++ b/src/main/java/buttondevteam/core/ScheduledRestartCommand.java @@ -1,7 +1,5 @@ package buttondevteam.core; -import java.util.stream.Collectors; - import org.bukkit.Bukkit; import org.bukkit.boss.BarColor; import org.bukkit.boss.BarFlag; @@ -51,7 +49,7 @@ public class ScheduledRestartCommand extends TBMCCommandBase { if (restartcounter % 200 == 0) Bukkit.broadcastMessage("§c-- The server is restarting in " + restartcounter / 20 + " seconds!"); restartbar.setProgress(restartcounter / (double) restarttime); - restartbar.setTitle("Server restart in " + restartcounter / 20f); + restartbar.setTitle(String.format("Server restart in %f.2", restartcounter / 20f)); /* * if (restartcounter % 20 == 0) System.out.println("Progress: " + restartbar.getProgress()); */ diff --git a/src/main/java/buttondevteam/lib/player/ChromaGamerBase.java b/src/main/java/buttondevteam/lib/player/ChromaGamerBase.java index c50be0a..e8740c1 100644 --- a/src/main/java/buttondevteam/lib/player/ChromaGamerBase.java +++ b/src/main/java/buttondevteam/lib/player/ChromaGamerBase.java @@ -10,7 +10,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import buttondevteam.lib.TBMCCoreAPI; public abstract class ChromaGamerBase implements AutoCloseable { - private static final String TBMC_PLAYERS_DIR = "TBMC/players/"; + public static final String TBMC_PLAYERS_DIR = "TBMC/players/"; private static final HashMap, String> playerTypes = new HashMap<>(); @@ -57,8 +57,9 @@ public abstract class ChromaGamerBase implements AutoCloseable { protected static T getUser(String fname, Class cl) { try { T obj = cl.newInstance(); - obj.plugindata = YamlConfiguration - .loadConfiguration(new File(TBMC_PLAYERS_DIR + getFolderForType(cl), fname)); + final File file = new File(TBMC_PLAYERS_DIR + getFolderForType(cl), fname + ".yml"); + file.mkdirs(); + obj.plugindata = YamlConfiguration.loadConfiguration(file); return obj; } catch (Exception e) { TBMCCoreAPI.SendException("An error occured while loading a " + cl.getSimpleName() + "!", e); @@ -68,7 +69,7 @@ public abstract class ChromaGamerBase implements AutoCloseable { @Override public void close() throws Exception { - plugindata.save(new File(TBMC_PLAYERS_DIR + getFolderForType(getClass()), getFileName())); + plugindata.save(new File(TBMC_PLAYERS_DIR + getFolder(), getFileName() + ".yml")); } /** @@ -79,11 +80,11 @@ public abstract class ChromaGamerBase implements AutoCloseable { */ public void connectWith(T user) { // Set the ID, go through all linked files and connect them as well - plugindata.set(getFolderForType(user.getClass()) + "_id", user.plugindata.getString("id")); - final String ownFolder = getFolderForType(getClass()); + plugindata.set(user.getFolder() + "_id", user.plugindata.getString("id")); + final String ownFolder = user.getFolder(); user.plugindata.set(ownFolder + "_id", plugindata.getString("id")); Consumer sync = sourcedata -> { - final String sourcefolder = sourcedata == plugindata ? ownFolder : getFolderForType(user.getClass()); + final String sourcefolder = sourcedata == plugindata ? ownFolder : user.getFolder(); final String id = sourcedata.getString("id"); for (Entry, String> entry : playerTypes.entrySet()) { // Set our ID in all files we can find, both from our connections and the new ones final String otherid = sourcedata.getString(entry.getValue() + "_id"); @@ -121,4 +122,8 @@ public abstract class ChromaGamerBase implements AutoCloseable { return null; return getUser(plugindata.getString(newfolder + "_id"), cl); } + + public String getFolder() { + return getFolderForType(getClass()); + } } diff --git a/src/main/java/buttondevteam/lib/player/TBMCPlayerAddEvent.java b/src/main/java/buttondevteam/lib/player/TBMCPlayerAddEvent.java deleted file mode 100644 index 6613ff3..0000000 --- a/src/main/java/buttondevteam/lib/player/TBMCPlayerAddEvent.java +++ /dev/null @@ -1,36 +0,0 @@ -package buttondevteam.lib.player; - -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; - -/** - *

- * This event gets called when a new player joins. After this event, the - * {@link TBMCPlayerSaveEvent} will be called. - *

- * - * @author Norbi - * - */ -public class TBMCPlayerAddEvent extends Event { - private static final HandlerList handlers = new HandlerList(); - - private TBMCPlayer player; - - public TBMCPlayerAddEvent(TBMCPlayer player) { - this.player = player; - } - - public TBMCPlayer GetPlayer() { - return player; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} \ No newline at end of file diff --git a/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.java b/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.java index 56360d3..bfc56ab 100644 --- a/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.java +++ b/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.java @@ -3,6 +3,16 @@ package buttondevteam.lib.player; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import com.palmergames.bukkit.towny.Towny; +import com.palmergames.bukkit.towny.exceptions.AlreadyRegisteredException; +import com.palmergames.bukkit.towny.exceptions.NotRegisteredException; +import com.palmergames.bukkit.towny.object.Resident; +import com.palmergames.bukkit.towny.object.TownyUniverse; + +import buttondevteam.lib.TBMCCoreAPI; + public abstract class TBMCPlayerBase extends ChromaGamerBase { private static final String FOLDER_NAME = "minecraft"; protected UUID uuid; @@ -11,6 +21,14 @@ public abstract class TBMCPlayerBase extends ChromaGamerBase { return uuid; } + public String getPlayerName() { + return plugindata.getString("playername", ""); + } + + public void setPlayerName(String value) { + plugindata.set("playername", value); + } + public abstract String getPluginName(); @Override @@ -29,6 +47,15 @@ public abstract class TBMCPlayerBase extends ChromaGamerBase { addPlayerType(TBMCPlayerBase.class, FOLDER_NAME); } + /** + * Get player as a plugin player + * + * @param uuid + * The UUID of the player to get + * @param cl + * The type of the player + * @return The requested player object + */ @SuppressWarnings("unchecked") public static T getPlayer(UUID uuid, Class cl) { if (playermap.containsKey(uuid + "-" + cl.getSimpleName())) @@ -54,4 +81,66 @@ public abstract class TBMCPlayerBase extends ChromaGamerBase { public T asPluginPlayer(Class cl) { return getPlayer(uuid, cl); } + + /** + * Only intended to use from ButtonCore + */ + public static T loadPlayer(OfflinePlayer p, Class cl) { + T player = getPlayer(p.getUniqueId(), cl); + Bukkit.getLogger().info("Loaded player: " + player.getPlayerName()); + if (player.getPlayerName() == null) { + player.setPlayerName(p.getName()); + Bukkit.getLogger().info("Player name saved: " + player.getPlayerName()); + } else if (!p.getName().equals(player.getPlayerName())) { + Bukkit.getLogger().info("Renaming " + player.getPlayerName() + " to " + p.getName()); + TownyUniverse tu = Towny.getPlugin(Towny.class).getTownyUniverse(); + Resident resident = tu.getResidentMap().get(player.getPlayerName()); + if (resident == null) + Bukkit.getLogger().warning("Resident not found - couldn't rename in Towny."); + else if (tu.getResidentMap().contains(p.getName())) + Bukkit.getLogger().warning("Target resident name is already in use."); // TODO: Handle + else + try { + TownyUniverse.getDataSource().renamePlayer(resident, p.getName()); + } catch (AlreadyRegisteredException e) { + TBMCCoreAPI.SendException("Failed to rename resident, there's already one with this name.", e); + } catch (NotRegisteredException e) { + TBMCCoreAPI.SendException("Failed to rename resident, the resident isn't registered.", e); + } + player.setPlayerName(p.getName()); + Bukkit.getLogger().info("Renaming done."); + } + + // Load in other plugins + Bukkit.getServer().getPluginManager().callEvent(new TBMCPlayerLoadEvent(player)); + return player; + } + + /** + * Only intended to use from ButtonCore + */ + public static void savePlayer(TBMCPlayerBase player) { + Bukkit.getServer().getPluginManager().callEvent(new TBMCPlayerSaveEvent(player)); + try { + player.close(); + } catch (Exception e) { + new Exception("Failed to save player data for " + player.getPlayerName(), e).printStackTrace(); + } + } + + /** + * Only intended to use from ButtonCore + */ + public static void joinPlayer(TBMCPlayerBase player) { + playermap.put(player.uuid + "-" + player.getFolder(), player); + Bukkit.getServer().getPluginManager().callEvent(new TBMCPlayerJoinEvent(player)); + } + + /** + * Only intended to use from ButtonCore + */ + public static void quitPlayer(TBMCPlayerBase player) { + Bukkit.getServer().getPluginManager().callEvent(new TBMCPlayerQuitEvent(player)); + playermap.remove(player.uuid + "-" + player.getFolder()); + } } diff --git a/src/main/java/buttondevteam/lib/player/TBMCPlayerJoinEvent.java b/src/main/java/buttondevteam/lib/player/TBMCPlayerJoinEvent.java index 0422530..f63c002 100644 --- a/src/main/java/buttondevteam/lib/player/TBMCPlayerJoinEvent.java +++ b/src/main/java/buttondevteam/lib/player/TBMCPlayerJoinEvent.java @@ -6,13 +6,13 @@ import org.bukkit.event.HandlerList; public class TBMCPlayerJoinEvent extends Event { private static final HandlerList handlers = new HandlerList(); - private TBMCPlayer player; + private TBMCPlayerBase player; - public TBMCPlayerJoinEvent(TBMCPlayer player) { + public TBMCPlayerJoinEvent(TBMCPlayerBase player) { this.player = player; } - public TBMCPlayer GetPlayer() { + public TBMCPlayerBase GetPlayer() { return player; } diff --git a/src/main/java/buttondevteam/lib/player/TBMCPlayerLoadEvent.java b/src/main/java/buttondevteam/lib/player/TBMCPlayerLoadEvent.java index 67c178d..80ad7da 100644 --- a/src/main/java/buttondevteam/lib/player/TBMCPlayerLoadEvent.java +++ b/src/main/java/buttondevteam/lib/player/TBMCPlayerLoadEvent.java @@ -1,25 +1,18 @@ package buttondevteam.lib.player; -import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; public class TBMCPlayerLoadEvent extends Event { private static final HandlerList handlers = new HandlerList(); - private YamlConfiguration yaml; - private TBMCPlayer player; + private TBMCPlayerBase player; - public TBMCPlayerLoadEvent(YamlConfiguration yaml, TBMCPlayer player) { - this.yaml = yaml; + public TBMCPlayerLoadEvent(TBMCPlayerBase player) { this.player = player; } - public YamlConfiguration GetPlayerConfig() { - return yaml; - } - - public TBMCPlayer GetPlayer() { + public TBMCPlayerBase GetPlayer() { return player; } diff --git a/src/main/java/buttondevteam/lib/player/TBMCPlayerQuitEvent.java b/src/main/java/buttondevteam/lib/player/TBMCPlayerQuitEvent.java index c77b272..a228d02 100644 --- a/src/main/java/buttondevteam/lib/player/TBMCPlayerQuitEvent.java +++ b/src/main/java/buttondevteam/lib/player/TBMCPlayerQuitEvent.java @@ -6,13 +6,13 @@ import org.bukkit.event.HandlerList; public class TBMCPlayerQuitEvent extends Event { private static final HandlerList handlers = new HandlerList(); - private TBMCPlayer player; + private TBMCPlayerBase player; - public TBMCPlayerQuitEvent(TBMCPlayer player) { + public TBMCPlayerQuitEvent(TBMCPlayerBase player) { this.player = player; } - public TBMCPlayer GetPlayer() { + public TBMCPlayerBase GetPlayer() { return player; } diff --git a/src/main/java/buttondevteam/lib/player/TBMCPlayerSaveEvent.java b/src/main/java/buttondevteam/lib/player/TBMCPlayerSaveEvent.java index 5c5f873..67b74a8 100644 --- a/src/main/java/buttondevteam/lib/player/TBMCPlayerSaveEvent.java +++ b/src/main/java/buttondevteam/lib/player/TBMCPlayerSaveEvent.java @@ -7,19 +7,13 @@ import org.bukkit.event.HandlerList; public class TBMCPlayerSaveEvent extends Event { private static final HandlerList handlers = new HandlerList(); - private YamlConfiguration yaml; - private TBMCPlayer player; + private TBMCPlayerBase player; - public TBMCPlayerSaveEvent(YamlConfiguration yaml, TBMCPlayer player) { - this.yaml = yaml; + public TBMCPlayerSaveEvent(TBMCPlayerBase player) { this.player = player; } - public YamlConfiguration GetPlayerConfig() { - return yaml; - } - - public TBMCPlayer GetPlayer() { + public TBMCPlayerBase GetPlayer() { return player; }