diff --git a/pom.xml b/pom.xml index fce3fe7..5e0aeb4 100644 --- a/pom.xml +++ b/pom.xml @@ -213,6 +213,7 @@ com.palmergames.bukkit.towny Towny + 0.96.1.0 provided diff --git a/src/main/java/buttondevteam/chat/components/towncolors/NColorCommand.java b/src/main/java/buttondevteam/chat/components/towncolors/NColorCommand.java index 41f830f..980466f 100644 --- a/src/main/java/buttondevteam/chat/components/towncolors/NColorCommand.java +++ b/src/main/java/buttondevteam/chat/components/towncolors/NColorCommand.java @@ -28,8 +28,8 @@ public class NColorCommand extends UCommandBase { Resident res; Town town; try { - if ((res = TownyComponent.TU.getResidentMap().get(player.getName().toLowerCase())) == null || !res.hasTown() - || (town = res.getTown()) == null) { + if ((res = TownyComponent.dataSource.getResident(player.getName())) == null || !res.hasTown() + || (town = res.getTown()) == null) { player.sendMessage("§cYou need to be in a town."); return true; } diff --git a/src/main/java/buttondevteam/chat/components/towncolors/NationColorCommand.java b/src/main/java/buttondevteam/chat/components/towncolors/NationColorCommand.java index bfbf15b..d5c1d44 100644 --- a/src/main/java/buttondevteam/chat/components/towncolors/NationColorCommand.java +++ b/src/main/java/buttondevteam/chat/components/towncolors/NationColorCommand.java @@ -3,7 +3,6 @@ package buttondevteam.chat.components.towncolors; import buttondevteam.chat.commands.ucmds.UCommandBase; import buttondevteam.chat.components.towncolors.admin.TownColorCommand; import buttondevteam.chat.components.towny.TownyComponent; -import buttondevteam.lib.TBMCCoreAPI; import buttondevteam.lib.chat.Command2; import buttondevteam.lib.chat.CommandClass; import buttondevteam.lib.chat.CustomTabCompleteMethod; @@ -21,21 +20,19 @@ import org.bukkit.entity.Player; public class NationColorCommand extends UCommandBase { @Command2.Subcommand public boolean def(Player player, String color) { - Resident res; - if (!(TownyComponent.TU.getResidentMap().containsKey(player.getName().toLowerCase()) - && (res = TownyComponent.TU.getResidentMap().get(player.getName().toLowerCase())).isKing())) { - player.sendMessage("§cYou need to be the king of a nation to set it's colors."); - return true; - } - final Nation n; + String msg = "§cYou need to be the king of a nation to set it's colors."; try { - n = res.getTown().getNation(); + Resident res = TownyComponent.dataSource.getResident(player.getName()); + if (!res.isKing()) { + player.sendMessage(msg); + return true; + } + final Nation n = res.getTown().getNation(); + return buttondevteam.chat.components.towncolors.admin.NationColorCommand.SetNationColor(player, n, color); } catch (NotRegisteredException e) { - TBMCCoreAPI.SendException("Failed to set nation color for player " + player + "!", e); - player.sendMessage("§cCouldn't find your town/nation... Error reported."); + player.sendMessage(msg); return true; } - return buttondevteam.chat.components.towncolors.admin.NationColorCommand.SetNationColor(player, n, color); } @CustomTabCompleteMethod(param = "color") diff --git a/src/main/java/buttondevteam/chat/components/towncolors/TownColorCommand.java b/src/main/java/buttondevteam/chat/components/towncolors/TownColorCommand.java index 745601b..03fc50d 100644 --- a/src/main/java/buttondevteam/chat/components/towncolors/TownColorCommand.java +++ b/src/main/java/buttondevteam/chat/components/towncolors/TownColorCommand.java @@ -2,7 +2,6 @@ package buttondevteam.chat.components.towncolors; import buttondevteam.chat.commands.ucmds.UCommandBase; import buttondevteam.chat.components.towny.TownyComponent; -import buttondevteam.lib.TBMCCoreAPI; import buttondevteam.lib.chat.Command2; import buttondevteam.lib.chat.CommandClass; import buttondevteam.lib.chat.CustomTabCompleteMethod; @@ -25,26 +24,24 @@ public class TownColorCommand extends UCommandBase { @Command2.Subcommand public boolean def(Player player, String... colornames) { - Resident res; - if (!(TownyComponent.TU.getResidentMap().containsKey(player.getName().toLowerCase()) - && (res = TownyComponent.TU.getResidentMap().get(player.getName().toLowerCase())).isMayor())) { - player.sendMessage("§cYou need to be the mayor of a town to set its colors."); - return true; - } - val cc = component.colorCount().get(); - if (colornames.length > cc) { - player.sendMessage("You can only use " + cc + " color" + (cc > 1 ? "s" : "") + "."); - return true; - } - final Town t; + String msg = "§cYou need to be the mayor of a town to set its colors."; try { - t = res.getTown(); + Resident res = TownyComponent.dataSource.getResident(player.getName()); + if (!res.isMayor()) { + player.sendMessage(msg); + return true; + } + val cc = component.colorCount().get(); + if (colornames.length > cc) { + player.sendMessage("You can only use " + cc + " color" + (cc > 1 ? "s" : "") + "."); + return true; + } + final Town t = res.getTown(); + return buttondevteam.chat.components.towncolors.admin.TownColorCommand.SetTownColor(player, t, colornames); } catch (NotRegisteredException e) { - TBMCCoreAPI.SendException("Failed to set town color for player " + player + "!", e); - player.sendMessage("§cCouldn't find your town... Error reported."); + player.sendMessage(msg); return true; } - return buttondevteam.chat.components.towncolors.admin.TownColorCommand.SetTownColor(player, t, colornames); } @CustomTabCompleteMethod(param = "colornames") diff --git a/src/main/java/buttondevteam/chat/components/towncolors/TownColorComponent.java b/src/main/java/buttondevteam/chat/components/towncolors/TownColorComponent.java index 7c50ebd..02ea820 100644 --- a/src/main/java/buttondevteam/chat/components/towncolors/TownColorComponent.java +++ b/src/main/java/buttondevteam/chat/components/towncolors/TownColorComponent.java @@ -14,6 +14,7 @@ import buttondevteam.lib.player.TBMCPlayerJoinEvent; import com.earth2me.essentials.User; import com.palmergames.bukkit.towny.exceptions.NotRegisteredException; import com.palmergames.bukkit.towny.object.Nation; +import com.palmergames.bukkit.towny.object.Resident; import lombok.Getter; import lombok.val; import org.bukkit.Bukkit; @@ -85,9 +86,9 @@ public class TownColorComponent extends Component implements Listene loadNC.accept(ncs); } - TownColors.keySet().removeIf(t -> !TownyComponent.TU.getTownsMap().containsKey(t)); // Removes town colors for deleted/renamed towns + TownColors.keySet().removeIf(t -> !TownyComponent.dataSource.hasTown(t)); // Removes town colors for deleted/renamed towns if (usenc) - NationColor.keySet().removeIf(n -> !TownyComponent.TU.getNationsMap().containsKey(n)); // Removes nation colors for deleted/renamed nations + NationColor.keySet().removeIf(n -> !TownyComponent.dataSource.hasNation(n)); // Removes nation colors for deleted/renamed nations initDynmap(); @@ -119,7 +120,7 @@ public class TownColorComponent extends Component implements Listene return; for (val entry : TownColors.entrySet()) { try { - val town = TownyComponent.TU.getTownsMap().get(entry.getKey()); + val town = TownyComponent.dataSource.getTown(entry.getKey()); Nation nation; Color nc; if (!useNationColors().get()) @@ -156,7 +157,12 @@ public class TownColorComponent extends Component implements Listene if (nickname.contains("~")) //StartsWith doesn't work because of color codes nickname = nickname.replace("~", ""); //It gets stacked otherwise String name = ChatColor.stripColor(nickname); //Enforce "town colors" on non-members - val res = TownyComponent.TU.getResidentMap().get(player.getName().toLowerCase()); + Resident res; + try { + res = TownyComponent.dataSource.getResident(player.getName()); + } catch (NotRegisteredException e) { + return name; + } if (res == null || !res.hasTown()) return name; try { diff --git a/src/main/java/buttondevteam/chat/components/towncolors/admin/NationColorCommand.java b/src/main/java/buttondevteam/chat/components/towncolors/admin/NationColorCommand.java index cbceb9d..894a94c 100644 --- a/src/main/java/buttondevteam/chat/components/towncolors/admin/NationColorCommand.java +++ b/src/main/java/buttondevteam/chat/components/towncolors/admin/NationColorCommand.java @@ -9,6 +9,7 @@ import buttondevteam.lib.chat.Color; import buttondevteam.lib.chat.Command2; import buttondevteam.lib.chat.CommandClass; import buttondevteam.lib.chat.CustomTabCompleteMethod; +import com.palmergames.bukkit.towny.exceptions.NotRegisteredException; import com.palmergames.bukkit.towny.object.Nation; import com.palmergames.bukkit.towny.object.Town; import com.palmergames.bukkit.towny.object.TownyObject; @@ -23,12 +24,13 @@ import org.bukkit.command.CommandSender; public class NationColorCommand extends AdminCommandBase { @Command2.Subcommand public boolean def(CommandSender sender, String nation, String color) { - final Nation n = TownyComponent.TU.getNationsMap().get(nation.toLowerCase()); - if (n == null) { + try { + final Nation n = TownyComponent.dataSource.getNation(nation); + return SetNationColor(sender, n, color); + } catch (NotRegisteredException e) { sender.sendMessage("§cThe nation '" + nation + "' cannot be found."); return true; } - return SetNationColor(sender, n, color); } @CustomTabCompleteMethod(param = "color") @@ -38,7 +40,7 @@ public class NationColorCommand extends AdminCommandBase { @CustomTabCompleteMethod(param = "nation") public Iterable def() { - return TownyComponent.TU.getDataSource().getNations().stream().map(TownyObject::getName)::iterator; + return TownyComponent.dataSource.getNations().stream().map(TownyObject::getName)::iterator; } public static boolean SetNationColor(CommandSender sender, Nation nation, String color) { diff --git a/src/main/java/buttondevteam/chat/components/towncolors/admin/TownColorCommand.java b/src/main/java/buttondevteam/chat/components/towncolors/admin/TownColorCommand.java index 58aedf8..ea24974 100644 --- a/src/main/java/buttondevteam/chat/components/towncolors/admin/TownColorCommand.java +++ b/src/main/java/buttondevteam/chat/components/towncolors/admin/TownColorCommand.java @@ -8,6 +8,7 @@ import buttondevteam.lib.chat.Color; import buttondevteam.lib.chat.Command2; import buttondevteam.lib.chat.CommandClass; import buttondevteam.lib.chat.CustomTabCompleteMethod; +import com.palmergames.bukkit.towny.exceptions.NotRegisteredException; import com.palmergames.bukkit.towny.object.Town; import com.palmergames.bukkit.towny.object.TownyObject; import lombok.val; @@ -28,12 +29,17 @@ import java.util.stream.Collectors; public class TownColorCommand extends AdminCommandBase { //TODO: Command path aliases @Command2.Subcommand public boolean def(CommandSender sender, String town, String... colornames) { - if (!TownyComponent.TU.getTownsMap().containsKey(town.toLowerCase())) { + if (!TownyComponent.dataSource.hasTown(town)) { + sender.sendMessage("§cThe town '" + town + "' cannot be found."); + return true; + } + try { + Town targetTown = TownyComponent.dataSource.getTown(town); + return SetTownColor(sender, targetTown, colornames); + } catch (NotRegisteredException e) { sender.sendMessage("§cThe town '" + town + "' cannot be found."); return true; } - Town targetTown = TownyComponent.TU.getTownsMap().get(town.toLowerCase()); - return SetTownColor(sender, targetTown, colornames); } @CustomTabCompleteMethod(param = "colornames") @@ -43,7 +49,7 @@ public class TownColorCommand extends AdminCommandBase { //TODO: Command path al @CustomTabCompleteMethod(param = "town") public Iterable def() { - return TownyComponent.TU.getDataSource().getTowns().stream().map(TownyObject::getName)::iterator; + return TownyComponent.dataSource.getTowns().stream().map(TownyObject::getName)::iterator; } public static boolean SetTownColor(CommandSender sender, Town town, String[] colors) { @@ -68,7 +74,7 @@ public class TownColorCommand extends AdminCommandBase { //TODO: Command path al Color nc; if (usenc) { try { - nc = TownColorComponent.NationColor.get(TownyComponent.TU.getTownsMap().get(other.getKey()).getNation().getName().toLowerCase()); + nc = TownColorComponent.NationColor.get(TownyComponent.dataSource.getTown(other.getKey()).getNation().getName().toLowerCase()); } catch (Exception e) { //Too lazy for lots of null-checks and it may throw exceptions anyways nc = null; } @@ -112,7 +118,11 @@ public class TownColorCommand extends AdminCommandBase { //TODO: Command path al } public static String getTownNameCased(String name) { - return TownyComponent.TU.getTownsMap().get(name.toLowerCase()).getName(); + try { + return TownyComponent.dataSource.getTown(name).getName(); + } catch (NotRegisteredException e) { + return null; + } } public static Iterable tabcompleteColor() { diff --git a/src/main/java/buttondevteam/chat/components/towny/TownyComponent.java b/src/main/java/buttondevteam/chat/components/towny/TownyComponent.java index 7ee1735..e6f9600 100644 --- a/src/main/java/buttondevteam/chat/components/towny/TownyComponent.java +++ b/src/main/java/buttondevteam/chat/components/towny/TownyComponent.java @@ -7,7 +7,7 @@ import buttondevteam.core.component.channel.Channel; import buttondevteam.lib.architecture.Component; import buttondevteam.lib.chat.Color; import buttondevteam.lib.chat.TBMCChatAPI; -import com.palmergames.bukkit.towny.TownyUniverse; +import com.palmergames.bukkit.towny.db.TownyDataSource; import com.palmergames.bukkit.towny.exceptions.NotRegisteredException; import com.palmergames.bukkit.towny.object.Nation; import com.palmergames.bukkit.towny.object.Resident; @@ -18,7 +18,6 @@ import org.bukkit.entity.Player; import java.util.ArrayList; import java.util.List; -import java.util.Optional; import java.util.function.Function; import java.util.stream.Collectors; @@ -27,7 +26,7 @@ import java.util.stream.Collectors; * It provides the TC and NC channels, and posts Towny messages (global, town, nation) to the correct channels for other platforms like Discord. */ public class TownyComponent extends Component { - public static TownyUniverse TU; + public static TownyDataSource dataSource; private static ArrayList Towns; private static ArrayList Nations; @@ -36,9 +35,19 @@ public class TownyComponent extends Component { @Override protected void enable() { - TU = TownyUniverse.getInstance(); - Towns = TU.getTownsMap().values().stream().map(Town::getName).collect(Collectors.toCollection(ArrayList::new)); // Creates a snapshot of towns, new towns will be added when needed - Nations = TU.getNationsMap().values().stream().map(Nation::getName).collect(Collectors.toCollection(ArrayList::new)); // Same here but with nations + try { + try { + dataSource = (TownyDataSource) Class.forName("com.palmergames.bukkit.towny.TownyUniverse").getMethod("getDataSource") + .invoke(null); + } catch (ClassNotFoundException e) { + dataSource = (TownyDataSource) Class.forName("com.palmergames.bukkit.towny.object.TownyUniverse").getMethod("getDataSource") + .invoke(null); + } + } catch (Exception e) { + throw new RuntimeException("Failed to find Towny's data source!", e); + } + Towns = dataSource.getTowns().stream().map(Town::getName).collect(Collectors.toCollection(ArrayList::new)); // Creates a snapshot of towns, new towns will be added when needed + Nations = dataSource.getNations().stream().map(Nation::getName).collect(Collectors.toCollection(ArrayList::new)); // Same here but with nations TBMCChatAPI.RegisterChatChannel( TownChat = new Channel("§3TC§f", Color.DarkAqua, "tc", s -> checkTownNationChat(s, false))); TBMCChatAPI.RegisterChatChannel( @@ -62,9 +71,11 @@ public class TownyComponent extends Component { public void handleSpies(Channel channel, Player p) { if (channel.ID.equals(TownChat.ID) || channel.ID.equals(NationChat.ID)) { - if (Optional.ofNullable(TU.getResidentMap().get(p.getName().toLowerCase())) - .filter(r -> r.hasMode("spy")).isPresent()) - VanillaUtils.tellRaw(p, jsonstr); + try { + if (dataSource.getResident(p.getName()).hasMode("spy")) + VanillaUtils.tellRaw(p, jsonstr); + } catch (NotRegisteredException ignored) { + } } } @@ -74,7 +85,12 @@ public class TownyComponent extends Component { private static Channel.RecipientTestResult checkTownNationChat(CommandSender sender, boolean nationchat) { if (!(sender instanceof Player)) return new Channel.RecipientTestResult("§cYou are not a player!"); - Resident resident = TU.getResidentMap().get(sender.getName().toLowerCase()); + Resident resident; + try { + resident = dataSource.getResident(sender.getName()); + } catch (NotRegisteredException e) { + resident = null; + } Channel.RecipientTestResult result = checkTownNationChatInternal(nationchat, resident); if (result.errormessage != null && resident != null && resident.getModes().contains("spy")) // Only use spy if they wouldn't see it result = new Channel.RecipientTestResult(1000, "allspies"); // There won't be more than a thousand towns/nations probably