From af412a40fd233c7aee0eeeecc21e60fe5211fb59 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Thu, 1 Nov 2018 01:20:49 +0100 Subject: [PATCH] Channel improvements and fixes A chat event is no longer required for shouldSendTo() and such TBMCPlugins/DiscordPlugin#70 is finally kind of fixed - there's a different issue now --- ButtonCore/.gitignore | 2 +- .../core/ScheduledRestartCommand.java | 2 +- .../lib/TBMCChannelConnectFakeEvent.java | 53 -------- .../buttondevteam/lib/TBMCChatEventBase.java | 16 +-- .../java/buttondevteam/lib/chat/Channel.java | 57 ++++++++- .../lib/player/ChannelPlayerData.java | 2 +- .../lib/player/TBMCPlayerBase.java | 115 ------------------ ButtonProcessor/pom.xml | 9 -- pom.xml | 6 + 9 files changed, 65 insertions(+), 197 deletions(-) delete mode 100644 ButtonCore/src/main/java/buttondevteam/lib/TBMCChannelConnectFakeEvent.java diff --git a/ButtonCore/.gitignore b/ButtonCore/.gitignore index 84dff78..86472d4 100755 --- a/ButtonCore/.gitignore +++ b/ButtonCore/.gitignore @@ -132,7 +132,7 @@ publish/ *.publishproj # NuGet Packages Directory -## TODO: If you have NuGet Package Restore enabled, uncomment the next line +## TO!DO: If you have NuGet Package Restore enabled, uncomment the next line #packages/ # Windows Azure Build Output diff --git a/ButtonCore/src/main/java/buttondevteam/core/ScheduledRestartCommand.java b/ButtonCore/src/main/java/buttondevteam/core/ScheduledRestartCommand.java index d7ade35..6044c40 100755 --- a/ButtonCore/src/main/java/buttondevteam/core/ScheduledRestartCommand.java +++ b/ButtonCore/src/main/java/buttondevteam/core/ScheduledRestartCommand.java @@ -32,7 +32,7 @@ public class ScheduledRestartCommand extends TBMCCommandBase { return false; } final int restarttime = restartcounter = ticks; - restartbar = Bukkit.createBossBar("Server restart in " + ticks / 20f, BarColor.RED, BarStyle.SOLID, + restartbar = Bukkit.createBossBar("Server restart in " + ticks / 20f + "s", BarColor.RED, BarStyle.SOLID, BarFlag.DARKEN_SKY); restartbar.setProgress(1); Bukkit.getOnlinePlayers().forEach(p -> restartbar.addPlayer(p)); diff --git a/ButtonCore/src/main/java/buttondevteam/lib/TBMCChannelConnectFakeEvent.java b/ButtonCore/src/main/java/buttondevteam/lib/TBMCChannelConnectFakeEvent.java deleted file mode 100644 index afc12cd..0000000 --- a/ButtonCore/src/main/java/buttondevteam/lib/TBMCChannelConnectFakeEvent.java +++ /dev/null @@ -1,53 +0,0 @@ -package buttondevteam.lib; - -import buttondevteam.lib.chat.Channel; -import lombok.Getter; -import org.bukkit.command.CommandSender; -import org.bukkit.event.Cancellable; -import org.bukkit.event.HandlerList; - -import javax.annotation.Nullable; - -/** - * The purpose of this event is to determine which group the given channel belongs to - * or to validate that they have access to the given group chat.
- * It's not meant to be called from any plugin - it should be only created to use the helper methods - */ -@Getter -public class TBMCChannelConnectFakeEvent extends TBMCChatEventBase implements Cancellable { - private static final HandlerList handlers = new HandlerList(); - - @Nullable - private final CommandSender sender; - - /** - * Using this the group will be determined based on the sender. - * - * @param sender The sender to get the group from - * @param channel The channel to use - */ - public TBMCChannelConnectFakeEvent(CommandSender sender, Channel channel) { - super(channel, "Channel connecting message. One of the things users should never see in action.", -1, null); - this.sender = sender; - } - - /** - * Using this the given group will be validated and used. - * - * @param groupid The group to use, for example the name of a town or nation - * @param channel The channel to use - */ - public TBMCChannelConnectFakeEvent(String groupid, Channel channel) { - super(channel, "Channel connecting message. One of the things users should never see in action.", -1, groupid); - this.sender = null; - } - - @Override - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } -} diff --git a/ButtonCore/src/main/java/buttondevteam/lib/TBMCChatEventBase.java b/ButtonCore/src/main/java/buttondevteam/lib/TBMCChatEventBase.java index 77dd9fd..14c7de9 100755 --- a/ButtonCore/src/main/java/buttondevteam/lib/TBMCChatEventBase.java +++ b/ButtonCore/src/main/java/buttondevteam/lib/TBMCChatEventBase.java @@ -1,7 +1,6 @@ package buttondevteam.lib; import buttondevteam.lib.chat.Channel; -import buttondevteam.lib.chat.Channel.RecipientTestResult; import lombok.Getter; import lombok.NonNull; import lombok.RequiredArgsConstructor; @@ -31,20 +30,14 @@ public abstract class TBMCChatEventBase extends Event implements Cancellable { * Note: Errors are sent to the sender automatically */ public boolean shouldSendTo(CommandSender sender) { - if (channel.filteranderrormsg == null) - return true; - RecipientTestResult result = channel.filteranderrormsg.apply(sender); - return result.errormessage == null && score == result.score; + return channel.shouldSendTo(sender, score); } /** * Note: Errors are sent to the sender automatically */ public int getMCScore(CommandSender sender) { - if (channel.filteranderrormsg == null) - return 0; - RecipientTestResult result = channel.filteranderrormsg.apply(sender); - return result.errormessage == null ? result.score : -1; + return channel.getMCScore(sender); } /** @@ -54,9 +47,6 @@ public abstract class TBMCChatEventBase extends Event implements Cancellable { */ @Nullable public String getGroupID(CommandSender sender) { - if (channel.filteranderrormsg == null) - return "everyone"; - RecipientTestResult result = channel.filteranderrormsg.apply(sender); - return result.errormessage == null ? result.groupID : null; + return channel.getGroupID(sender); //TODO: Performance-wise it'd be much better to use serialization for player data - it's only converted once } } diff --git a/ButtonCore/src/main/java/buttondevteam/lib/chat/Channel.java b/ButtonCore/src/main/java/buttondevteam/lib/chat/Channel.java index a9d4d20..c18c557 100755 --- a/ButtonCore/src/main/java/buttondevteam/lib/chat/Channel.java +++ b/ButtonCore/src/main/java/buttondevteam/lib/chat/Channel.java @@ -14,6 +14,18 @@ import java.util.function.Function; import java.util.function.Predicate; public class Channel { + /** + * Specifies a score that means it's OK to send - but it does not define any groups, only send or not send. See {@link #GROUP_EVERYONE} + */ + public static final int SCORE_SEND_OK = 0; + /** + * Specifies a score that means the user doesn't have permission to see or send the message. Any negative value has the same effect. + */ + public static final int SCORE_SEND_NOPE = -1; + /** + * Send the message to everyone who has access to the channel - this does not necessarily mean all players + */ + public static final String GROUP_EVERYONE = "everyone"; public final String DisplayName; public final Color color; public final String ID; @@ -57,6 +69,43 @@ public class Channel { this.filteranderrormsg = s -> filteranderrormsg.apply((T) this, s); } + public boolean isGlobal() { + return filteranderrormsg == null; + } + + /** + * Note: Errors are sent to the sender automatically + * + * @param sender The user we're sending to + * @param score The (source) score to compare with the user's + */ + public boolean shouldSendTo(CommandSender sender, int score) { + return score == getMCScore(sender); //If there's any error, the score won't be equal + } + + /** + * Note: Errors are sent to the sender automatically + */ + public int getMCScore(CommandSender sender) { + if (filteranderrormsg == null) + return SCORE_SEND_OK; + RecipientTestResult result = filteranderrormsg.apply(sender); + return result.errormessage == null ? result.score : SCORE_SEND_NOPE; + } + + /** + * Note: Errors are sent to the sender automatically
+ *

+ * Null means don't send + */ + @Nullable + public String getGroupID(CommandSender sender) { + if (filteranderrormsg == null) + return GROUP_EVERYONE; + RecipientTestResult result = filteranderrormsg.apply(sender); + return result.errormessage == null ? result.groupID : null; + } + public static List getChannels() { return channels; } @@ -76,12 +125,12 @@ public class Channel { public static Function noScoreResult(Predicate filter, String errormsg) { - return s -> filter.test(s) ? new RecipientTestResult(0, "everyone") : new RecipientTestResult(errormsg); + return s -> filter.test(s) ? new RecipientTestResult(SCORE_SEND_OK, GROUP_EVERYONE) : new RecipientTestResult(errormsg); } public static BiFunction noScoreResult( BiPredicate filter, String errormsg) { - return (this_, s) -> filter.test(this_, s) ? new RecipientTestResult(0, "everyone") : new RecipientTestResult(errormsg); + return (this_, s) -> filter.test(this_, s) ? new RecipientTestResult(SCORE_SEND_OK, GROUP_EVERYONE) : new RecipientTestResult(errormsg); } public static Channel GlobalChat; @@ -95,7 +144,7 @@ public class Channel { public static class RecipientTestResult { public String errormessage = null; - public int score = -1; // Anything below 0 is "never send" + public int score = SCORE_SEND_NOPE; // Anything below 0 is "never send" public String groupID = null; /** @@ -110,7 +159,7 @@ public class Channel { /** * Creates a result that indicates a success * - * @param score The score that identifies the target group. For example, the index of the town or nation to send to. + * @param score The score that identifies the target group. Must be non-negative. For example, the index of the town or nation to send to. * @param groupID The ID of the target group. */ public RecipientTestResult(int score, String groupID) { diff --git a/ButtonCore/src/main/java/buttondevteam/lib/player/ChannelPlayerData.java b/ButtonCore/src/main/java/buttondevteam/lib/player/ChannelPlayerData.java index ee62bd7..583a5c9 100644 --- a/ButtonCore/src/main/java/buttondevteam/lib/player/ChannelPlayerData.java +++ b/ButtonCore/src/main/java/buttondevteam/lib/player/ChannelPlayerData.java @@ -20,6 +20,6 @@ public class ChannelPlayerData { //I just want this to work } public void set(Channel value) { - data.set(value.toString()); + data.set(value.ID); } } diff --git a/ButtonCore/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.java b/ButtonCore/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.java index cc5ff5c..cef358d 100755 --- a/ButtonCore/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.java +++ b/ButtonCore/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.java @@ -206,119 +206,4 @@ public abstract class TBMCPlayerBase extends ChromaGamerBase { if (keys.size() > 1) // PlayerName is always saved, but we don't need a file for just that super.close(); } - - /*private static void renameInTowny(TBMCPlayerBase player, Resident resident, String newName, TownyDatabaseHandler tdh) throws Exception { - val field=TownyDataSource.class.getDeclaredField("lock"); //TODO: Remove - field.setAccessible(true); - Lock lock=(Lock)field.get(tdh); - lock.lock(); //From Towny, removed the economy part, as that works by UUIDs - String oldName = resident.getName(); - - try { - String filteredName; - try { - filteredName = NameValidation.checkAndFilterName(newName); - } catch (InvalidNameException var39) { - throw new NotRegisteredException(var39.getMessage()); - } - - double balance = 0.0D; - Town town = null; - long registered = 0L; - long lastOnline = 0L; - boolean isMayor = false; - boolean isJailed = false; - int JailSpawn = 0; - //Don't do anything with economy balance as that works based on UUIDs - List friends = resident.getFriends(); - List nationRanks = resident.getNationRanks(); - TownyPermission permissions = resident.getPermissions(); - String surname = resident.getSurname(); - String title = resident.getTitle(); - if (resident.hasTown()) { - town = resident.getTown(); - } - - List townBlocks = resident.getTownBlocks(); - List townRanks = resident.getTownRanks(); - registered = resident.getRegistered(); - lastOnline = resident.getLastOnline(); - isMayor = resident.isMayor(); - isJailed = resident.isJailed(); - int JailSpawn = resident.getJailSpawn(); - this.deleteResident(resident); - this.universe.getResidentMap().remove(oldName.toLowerCase()); - resident.setName(filteredName); - this.universe.getResidentMap().put(filteredName.toLowerCase(), resident); - if (transferBalance && TownySettings.isUsingEconomy()) { - try { - resident.setBalance(balance, "Rename Player - Transfer to new account"); - } catch (EconomyException var37) { - var37.printStackTrace(); - } - } - - resident.setFriends(friends); - resident.setNationRanks(nationRanks); - resident.setPermissions(permissions.toString()); - resident.setSurname(surname); - resident.setTitle(title); - resident.setTown(town); - resident.setTownblocks(townBlocks); - resident.setTownRanks(townRanks); - resident.setRegistered(registered); - resident.setLastOnline(lastOnline); - if (isMayor) { - try { - town.setMayor(resident); - } catch (TownyException var36) { - ; - } - } - - resident.setJailed(isJailed); - resident.setJailSpawn(JailSpawn); - this.saveResidentList(); - this.saveResident(resident); - if (town != null) { - this.saveTown(town); - } - - Iterator i$ = townBlocks.iterator(); - - while(i$.hasNext()) { - TownBlock tb = (TownBlock)i$.next(); - this.saveTownBlock(tb); - } - - Resident oldResident = new Resident(oldName); - List toSaveResident = new ArrayList(this.getResidents()); - Iterator i$ = toSaveResident.iterator(); - - Resident toCheck; - while(i$.hasNext()) { - toCheck = (Resident)i$.next(); - if (toCheck.hasFriend(oldResident)) { - try { - toCheck.removeFriend(oldResident); - toCheck.addFriend(resident); - } catch (NotRegisteredException var35) { - var35.printStackTrace(); - } - } - } - - i$ = toSaveResident.iterator(); - - while(i$.hasNext()) { - toCheck = (Resident)i$.next(); - this.saveResident(toCheck); - } - } finally { - this.lock.unlock(); - } - - BukkitTools.getPluginManager().callEvent(new RenameResidentEvent(oldName, resident)); - this.universe.setChangedNotify(TownyObservableType.RENAME_RESIDENT); - }*/ } diff --git a/ButtonProcessor/pom.xml b/ButtonProcessor/pom.xml index 6a14248..a7e5999 100755 --- a/ButtonProcessor/pom.xml +++ b/ButtonProcessor/pom.xml @@ -29,13 +29,4 @@ UTF-8 - - - - junit - junit - 3.8.1 - test - - diff --git a/pom.xml b/pom.xml index 1da127a..9529df4 100755 --- a/pom.xml +++ b/pom.xml @@ -28,6 +28,12 @@ 1.8 + + maven-surefire-plugin + + false + +