diff --git a/.classpath b/.classpath deleted file mode 100644 index 1a530da..0000000 --- a/.classpath +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.gitignore b/.gitignore index ae3c172..d9239ca 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -/bin/ +/bin/ +/.classpath diff --git a/MineverseChat/.gitignore b/MineverseChat/.gitignore new file mode 100644 index 0000000..53d4d85 --- /dev/null +++ b/MineverseChat/.gitignore @@ -0,0 +1 @@ +/TODO.txt diff --git a/MineverseChat/Messages.yml b/MineverseChat/Messages.yml index 3c4df72..46ff32f 100644 --- a/MineverseChat/Messages.yml +++ b/MineverseChat/Messages.yml @@ -1,4 +1,4 @@ -Version: 2.18.2 +Version: 2.20.0 BlockCommandPlayer: '&cYou have been blocked from entering command {command}.' BlockCommandSender: '&cBlocked player &6{player} &cfrom entering command {command}.' BlockedCommand: '&cYou are blocked from entering this command: {command}' @@ -14,6 +14,7 @@ ChannelListHeader: '&6Channel List : Alias' ChannelListWithPermissions: '{channel_color}{channel_name} : {channel_alias} - Permission Required' ChannelNoPermission: '&cYou do not have permission for this channel.' ChannelNoPermissionView: '&cYou do not have permission to look at this channel.' +ChannelNoSpeakPermissions: '&cYou do not have permission to speak in this channel.' ChannelPlayerListHeader: '&6Players in Channel: {channel_color}{channel_name}' ChannelMuted: '&cYou are muted in this channel: {channel_color}{channel_name}&c{time}' CommandInvalidArguments: '&cInvalid command: {command} {args}' diff --git a/MineverseChat/bungee.yml b/MineverseChat/bungee.yml index 4e6a6d1..2e58ef4 100644 --- a/MineverseChat/bungee.yml +++ b/MineverseChat/bungee.yml @@ -1,4 +1,4 @@ name: VentureChat main: mineverse.Aust1n46.chat.bungee.MineverseChatBungee -version: 2.18.4 +version: 2.20.0 author: Aust1n46 \ No newline at end of file diff --git a/MineverseChat/config.yml b/MineverseChat/config.yml index 7b48f86..dbe055b 100644 --- a/MineverseChat/config.yml +++ b/MineverseChat/config.yml @@ -95,24 +95,20 @@ saveinterval: 30 # The time in seconds between each check to remove timed mutes unmuteinterval: 60 -# The color of the private messages -tellcolor: white - # Enables or disabled BungeeCord messaging -bungeecordmessaging: true +bungeecordmessaging: false # This will allow vanished players to be exempt from being sent private messages, and will act as if they aren't online vanishsupport: true # {playerto} : player receivings name # {playerfrom} : player sendings name -# use Default for the basic formatting -tellformatto: Default -tellformatfrom: Default -tellformatspy: Default -replyformatto: Default -replyformatfrom: Default -replyformatspy: Default +tellformatto: 'You message {playerto}:&7' +tellformatfrom: '{playerfrom} messages you:&7' +tellformatspy: '{playerfrom} messages {playerto}:&7' +replyformatto: 'You reply to {playerto}:&7' +replyformatfrom: '{playerfrom} replies to you:&7' +replyformatspy: '{playerfrom} replied to {playerto}:&7' # {host} : party hosts name # {player} : player name @@ -297,7 +293,69 @@ enable_factions_channel: false # Use '' or "" around format, example: '[&2global&f] {vault_prefix} {player_displayname}&2:' # You must have prefixes and suffixes set in a Vault compatible permissions plugin to avoid errors # Use "" as the prefix or suffix to have none + +# Set chatcolor to 'None' to have a group based chat color! Don't forget to put a suffix or other placeholder at the end of the format! + +# Important!!! +# Important!!! +# If you delete a channel, restart the server! Do not use /chatreload!!! channels: + GroupChatColorExample: + color: '#706C1E' + chatcolor: 'None' + mutable: true + filter: true + autojoin: true + default: false + distance: 0 + cooldown: 0 + bungeecord: false + alias: ge + permissions: None + speak_permissions: None + format: '&f[#706C1EGroupColorChat&f] {vault_prefix} {player_displayname}#706C1E:{vault_suffix}' + HexExample: + color: '#ff0000' + chatcolor: '#ff0000' + mutable: true + filter: true + autojoin: true + default: false + distance: 0 + cooldown: 0 + bungeecord: false + alias: he + permissions: None + speak_permissions: None + format: '&f[#ff0000Hex&f] {vault_prefix} {player_displayname}#ff0000:' + BungeeExample: + color: gold + chatcolor: gold + mutable: true + filter: true + autojoin: true + default: false + distance: 0 + cooldown: 3 + bungeecord: true + alias: be + permissions: None + speak_permissions: None + format: '&f[&6Network&f] {vault_prefix} {player_displayname}&6:' + AnnouncementExample: + color: red + chatcolor: red + mutable: false + filter: false + autojoin: true + default: false + distance: 0 + cooldown: 0 + bungeecord: true + alias: announce + permissions: None + speak_permissions: announcement + format: '&f[&aServer Announcement&f] {vault_prefix} {player_displayname}&c:' Global: color: dark_green chatcolor: dark_green @@ -310,6 +368,7 @@ channels: bungeecord: false alias: g permissions: None + speak_permissions: None format: '&f[&2Global&f] {vault_prefix} {player_displayname}&2:' Staff: color: green @@ -323,20 +382,8 @@ channels: bungeecord: false alias: st permissions: staffchannel + speak_permissions: None format: '&f[&aStaff&f] {vault_prefix} {player_displayname}&a:' - Admin: - color: red - chatcolor: red - mutable: false - filter: false - autojoin: true - default: false - distance: 0 - cooldown: 0 - bungeecord: false - alias: a - permissions: adminchannel - format: '&f[&cAdmin&f] {vault_prefix} {player_displayname}&c:' Donator: color: light_purple chatcolor: light_purple @@ -349,6 +396,7 @@ channels: bungeecord: false alias: d permissions: donatorchannel + speak_permissions: None format: '&f[&dDonator&f] {vault_prefix} {player_displayname}&d:' Help: color: aqua @@ -362,6 +410,7 @@ channels: bungeecord: false alias: h permissions: None + speak_permissions: None format: '&f[&bHelp&f] {vault_prefix} {player_displayname}&b:' Trade: color: dark_aqua @@ -375,6 +424,7 @@ channels: bungeecord: false alias: t permissions: None + speak_permissions: None format: '&f[&3Trade&f] {vault_prefix} {player_displayname}&3:' Local: color: yellow @@ -388,17 +438,5 @@ channels: bungeecord: false alias: l permissions: None - format: '&f[&eLocal&f] {vault_prefix} {player_displayname}&e:' - Network: - color: gold - chatcolor: gold - mutable: true - filter: true - autojoin: true - default: false - distance: 0 - cooldown: 60 - bungeecord: true - alias: n - permissions: None - format: '&f[&6Network&f] {vault_prefix} {player_displayname}&6:' \ No newline at end of file + speak_permissions: None + format: '&f[&eLocal&f] {vault_prefix} {player_displayname}&e:' \ No newline at end of file diff --git a/MineverseChat/defaultconfig.yml b/MineverseChat/defaultconfig.yml index 78335dd..dbe055b 100644 --- a/MineverseChat/defaultconfig.yml +++ b/MineverseChat/defaultconfig.yml @@ -46,6 +46,8 @@ nicknames: nickname-in-tablist: true +# {player} : player sending command +# {command} : command typed commandspy: format: '&6{player}: {command}' worldeditcommands: true @@ -93,24 +95,20 @@ saveinterval: 30 # The time in seconds between each check to remove timed mutes unmuteinterval: 60 -# The color of the private messages -tellcolor: white - # Enables or disabled BungeeCord messaging -bungeecordmessaging: true +bungeecordmessaging: false # This will allow vanished players to be exempt from being sent private messages, and will act as if they aren't online vanishsupport: true # {playerto} : player receivings name # {playerfrom} : player sendings name -# use Default for the basic formatting -tellformatto: Default -tellformatfrom: Default -tellformatspy: Default -replyformatto: Default -replyformatfrom: Default -replyformatspy: Default +tellformatto: 'You message {playerto}:&7' +tellformatfrom: '{playerfrom} messages you:&7' +tellformatspy: '{playerfrom} messages {playerto}:&7' +replyformatto: 'You reply to {playerto}:&7' +replyformatfrom: '{playerfrom} replies to you:&7' +replyformatspy: '{playerfrom} replied to {playerto}:&7' # {host} : party hosts name # {player} : player name @@ -295,7 +293,69 @@ enable_factions_channel: false # Use '' or "" around format, example: '[&2global&f] {vault_prefix} {player_displayname}&2:' # You must have prefixes and suffixes set in a Vault compatible permissions plugin to avoid errors # Use "" as the prefix or suffix to have none + +# Set chatcolor to 'None' to have a group based chat color! Don't forget to put a suffix or other placeholder at the end of the format! + +# Important!!! +# Important!!! +# If you delete a channel, restart the server! Do not use /chatreload!!! channels: + GroupChatColorExample: + color: '#706C1E' + chatcolor: 'None' + mutable: true + filter: true + autojoin: true + default: false + distance: 0 + cooldown: 0 + bungeecord: false + alias: ge + permissions: None + speak_permissions: None + format: '&f[#706C1EGroupColorChat&f] {vault_prefix} {player_displayname}#706C1E:{vault_suffix}' + HexExample: + color: '#ff0000' + chatcolor: '#ff0000' + mutable: true + filter: true + autojoin: true + default: false + distance: 0 + cooldown: 0 + bungeecord: false + alias: he + permissions: None + speak_permissions: None + format: '&f[#ff0000Hex&f] {vault_prefix} {player_displayname}#ff0000:' + BungeeExample: + color: gold + chatcolor: gold + mutable: true + filter: true + autojoin: true + default: false + distance: 0 + cooldown: 3 + bungeecord: true + alias: be + permissions: None + speak_permissions: None + format: '&f[&6Network&f] {vault_prefix} {player_displayname}&6:' + AnnouncementExample: + color: red + chatcolor: red + mutable: false + filter: false + autojoin: true + default: false + distance: 0 + cooldown: 0 + bungeecord: true + alias: announce + permissions: None + speak_permissions: announcement + format: '&f[&aServer Announcement&f] {vault_prefix} {player_displayname}&c:' Global: color: dark_green chatcolor: dark_green @@ -308,6 +368,7 @@ channels: bungeecord: false alias: g permissions: None + speak_permissions: None format: '&f[&2Global&f] {vault_prefix} {player_displayname}&2:' Staff: color: green @@ -321,20 +382,8 @@ channels: bungeecord: false alias: st permissions: staffchannel + speak_permissions: None format: '&f[&aStaff&f] {vault_prefix} {player_displayname}&a:' - Admin: - color: red - chatcolor: red - mutable: false - filter: false - autojoin: true - default: false - distance: 0 - cooldown: 0 - bungeecord: false - alias: a - permissions: adminchannel - format: '&f[&cAdmin&f] {vault_prefix} {player_displayname}&c:' Donator: color: light_purple chatcolor: light_purple @@ -347,6 +396,7 @@ channels: bungeecord: false alias: d permissions: donatorchannel + speak_permissions: None format: '&f[&dDonator&f] {vault_prefix} {player_displayname}&d:' Help: color: aqua @@ -360,6 +410,7 @@ channels: bungeecord: false alias: h permissions: None + speak_permissions: None format: '&f[&bHelp&f] {vault_prefix} {player_displayname}&b:' Trade: color: dark_aqua @@ -373,6 +424,7 @@ channels: bungeecord: false alias: t permissions: None + speak_permissions: None format: '&f[&3Trade&f] {vault_prefix} {player_displayname}&3:' Local: color: yellow @@ -386,17 +438,5 @@ channels: bungeecord: false alias: l permissions: None - format: '&f[&eLocal&f] {vault_prefix} {player_displayname}&e:' - Network: - color: gold - chatcolor: gold - mutable: true - filter: true - autojoin: true - default: false - distance: 0 - cooldown: 60 - bungeecord: true - alias: n - permissions: None - format: '&f[&6Network&f] {vault_prefix} {player_displayname}&6:' \ No newline at end of file + speak_permissions: None + format: '&f[&eLocal&f] {vault_prefix} {player_displayname}&e:' \ No newline at end of file diff --git a/MineverseChat/mineverse/Aust1n46/chat/MineverseChat.java b/MineverseChat/mineverse/Aust1n46/chat/MineverseChat.java index e89c060..21bedce 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/MineverseChat.java +++ b/MineverseChat/mineverse/Aust1n46/chat/MineverseChat.java @@ -111,8 +111,6 @@ import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.utility.MinecraftReflection; -import me.clip.placeholderapi.PlaceholderAPI; - public class MineverseChat extends JavaPlugin implements PluginMessageListener { // Listeners -------------------------------- private ChatListener chatListener; @@ -319,7 +317,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { commands.put("venturechat", new Venturechat("venturechat")); commands.put("mute", new Mute("mute")); commands.put("muteall", new Muteall("muteall")); - commands.put("nick", new Nick("nick")); + commands.put("setnickname", new Nick("setnickname")); commands.put("notifications", new Notifications("notifications")); commands.put("party", new Party("party")); commands.put("rangedspy", new RangedSpy("rangedspy")); @@ -406,13 +404,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { if(pluginManager.isPluginEnabled("PlaceholderAPI")) { Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Enabling PlaceholderAPI Hook")); } - boolean hooked = PlaceholderAPI.registerPlaceholderHook("venturechat", new VentureChatPlaceholders()); - if(hooked) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Added placeholders to PlaceholderAPI!")); - } - else { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - &cPlaceholders were not added to PlaceholderAPI!")); - } + new VentureChatPlaceholders().register(); Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Loading player data")); BukkitScheduler scheduler = Bukkit.getServer().getScheduler(); scheduler.runTaskTimerAsynchronously(this, new Runnable() { @@ -437,7 +429,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { // System.out.println(time + " " + timemark); if(time > timemark) { p.removeMute(channel.getName()); - if(p.isOnline()) p.getPlayer().sendMessage(ChatColor.RED + "You have just been unmuted in: " + ChatColor.valueOf(channel.getColor().toUpperCase()) + channel.getName()); + if(p.isOnline()) p.getPlayer().sendMessage(ChatColor.RED + "You have just been unmuted in: " + channel.getColor() + channel.getName()); else p.setModified(true); } } @@ -445,8 +437,8 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { if(getConfig().getString("loglevel", "info").equals("debug")) { Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Updating Player Mutes")); } - } - }, 0L, 1200L); //one minute interval + } + }, 0L, 1200L); //one minute interval this.firstRun = false; } @@ -822,7 +814,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { playerList = playerList.substring(0, playerList.length() - 2); } mcp.getPlayer().sendMessage(LocalizedMessage.CHANNEL_PLAYER_LIST_HEADER.toString() - .replace("{channel_color}", (ChatColor.valueOf(chatchannel.getColor().toUpperCase())).toString()) + .replace("{channel_color}", chatchannel.getColor().toString()) .replace("{channel_name}", chatchannel.getName())); mcp.getPlayer().sendMessage(Format.FormatStringAll(playerList)); } diff --git a/MineverseChat/mineverse/Aust1n46/chat/VentureChatPlaceholders.java b/MineverseChat/mineverse/Aust1n46/chat/VentureChatPlaceholders.java index 51e5227..319f273 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/VentureChatPlaceholders.java +++ b/MineverseChat/mineverse/Aust1n46/chat/VentureChatPlaceholders.java @@ -3,12 +3,11 @@ package mineverse.Aust1n46.chat; import org.bukkit.entity.Player; import me.clip.placeholderapi.PlaceholderAPIPlugin; -import me.clip.placeholderapi.PlaceholderHook; - +import me.clip.placeholderapi.expansion.PlaceholderExpansion; import mineverse.Aust1n46.chat.api.MineverseChatAPI; import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -public class VentureChatPlaceholders extends PlaceholderHook { +public class VentureChatPlaceholders extends PlaceholderExpansion { @Override public String onPlaceholderRequest(Player p, String identifier) { if(p == null) { @@ -67,4 +66,29 @@ public class VentureChatPlaceholders extends PlaceholderHook { if(color.equalsIgnoreCase("white")) return "f"; return "f"; } + + @Override + public boolean persist(){ + return true; + } + + @Override + public boolean canRegister(){ + return true; + } + + @Override + public String getAuthor() { + return "Aust1n46"; + } + + @Override + public String getIdentifier() { + return "venturechat"; + } + + @Override + public String getVersion() { + return MineverseChat.getInstance().getDescription().getVersion(); + } } \ No newline at end of file diff --git a/MineverseChat/mineverse/Aust1n46/chat/api/MineverseChatPlayer.java b/MineverseChat/mineverse/Aust1n46/chat/api/MineverseChatPlayer.java index 9c9e30a..2d6d0b9 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/api/MineverseChatPlayer.java +++ b/MineverseChat/mineverse/Aust1n46/chat/api/MineverseChatPlayer.java @@ -477,8 +477,9 @@ public class MineverseChatPlayer { } public void setJsonFormat() { + this.jsonFormat = "Default"; for(JsonFormat j : MineverseChat.jfInfo.getJsonFormats()) { - if(this.getPlayer().hasPermission("venturechat.json." + j.getName())) { + if(this.getPlayer().isPermissionSet("venturechat.json." + j.getName())) { if(MineverseChat.jfInfo.getJsonFormat(this.getJsonFormat()).getPriority() > j.getPriority()) { this.jsonFormat = j.getName(); } diff --git a/MineverseChat/mineverse/Aust1n46/chat/channel/ChatChannel.java b/MineverseChat/mineverse/Aust1n46/chat/channel/ChatChannel.java index 0481dc3..b9c205a 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/channel/ChatChannel.java +++ b/MineverseChat/mineverse/Aust1n46/chat/channel/ChatChannel.java @@ -3,242 +3,388 @@ package mineverse.Aust1n46.chat.channel; import java.util.ArrayList; import java.util.List; +import org.bukkit.ChatColor; import org.bukkit.configuration.ConfigurationSection; import mineverse.Aust1n46.chat.MineverseChat; import mineverse.Aust1n46.chat.utilities.Format; -//This class is used to create ChatChannel objects, which store all the information for a channel. This -//information is read in from the config file when the server starts up. +/** + * Chat channel object pojo. Class also contains static initialization methods + * for reading chat channels from the config file. + * + * @author Aust1n46 + */ public class ChatChannel { - private String name; - private String permission; - private Boolean mutable; - private String color; - private String chatcolor; - private Boolean defaultChannel; - private Boolean autojoin; - private String alias; - private Double distance; - private Boolean filter; - private Boolean bungee; - private String format; - private int cooldown; - private boolean irc; - + private static final String PERMISSION_PREFIX = "venturechat."; + private static final String NO_PERMISSIONS = "venturechat.none"; + private static MineverseChat plugin = MineverseChat.getInstance(); private static ChatChannel defaultChatChannel; private static ChatChannel[] channels; private static String defaultColor; - + + private String name; + private String permission; + private String speakPermission; + private boolean mutable; + private String color; + private String chatColor; + private boolean defaultChannel; + private boolean autojoin; + private String alias; + private double distance; + private boolean filter; + private boolean bungee; + private String format; + private int cooldown; + + /** + * Read chat channels from config file and initialize channel array. + */ public static void initialize() { - String _color = ""; - String _chatcolor = ""; - String _name = ""; - String _permission = ""; - Boolean _mutable = false; - Boolean _filter = false; - Boolean _defaultchannel = false; - String _alias = ""; - Double _distance = (double) 0; - Boolean _autojoin = false; - Boolean _bungee = false; - String _format = ""; - int _cooldown = 0; ConfigurationSection cs = plugin.getConfig().getConfigurationSection("channels"); int len = (cs.getKeys(false)).size(); channels = new ChatChannel[len]; - int x = 0; - for(String key : cs.getKeys(false)) { - _color = (String) cs.getString(key + ".color", "white"); - _chatcolor = (String) cs.getString(key + ".chatcolor", "white"); - if(!(Format.isValidColor(_color))) { - plugin.getServer().getLogger().info("[" + plugin.getName() + "] " + _color + " is not valid. Changing to white."); - _color = "white"; - } - if(!(Format.isValidColor(_chatcolor)) && !_chatcolor.equalsIgnoreCase("None")) { - plugin.getServer().getLogger().info("[" + plugin.getName() + "] " + _chatcolor + " is not valid. Changing to white."); - _chatcolor = "white"; - } - _name = key; - _permission = (String) cs.getString(key + ".permissions", "None"); - _mutable = (Boolean) cs.getBoolean(key + ".mutable", false); - _filter = (Boolean) cs.getBoolean(key + ".filter", true); - _bungee = (Boolean) cs.getBoolean(key + ".bungeecord", false); - _format = cs.getString(key + ".format", "Default"); - _defaultchannel = (Boolean) cs.getBoolean(key + ".default", false); - _alias = (String) cs.getString(key + ".alias", "None"); - _distance = (Double) cs.getDouble(key + ".distance", (double) 0); - _cooldown = (int) cs.getInt(key + ".cooldown", 0); - _autojoin = (Boolean) cs.getBoolean(key + ".autojoin", false); - ChatChannel c = new ChatChannel(_name, _color, _chatcolor, _permission, _mutable, _filter, _defaultchannel, _alias, _distance, _autojoin, _bungee, _cooldown, _format); - channels[x++] = c; - if(_defaultchannel) { - defaultChatChannel = c; - defaultColor = _color; + int counter = 0; + for (String key : cs.getKeys(false)) { + String color = cs.getString(key + ".color", "white"); + String chatColor = cs.getString(key + ".chatcolor", "white"); + String name = key; + String permission = cs.getString(key + ".permissions", "None"); + String speakPermission = cs.getString(key + ".speak_permissions", "None"); + boolean mutable = cs.getBoolean(key + ".mutable", false); + boolean filter = cs.getBoolean(key + ".filter", true); + boolean bungee = cs.getBoolean(key + ".bungeecord", false); + String format = cs.getString(key + ".format", "Default"); + boolean defaultChannel = cs.getBoolean(key + ".default", false); + String alias = cs.getString(key + ".alias", "None"); + double distance = cs.getDouble(key + ".distance", (double) 0); + int cooldown = cs.getInt(key + ".cooldown", 0); + boolean autojoin = cs.getBoolean(key + ".autojoin", false); + ChatChannel chatChannel = new ChatChannel(name, color, chatColor, permission, speakPermission, mutable, + filter, defaultChannel, alias, distance, autojoin, bungee, cooldown, format); + channels[counter++] = chatChannel; + if (defaultChannel) { + defaultChatChannel = chatChannel; + defaultColor = color; } } } - + + /** + * Get array of chat channels. + * + * @return {@link ChatChannel}[] + */ public static ChatChannel[] getChannels() { return channels; } - - public static ChatChannel getChannel(String ChannelName) { - for(ChatChannel c : channels) { - if(c.getName().equalsIgnoreCase(ChannelName) || c.getAlias().equalsIgnoreCase(ChannelName)) { + + /** + * Get a chat channel by name. + * + * @param channelName + * name of channel to get. + * @return {@link ChatChannel} + */ + public static ChatChannel getChannel(String channelName) { + for (ChatChannel c : channels) { + if (c.getName().equalsIgnoreCase(channelName) || c.getAlias().equalsIgnoreCase(channelName)) { return c; } } return null; } - - public static boolean isChannel(String channel) { - return getChannel(channel) != null; + + /** + * Checks if the chat channel exists. + * + * @param channelName + * name of channel to check. + * @return true if channel exists, false otherwise. + */ + public static boolean isChannel(String channelName) { + return getChannel(channelName) != null; } - + + /** + * Get default chat channel color. + * + * @return {@link String} + */ public static String getDefaultColor() { return defaultColor; } - + + /** + * Get default chat channel. + * + * @return {@link ChatChannel} + */ public static ChatChannel getDefaultChannel() { return defaultChatChannel; } - + + /** + * Get list of chat channels with autojoin set to true. + * + * @return {@link List}<{@link ChatChannel}> + */ public static List getAutojoinList() { List joinlist = new ArrayList(); - for(ChatChannel c : channels) { - if(c.getAutojoin()) { + for (ChatChannel c : channels) { + if (c.getAutojoin()) { joinlist.add(c); } } return joinlist; } - public ChatChannel(String _Name, String _color, String _chatcolor, String _Permission, Boolean _mutable, Boolean _filter, Boolean _defaultchannel, String _alias, Double _distance, Boolean _autojoin, Boolean _bungee, int _cooldown, String _format) { - name = _Name; - permission = "venturechat." + _Permission; - mutable = _mutable; - setColor(_color); - setChatColor(_chatcolor); - setDefaultChannel(_defaultchannel); - setAlias(_alias); - setDistance(_distance); - setFilter(_filter); - setAutojoin(_autojoin); - setBungee(_bungee); - setCooldown(_cooldown); - setFormat(_format); + /** + * Parameterized constructor a {@link ChatChannel}. + * + * @param name + * @param color + * @param chatColor + * @param permission + * @param speakPermission + * @param mutable + * @param filter + * @param defaultChannel + * @param alias + * @param distance + * @param autojoin + * @param bungee + * @param cooldown + * @param format + */ + public ChatChannel(String name, String color, String chatColor, String permission, String speakPermission, + boolean mutable, boolean filter, boolean defaultChannel, String alias, double distance, boolean autojoin, + boolean bungee, int cooldown, String format) { + this.name = name; + this.color = color; + this.chatColor = chatColor; + this.permission = PERMISSION_PREFIX + permission; + this.speakPermission = PERMISSION_PREFIX + speakPermission; + this.mutable = mutable; + this.filter = filter; + this.defaultChannel = defaultChannel; + this.alias = alias; + this.distance = distance; + this.autojoin = autojoin; + this.bungee = bungee; + this.cooldown = cooldown; + this.format = format; } + /** + * Get the name of the chat channel. + * + * @return {@link String} + */ public String getName() { return name; } - public void setFormat(String _format) { - format = _format; - } - + /** + * Get the format of the chat channel. + * + * @return {@link String} + */ public String getFormat() { return format; } - public void setCooldown(int _cooldown) { - cooldown = _cooldown; - } - + /** + * Get the cooldown of the chat channel in seconds. + * + * @return int + */ public int getCooldown() { return cooldown; } - public void setBungee(Boolean _bungee) { - bungee = _bungee; - } - - public Boolean getBungee() { + /** + * Check if the chat channel is BungeeCord enabled. + * + * @return true if the chat channel is BungeeCord enabled, false otherwise. + */ + public boolean getBungee() { return bungee; } + /** + * Get the permissions node for the chat channel. + * + * @return {@link String} + */ public String getPermission() { return permission; } - public Boolean getAutojoin() { + /** + * Check if autojoin is enabled for the chat channel. + * + * @return true if autojoin is enabled, false otherwise. + */ + public boolean getAutojoin() { return autojoin; } - public void setAutojoin(Boolean _autojoin) { - autojoin = _autojoin; - } - - public Boolean isMutable() { + /** + * Check if the chat channel allows muting. + * + * @return true if muting is allowed, false otherwise. + */ + public boolean isMutable() { return mutable; } + /** + * Get the formatted color of the chat channel. + * + * @return {@link String}. Returns {@link Format#DEFAULT_COLOR_CODE} if the + * color is invalid. + */ public String getColor() { + if (Format.isValidColor(color)) { + return String.valueOf(ChatColor.valueOf(color.toUpperCase())); + } + if (Format.isValidHexColor(color)) { + return Format.convertHexColorCodeToBukkitColorCode(color); + } + return Format.DEFAULT_COLOR_CODE; + } + + /** + * Get the raw color value of the chat channel. + * + * @return {@link String} + */ + public String getColorRaw() { return color; } - public void setColor(String color) { - this.color = color; - } - + /** + * Get the formatted chat color of the chat channel. + * + * @return {@link String}. Returns {@link Format#DEFAULT_COLOR_CODE} if the chat + * color is invalid. + */ public String getChatColor() { - return chatcolor; + if (chatColor.equalsIgnoreCase("None")) { + return chatColor; + } + if (Format.isValidColor(chatColor)) { + return String.valueOf(ChatColor.valueOf(chatColor.toUpperCase())); + } + if (Format.isValidHexColor(chatColor)) { + return Format.convertHexColorCodeToBukkitColorCode(chatColor); + } + return Format.DEFAULT_COLOR_CODE; } - public void setChatColor(String chatcolor) { - this.chatcolor = chatcolor; + /** + * Get the raw chat color value of the chat channel. + * + * @return {@link String} + */ + public String getChatColorRaw() { + return chatColor; } - public Boolean isDefaultchannel() { + /** + * Check if the chat channel is the default chat channel. + * + * @return true if the chat channel is the default chat channel, false + * otherwise. + */ + public boolean isDefaultchannel() { return defaultChannel; } - public void setDefaultChannel(Boolean defaultChannel) { - this.defaultChannel = defaultChannel; - } - + /** + * Get the alias of the chat channel. + * + * @return {@link String} + */ public String getAlias() { return alias; } - public void setAlias(String alias) { - this.alias = alias; - } - - public Double getDistance() { + /** + * Get the distance of the chat channel in blocks. + * + * @return double + */ + public double getDistance() { return distance; } - public void setDistance(Double distance) { - this.distance = distance; - } - - public Boolean hasDistance() { + /** + * Checks if the chat channel has a distance set. + * + * @return true if the distance is greater than zero, false otherwise. + */ + public boolean hasDistance() { return distance > 0; } - public Boolean hasCooldown() { + /** + * Checks if the chat channel has a cooldown set. + * + * @return true if the cooldown is greater than zero, false otherwise. + */ + public boolean hasCooldown() { return cooldown > 0; } - public Boolean hasPermission() { - return !permission.equalsIgnoreCase("venturechat.none"); + /** + * Checks if the chat channel has a permission set. + * + * @return true if the permission does not equal + * {@link ChatChannel#NO_PERMISSIONS}, false otherwise. + */ + public boolean hasPermission() { + return !permission.equalsIgnoreCase(NO_PERMISSIONS); } - public Boolean isFiltered() { + /** + * Checks if the chat channel has a speak permission set. + * + * @return true if the speak permission does not equal + * {@link ChatChannel#NO_PERMISSIONS}, false otherwise. + */ + public boolean hasSpeakPermission() { + return !speakPermission.equalsIgnoreCase(NO_PERMISSIONS); + } + + /** + * Get the speak permissions node for the chat channel. + * + * @return {@link String} + */ + public String getSpeakPermission() { + return speakPermission; + } + + /** + * Checks if the chat channel has the filter enabled. + * + * @return true if the chat channel has the filter enabled, false otherwise. + */ + public boolean isFiltered() { return filter; } - public void setFilter(Boolean filter) { - this.filter = filter; - } - - public boolean isIRC() { - return irc; - } - + /** + * Compares the chat channel by name to determine equality. + * + * @param channel + * Object to compare for equality. + * @return true if the objects are equal, false otherwise. + */ @Override public boolean equals(Object channel) { return channel instanceof ChatChannel && this.name.equals(((ChatChannel) channel).getName()); diff --git a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Channel.java b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Channel.java index 4c5cee7..76a7b33 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Channel.java +++ b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Channel.java @@ -1,6 +1,5 @@ package mineverse.Aust1n46.chat.command.chat; -import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -39,7 +38,7 @@ public class Channel extends MineverseCommand implements Listener { } ChatChannel channel = ChatChannel.getChannel(args[0]); plugin.getServer().getPluginManager().callEvent(new ChannelJoinEvent(mcp.getPlayer(), channel, LocalizedMessage.SET_CHANNEL.toString() - .replace("{channel_color}", ChatColor.valueOf(channel.getColor().toUpperCase()) + "") + .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName()))); return; } diff --git a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Channelinfo.java b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Channelinfo.java index e5c4ac2..e667cad 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Channelinfo.java +++ b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Channelinfo.java @@ -5,6 +5,7 @@ import org.bukkit.command.CommandSender; import mineverse.Aust1n46.chat.channel.ChatChannel; import mineverse.Aust1n46.chat.command.MineverseCommand; +import mineverse.Aust1n46.chat.utilities.Format; public class Channelinfo extends MineverseCommand { @@ -30,27 +31,38 @@ public class Channelinfo extends MineverseCommand { return; } } - sender.sendMessage(ChatColor.GOLD + "Channel: " + ChatColor.valueOf(chname.getColor().toUpperCase()) + chname.getName()); - sender.sendMessage(ChatColor.GOLD + "Alias: " + ChatColor.valueOf(chname.getColor().toUpperCase()) + chname.getAlias()); - sender.sendMessage(ChatColor.GOLD + "Color: " + ChatColor.valueOf(chname.getColor().toUpperCase()) + chname.getColor()); - sender.sendMessage(ChatColor.GOLD + "ChatColor: " + ChatColor.valueOf(chname.getChatColor().toUpperCase()) + chname.getChatColor()); - sender.sendMessage(ChatColor.GOLD + "Permission: " + ChatColor.valueOf(chname.getColor().toUpperCase()) + chname.getPermission()); - sender.sendMessage(ChatColor.GOLD + "Autojoin: " + ChatColor.valueOf(chname.getColor().toUpperCase()) + chname.getAutojoin()); - sender.sendMessage(ChatColor.GOLD + "Default: " + ChatColor.valueOf(chname.getColor().toUpperCase()) + chname.hasDistance()); + sender.sendMessage(ChatColor.GOLD + "Channel: " + chname.getColor() + chname.getName()); + sender.sendMessage(ChatColor.GOLD + "Alias: " + chname.getColor() + chname.getAlias()); + sender.sendMessage(ChatColor.GOLD + "Color: " + chname.getColor() + chname.getColorRaw()); + sender.sendMessage(ChatColor.GOLD + "ChatColor: " + (chname.getChatColor().equalsIgnoreCase("None") ? Format.DEFAULT_COLOR_CODE : chname.getChatColor()) + chname.getChatColorRaw()); + if(chname.hasPermission()) { + sender.sendMessage(ChatColor.GOLD + "Permission: " + chname.getColor() + chname.getPermission()); + } + else { + sender.sendMessage(ChatColor.GOLD + "Permission: " + chname.getColor() + "None"); + } + if(chname.hasSpeakPermission()) { + sender.sendMessage(ChatColor.GOLD + "Speak Permission: " + chname.getColor() + chname.getSpeakPermission()); + } + else { + sender.sendMessage(ChatColor.GOLD + "Speak Permission: " + chname.getColor() + "None"); + } + sender.sendMessage(ChatColor.GOLD + "Autojoin: " + chname.getColor() + chname.getAutojoin()); + sender.sendMessage(ChatColor.GOLD + "Default: " + chname.getColor() + chname.hasDistance()); if(!chname.hasDistance() || chname.getBungee()) { sender.sendMessage(ChatColor.GOLD + "Distance: " + ChatColor.RED + "N/A"); } else { - sender.sendMessage(ChatColor.GOLD + "Distance: " + ChatColor.valueOf(chname.getColor().toUpperCase()) + chname.getDistance().toString()); + sender.sendMessage(ChatColor.GOLD + "Distance: " + chname.getColor() + chname.getDistance()); } if(!chname.hasCooldown()) { sender.sendMessage(ChatColor.GOLD + "Cooldown: " + ChatColor.RED + "N/A"); } else { - sender.sendMessage(ChatColor.GOLD + "Cooldown: " + ChatColor.valueOf(chname.getColor().toUpperCase()) + chname.getCooldown()); + sender.sendMessage(ChatColor.GOLD + "Cooldown: " + chname.getColor() + chname.getCooldown()); } - sender.sendMessage(ChatColor.GOLD + "Bungeecord: " + ChatColor.valueOf(chname.getColor().toUpperCase()) + chname.getBungee().toString()); - sender.sendMessage(ChatColor.GOLD + "Format: " + ChatColor.valueOf(chname.getColor().toUpperCase()) + chname.getFormat()); + sender.sendMessage(ChatColor.GOLD + "Bungeecord: " + chname.getColor() + chname.getBungee()); + sender.sendMessage(ChatColor.GOLD + "Format: " + chname.getColor() + chname.getFormat()); return; } else { diff --git a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Chatinfo.java b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Chatinfo.java index 5f43a66..8cb036f 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Chatinfo.java +++ b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Chatinfo.java @@ -34,11 +34,11 @@ public class Chatinfo extends MineverseCommand { mcp.getPlayer().sendMessage(ChatColor.GOLD + "Player: " + ChatColor.GREEN + mcp.getName()); for(String c : mcp.getListening()) { ChatChannel channel = ChatChannel.getChannel(c); - listen += ChatColor.valueOf(channel.getColor().toUpperCase()) + channel.getName() + " "; + listen += channel.getColor() + channel.getName() + " "; } for(String c : mcp.getMutes().keySet()) { ChatChannel channel = ChatChannel.getChannel(c); - mute += ChatColor.valueOf(channel.getColor().toUpperCase()) + channel.getName() + " "; + mute += channel.getColor() + channel.getName() + " "; } for(String bc : mcp.getBlockedCommands()) { blockedcommands += bc + " "; @@ -95,11 +95,11 @@ public class Chatinfo extends MineverseCommand { sender.sendMessage(ChatColor.GOLD + "Player: " + ChatColor.GREEN + p.getName()); for(String c : p.getListening()) { ChatChannel channel = ChatChannel.getChannel(c); - listen += ChatColor.valueOf(channel.getColor().toUpperCase()) + channel.getName() + " "; + listen += channel.getColor() + channel.getName() + " "; } for(String c : p.getMutes().keySet()) { ChatChannel channel = ChatChannel.getChannel(c); - mute += ChatColor.valueOf(channel.getColor().toUpperCase()) + channel.getName() + " "; + mute += channel.getColor() + channel.getName() + " "; } for(String bc : p.getBlockedCommands()) { blockedcommands += bc + " "; diff --git a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Chlist.java b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Chlist.java index ab7eb3b..65fe61e 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Chlist.java +++ b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Chlist.java @@ -1,6 +1,5 @@ package mineverse.Aust1n46.chat.command.chat; -import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import mineverse.Aust1n46.chat.channel.ChatChannel; @@ -20,14 +19,14 @@ public class Chlist extends MineverseCommand { if(chname.hasPermission()) { if(sender.hasPermission(chname.getPermission())) { sender.sendMessage(LocalizedMessage.CHANNEL_LIST_WITH_PERMISSIONS.toString() - .replace("{channel_color}", (ChatColor.valueOf(chname.getColor().toUpperCase())).toString()) + .replace("{channel_color}", (chname.getColor()).toString()) .replace("{channel_name}", chname.getName()) .replace("{channel_alias}", chname.getAlias())); } } else { sender.sendMessage(LocalizedMessage.CHANNEL_LIST.toString() - .replace("{channel_color}", (ChatColor.valueOf(chname.getColor().toUpperCase())).toString()) + .replace("{channel_color}", chname.getColor().toString()) .replace("{channel_name}", chname.getName()) .replace("{channel_alias}", chname.getAlias())); } diff --git a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Chwho.java b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Chwho.java index 21cf35f..a444fd8 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Chwho.java +++ b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Chwho.java @@ -76,11 +76,11 @@ public class Chwho extends MineverseCommand { continue; } } - if(pluginManager.isPluginEnabled("Towny") && sender instanceof Player) { + if(plugin.getConfig().getBoolean("enable_towny_channel") && pluginManager.isPluginEnabled("Towny") && sender instanceof Player) { try { - Resident r = TownyUniverse.getDataSource().getResident(p.getName()); - Resident pp = TownyUniverse.getDataSource().getResident(((Player) sender).getName()); if(channel.getName().equalsIgnoreCase("Town")) { + Resident r = TownyUniverse.getDataSource().getResident(p.getName()); + Resident pp = TownyUniverse.getDataSource().getResident(((Player) sender).getName()); if(!pp.hasTown()) { if(playerlist.length() + p.getName().length() > linecount) { playerlist += "\n"; @@ -103,6 +103,8 @@ public class Chwho extends MineverseCommand { } } if(channel.getName().equalsIgnoreCase("Nation")) { + Resident r = TownyUniverse.getDataSource().getResident(p.getName()); + Resident pp = TownyUniverse.getDataSource().getResident(((Player) sender).getName()); if(!pp.hasNation()) { if(playerlist.length() + p.getName().length() > linecount) { playerlist += "\n"; @@ -129,11 +131,11 @@ public class Chwho extends MineverseCommand { ex.printStackTrace(); } } - if(pluginManager.isPluginEnabled("Factions") && sender instanceof Player) { + if(plugin.getConfig().getBoolean("enable_factions_channel") && pluginManager.isPluginEnabled("Factions") && sender instanceof Player) { try { - MPlayer mplayer = MPlayer.get(p.getPlayer()); - MPlayer mplayerp = MPlayer.get((Player) sender); if(channel.getName().equalsIgnoreCase("Faction")) { + MPlayer mplayer = MPlayer.get(p.getPlayer()); + MPlayer mplayerp = MPlayer.get((Player) sender); if(!mplayerp.hasFaction()) { if(playerlist.length() + p.getName().length() > linecount) { playerlist += "\n"; @@ -177,7 +179,7 @@ public class Chwho extends MineverseCommand { playerlist = playerlist.substring(0, playerlist.length() - 2); } sender.sendMessage(LocalizedMessage.CHANNEL_PLAYER_LIST_HEADER.toString() - .replace("{channel_color}", (ChatColor.valueOf(channel.getColor().toUpperCase())).toString()) + .replace("{channel_color}", (channel.getColor()).toString()) .replace("{channel_name}", channel.getName())); sender.sendMessage(playerlist); return; @@ -210,7 +212,7 @@ public class Chwho extends MineverseCommand { locreceip = p2.getLocation(); if(locreceip.getWorld() == p1.getWorld()) { diff = locreceip.subtract(locsender); - if(Math.abs(diff.getX()) > chDistance || Math.abs(diff.getZ()) > chDistance) { + if(Math.abs(diff.getX()) > chDistance || Math.abs(diff.getZ()) > chDistance || Math.abs(diff.getY()) > chDistance) { return false; } } diff --git a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Kickchannel.java b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Kickchannel.java index 2f32f0b..2dad23b 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Kickchannel.java +++ b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Kickchannel.java @@ -38,12 +38,12 @@ public class Kickchannel extends MineverseCommand { } sender.sendMessage(LocalizedMessage.KICK_CHANNEL.toString() .replace("{player}", args[0]) - .replace("{channel_color}", ChatColor.valueOf(channel.getColor().toUpperCase()) + "") + .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName())); player.removeListening(channel.getName()); if(player.isOnline()) { player.getPlayer().sendMessage(LocalizedMessage.LEAVE_CHANNEL.toString() - .replace("{channel_color}", ChatColor.valueOf(channel.getColor().toUpperCase()) + "") + .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName())); } else diff --git a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Leave.java b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Leave.java index 559cd5e..b183781 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Leave.java +++ b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Leave.java @@ -34,7 +34,7 @@ public class Leave extends MineverseCommand { } mcp.removeListening(channel.getName()); mcp.getPlayer().sendMessage(LocalizedMessage.LEAVE_CHANNEL.toString() - .replace("{channel_color}", ChatColor.valueOf(channel.getColor().toUpperCase()) + "") + .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName())); if(mcp.getListening().size() == 0) { mcp.addListening(ChatChannel.getDefaultChannel().getName()); diff --git a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Listen.java b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Listen.java index b70df93..cdb82bd 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Listen.java +++ b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Listen.java @@ -1,6 +1,5 @@ package mineverse.Aust1n46.chat.command.chat; -import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -41,7 +40,7 @@ public class Listen extends MineverseCommand { } mcp.addListening(channel.getName()); mcp.getPlayer().sendMessage(LocalizedMessage.LISTEN_CHANNEL.toString() - .replace("{channel_color}", ChatColor.valueOf(channel.getColor().toUpperCase()) + "") + .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName())); return; } diff --git a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Setchannel.java b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Setchannel.java index 1233a8b..1c40c0c 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Setchannel.java +++ b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Setchannel.java @@ -1,6 +1,5 @@ package mineverse.Aust1n46.chat.command.chat; -import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import mineverse.Aust1n46.chat.MineverseChat; @@ -46,7 +45,7 @@ public class Setchannel extends MineverseCommand { player.removeListening(channel.getName()); sender.sendMessage(LocalizedMessage.SET_CHANNEL_PLAYER_CHANNEL_NO_PERMISSION.toString() .replace("{player}", player.getName()) - .replace("{channel_color}", ChatColor.valueOf(channel.getColor().toUpperCase()) + "") + .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName())); return; } @@ -55,7 +54,7 @@ public class Setchannel extends MineverseCommand { player.setCurrentChannel(channel); sender.sendMessage(LocalizedMessage.SET_CHANNEL_SENDER.toString() .replace("{player}", player.getName()) - .replace("{channel_color}", ChatColor.valueOf(channel.getColor().toUpperCase()) + "") + .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName())); if(player.hasConversation()) { for(MineverseChatPlayer p : MineverseChat.onlinePlayers) { @@ -74,7 +73,7 @@ public class Setchannel extends MineverseCommand { } if(player.isOnline()) player.getPlayer().sendMessage(LocalizedMessage.SET_CHANNEL.toString() - .replace("{channel_color}", ChatColor.valueOf(channel.getColor().toUpperCase()) + "") + .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName())); else player.setModified(true); diff --git a/MineverseChat/mineverse/Aust1n46/chat/command/chat/VentureChatGui.java b/MineverseChat/mineverse/Aust1n46/chat/command/chat/VentureChatGui.java index 0edd1d1..2452886 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/command/chat/VentureChatGui.java +++ b/MineverseChat/mineverse/Aust1n46/chat/command/chat/VentureChatGui.java @@ -4,7 +4,6 @@ import java.util.ArrayList; import java.util.List; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -103,8 +102,8 @@ public class VentureChatGui extends MineverseCommand { skullMeta.setOwner(target.getName()); skullMeta.setDisplayName("§b" + target.getName()); List skullLore = new ArrayList(); - skullLore.add("§7Channel: " + ChatColor.valueOf(channel.getColor().toUpperCase()) + channel.getName()); - skullLore.add("§7Hash: " + ChatColor.valueOf(channel.getColor().toUpperCase()) + hash); + skullLore.add("§7Channel: " + channel.getColor() + channel.getName()); + skullLore.add("§7Hash: " + channel.getColor() + hash); skullMeta.setLore(skullLore); skull.setItemMeta(skullMeta); skull.setDurability((short) 3); @@ -162,8 +161,8 @@ public class VentureChatGui extends MineverseCommand { skullMeta.setOwner("Scarsz"); skullMeta.setDisplayName("§bDiscord_Message"); List skullLore = new ArrayList(); - skullLore.add("§7Channel: " + ChatColor.valueOf(channel.getColor().toUpperCase()) + channel.getName()); - skullLore.add("§7Hash: " + ChatColor.valueOf(channel.getColor().toUpperCase()) + hash); + skullLore.add("§7Channel: " + channel.getColor() + channel.getName()); + skullLore.add("§7Hash: " + channel.getColor() + hash); skullMeta.setLore(skullLore); skull.setItemMeta(skullMeta); skull.setDurability((short) 3); diff --git a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Venturechat.java b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Venturechat.java index 2d26763..7ce178f 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Venturechat.java +++ b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Venturechat.java @@ -30,16 +30,16 @@ public class Venturechat extends MineverseCommand { sender.sendMessage(InternalMessage.VENTURECHAT_AUTHOR.toString()); if (sender instanceof Player && plugin.getConfig().getString("loglevel", "info").equals("debug")) { Player player = (Player) sender; - String title = ChatColor.GOLD + " | " + ChatColor.BLUE.toString() + ChatColor.BOLD + "Click here to begin..." + ChatColor.RESET + ChatColor.GOLD + " | "; + String title = ChatColor.GOLD + " | " + ChatColor.BLUE.toString() + ChatColor.BOLD + "SpigotAPI chat message" + ChatColor.RESET + ChatColor.GOLD + " | "; String spaces = " "; TextComponent tcSpaces = new TextComponent(spaces); TextComponent message = new TextComponent(title); message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Click here to rank up!").create())); - message.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/rules 1")); + message.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "Sample SpigotAPI Click Event")); tcSpaces.addExtra(message); player.spigot().sendMessage(tcSpaces); - //sendActionBar(player, "NMS message"); +// sendActionBar(player, "NMS ActionBar message"); } } diff --git a/MineverseChat/mineverse/Aust1n46/chat/command/message/Message.java b/MineverseChat/mineverse/Aust1n46/chat/command/message/Message.java index bfcb49c..2ceebe6 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/command/message/Message.java +++ b/MineverseChat/mineverse/Aust1n46/chat/command/message/Message.java @@ -49,7 +49,6 @@ public class Message extends MineverseCommand { String send = ""; String echo = ""; String spy = ""; - String tellColor = plugin.getConfig().getString("tellcolor", "gray"); for(int r = 1; r < args.length; r++) { msg += " " + args[r]; } @@ -62,24 +61,9 @@ public class Message extends MineverseCommand { if(mcp.getPlayer().hasPermission("venturechat.format")) { msg = Format.FormatString(msg); } - if(plugin.getConfig().getString("tellformatfrom").equalsIgnoreCase("Default")) { - send = "{playerfrom} messages you:" + ChatColor.valueOf(tellColor.toUpperCase()) + msg; - } - else { - send = Format.FormatStringAll(plugin.getConfig().getString("tellformatfrom")) + msg; - } - if(plugin.getConfig().getString("tellformatto").equalsIgnoreCase("Default")) { - echo = "You message {playerto}:" + ChatColor.valueOf(tellColor.toUpperCase()) + msg; - } - else { - echo = Format.FormatStringAll(plugin.getConfig().getString("tellformatto")) + msg; - } - if(plugin.getConfig().getString("tellformatspy").equalsIgnoreCase("Default")) { - spy = "{playerfrom} messages {playerto}:" + ChatColor.valueOf(tellColor.toUpperCase()) + msg; - } - else { - spy = Format.FormatStringAll(plugin.getConfig().getString("tellformatspy")) + msg; - } + send = Format.FormatStringAll(plugin.getConfig().getString("tellformatfrom")) + msg; + echo = Format.FormatStringAll(plugin.getConfig().getString("tellformatto")) + msg; + spy = Format.FormatStringAll(plugin.getConfig().getString("tellformatspy")) + msg; try { out.writeUTF("Message"); out.writeUTF("Send"); diff --git a/MineverseChat/mineverse/Aust1n46/chat/command/message/Reply.java b/MineverseChat/mineverse/Aust1n46/chat/command/message/Reply.java index c9d1c7f..f9dbf75 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/command/message/Reply.java +++ b/MineverseChat/mineverse/Aust1n46/chat/command/message/Reply.java @@ -40,28 +40,12 @@ public class Reply extends MineverseCommand { String send = ""; String echo = ""; String spy = ""; - String tellColor = plugin.getConfig().getString("tellcolor", "gray"); for(int r = 0; r < args.length; r++) { msg += " " + args[r]; } - if(plugin.getConfig().getString("tellformatfrom").equalsIgnoreCase("Default")) { - send = "{playerfrom} replies to you:" + ChatColor.valueOf(tellColor.toUpperCase()) + msg; - } - else { - send = Format.FormatStringAll(plugin.getConfig().getString("tellformatfrom")) + msg; - } - if(plugin.getConfig().getString("tellformatto").equalsIgnoreCase("Default")) { - echo = "You reply to {playerto}:" + ChatColor.valueOf(tellColor.toUpperCase()) + msg; - } - else { - echo = Format.FormatStringAll(plugin.getConfig().getString("tellformatto")) + msg; - } - if(plugin.getConfig().getString("tellformatspy").equalsIgnoreCase("Default")) { - spy = "{playerfrom} replied to {playerto}:" + ChatColor.valueOf(tellColor.toUpperCase()) + msg; - } - else { - spy = Format.FormatStringAll(plugin.getConfig().getString("tellformatspy")) + msg; - } + send = Format.FormatStringAll(plugin.getConfig().getString("replyformatfrom")) + msg; + echo = Format.FormatStringAll(plugin.getConfig().getString("replyformatto")) + msg; + spy = Format.FormatStringAll(plugin.getConfig().getString("replyformatspy")) + msg; try { out.writeUTF("Message"); out.writeUTF("Send"); diff --git a/MineverseChat/mineverse/Aust1n46/chat/command/mute/Mute.java b/MineverseChat/mineverse/Aust1n46/chat/command/mute/Mute.java index f8d6322..71ecb39 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/command/mute/Mute.java +++ b/MineverseChat/mineverse/Aust1n46/chat/command/mute/Mute.java @@ -1,6 +1,5 @@ package mineverse.Aust1n46.chat.command.mute; -import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import mineverse.Aust1n46.chat.MineverseChat; @@ -37,7 +36,7 @@ public class Mute extends MineverseCommand { if(player.isMuted(channel.getName())) { sender.sendMessage(LocalizedMessage.PLAYER_ALREADY_MUTED.toString() .replace("{player}", player.getName()) - .replace("{channel_color}", ChatColor.valueOf(channel.getColor().toUpperCase()) + "") + .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName())); return; } @@ -45,11 +44,11 @@ public class Mute extends MineverseCommand { player.addMute(channel.getName(), 0); sender.sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER.toString() .replace("{player}", player.getName()) - .replace("{channel_color}", ChatColor.valueOf(channel.getColor().toUpperCase()) + "") + .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName())); if(player.isOnline()) player.getPlayer().sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER.toString() - .replace("{channel_color}", ChatColor.valueOf(channel.getColor().toUpperCase()) + "") + .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName())); else player.setModified(true); @@ -59,7 +58,7 @@ public class Mute extends MineverseCommand { return; } sender.sendMessage(LocalizedMessage.CHANNEL_CANNOT_MUTE.toString() - .replace("{channel_color}", ChatColor.valueOf(channel.getColor().toUpperCase()) + "") + .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName())); return; } @@ -72,7 +71,7 @@ public class Mute extends MineverseCommand { if(player.isMuted(channel.getName())) { sender.sendMessage(LocalizedMessage.PLAYER_ALREADY_MUTED.toString() .replace("{player}", player.getName()) - .replace("{channel_color}", ChatColor.valueOf(channel.getColor().toUpperCase()) + "") + .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName())); return; } @@ -94,13 +93,13 @@ public class Mute extends MineverseCommand { keyword = "minute"; sender.sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_TIME.toString() .replace("{player}", player.getName()) - .replace("{channel_color}", ChatColor.valueOf(channel.getColor().toUpperCase()) + "") + .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName()) .replace("{time}", time + "") .replace("{units}", keyword)); if(player.isOnline()) player.getPlayer().sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_TIME.toString() - .replace("{channel_color}", ChatColor.valueOf(channel.getColor().toUpperCase()) + "") + .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName()) .replace("{time}", time + "") .replace("{units}", keyword)); @@ -121,7 +120,7 @@ public class Mute extends MineverseCommand { return; } sender.sendMessage(LocalizedMessage.CHANNEL_CANNOT_MUTE.toString() - .replace("{channel_color}", ChatColor.valueOf(channel.getColor().toUpperCase()) + "") + .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName())); return; } diff --git a/MineverseChat/mineverse/Aust1n46/chat/command/mute/Unmute.java b/MineverseChat/mineverse/Aust1n46/chat/command/mute/Unmute.java index c8b4dbb..e0a930c 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/command/mute/Unmute.java +++ b/MineverseChat/mineverse/Aust1n46/chat/command/mute/Unmute.java @@ -1,6 +1,5 @@ package mineverse.Aust1n46.chat.command.mute; -import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import mineverse.Aust1n46.chat.MineverseChat; @@ -36,19 +35,19 @@ public class Unmute extends MineverseCommand { if(!player.isMuted(channel.getName())) { sender.sendMessage(LocalizedMessage.PLAYER_NOT_MUTED.toString() .replace("{player}", player.getName()) - .replace("{channel_color}", ChatColor.valueOf(channel.getColor().toUpperCase()) + "") + .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName())); return; } player.removeMute(channel.getName()); sender.sendMessage(LocalizedMessage.UNMUTE_PLAYER_SENDER.toString() .replace("{player}", player.getName()) - .replace("{channel_color}", ChatColor.valueOf(channel.getColor().toUpperCase()) + "") + .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName())); if(player.isOnline()) { player.getPlayer().sendMessage(LocalizedMessage.UNMUTE_PLAYER_PLAYER.toString() .replace("{player}", player.getName()) - .replace("{channel_color}", ChatColor.valueOf(channel.getColor().toUpperCase()) + "") + .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName())); } else { diff --git a/MineverseChat/mineverse/Aust1n46/chat/listeners/ChatListener.java b/MineverseChat/mineverse/Aust1n46/chat/listeners/ChatListener.java index 90501b6..a618eb5 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/listeners/ChatListener.java +++ b/MineverseChat/mineverse/Aust1n46/chat/listeners/ChatListener.java @@ -90,16 +90,16 @@ public class ChatListener implements Listener { mcp.setConversation(null); } else { - if(tp.getIgnores().contains(mcp.getUUID())) { + if(tp.getIgnores().contains(mcp.getUUID())) { mcp.getPlayer().sendMessage(LocalizedMessage.IGNORING_MESSAGE.toString() .replace("{player}", tp.getName())); - event.setCancelled(true); + event.setCancelled(true); return; } - if(!tp.getMessageToggle()) { + if(!tp.getMessageToggle()) { mcp.getPlayer().sendMessage(LocalizedMessage.BLOCKING_MESSAGE.toString() .replace("{player}", tp.getName())); - event.setCancelled(true); + event.setCancelled(true); return; } String filtered = chat; @@ -227,7 +227,7 @@ public class ChatListener implements Listener { timedMute = " for " + remaining + " more " + keyword; } mcp.getPlayer().sendMessage(LocalizedMessage.CHANNEL_MUTED.toString() - .replace("{channel_color}", ChatColor.valueOf(eventChannel.getColor().toUpperCase()) + "") + .replace("{channel_color}", eventChannel.getColor() + "") .replace("{channel_name}", eventChannel.getName()) .replace("{time}", timedMute)); mcp.setQuickChat(false); @@ -243,7 +243,12 @@ public class ChatListener implements Listener { mcp.setCurrentChannel(ChatChannel.getDefaultChannel()); return; } - curColor = eventChannel.getChatColor().toUpperCase(); + if(eventChannel.hasSpeakPermission() && !mcp.getPlayer().hasPermission(eventChannel.getSpeakPermission())) { + mcp.getPlayer().sendMessage(LocalizedMessage.CHANNEL_NO_SPEAK_PERMISSIONS.toString()); + mcp.setQuickChat(false); + return; + } + curColor = eventChannel.getChatColor(); bungee = eventChannel.getBungee(); int time = (int) (System.currentTimeMillis() / 1000); @@ -294,7 +299,7 @@ public class ChatListener implements Listener { } mcp.getSpam().get(eventChannel).set(0, 0); mcp.getPlayer().sendMessage(LocalizedMessage.MUTE_PLAYER_SPAM.toString() - .replace("{channel_color}", ChatColor.valueOf(eventChannel.getColor().toUpperCase()) + "") + .replace("{channel_color}", eventChannel.getColor() + "") .replace("{channel_name}", eventChannel.getName()) .replace("{time}", timedmute)); mcp.setQuickChat(false); @@ -323,7 +328,7 @@ public class ChatListener implements Listener { chDistance = eventChannel.getDistance(); } - format = PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), Format.FormatStringAll(plugin.getConfig().getConfigurationSection("channels." + eventChannel.getName()).getString("format"))); + format = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), Format.FormatStringAll(plugin.getConfig().getConfigurationSection("channels." + eventChannel.getName()).getString("format")))); if(plugin.getConfig().getBoolean("formatcleaner", false)) { format = format.replace("[]", " "); format = format.replace(" ", " ").replace(" ", " ").replace(" ", " "); @@ -350,9 +355,9 @@ public class ChatListener implements Listener { } if(plugin.getConfig().getBoolean("enable_towny_channel") && pluginManager.isPluginEnabled("Towny")) { try { - Resident r = TownyUniverse.getDataSource().getResident(p.getName()); - Resident pp = TownyUniverse.getDataSource().getResident(mcp.getName()); if(eventChannel.getName().equalsIgnoreCase("Town")) { + Resident r = TownyUniverse.getDataSource().getResident(p.getName()); + Resident pp = TownyUniverse.getDataSource().getResident(mcp.getName()); if(!pp.hasTown()) { recipients.remove(p.getPlayer()); recipientCount--; @@ -370,6 +375,8 @@ public class ChatListener implements Listener { } } if(eventChannel.getName().equalsIgnoreCase("Nation")) { + Resident r = TownyUniverse.getDataSource().getResident(p.getName()); + Resident pp = TownyUniverse.getDataSource().getResident(mcp.getName()); if(!pp.hasNation()) { recipients.remove(p.getPlayer()); recipientCount--; @@ -394,9 +401,9 @@ public class ChatListener implements Listener { if(plugin.getConfig().getBoolean("enable_factions_channel") && pluginManager.isPluginEnabled("Factions")) { try { - MPlayer mplayer = MPlayer.get(mcp.getPlayer()); - MPlayer mplayerp = MPlayer.get(p.getPlayer()); if(eventChannel.getName().equalsIgnoreCase("Faction")) { + MPlayer mplayer = MPlayer.get(mcp.getPlayer()); + MPlayer mplayerp = MPlayer.get(p.getPlayer()); if(!mplayer.hasFaction()) { recipients.remove(p.getPlayer()); recipientCount--; @@ -420,7 +427,7 @@ public class ChatListener implements Listener { locreceip = p.getPlayer().getLocation(); if(locreceip.getWorld() == mcp.getPlayer().getWorld()) { diff = locreceip.subtract(locsender); - if(Math.abs(diff.getX()) > chDistance || Math.abs(diff.getZ()) > chDistance) { + if(Math.abs(diff.getX()) > chDistance || Math.abs(diff.getZ()) > chDistance || Math.abs(diff.getY()) > chDistance) { recipients.remove(p.getPlayer()); recipientCount--; continue; @@ -457,10 +464,10 @@ public class ChatListener implements Listener { chat = Format.getLastCode(format) + chat; } else { - chat = ChatColor.valueOf(curColor) + chat; + chat = curColor + chat; } - String globalJSON = Format.convertToJson(mcp, format, chat); + String globalJSON = Format.convertToJson(mcp, format, chat); String consoleChat = format + chat; String message = consoleChat.replaceAll("(§([a-z0-9]))", ""); int hash = message.hashCode(); diff --git a/MineverseChat/mineverse/Aust1n46/chat/listeners/CommandListener.java b/MineverseChat/mineverse/Aust1n46/chat/listeners/CommandListener.java index ff3351e..022c2c4 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/listeners/CommandListener.java +++ b/MineverseChat/mineverse/Aust1n46/chat/listeners/CommandListener.java @@ -150,7 +150,7 @@ public class CommandListener implements CommandExecutor, Listener { if(!channel.hasPermission() || mcp.getPlayer().hasPermission(channel.getPermission())) { if(message.equals("/" + channel.getAlias())) { mcp.getPlayer().sendMessage(LocalizedMessage.SET_CHANNEL.toString() - .replace("{channel_color}", ChatColor.valueOf(channel.getColor().toUpperCase()) + "") + .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName())); if(mcp.hasConversation()) { for(MineverseChatPlayer p : MineverseChat.onlinePlayers) { @@ -262,7 +262,7 @@ public class CommandListener implements CommandExecutor, Listener { if(target != null) { command = command.replace("{player_name}", target.getName()); if(target.isOnline()) { - command = PlaceholderAPI.setBracketPlaceholders(target.getPlayer(), command); + command = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(target.getPlayer(), command)); } } else { diff --git a/MineverseChat/mineverse/Aust1n46/chat/listeners/PacketListener.java b/MineverseChat/mineverse/Aust1n46/chat/listeners/PacketListener.java index a592da0..7eae550 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/listeners/PacketListener.java +++ b/MineverseChat/mineverse/Aust1n46/chat/listeners/PacketListener.java @@ -28,7 +28,7 @@ public class PacketListener extends PacketAdapter { return; } - MineverseChatPlayer mcp = MineverseChatAPI.getMineverseChatPlayer(event.getPlayer()); + MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(event.getPlayer()); if(mcp == null) { return; } diff --git a/MineverseChat/mineverse/Aust1n46/chat/localization/Localization.java b/MineverseChat/mineverse/Aust1n46/chat/localization/Localization.java index b881d4a..4a28528 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/localization/Localization.java +++ b/MineverseChat/mineverse/Aust1n46/chat/localization/Localization.java @@ -14,7 +14,7 @@ public class Localization { private static MineverseChat plugin = MineverseChat.getInstance(); private static FileConfiguration localization; - private static final String VERSION = "2.18.2"; + private static final String VERSION = "2.20.0"; public static void initialize() { File localizationFile = new File(plugin.getDataFolder().getAbsolutePath(), "Messages.yml"); diff --git a/MineverseChat/mineverse/Aust1n46/chat/localization/LocalizedMessage.java b/MineverseChat/mineverse/Aust1n46/chat/localization/LocalizedMessage.java index 7a53428..de424ed 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/localization/LocalizedMessage.java +++ b/MineverseChat/mineverse/Aust1n46/chat/localization/LocalizedMessage.java @@ -21,6 +21,7 @@ public enum LocalizedMessage { CHANNEL_LIST_WITH_PERMISSIONS("ChannelListWithPermissions"), CHANNEL_NO_PERMISSION("ChannelNoPermission"), CHANNEL_NO_PERMISSION_VIEW("ChannelNoPermissionView"), + CHANNEL_NO_SPEAK_PERMISSIONS("ChannelNoSpeakPermissions"), CHANNEL_PLAYER_LIST_HEADER("ChannelPlayerListHeader"), CHANNEL_MUTED("ChannelMuted"), COMMAND_INVALID_ARGUMENTS("CommandInvalidArguments"), diff --git a/MineverseChat/mineverse/Aust1n46/chat/utilities/Format.java b/MineverseChat/mineverse/Aust1n46/chat/utilities/Format.java index 7eba2ad..bf9c8bb 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/utilities/Format.java +++ b/MineverseChat/mineverse/Aust1n46/chat/utilities/Format.java @@ -26,6 +26,13 @@ import mineverse.Aust1n46.chat.versions.VersionHandler; public class Format { private static MineverseChat plugin = MineverseChat.getInstance(); + public static final int LEGACY_COLOR_CODE_LENGTH = 2; + public static final int HEX_COLOR_CODE_LENGTH = 14; + public static final String DEFAULT_COLOR_CODE = String.valueOf(ChatColor.WHITE); + public static final String HEX_COLOR_CODE_PREFIX = "#"; + public static final String BUKKIT_COLOR_CODE_PREFIX = "§"; + public static final String BUKKIT_HEX_COLOR_CODE_PREFIX = "x"; + public static String convertToJson(MineverseChatPlayer sender, String format, String chat) { JsonFormat JSONformat = MineverseChat.jfInfo.getJsonFormat(sender.getJsonFormat()); String f = format.replace("\\", "\\\\").replace("\"", "\\\""); @@ -36,10 +43,11 @@ public class Format { try { prefix = FormatStringAll(MineverseChat.chat.getPlayerPrefix(sender.getPlayer())); suffix = FormatStringAll(MineverseChat.chat.getPlayerSuffix(sender.getPlayer())); - if(suffix.equals("")) { + //Don't apply JSON if the prefix or suffix is just a color code + if(suffix.isEmpty() || (suffix.length() == 2 && suffix.substring(1).matches("[0-9a-fA-F]"))) { suffix = "venturechat_no_suffix_code"; } - if(prefix.equals("")) { + if(prefix.isEmpty() || (prefix.length() == 2 && prefix.substring(1).matches("[0-9a-fA-F]"))) { prefix = "venturechat_no_prefix_code"; } } @@ -91,26 +99,26 @@ public class Format { String hover = ""; if(placeholder.contains(prefix)) { action = format.getClickPrefix(); - text = PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), format.getClickPrefixText()); + text = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), format.getClickPrefixText())); for(String st : format.getHoverTextPrefix()) { hover += Format.FormatStringAll(st) + "\n"; } } if(placeholder.contains(nickname)) { action = format.getClickName(); - text = PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), format.getClickNameText()); + text = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), format.getClickNameText())); for(String st : format.getHoverTextName()) { hover += Format.FormatStringAll(st) + "\n"; } } if(placeholder.contains(suffix)) { action = format.getClickSuffix(); - text = PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), format.getClickSuffixText()); + text = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), format.getClickSuffixText())); for(String st : format.getHoverTextSuffix()) { hover += Format.FormatStringAll(st) + "\n"; } } - hover = PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), hover.substring(0, hover.length() - 1)); + hover = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), hover.substring(0, hover.length() - 1))); temp += convertToJsonColors(lastCode + placeholder, ",\"clickEvent\":{\"action\":\"" + action + "\",\"value\":\"" + text + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + convertToJsonColors(hover) + "]}}") + ","; lastCode = getLastCode(lastCode + placeholder); remaining = remaining.substring(indexEnd); @@ -143,7 +151,7 @@ public class Format { String https = ""; if(ChatColor.stripColor(link).contains("https://")) https = "s"; - temp += convertToJsonColors(lastCode + link, ",\"underlined\":\"" + plugin.getConfig().getBoolean("underlineurls", true) + "\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"http" + https + "://" + ChatColor.stripColor(link.replace("http://", "").replace("https://", "")) + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + convertToJsonColors(lastCode + link) + "]}}") + ","; + temp += convertToJsonColors(lastCode + link, ",\"underlined\":\"" + underlineURLs() + "\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"http" + https + "://" + ChatColor.stripColor(link.replace("http://", "").replace("https://", "")) + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + convertToJsonColors(lastCode + link) + "]}}") + ","; lastCode = getLastCode(lastCode + link); remaining = remaining.substring(indexLinkEnd); } @@ -160,16 +168,26 @@ public class Format { String ts = ""; char[] ch = s.toCharArray(); for(int a = 0; a < s.length() - 1; a ++) { - if(String.valueOf(ch[a + 1]).matches("[lkonmr0123456789abcdef]") && ch[a] == '§') { + if(String.valueOf(ch[a + 1]).matches("[lkomnLKOMN]") && ch[a] == '§') { ts += String.valueOf(ch[a]) + ch[a + 1]; - if(String.valueOf(ch[a + 1]).matches("[0123456789abcdefr]")) { - ts = String.valueOf(ch[a]) + ch[a + 1]; + a ++; + } + else if(String.valueOf(ch[a + 1]).matches("[0123456789abcdefrABCDEFR]") && ch[a] == '§') { + ts = String.valueOf(ch[a]) + ch[a + 1]; + a ++; + } + else if(ch[a + 1] == 'x' && ch[a] == '§') { + if(ch.length > a + 13) { + if(String.valueOf(ch[a + 3]).matches("[0123456789abcdefABCDEF]") && String.valueOf(ch[a + 5]).matches("[0123456789abcdefABCDEF]") && String.valueOf(ch[a + 7]).matches("[0123456789abcdefABCDEF]") && String.valueOf(ch[a + 9]).matches("[0123456789abcdefABCDEF]") && String.valueOf(ch[a + 11]).matches("[0123456789abcdefABCDEF]") && String.valueOf(ch[a + 13]).matches("[0123456789abcdefABCDEF]") && ch[a + 2] == '§' && ch[a + 4] == '§' && ch[a + 6] == '§' && ch[a + 8] == '§' && ch[a + 10] == '§' && ch[a + 12] == '§') { + ts = String.valueOf(ch[a]) + ch[a + 1] + ch[a + 2] + ch[a + 3] + ch[a + 4] + ch[a + 5] + ch[a + 6] + ch[a + 7] + ch[a + 8] + ch[a + 9] + ch[a + 10] + ch[a + 11] + ch[a + 12] + ch[a + 13]; + a += 13; + } } - } + } } return ts; } - + private static String convertToJsonColors(String s) { return convertToJsonColors(s, ""); } @@ -184,46 +202,65 @@ public class Format { boolean bold = false; boolean obfuscated = false; boolean italic = false; - boolean underlined = false; boolean strikethrough = false; + boolean underlined = false; String previousColor = ""; + int colorLength = LEGACY_COLOR_CODE_LENGTH; do { - if(remaining.length() < 2) { + if(remaining.length() < LEGACY_COLOR_CODE_LENGTH) { temp = "{\"text\":\"" + remaining + "\"},"; break; } modifier = ""; - indexColor = remaining.indexOf("§"); + indexColor = remaining.indexOf(BUKKIT_COLOR_CODE_PREFIX); previousColor = color; - color = remaining.substring(1, indexColor + 2); - if(!color.matches("[0123456789abcdef]")) { + + color = remaining.substring(1, indexColor + LEGACY_COLOR_CODE_LENGTH); + if(color.equals(BUKKIT_HEX_COLOR_CODE_PREFIX)) { + if(remaining.length() >= HEX_COLOR_CODE_LENGTH) { + color = HEX_COLOR_CODE_PREFIX + remaining.substring(LEGACY_COLOR_CODE_LENGTH, indexColor + HEX_COLOR_CODE_LENGTH).replace(BUKKIT_COLOR_CODE_PREFIX, ""); + colorLength = HEX_COLOR_CODE_LENGTH; + bold = false; + obfuscated = false; + italic = false; + strikethrough = false; + underlined = false; + } + } + else if(!color.matches("[0123456789abcdefABCDEF]")) { switch(color) { - case "l": { + case "l": + case "L": { bold = true; break; } - case "k": { + case "k": + case "K": { obfuscated = true; break; } - case "o": { + case "o": + case "O": { italic = true; break; } - case "n": { - underlined = true; - break; - } - case "m": { + case "m": + case "M": { strikethrough = true; break; } - case "r": { + case "n": + case "N": { + underlined = true; + break; + } + case "r": + case "R": { bold = false; obfuscated = false; italic = false; - underlined = false; strikethrough = false; + underlined = false; color = "f"; break; } @@ -237,8 +274,8 @@ public class Format { bold = false; obfuscated = false; italic = false; - underlined = false; strikethrough = false; + underlined = false; } if(bold) modifier += ",\"bold\":\"true\""; @@ -250,12 +287,13 @@ public class Format { modifier += ",\"underlined\":\"true\""; if(strikethrough) modifier += ",\"strikethrough\":\"true\""; - remaining = remaining.substring(2); - indexNextColor = remaining.indexOf("§"); + remaining = remaining.substring(colorLength); + colorLength = LEGACY_COLOR_CODE_LENGTH; + indexNextColor = remaining.indexOf(BUKKIT_COLOR_CODE_PREFIX); if(indexNextColor == -1) { indexNextColor = remaining.length(); } - temp += "{\"text\":\"" + remaining.substring(0, indexNextColor) + "\",\"color\":\"" + hexidecimalToJsonColor(color) + "\"" + modifier + extensions + "},"; + temp += "{\"text\":\"" + remaining.substring(0, indexNextColor) + "\",\"color\":\"" + hexidecimalToJsonColorRGB(color) + "\"" + modifier + extensions + "},"; remaining = remaining.substring(indexNextColor); } while(remaining.length() > 1 && indexColor != -1); @@ -264,26 +302,38 @@ public class Format { return temp; } - private static String hexidecimalToJsonColor(String c) { - switch(c) { - case "0": return "black"; - case "1": return "dark_blue"; - case "2": return "dark_green"; - case "3": return "dark_aqua"; - case "4": return "dark_red"; - case "5": return "dark_purple"; - case "6": return "gold"; - case "7": return "gray"; - case "8": return "dark_gray"; - case "9": return "blue"; - case "a": return "green"; - case "b": return "aqua"; - case "c": return "red"; - case "d": return "light_purple"; - case "e": return "yellow"; - case "f": return "white"; + private static String hexidecimalToJsonColorRGB(String c) { + if(c.length() == 1) { + switch(c) { + case "0": return "black"; + case "1": return "dark_blue"; + case "2": return "dark_green"; + case "3": return "dark_aqua"; + case "4": return "dark_red"; + case "5": return "dark_purple"; + case "6": return "gold"; + case "7": return "gray"; + case "8": return "dark_gray"; + case "9": return "blue"; + case "a": + case "A": return "green"; + case "b": + case "B": return "aqua"; + case "c": + case "C": return "red"; + case "d": + case "D": return "light_purple"; + case "e": + case "E": return "yellow"; + case "f": + case "F": return "white"; + default: return "white"; + } } - return ""; + if(isValidHexColor(c)) { + return c; + } + return "white"; } public static String convertPlainTextToJson(String s, boolean convertURL) { @@ -387,62 +437,42 @@ public class Format { } } - protected static Pattern chatColorPattern = Pattern.compile("(?i)&([0-9A-F])"); - protected static Pattern chatMagicPattern = Pattern.compile("(?i)&([K])"); - protected static Pattern chatBoldPattern = Pattern.compile("(?i)&([L])"); - protected static Pattern chatStrikethroughPattern = Pattern.compile("(?i)&([M])"); - protected static Pattern chatUnderlinePattern = Pattern.compile("(?i)&([N])"); - protected static Pattern chatItalicPattern = Pattern.compile("(?i)&([O])"); - protected static Pattern chatResetPattern = Pattern.compile("(?i)&([R])"); + protected static Pattern chatColorPattern = Pattern.compile("(?i)&([0-9])"); public static String FormatStringColor(String string) { String allFormated = string; allFormated = chatColorPattern.matcher(allFormated).replaceAll("\u00A7$1"); + + allFormated = allFormated.replaceAll("&[x]", "§x"); + allFormated = allFormated.replaceAll("&[aA]", "§a"); + allFormated = allFormated.replaceAll("&[bB]", "§b"); + allFormated = allFormated.replaceAll("&[cC]", "§c"); + allFormated = allFormated.replaceAll("&[dD]", "§d"); + allFormated = allFormated.replaceAll("&[eE]", "§e"); + allFormated = allFormated.replaceAll("&[fF]", "§f"); + allFormated = allFormated.replaceAll("%", "\\%"); + + allFormated = convertHexColorCodeStringToBukkitColorCodeString(allFormated); return allFormated; } public static String FormatString(String string) { String allFormated = string; - allFormated = chatMagicPattern.matcher(allFormated).replaceAll("\u00A7$1"); - allFormated = chatBoldPattern.matcher(allFormated).replaceAll("\u00A7$1"); - allFormated = chatStrikethroughPattern.matcher(allFormated).replaceAll("\u00A7$1"); - allFormated = chatUnderlinePattern.matcher(allFormated).replaceAll("\u00A7$1"); - allFormated = chatItalicPattern.matcher(allFormated).replaceAll("\u00A7$1"); - allFormated = chatResetPattern.matcher(allFormated).replaceAll("\u00A7$1"); + allFormated = allFormated.replaceAll("&[kK]", "§k"); + allFormated = allFormated.replaceAll("&[lL]", "§l"); + allFormated = allFormated.replaceAll("&[mM]", "§m"); + allFormated = allFormated.replaceAll("&[nN]", "§n"); + allFormated = allFormated.replaceAll("&[oO]", "§o"); + allFormated = allFormated.replaceAll("&[rR]", "§r"); + allFormated = allFormated.replaceAll("%", "\\%"); return allFormated; } - - public static String FormatPlayerName(String playerPrefix, String playerDisplayName, String playerSuffix) { - playerPrefix = chatColorPattern.matcher(playerPrefix).replaceAll("\u00A7$1"); - playerPrefix = chatMagicPattern.matcher(playerPrefix).replaceAll("\u00A7$1"); - playerPrefix = chatBoldPattern.matcher(playerPrefix).replaceAll("\u00A7$1"); - playerPrefix = chatStrikethroughPattern.matcher(playerPrefix).replaceAll("\u00A7$1"); - playerPrefix = chatUnderlinePattern.matcher(playerPrefix).replaceAll("\u00A7$1"); - playerPrefix = chatItalicPattern.matcher(playerPrefix).replaceAll("\u00A7$1"); - playerPrefix = chatResetPattern.matcher(playerPrefix).replaceAll("\u00A7$1"); - - playerSuffix = chatColorPattern.matcher(playerSuffix).replaceAll("\u00A7$1"); - playerSuffix = chatMagicPattern.matcher(playerSuffix).replaceAll("\u00A7$1"); - playerSuffix = chatBoldPattern.matcher(playerSuffix).replaceAll("\u00A7$1"); - playerSuffix = chatStrikethroughPattern.matcher(playerSuffix).replaceAll("\u00A7$1"); - playerSuffix = chatUnderlinePattern.matcher(playerSuffix).replaceAll("\u00A7$1"); - playerSuffix = chatItalicPattern.matcher(playerSuffix).replaceAll("\u00A7$1"); - playerSuffix = chatResetPattern.matcher(playerSuffix).replaceAll("\u00A7$1"); - return playerPrefix + playerDisplayName.trim() + playerSuffix; - } - + public static String FormatStringAll(String string) { - String allFormated = string; - allFormated = chatColorPattern.matcher(allFormated).replaceAll("\u00A7$1"); - allFormated = chatMagicPattern.matcher(allFormated).replaceAll("\u00A7$1"); - allFormated = chatBoldPattern.matcher(allFormated).replaceAll("\u00A7$1"); - allFormated = chatStrikethroughPattern.matcher(allFormated).replaceAll("\u00A7$1"); - allFormated = chatUnderlinePattern.matcher(allFormated).replaceAll("\u00A7$1"); - allFormated = chatItalicPattern.matcher(allFormated).replaceAll("\u00A7$1"); - allFormated = chatResetPattern.matcher(allFormated).replaceAll("\u00A7$1"); - allFormated = allFormated.replaceAll("%", "\\%"); + String allFormated = Format.FormatString(string); + allFormated = Format.FormatStringColor(allFormated); return allFormated; } @@ -465,7 +495,7 @@ public class Format { return msg; } - public static Boolean isValidColor(String color) { + public static boolean isValidColor(String color) { Boolean bFound = false; for(ChatColor bkColors : ChatColor.values()) { if(color.equalsIgnoreCase(bkColors.name())) { @@ -475,7 +505,39 @@ public class Format { return bFound; } + public static boolean isValidHexColor(String color) { + Pattern pattern = Pattern.compile("(^#[0-9a-fA-F]{6}\\b)"); + Matcher matcher = pattern.matcher(color); + return matcher.find(); + } + + public static String convertHexColorCodeToBukkitColorCode(String color) { + StringBuilder bukkitColorCode = new StringBuilder(BUKKIT_COLOR_CODE_PREFIX + BUKKIT_HEX_COLOR_CODE_PREFIX); + for(int a = 1; a < color.length(); a++) { + bukkitColorCode.append(BUKKIT_COLOR_CODE_PREFIX + color.charAt(a)); + } + return bukkitColorCode.toString().toLowerCase(); + } + + public static String convertHexColorCodeStringToBukkitColorCodeString(String string) { + Pattern pattern = Pattern.compile("(#[0-9a-fA-F]{6})"); + Matcher matcher = pattern.matcher(string); + while(matcher.find()) { + int indexStart = matcher.start(); + int indexEnd = matcher.end(); + String hexColor = string.substring(indexStart, indexEnd); + String bukkitColor = convertHexColorCodeToBukkitColorCode(hexColor); + string = string.replaceAll(hexColor, bukkitColor); + matcher.reset(string); + } + return string; + } + public static String escapeAllRegex(String input) { return input.replace("[", "\\[").replace("]", "\\]").replace("{", "\\{").replace("}", "\\}").replace("(", "\\(").replace(")", "\\)").replace("|", "\\|").replace("+", "\\+").replace("*", "\\*"); } + + public static boolean underlineURLs() { + return plugin.getConfig().getBoolean("underlineurls", true); + } } \ No newline at end of file diff --git a/MineverseChat/mineverse/Aust1n46/chat/versions/VersionHandler.java b/MineverseChat/mineverse/Aust1n46/chat/versions/VersionHandler.java index 37eb197..3cbe401 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/versions/VersionHandler.java +++ b/MineverseChat/mineverse/Aust1n46/chat/versions/VersionHandler.java @@ -81,6 +81,10 @@ public class VersionHandler { return Bukkit.getVersion().contains("1.15"); } + public static boolean is1_16() { + return Bukkit.getVersion().contains("1.16"); + } + public static boolean isCauldron() { return false; } diff --git a/MineverseChat/plugin.yml b/MineverseChat/plugin.yml index 20f689e..dfa66c8 100644 --- a/MineverseChat/plugin.yml +++ b/MineverseChat/plugin.yml @@ -1,5 +1,5 @@ name: VentureChat -version: 2.18.4 +version: 2.20.0 api-version: 1.13 main: mineverse.Aust1n46.chat.MineverseChat depend: [Vault, ProtocolLib, PlaceholderAPI] @@ -162,8 +162,8 @@ commands: aliases: [cb,vcommandblock] description: Toggle a player blocked from entering a command permission-message: You don't have - nick: - usage: /nick {player} [nickname] + setnickname: + usage: /setnickname {player} [nickname] aliases: [vnick] description: Set a players nickname permission-message: You don't have diff --git a/test/mineverse/Aust1n46/chat/utilities/FormatTest.java b/test/mineverse/Aust1n46/chat/utilities/FormatTest.java new file mode 100644 index 0000000..4517226 --- /dev/null +++ b/test/mineverse/Aust1n46/chat/utilities/FormatTest.java @@ -0,0 +1,140 @@ +package mineverse.Aust1n46.chat.utilities; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.configuration.file.FileConfiguration; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import mineverse.Aust1n46.chat.MineverseChat; + +@RunWith(PowerMockRunner.class) +@PrepareForTest( { MineverseChat.class }) +public class FormatTest { + + private MineverseChat mockPlugin; + private FileConfiguration mockConfig; + + private List filters; + + @Before + public void setUp() { + filters = new ArrayList(); + filters.add("ass,donut"); + + mockPlugin = Mockito.mock(MineverseChat.class); + mockConfig = Mockito.mock(FileConfiguration.class); + + PowerMockito.mockStatic(MineverseChat.class); + PowerMockito.when(MineverseChat.getInstance()).thenReturn(mockPlugin); + Mockito.when(mockPlugin.getConfig()).thenReturn(mockConfig); + Mockito.when(mockConfig.getStringList("filters")).thenReturn(filters); + } + + @After + public void tearDown() { + mockPlugin = null; + mockConfig = null; + filters = new ArrayList(); + } + + @Test + public void testGetLastCodeSingleColor() { + String input = "§cHello"; + String expectedResult = "§c"; + + String result = Format.getLastCode(input); + + assertEquals(expectedResult, result); + } + + @Test + public void testGetLastCodeColorAfterFormat() { + String input = "§o§cHello"; + String expectedResult = "§c"; + + String result = Format.getLastCode(input); + + assertEquals(expectedResult, result); + } + + @Test + public void testGetLastCodeColorBeforeFormat() { + String input = "§c§oHello"; + String expectedResult = "§c§o"; + + String result = Format.getLastCode(input); + + assertEquals(expectedResult, result); + } + + @Test + public void testFilterChat() { + String test = "I am an ass"; + String expectedResult = "I am an donut"; + + String result = Format.FilterChat(test); + assertEquals(expectedResult, result); + } + + @Test + public void testIsValidColor() { + String color = "red"; + + boolean result = Format.isValidColor(color); + assertTrue(result); + } + + @Test + public void testIsInvalidColor() { + String color = "randomString"; + + boolean result = Format.isValidColor(color); + assertFalse(result); + } + + @Test + public void testIsValidHexColor() { + String hexColor = "#ff00ff"; + + boolean result = Format.isValidHexColor(hexColor); + assertTrue(result); + } + + @Test + public void testIsInvalidHexColor() { + String hexColor = "#random"; + + boolean result = Format.isValidHexColor(hexColor); + assertFalse(result); + } + + @Test + public void testConvertHexColorCodeToBukkitColorCode() { + String hexColor = "#ff00ff"; + String expectedResult = "§x§f§f§0§0§f§f"; + + String result = Format.convertHexColorCodeToBukkitColorCode(hexColor); + assertEquals(expectedResult, result); + } + + @Test + public void testConvertHexColorCodeStringToBukkitColorCodeString() { + String input = "#ff00ffHello§cThere#00ff00Austin"; + String expectedResult = "§x§f§f§0§0§f§fHello§cThere§x§0§0§f§f§0§0Austin"; + + String result = Format.convertHexColorCodeStringToBukkitColorCodeString(input); + assertEquals(expectedResult, result); + } +}