Merge branch 'master' into build-system

# Conflicts:
#	src/main/java/mineverse/Aust1n46/chat/MineverseChat.java
#	src/main/java/mineverse/Aust1n46/chat/listeners/ChatListener.java
#	src/main/java/mineverse/Aust1n46/chat/listeners/CommandListener.java
#	src/main/java/mineverse/Aust1n46/chat/utilities/Format.java
#	src/main/resources/config.yml
#	src/main/resources/example_config_always_up_to_date!.yml
#	src/main/resources/plugin.yml
#	src/mineverse/Aust1n46/chat/channel/ChatChannel.java
#	src/mineverse/Aust1n46/chat/command/VentureCommandExecutor.java
#	src/mineverse/Aust1n46/chat/command/chat/Chatreload.java
This commit is contained in:
Aust1n46 2021-07-29 16:11:37 -04:00
commit 94aa22d89a
9 changed files with 1633 additions and 97 deletions

View File

@ -13,6 +13,7 @@ import mineverse.Aust1n46.chat.localization.LocalizedMessage;
import mineverse.Aust1n46.chat.utilities.Format;
import mineverse.Aust1n46.chat.versions.VersionHandler;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
@ -29,17 +30,21 @@ import org.bukkit.event.server.ServerCommandEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.SkullMeta;
import me.clip.placeholderapi.PlaceholderAPI;
//This class listens for commands (Any chat that begins with a /) to use in the command spy and
//in the custom commands such as aliases.
public class CommandListener implements CommandExecutor, Listener {
private MineverseChat plugin = MineverseChat.getInstance();
@EventHandler
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) throws FileNotFoundException {
ConfigurationSection cs = plugin.getConfig().getConfigurationSection("commandspy");
Boolean wec = cs.getBoolean("worldeditcommands", true);
import me.clip.placeholderapi.PlaceholderAPI;
//This class listens for commands (Any chat that begins with a /) to use in the command spy and
//in the custom commands such as aliases.
public class CommandListener implements CommandExecutor, Listener {
private MineverseChat plugin = MineverseChat.getInstance();
@EventHandler
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) throws FileNotFoundException {
if(event.getPlayer() == null) {
Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - Event.getPlayer() returned null in PlayerCommandPreprocessEvent"));
return;
}
ConfigurationSection cs = plugin.getConfig().getConfigurationSection("commandspy");
Boolean wec = cs.getBoolean("worldeditcommands", true);
MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(event.getPlayer());
if(!mcp.getPlayer().hasPermission("venturechat.commandspy.override")) {
for(MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) {

View File

@ -1,4 +1,4 @@
name: VentureChat
main: mineverse.Aust1n46.chat.bungee.MineverseChatBungee
version: 2.23.0
version: 2.23.3
author: Aust1n46

View File

@ -1,3 +1,4 @@
<<<<<<< HEAD:src/main/resources/config.yml
#===============================================================
# VentureChat Config =
# Author: Aust1n46 =
@ -420,4 +421,429 @@ channels:
alias: l
permissions: None
speak_permissions: None
=======
#===============================================================
# VentureChat Config =
# Author: Aust1n46 =
#===============================================================
# - regex1,regex2
# Simple regex tips: Use \b to "cut" a section of the word or phrase. Example: \bass,donuts
# Example filtered sentence: You are an ass. Will become: You are an donuts.
# Example filtered sentence: You caught a bass. Will stay: You caught a bass.
# Example filtered sentence: You are an asshole. Will become: You are an donutshole.
# Default filters by Jabelpeeps
filters:
- (\b.?anus),donuts
- (\ba+r*(se+|ss+(?!(ass|um|oc|ign|ist)).*?|s*e*h+[o0]*[l1]+e*[sz]*)\b),donuts
- (b[i1]a?tch(es)?),puppy
- Carpet Muncher,cookie monster
- (\bc((?!ook\b)[o0]+c*|aw)k\W?(sucker|s*|he[ea]*d)\b),rooster
- (\b[ck]r+a+p+(er|s|z)?\b),poopoo
- (\bcu+m+\b),go
- (\b.?[ck](u*n+|[l1]+[i1]+)t+[sz]*\b),peach
- (\b.?d[1i](c?k(head)?|[l1]+d[o0])e?[sz]?\b),rooster
- f u c k( e r)?,nono
- (\b.?fai*g+[oei1]*t*[sz]*\b),cigar
- Fudge Packer,fine person
- (\b(m[uo]+th[ae]r?)?(f|ph)uc*k*(e[rn]|ah*|ing?|)[sz]?\b),oh dear
- (\b(j(ac|er|ur)k\W?(of+))|(ji[sz]+i*m*)\b),bake brownies
- (\b(ma+s+te?rbai?te?[rs]?|wank(er)?[sz]?)\b),bake brownies
- orafi(s|ce),rooster
- (\bp+[e3]+[ai]*n+[i1!ua]+s+),rooster
- (\bp[i1]s+(?!(ton))(flap|face|drop)?),peepee
- (\b.?sh[i1!y]t+(er?|y|head)?[sz]*),poopoo
- (\bva[1i]?[gj]+[i1]+na+\b),peach
- vu[1l]+va,peach
- planet.?minecraft,another dimension
- pmc,another dimension
- ((\d+\.){3}\d+),another dimension
# command without the /
blockablecommands:
- vote
- me
# blacklisted nicknames
nicknames:
- Notch
nickname-in-tablist: true
# {player} : player sending command
# {command} : command typed
commandspy:
format: '&6{player}: {command}'
worldeditcommands: true
antispam:
enabled: true
# Number of messages to be spam
spamnumber: 5
# Amount of time in seconds for it to be spam
spamtime: 10
# Amount of time for the mute to last
# Acceptable units are: d,h,m,s
# Units can be combined, for example: 1d8h30m15s
# Use 0 for untimed mute
mutetime: 10m
# Logging chat and commands to a mysql database
mysql:
enabled: false
user: User
port: 3306
password: Password
host: localhost
database: Database
# Loglevel feature is still in the works for adding of debug messages
# Valid loglevels:
# Info: Regular logging
# Debug: Show extra messages and caught errors for debugging
# Severe: Only show severe messages
loglevel: info
# saveinterval is in minutes
saveinterval: 30
# If you're running a "cracked" server, player data might not be stored properly, and thus, you are on your own.
# If you run your server in offline mode, you might have to reset your player data when switching to online mode!
# If you see this warning by accident and you are using BungeeCord, make sure you have properly setup IP Forwarding.
# https://www.spigotmc.org/wiki/bungeecord-ip-forwarding/
# No player data will be saved in offline mode unless you set this acknowledgement to 'true'
offline_server_acknowledgement: false
# The time in seconds between each check to remove timed mutes
unmuteinterval: 60
# Enables or disabled BungeeCord messaging
bungeecordmessaging: false
# Sound for message notification
# Enter 'None' to disable the sound
message_sound: ENTITY_PLAYER_LEVELUP
# This will allow vanished players to be exempt from being sent private messages, and will act as if they aren't online
vanishsupport: true
# Use PlaceholderAPI placeholders
# Start the placeholder with 'sender_' for the sending players placeholder
# Start the placeholder with 'receiver_' for the receiving players placeholder
# The defaults shown below provide an example of each
tellformatto: '&7You message {receiver_vault_prefix}{receiver_player_displayname}&7:'
tellformatfrom: '{sender_vault_prefix}{sender_player_displayname} &7messages you:'
tellformatspy: '{sender_player_name} messages {receiver_player_name}:&7'
replyformatto: '&7You reply to {receiver_vault_prefix}{receiver_player_displayname}&7:'
replyformatfrom: '{sender_vault_prefix}{sender_player_displayname} &7replies to you:'
replyformatspy: '{sender_player_name} replies to {receiver_player_name}:&7'
# {host} : party hosts name
# {player} : player name
# use Default for the basic formatting
partyformat: Default
formatcleaner: true
# If true, /ignore will block chat from the ignored player as well as PM's
ignorechat: false
# The message shown to players alerting them no one is in the channel to hear them
emptychannelalert: "&6No one is listening to you."
messageremoverpermissions: '&cYou need additional permissions to view this message!'
messageremovertext: '&c&o<message removed>'
# The name of the group is the permissions node for the format
# Example: venturechat.json.Owner is the node for the group Owner
# A lower priority overrides a higher priority if a player has more than 1 group
# Possible options for click_name and click_prefix are suggest_command, run_command, and open_url
jsonformatting:
Default: # This default format is required! Do not delete or rename it!
priority: 2147483647 # Integer.MAX_VALUE
hover_name:
- '&6I have no rank!'
click_name: 'suggest_command'
click_name_text: '/msg {player_name}'
hover_prefix:
- '&dI am default!'
click_prefix: 'run_command'
click_prefix_text: '/help'
hover_suffix:
- '&dI am default suffix!'
click_suffix: 'suggest_command'
click_suffix_text: '/msg {player_name}'
Owner:
priority: 1 # Lowest Priority
hover_name:
- '&cOwner of the server!'
- '&bMessage me for help!'
click_name: 'suggest_command'
click_name_text: '/msg {player_name}'
hover_prefix:
- '&dServer Owner'
click_prefix: 'run_command'
click_prefix_text: '/help'
hover_suffix:
- '&dI am Owner suffix!'
click_suffix: 'suggest_command'
click_suffix_text: '/msg {player_name}'
# The icon is the block shown in the GUI
# The text is the display name of the block icon
# Include a slash (/) before the command
# Permissions are the name of the button and automatically include "venturechat."
# Example: mute equals venturechat.mute
venturegui:
mute:
icon: 'REDSTONE_BLOCK'
durability: 0
text: '&cMute {player_name} &410m'
permission: 'mute'
command: '/mute {channel} {player_name} 10m'
slot: 1
unmute:
icon: 'DIAMOND_BLOCK'
durability: 0
text: '&bUnmute {player_name}'
permission: 'mute'
command: '/unmute {channel} {player_name} '
slot: 2
removemessage:
icon: 'DIAMOND_AXE'
durability: 0
text: '&cRemove Message'
permission: 'removemessage'
command: '/removemessage {hash} {channel}'
slot: 7
guiicon: '&c [✓]'
guitext: '&cOpen Moderation GUI'
guirows: 1
# All clickable URL's will be underlined if set to true
underlineurls: true
# broadcast information
broadcast:
color: red
permissions: venturechat.adminchannel
displaytag: '[Broadcast]'
# Use $ to include arguments into the message
# Valid component types are:
# Command: Sends a message or command in chat
# Message: Sends a message to the player
# Broadcast: Sends a broadcast to all players on the server
# Permissions automatically include "venturechat."
# Example: permissions: alert equals venturechat.alert
# Use None for no permissions
# The number of arguments is the minimum number of required arguments, use 0 for no required arguments
alias:
vote:
arguments: 0
permissions: None
components:
- 'Message: &6Vote here: www.votelinkhere.com'
bane:
arguments: 2
permissions: bane
components:
- 'Command: /ban $ appeal at www.site.com'
- 'Command: /st banned $'
alert:
arguments: 1
permissions: alert
components:
- 'Broadcast: &c<Alert> $'
donate:
arguments: 0
permissions: None
components:
- 'Message: &bDonate here: www.mywebsite.com'
website:
arguments: 0
permissions: None
components:
- 'Message: &aThis is our website: www.site.net'
# Enables the creation of special Towny channels: Town and Nation
# To create these channels, simply name two channels below "Town" and "Nation"
# Bungeecord must be set to false for these channels!
enable_towny_channel: false
# Enables the creation of a special faction only channel using the Factions plugin
# To create this channel, simply name a channel below "Faction"
# Bungeecord must be set to false for this channel!
# WARNING: May not work for all versions of Factions!
enable_factions_channel: false
# color = [channel] color
# chatcolor = text color
# cooldown is in seconds
# bungeecord overrides distance
# channel permissions are configurable
# channels can be changed, and new channels can be created
# Permissions automatically include "venturechat."
# Example: permissions: staff equals venturechat.staff
# Use None for no permissions
# Use PlaceholderAPI placeholders are required!!!
# Use PlaceholderAPI placeholders are required!!!
# Use PlaceholderAPI placeholders are required!!!
# /papi ecloud download [plugin]
# /papi reload
# 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
mutable: true
filter: true
autojoin: true
default: true
distance: 0
cooldown: 0
bungeecord: false
alias: g
permissions: None
speak_permissions: None
format: '&f[&2Global&f] {vault_prefix} {player_displayname}&2:'
Staff:
color: green
chatcolor: green
mutable: false
filter: false
autojoin: true
default: false
distance: 0
cooldown: 0
bungeecord: false
alias: st
permissions: staffchannel
speak_permissions: None
format: '&f[&aStaff&f] {vault_prefix} {player_displayname}&a:'
Donator:
color: light_purple
chatcolor: light_purple
mutable: true
filter: true
autojoin: true
default: false
distance: 0
cooldown: 0
bungeecord: false
alias: d
permissions: donatorchannel
speak_permissions: None
format: '&f[&dDonator&f] {vault_prefix} {player_displayname}&d:'
Help:
color: aqua
chatcolor: aqua
mutable: true
filter: true
autojoin: true
default: false
distance: 0
cooldown: 0
bungeecord: false
alias: h
permissions: None
speak_permissions: None
format: '&f[&bHelp&f] {vault_prefix} {player_displayname}&b:'
Trade:
color: dark_aqua
chatcolor: dark_aqua
mutable: true
filter: true
autojoin: true
default: false
distance: 0
cooldown: 0
bungeecord: false
alias: t
permissions: None
speak_permissions: None
format: '&f[&3Trade&f] {vault_prefix} {player_displayname}&3:'
Local:
color: yellow
chatcolor: yellow
mutable: true
filter: true
autojoin: true
default: false
distance: 230
cooldown: 0
bungeecord: false
alias: l
permissions: None
speak_permissions: None
>>>>>>> master:src/config.yml
format: '&f[&eLocal&f] {vault_prefix} {player_displayname}&e:'

View File

@ -1,3 +1,4 @@
<<<<<<< HEAD:src/main/resources/example_config_always_up_to_date!.yml
#===============================================================
# VentureChat Config =
# Author: Aust1n46 =
@ -420,4 +421,429 @@ channels:
alias: l
permissions: None
speak_permissions: None
=======
#===============================================================
# VentureChat Config =
# Author: Aust1n46 =
#===============================================================
# - regex1,regex2
# Simple regex tips: Use \b to "cut" a section of the word or phrase. Example: \bass,donuts
# Example filtered sentence: You are an ass. Will become: You are an donuts.
# Example filtered sentence: You caught a bass. Will stay: You caught a bass.
# Example filtered sentence: You are an asshole. Will become: You are an donutshole.
# Default filters by Jabelpeeps
filters:
- (\b.?anus),donuts
- (\ba+r*(se+|ss+(?!(ass|um|oc|ign|ist)).*?|s*e*h+[o0]*[l1]+e*[sz]*)\b),donuts
- (b[i1]a?tch(es)?),puppy
- Carpet Muncher,cookie monster
- (\bc((?!ook\b)[o0]+c*|aw)k\W?(sucker|s*|he[ea]*d)\b),rooster
- (\b[ck]r+a+p+(er|s|z)?\b),poopoo
- (\bcu+m+\b),go
- (\b.?[ck](u*n+|[l1]+[i1]+)t+[sz]*\b),peach
- (\b.?d[1i](c?k(head)?|[l1]+d[o0])e?[sz]?\b),rooster
- f u c k( e r)?,nono
- (\b.?fai*g+[oei1]*t*[sz]*\b),cigar
- Fudge Packer,fine person
- (\b(m[uo]+th[ae]r?)?(f|ph)uc*k*(e[rn]|ah*|ing?|)[sz]?\b),oh dear
- (\b(j(ac|er|ur)k\W?(of+))|(ji[sz]+i*m*)\b),bake brownies
- (\b(ma+s+te?rbai?te?[rs]?|wank(er)?[sz]?)\b),bake brownies
- orafi(s|ce),rooster
- (\bp+[e3]+[ai]*n+[i1!ua]+s+),rooster
- (\bp[i1]s+(?!(ton))(flap|face|drop)?),peepee
- (\b.?sh[i1!y]t+(er?|y|head)?[sz]*),poopoo
- (\bva[1i]?[gj]+[i1]+na+\b),peach
- vu[1l]+va,peach
- planet.?minecraft,another dimension
- pmc,another dimension
- ((\d+\.){3}\d+),another dimension
# command without the /
blockablecommands:
- vote
- me
# blacklisted nicknames
nicknames:
- Notch
nickname-in-tablist: true
# {player} : player sending command
# {command} : command typed
commandspy:
format: '&6{player}: {command}'
worldeditcommands: true
antispam:
enabled: true
# Number of messages to be spam
spamnumber: 5
# Amount of time in seconds for it to be spam
spamtime: 10
# Amount of time for the mute to last
# Acceptable units are: d,h,m,s
# Units can be combined, for example: 1d8h30m15s
# Use 0 for untimed mute
mutetime: 10m
# Logging chat and commands to a mysql database
mysql:
enabled: false
user: User
port: 3306
password: Password
host: localhost
database: Database
# Loglevel feature is still in the works for adding of debug messages
# Valid loglevels:
# Info: Regular logging
# Debug: Show extra messages and caught errors for debugging
# Severe: Only show severe messages
loglevel: info
# saveinterval is in minutes
saveinterval: 30
# If you're running a "cracked" server, player data might not be stored properly, and thus, you are on your own.
# If you run your server in offline mode, you might have to reset your player data when switching to online mode!
# If you see this warning by accident and you are using BungeeCord, make sure you have properly setup IP Forwarding.
# https://www.spigotmc.org/wiki/bungeecord-ip-forwarding/
# No player data will be saved in offline mode unless you set this acknowledgement to 'true'
offline_server_acknowledgement: false
# The time in seconds between each check to remove timed mutes
unmuteinterval: 60
# Enables or disabled BungeeCord messaging
bungeecordmessaging: false
# Sound for message notification
# Enter 'None' to disable the sound
message_sound: ENTITY_PLAYER_LEVELUP
# This will allow vanished players to be exempt from being sent private messages, and will act as if they aren't online
vanishsupport: true
# Use PlaceholderAPI placeholders
# Start the placeholder with 'sender_' for the sending players placeholder
# Start the placeholder with 'receiver_' for the receiving players placeholder
# The defaults shown below provide an example of each
tellformatto: '&7You message {receiver_vault_prefix}{receiver_player_displayname}&7:'
tellformatfrom: '{sender_vault_prefix}{sender_player_displayname} &7messages you:'
tellformatspy: '{sender_player_name} messages {receiver_player_name}:&7'
replyformatto: '&7You reply to {receiver_vault_prefix}{receiver_player_displayname}&7:'
replyformatfrom: '{sender_vault_prefix}{sender_player_displayname} &7replies to you:'
replyformatspy: '{sender_player_name} replies to {receiver_player_name}:&7'
# {host} : party hosts name
# {player} : player name
# use Default for the basic formatting
partyformat: Default
formatcleaner: true
# If true, /ignore will block chat from the ignored player as well as PM's
ignorechat: false
# The message shown to players alerting them no one is in the channel to hear them
emptychannelalert: "&6No one is listening to you."
messageremoverpermissions: '&cYou need additional permissions to view this message!'
messageremovertext: '&c&o<message removed>'
# The name of the group is the permissions node for the format
# Example: venturechat.json.Owner is the node for the group Owner
# A lower priority overrides a higher priority if a player has more than 1 group
# Possible options for click_name and click_prefix are suggest_command, run_command, and open_url
jsonformatting:
Default: # This default format is required! Do not delete or rename it!
priority: 2147483647 # Integer.MAX_VALUE
hover_name:
- '&6I have no rank!'
click_name: 'suggest_command'
click_name_text: '/msg {player_name}'
hover_prefix:
- '&dI am default!'
click_prefix: 'run_command'
click_prefix_text: '/help'
hover_suffix:
- '&dI am default suffix!'
click_suffix: 'suggest_command'
click_suffix_text: '/msg {player_name}'
Owner:
priority: 1 # Lowest Priority
hover_name:
- '&cOwner of the server!'
- '&bMessage me for help!'
click_name: 'suggest_command'
click_name_text: '/msg {player_name}'
hover_prefix:
- '&dServer Owner'
click_prefix: 'run_command'
click_prefix_text: '/help'
hover_suffix:
- '&dI am Owner suffix!'
click_suffix: 'suggest_command'
click_suffix_text: '/msg {player_name}'
# The icon is the block shown in the GUI
# The text is the display name of the block icon
# Include a slash (/) before the command
# Permissions are the name of the button and automatically include "venturechat."
# Example: mute equals venturechat.mute
venturegui:
mute:
icon: 'REDSTONE_BLOCK'
durability: 0
text: '&cMute {player_name} &410m'
permission: 'mute'
command: '/mute {channel} {player_name} 10m'
slot: 1
unmute:
icon: 'DIAMOND_BLOCK'
durability: 0
text: '&bUnmute {player_name}'
permission: 'mute'
command: '/unmute {channel} {player_name} '
slot: 2
removemessage:
icon: 'DIAMOND_AXE'
durability: 0
text: '&cRemove Message'
permission: 'removemessage'
command: '/removemessage {hash} {channel}'
slot: 7
guiicon: '&c [✓]'
guitext: '&cOpen Moderation GUI'
guirows: 1
# All clickable URL's will be underlined if set to true
underlineurls: true
# broadcast information
broadcast:
color: red
permissions: venturechat.adminchannel
displaytag: '[Broadcast]'
# Use $ to include arguments into the message
# Valid component types are:
# Command: Sends a message or command in chat
# Message: Sends a message to the player
# Broadcast: Sends a broadcast to all players on the server
# Permissions automatically include "venturechat."
# Example: permissions: alert equals venturechat.alert
# Use None for no permissions
# The number of arguments is the minimum number of required arguments, use 0 for no required arguments
alias:
vote:
arguments: 0
permissions: None
components:
- 'Message: &6Vote here: www.votelinkhere.com'
bane:
arguments: 2
permissions: bane
components:
- 'Command: /ban $ appeal at www.site.com'
- 'Command: /st banned $'
alert:
arguments: 1
permissions: alert
components:
- 'Broadcast: &c<Alert> $'
donate:
arguments: 0
permissions: None
components:
- 'Message: &bDonate here: www.mywebsite.com'
website:
arguments: 0
permissions: None
components:
- 'Message: &aThis is our website: www.site.net'
# Enables the creation of special Towny channels: Town and Nation
# To create these channels, simply name two channels below "Town" and "Nation"
# Bungeecord must be set to false for these channels!
enable_towny_channel: false
# Enables the creation of a special faction only channel using the Factions plugin
# To create this channel, simply name a channel below "Faction"
# Bungeecord must be set to false for this channel!
# WARNING: May not work for all versions of Factions!
enable_factions_channel: false
# color = [channel] color
# chatcolor = text color
# cooldown is in seconds
# bungeecord overrides distance
# channel permissions are configurable
# channels can be changed, and new channels can be created
# Permissions automatically include "venturechat."
# Example: permissions: staff equals venturechat.staff
# Use None for no permissions
# Use PlaceholderAPI placeholders are required!!!
# Use PlaceholderAPI placeholders are required!!!
# Use PlaceholderAPI placeholders are required!!!
# /papi ecloud download [plugin]
# /papi reload
# 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
mutable: true
filter: true
autojoin: true
default: true
distance: 0
cooldown: 0
bungeecord: false
alias: g
permissions: None
speak_permissions: None
format: '&f[&2Global&f] {vault_prefix} {player_displayname}&2:'
Staff:
color: green
chatcolor: green
mutable: false
filter: false
autojoin: true
default: false
distance: 0
cooldown: 0
bungeecord: false
alias: st
permissions: staffchannel
speak_permissions: None
format: '&f[&aStaff&f] {vault_prefix} {player_displayname}&a:'
Donator:
color: light_purple
chatcolor: light_purple
mutable: true
filter: true
autojoin: true
default: false
distance: 0
cooldown: 0
bungeecord: false
alias: d
permissions: donatorchannel
speak_permissions: None
format: '&f[&dDonator&f] {vault_prefix} {player_displayname}&d:'
Help:
color: aqua
chatcolor: aqua
mutable: true
filter: true
autojoin: true
default: false
distance: 0
cooldown: 0
bungeecord: false
alias: h
permissions: None
speak_permissions: None
format: '&f[&bHelp&f] {vault_prefix} {player_displayname}&b:'
Trade:
color: dark_aqua
chatcolor: dark_aqua
mutable: true
filter: true
autojoin: true
default: false
distance: 0
cooldown: 0
bungeecord: false
alias: t
permissions: None
speak_permissions: None
format: '&f[&3Trade&f] {vault_prefix} {player_displayname}&3:'
Local:
color: yellow
chatcolor: yellow
mutable: true
filter: true
autojoin: true
default: false
distance: 230
cooldown: 0
bungeecord: false
alias: l
permissions: None
speak_permissions: None
>>>>>>> master:src/example_config_always_up_to_date!.yml
format: '&f[&eLocal&f] {vault_prefix} {player_displayname}&e:'

View File

@ -1,4 +1,5 @@
name: VentureChat
<<<<<<< HEAD:src/main/resources/plugin.yml
version: ${project.version}
api-version: 1.13
main: mineverse.Aust1n46.chat.MineverseChat
@ -17,6 +18,26 @@ commands:
usage: /unmute [playername] [channel]
aliases: [ump,vunmute]
description: Unmutes player in a channel so they can talk again.
=======
version: 2.23.3
api-version: 1.13
main: mineverse.Aust1n46.chat.MineverseChat
depend: [Vault, ProtocolLib, PlaceholderAPI]
softdepend: [Towny, Factions, Heroes]
author: Aust1n46
website: https://bitbucket.org/Aust1n46/venturechat/
description: #1 Channels Chat plugin! Spigot + Bungee. Supports PlaceholderAPI + JSON formatting. Moderation GUI!
commands:
mute:
usage: /mute [playername] [channel]
aliases: [mp,vmute]
description: Mutes player in a channel so they cannot talk.
permission-message: You don't have <permission>
unmute:
usage: /unmute [playername] [channel]
aliases: [ump,vunmute]
description: Unmutes player in a channel so they can talk again.
>>>>>>> master:src/plugin.yml
permission-message: You don't have <permission>
msg:
usage: /msg [playername] [msg]

View File

@ -0,0 +1,457 @@
package mineverse.Aust1n46.chat.channel;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.configuration.ConfigurationSection;
import mineverse.Aust1n46.chat.MineverseChat;
import mineverse.Aust1n46.chat.utilities.Format;
/**
* Chat channel object pojo. Class also contains static initialization methods
* for reading chat channels from the config file.
*
* @author Aust1n46
*/
public class ChatChannel {
private static final String PERMISSION_PREFIX = "venturechat.";
private static final String NO_PERMISSIONS = "venturechat.none";
private static boolean aliasesRegisteredAsCommands;
private static MineverseChat plugin = MineverseChat.getInstance();
private static ChatChannel defaultChatChannel;
private static String defaultColor;
private static HashMap<String, ChatChannel> chatChannels;
@Deprecated
private static ChatChannel[] channels;
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(boolean aliasesRegisteredAsCommands) {
chatChannels = new HashMap<String, ChatChannel>();
ChatChannel.aliasesRegisteredAsCommands = aliasesRegisteredAsCommands;
ConfigurationSection cs = plugin.getConfig().getConfigurationSection("channels");
int len = (cs.getKeys(false)).size();
channels = new ChatChannel[len];
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;
chatChannels.put(name.toLowerCase(), chatChannel);
chatChannels.put(alias.toLowerCase(), chatChannel);
if (defaultChannel) {
defaultChatChannel = chatChannel;
defaultColor = color;
}
}
}
public static boolean areAliasesRegisteredAsCommands() {
return aliasesRegisteredAsCommands;
}
/**
* Get array of chat channels.
*
* @return {@link ChatChannel}[]
*/
@Deprecated
public static ChatChannel[] getChannels() {
return channels;
}
/**
* Get list of chat channels.
*
* @return {@link Collection}&lt{@link ChatChannel}&gt
*/
public static Collection<ChatChannel> getChatChannels() {
return new HashSet<ChatChannel>(chatChannels.values());
}
/**
* Get a chat channel by name.
*
* @param channelName
* name of channel to get.
* @return {@link ChatChannel}
*/
public static ChatChannel getChannel(String channelName) {
return chatChannels.get(channelName.toLowerCase());
}
/**
* 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}&lt{@link ChatChannel}&gt
*/
public static List<ChatChannel> getAutojoinList() {
List<ChatChannel> joinlist = new ArrayList<ChatChannel>();
for (ChatChannel c : channels) {
if (c.getAutojoin()) {
joinlist.add(c);
}
}
return joinlist;
}
/**
* 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;
}
/**
* Deprecated 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
*/
@Deprecated
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;
}
/**
* Get the format of the chat channel.
*
* @return {@link String}
*/
public String getFormat() {
return format;
}
/**
* Get the cooldown of the chat channel in seconds.
*
* @return int
*/
public int getCooldown() {
return cooldown;
}
/**
* Check if the chat channel is BungeeCord enabled.
*
* @return {@link Boolean#TRUE} if the chat channel is BungeeCord enabled,
* {@link Boolean#FALSE} otherwise.
*/
public Boolean getBungee() {
return Boolean.valueOf(bungee);
}
/**
* Get the permissions node for the chat channel.
*
* @return {@link String}
*/
public String getPermission() {
return permission;
}
/**
* Check if autojoin is enabled for the chat channel.
*
* @return {@link Boolean#TRUE} if autojoin is enabled, {@link Boolean#FALSE}
* otherwise.
*/
public Boolean getAutojoin() {
return Boolean.valueOf(autojoin);
}
/**
* Check if the chat channel allows muting.
*
* @return {@link Boolean#TRUE} if muting is allowed, {@link Boolean#FALSE}
* otherwise.
*/
public Boolean isMutable() {
return Boolean.valueOf(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;
}
/**
* 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() {
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;
}
/**
* Get the raw chat color value of the chat channel.
*
* @return {@link String}
*/
public String getChatColorRaw() {
return chatColor;
}
/**
* Check if the chat channel is the default chat channel.
*
* @return {@link Boolean#TRUE} if the chat channel is the default chat channel,
* {@link Boolean#FALSE} otherwise.
*/
public Boolean isDefaultchannel() {
return Boolean.valueOf(defaultChannel);
}
/**
* Get the alias of the chat channel.
*
* @return {@link String}
*/
public String getAlias() {
return alias;
}
/**
* Get the distance of the chat channel in blocks.
*
* @return {@link Double}
*/
public Double getDistance() {
return Double.valueOf(distance);
}
/**
* Checks if the chat channel has a distance set.
*
* @return {@link Boolean#TRUE} if the distance is greater than zero,
* {@link Boolean#FALSE} otherwise.
*/
public Boolean hasDistance() {
return Boolean.valueOf(distance > 0);
}
/**
* Checks if the chat channel has a cooldown set.
*
* @return {@link Boolean#TRUE} if the cooldown is greater than zero,
* {@link Boolean#FALSE} otherwise.
*/
public Boolean hasCooldown() {
return Boolean.valueOf(cooldown > 0);
}
/**
* Checks if the chat channel has a permission set.
*
* @return {@link Boolean#TRUE} if the permission does not equal
* {@link ChatChannel#NO_PERMISSIONS}, {@link Boolean#FALSE} otherwise.
*/
public Boolean hasPermission() {
return Boolean.valueOf(!permission.equalsIgnoreCase(NO_PERMISSIONS));
}
/**
* 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 {@link Boolean#TRUE} if the chat channel has the filter enabled,
* {@link Boolean#FALSE} otherwise.
*/
public Boolean isFiltered() {
return Boolean.valueOf(filter);
}
/**
* 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());
}
}

View File

@ -0,0 +1,142 @@
package mineverse.Aust1n46.chat.command;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import mineverse.Aust1n46.chat.MineverseChat;
import mineverse.Aust1n46.chat.command.chat.Broadcast;
import mineverse.Aust1n46.chat.command.chat.BungeeToggle;
import mineverse.Aust1n46.chat.command.chat.Channel;
import mineverse.Aust1n46.chat.command.chat.Channelinfo;
import mineverse.Aust1n46.chat.command.chat.Chatinfo;
import mineverse.Aust1n46.chat.command.chat.Chatreload;
import mineverse.Aust1n46.chat.command.chat.Chlist;
import mineverse.Aust1n46.chat.command.chat.Chwho;
import mineverse.Aust1n46.chat.command.chat.Clearchat;
import mineverse.Aust1n46.chat.command.chat.Commandblock;
import mineverse.Aust1n46.chat.command.chat.Commandspy;
import mineverse.Aust1n46.chat.command.chat.Config;
import mineverse.Aust1n46.chat.command.chat.Edit;
import mineverse.Aust1n46.chat.command.chat.Filter;
import mineverse.Aust1n46.chat.command.chat.Force;
import mineverse.Aust1n46.chat.command.chat.Forceall;
import mineverse.Aust1n46.chat.command.chat.Kickchannel;
import mineverse.Aust1n46.chat.command.chat.Kickchannelall;
import mineverse.Aust1n46.chat.command.chat.Leave;
import mineverse.Aust1n46.chat.command.chat.Listen;
import mineverse.Aust1n46.chat.command.chat.Me;
import mineverse.Aust1n46.chat.command.chat.Nick;
import mineverse.Aust1n46.chat.command.chat.Party;
import mineverse.Aust1n46.chat.command.chat.RangedSpy;
import mineverse.Aust1n46.chat.command.chat.Removemessage;
import mineverse.Aust1n46.chat.command.chat.Setchannel;
import mineverse.Aust1n46.chat.command.chat.Setchannelall;
import mineverse.Aust1n46.chat.command.chat.VentureChatGui;
import mineverse.Aust1n46.chat.command.chat.Venturechat;
import mineverse.Aust1n46.chat.command.message.IgnoreCommandExecutor;
import mineverse.Aust1n46.chat.command.message.MessageCommandExecutor;
import mineverse.Aust1n46.chat.command.message.MessageToggle;
import mineverse.Aust1n46.chat.command.message.Notifications;
import mineverse.Aust1n46.chat.command.message.Reply;
import mineverse.Aust1n46.chat.command.message.Spy;
import mineverse.Aust1n46.chat.command.mute.Mute;
import mineverse.Aust1n46.chat.command.mute.Muteall;
import mineverse.Aust1n46.chat.command.mute.Unmute;
import mineverse.Aust1n46.chat.command.mute.Unmuteall;
/**
* Class that initializes and executes the plugin's commands.
*/
public class VentureCommandExecutor implements TabExecutor {
private static Map<String, VentureCommand> commands = new HashMap<String, VentureCommand>();
private static MineverseChat plugin = MineverseChat.getInstance();
private static VentureCommandExecutor commandExecutor;
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] parameters) {
commands.get(command.getName()).execute(sender, command.getName(), parameters);
return true;
}
@Override
public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
return commands.get(command.getName()).onTabComplete(sender, command, label, args);
}
public static void initialize() {
commandExecutor = new VentureCommandExecutor();
commands.put("broadcast", new Broadcast());
commands.put("channel", new Channel());
commands.put("join", new Channel());
commands.put("channelinfo", new Channelinfo());
commands.put("chatinfo", new Chatinfo());
commands.put("chatreload", new Chatreload());
commands.put("chlist", new Chlist());
commands.put("chwho", new Chwho());
commands.put("clearchat", new Clearchat());
commands.put("commandblock", new Commandblock());
commands.put("commandspy", new Commandspy());
commands.put("config", new Config());
commands.put("edit", new Edit());
commands.put("filter", new Filter());
commands.put("force", new Force());
commands.put("forceall", new Forceall());
commands.put("kickchannel", new Kickchannel());
commands.put("kickchannelall", new Kickchannelall());
commands.put("leave", new Leave());
commands.put("listen", new Listen());
commands.put("me", new Me());
commands.put("venturechat", new Venturechat());
commands.put("setnickname", new Nick());
commands.put("notifications", new Notifications());
commands.put("party", new Party());
commands.put("rangedspy", new RangedSpy());
commands.put("removemessage", new Removemessage());
commands.put("setchannel", new Setchannel());
commands.put("setchannelall", new Setchannelall());
commands.put("spy", new Spy());
commands.put("venturechatgui", new VentureChatGui());
commands.put("messagetoggle", new MessageToggle());
commands.put("bungeetoggle", new BungeeToggle());
for(String command : commands.keySet()) {
registerCommand(command, commandExecutor);
}
plugin.getServer().getScheduler().runTaskLater(plugin, () -> {
VentureCommand reply = new Reply();
commands.put("reply", reply);
commands.put("r", reply);
registerCommand("reply", commandExecutor);
registerCommand("r", commandExecutor);
commands.put("mute", new Mute());
commands.put("muteall", new Muteall());
commands.put("unmute", new Unmute());
commands.put("unmuteall", new Unmuteall());
registerCommand("mute", commandExecutor);
registerCommand("muteall", commandExecutor);
registerCommand("unmute", commandExecutor);
registerCommand("unmuteall", commandExecutor);
MessageCommandExecutor messageCommandExecutor = new MessageCommandExecutor();
registerCommand("message", messageCommandExecutor);
registerCommand("msg", messageCommandExecutor);
registerCommand("tell", messageCommandExecutor);
registerCommand("whisper", messageCommandExecutor);
registerCommand("ignore", new IgnoreCommandExecutor());
}, 0);
}
private static void registerCommand(String command, CommandExecutor commandExecutor) {
if(plugin.getCommand(command) != null) {
plugin.getCommand(command).setExecutor(commandExecutor);
}
}
}

View File

@ -0,0 +1,60 @@
package mineverse.Aust1n46.chat.command.chat;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import mineverse.Aust1n46.chat.MineverseChat;
import mineverse.Aust1n46.chat.api.MineverseChatAPI;
import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
import mineverse.Aust1n46.chat.command.VentureCommand;
import mineverse.Aust1n46.chat.database.PlayerData;
import mineverse.Aust1n46.chat.localization.LocalizedMessage;
import mineverse.Aust1n46.chat.utilities.Format;
public class Chatreload implements VentureCommand {
private MineverseChat plugin = MineverseChat.getInstance();
@Override
public void execute(CommandSender sender, String command, String[] args) {
if(sender.hasPermission("venturechat.reload")) {
PlayerData.savePlayerData();
MineverseChatAPI.clearMineverseChatPlayerMap();
MineverseChatAPI.clearNameMap();
MineverseChatAPI.clearOnlineMineverseChatPlayerMap();
plugin.reloadConfig();
MineverseChat.initializeConfigReaders();
PlayerData.loadLegacyPlayerData();
PlayerData.loadPlayerData();
for(Player p : plugin.getServer().getOnlinePlayers()) {
MineverseChatPlayer mcp = MineverseChatAPI.getMineverseChatPlayer(p);
if(mcp == null) {
Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - Could not find player data post reload for currently online player: " + p.getName()));
Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - There could be an issue with your player data saving."));
String name = p.getName();
UUID uuid = p.getUniqueId();
mcp = new MineverseChatPlayer(uuid, name);
}
mcp.setOnline(true);
mcp.setHasPlayed(false);
mcp.setJsonFormat();
MineverseChatAPI.addMineverseChatOnlinePlayerToMap(mcp);
MineverseChatAPI.addNameToMap(mcp);
}
Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Config reloaded"));
for(MineverseChatPlayer player : MineverseChatAPI.getOnlineMineverseChatPlayers()) {
if(player.getPlayer().hasPermission("venturechat.reload")) {
player.getPlayer().sendMessage(LocalizedMessage.CONFIG_RELOADED.toString());
}
}
return;
}
sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
return;
}
}

View File

@ -1,85 +1,84 @@
package mineverse.Aust1n46.chat.listeners;
import java.io.File;
import org.bukkit.Bukkit;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerQuitEvent;
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;
import mineverse.Aust1n46.chat.api.MineverseChatAPI;
import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
import mineverse.Aust1n46.chat.database.PlayerData;
import mineverse.Aust1n46.chat.listeners.LoginListener;;
/**
* Tests {@link LoginListener}.
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest({ MineverseChat.class, MineverseChatAPI.class, Bukkit.class, PlayerData.class, PlayerQuitEvent.class})
public class LoginListenerTest {
private MineverseChat mockPlugin;
private Player mockPlayer;
private MineverseChatPlayer mockMCP;
private ConsoleCommandSender mockConsoleSender;
private LoginListener testLoginListener;
private PlayerQuitEvent mockPlayerQuitEvent;
private File mockDataFile;
@Before
public void setUp() {
mockPlugin = PowerMockito.mock(MineverseChat.class);
mockPlayer = Mockito.mock(Player.class);
mockMCP = Mockito.mock(MineverseChatPlayer.class);
mockConsoleSender = Mockito.mock(ConsoleCommandSender.class);
mockDataFile = Mockito.mock(File.class);
mockPlayerQuitEvent = PowerMockito.mock(PlayerQuitEvent.class);
PowerMockito.when(mockPlayerQuitEvent.getPlayer()).thenReturn(mockPlayer);
PowerMockito.mockStatic(MineverseChat.class);
PowerMockito.when(MineverseChat.getInstance()).thenReturn(mockPlugin);
PowerMockito.when(mockPlugin.getDataFolder()).thenReturn(mockDataFile);
PowerMockito.mockStatic(MineverseChatAPI.class);
PowerMockito.when(MineverseChatAPI.getMineverseChatPlayer(Mockito.any(Player.class))).thenReturn(mockMCP);
PowerMockito.when(MineverseChatAPI.getOnlineMineverseChatPlayer(Mockito.any(Player.class))).thenReturn(mockMCP);
PowerMockito.mockStatic(Bukkit.class);
PowerMockito.when(Bukkit.getConsoleSender()).thenReturn(mockConsoleSender);
PowerMockito.mockStatic(PlayerData.class);
testLoginListener = new LoginListener();
}
@After
public void tearDown() {
mockPlugin = null;
}
@Test
public void testLoginWithNameChange() throws Exception {
Mockito.when(mockPlayer.getName()).thenReturn("NewName");
Mockito.when(mockMCP.getName()).thenReturn("OldName");
Mockito.when(mockPlayer.getDisplayName()).thenReturn("OldName");
testLoginListener.handleNameChange(mockMCP, mockPlayer);
Mockito.verify(mockMCP, Mockito.times(1)).setNickname("NewName");
}
@Test
public void testPlayerQuit() {
testLoginListener.onPlayerQuit(mockPlayerQuitEvent);
Mockito.verify(mockMCP, Mockito.times(1)).clearMessages();
Mockito.verify(mockMCP, Mockito.times(1)).setOnline(false);
}
}
package mineverse.Aust1n46.chat.listeners;
import java.io.File;
import org.bukkit.Bukkit;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerQuitEvent;
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;
import mineverse.Aust1n46.chat.api.MineverseChatAPI;
import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
import mineverse.Aust1n46.chat.database.PlayerData;
/**
* Tests {@link LoginListener}.
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest({ MineverseChat.class, MineverseChatAPI.class, Bukkit.class, PlayerData.class, PlayerQuitEvent.class})
public class LoginListenerTest {
private MineverseChat mockPlugin;
private Player mockPlayer;
private MineverseChatPlayer mockMCP;
private ConsoleCommandSender mockConsoleSender;
private LoginListener testLoginListener;
private PlayerQuitEvent mockPlayerQuitEvent;
private File mockDataFile;
@Before
public void setUp() {
mockPlugin = PowerMockito.mock(MineverseChat.class);
mockPlayer = Mockito.mock(Player.class);
mockMCP = Mockito.mock(MineverseChatPlayer.class);
mockConsoleSender = Mockito.mock(ConsoleCommandSender.class);
mockDataFile = Mockito.mock(File.class);
mockPlayerQuitEvent = PowerMockito.mock(PlayerQuitEvent.class);
PowerMockito.when(mockPlayerQuitEvent.getPlayer()).thenReturn(mockPlayer);
PowerMockito.mockStatic(MineverseChat.class);
PowerMockito.when(MineverseChat.getInstance()).thenReturn(mockPlugin);
PowerMockito.when(mockPlugin.getDataFolder()).thenReturn(mockDataFile);
PowerMockito.mockStatic(MineverseChatAPI.class);
PowerMockito.when(MineverseChatAPI.getMineverseChatPlayer(Mockito.any(Player.class))).thenReturn(mockMCP);
PowerMockito.when(MineverseChatAPI.getOnlineMineverseChatPlayer(Mockito.any(Player.class))).thenReturn(mockMCP);
PowerMockito.mockStatic(Bukkit.class);
PowerMockito.when(Bukkit.getConsoleSender()).thenReturn(mockConsoleSender);
PowerMockito.mockStatic(PlayerData.class);
testLoginListener = new LoginListener();
}
@After
public void tearDown() {
mockPlugin = null;
}
@Test
public void testLoginWithNameChange() throws Exception {
Mockito.when(mockPlayer.getName()).thenReturn("NewName");
Mockito.when(mockMCP.getName()).thenReturn("OldName");
Mockito.when(mockPlayer.getDisplayName()).thenReturn("OldName");
testLoginListener.handleNameChange(mockMCP, mockPlayer);
Mockito.verify(mockMCP, Mockito.times(1)).setNickname("NewName");
}
@Test
public void testPlayerQuit() {
testLoginListener.onPlayerQuit(mockPlayerQuitEvent);
Mockito.verify(mockMCP, Mockito.times(1)).clearMessages();
Mockito.verify(mockMCP, Mockito.times(1)).setOnline(false);
}
}