├── .gitignore
├── .settings
└── .gitignore
├── LICENSE
├── README.md
├── TODO.txt
├── lib
├── Factions.jar
└── MassiveCore.jar
├── pom.xml
└── src
├── main
├── java
│ └── mineverse
│ │ └── Aust1n46
│ │ └── chat
│ │ ├── ChatMessage.java
│ │ ├── ClickAction.java
│ │ ├── MineverseChat.java
│ │ ├── VentureChatPlaceholders.java
│ │ ├── alias
│ │ └── Alias.java
│ │ ├── api
│ │ ├── MineverseChatAPI.java
│ │ ├── MineverseChatPlayer.java
│ │ ├── SynchronizedMineverseChatPlayer.java
│ │ └── events
│ │ │ ├── ChannelJoinEvent.java
│ │ │ ├── MutePlayerEvent.java
│ │ │ └── VentureChatEvent.java
│ │ ├── channel
│ │ ├── ChatChannel.java
│ │ └── ChatChannelInfo.java
│ │ ├── command
│ │ ├── ChannelAlias.java
│ │ ├── VentureCommandExecutor.java
│ │ ├── chat
│ │ │ ├── Broadcast.java
│ │ │ ├── BungeeToggle.java
│ │ │ ├── Channel.java
│ │ │ ├── Channelinfo.java
│ │ │ ├── Chatinfo.java
│ │ │ ├── Chatreload.java
│ │ │ ├── Chlist.java
│ │ │ ├── Chwho.java
│ │ │ ├── Clearchat.java
│ │ │ ├── Commandblock.java
│ │ │ ├── Commandspy.java
│ │ │ ├── Config.java
│ │ │ ├── Edit.java
│ │ │ ├── Filter.java
│ │ │ ├── Force.java
│ │ │ ├── Forceall.java
│ │ │ ├── Kickchannel.java
│ │ │ ├── Kickchannelall.java
│ │ │ ├── Leave.java
│ │ │ ├── Listen.java
│ │ │ ├── Me.java
│ │ │ ├── Party.java
│ │ │ ├── RangedSpy.java
│ │ │ ├── Removemessage.java
│ │ │ ├── Setchannel.java
│ │ │ ├── Setchannelall.java
│ │ │ ├── VentureChatGui.java
│ │ │ └── Venturechat.java
│ │ ├── message
│ │ │ ├── Ignore.java
│ │ │ ├── Message.java
│ │ │ ├── MessageToggle.java
│ │ │ ├── Notifications.java
│ │ │ ├── Reply.java
│ │ │ └── Spy.java
│ │ └── mute
│ │ │ ├── Mute.java
│ │ │ ├── MuteContainer.java
│ │ │ ├── Muteall.java
│ │ │ ├── Unmute.java
│ │ │ └── Unmuteall.java
│ │ ├── database
│ │ ├── Database.java
│ │ ├── PlayerData.java
│ │ ├── ProxyPlayerData.java
│ │ └── TemporaryDataInstance.java
│ │ ├── gui
│ │ └── GuiSlot.java
│ │ ├── json
│ │ ├── JsonAttribute.java
│ │ └── JsonFormat.java
│ │ ├── listeners
│ │ ├── ChatListener.java
│ │ ├── CommandListener.java
│ │ ├── LoginListener.java
│ │ ├── PacketListenerLegacyChat.java
│ │ └── SignListener.java
│ │ ├── localization
│ │ ├── InternalMessage.java
│ │ ├── Localization.java
│ │ └── LocalizedMessage.java
│ │ ├── proxy
│ │ ├── VentureChatBungee.java
│ │ ├── VentureChatProxy.java
│ │ ├── VentureChatProxyServer.java
│ │ ├── VentureChatProxySource.java
│ │ └── VentureChatVelocity.java
│ │ ├── utilities
│ │ ├── Format.java
│ │ └── UUIDFetcher.java
│ │ └── versions
│ │ └── VersionHandler.java
└── resources
│ ├── Messages.yml
│ ├── bungee.yml
│ ├── bungeeconfig.yml
│ ├── commands.yml
│ ├── config.yml
│ ├── example_config_always_up_to_date!.yml
│ ├── plugin.yml
│ ├── velocity-plugin.json
│ └── velocityconfig.yml
└── test
└── java
└── mineverse
└── Aust1n46
└── chat
├── listeners
└── LoginListenerTest.java
└── utilities
└── FormatTest.java
/.gitignore:
--------------------------------------------------------------------------------
1 | target/
2 | pom.xml.tag
3 | pom.xml.releaseBackup
4 | pom.xml.versionsBackup
5 | pom.xml.next
6 | release.properties
7 | dependency-reduced-pom.xml
8 | buildNumber.properties
9 | .mvn/timing.properties
10 | # https://github.com/takari/maven-wrapper#usage-without-binary-jar
11 | .mvn/wrapper/maven-wrapper.jar
12 |
13 | # IDE
14 | .idea/
15 | /.classpath
16 | /.project
17 |
--------------------------------------------------------------------------------
/.settings/.gitignore:
--------------------------------------------------------------------------------
1 | /org.eclipse.jdt.core.prefs
2 | /org.eclipse.core.resources.prefs
3 | /org.eclipse.m2e.core.prefs
4 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # README #
2 |
3 | Read before making any changes or pull requests!
4 |
5 | ### What is this repository for?
6 |
7 | VentureChat Spigot plugin Repo
8 |
9 | ### How do I get set up?
10 |
11 | Full setup and dependency guide is available here on SpigotMC: https://www.spigotmc.org/resources/venturechat.771/
12 |
13 | In short, Install `Vault` (and a compatable permission system), `ProtocolLib`, and `PlaceholderAPI` (`Player` and `Vault` extensions optional).
14 |
15 | To build, simply run `mvn`.
16 |
17 | Requires Java 8.
18 |
19 | ### Contribution guidelines
20 |
21 | * Follow the existing style conventions. I used the default Eclipse formatting styleset for the majority of the project.
22 | * Follow general Java best practices and object oriented principles. There are examples of poor practices in this existing legacy codebase, but that doesn't mean new contributions should stoop to that level.
23 | * Include JavaDoc for your contribution. Same as stated above, most of this legacy codebase isn't documented, but that doesn't mean new contributions should also be undocumented. Especially important when multiple people are working on a project.
24 | * Include unit tests for stand alone methods. I'm not expecting full coverage for complex Spigot events, etc, but for formatting or other non Spigot related code, tests would be much appreciated.
25 |
26 | ### Who do I talk to?
27 |
28 | * I'd recommend discussing any change before making it to avoid wasting your time and my time. Especially for a major change or if it's your first time contributing. I am extremely responsive on my Spigot discussion board (above link).
29 |
30 | License:
31 |
32 | Copyright (C) {2020} {Austin Brolly}
33 |
34 | ```
35 | This program is free software: you can redistribute it and/or modify
36 | it under the terms of the GNU General Public License as published by
37 | the Free Software Foundation, either version 3 of the License, or
38 | (at your option) any later version.
39 |
40 | This program is distributed in the hope that it will be useful,
41 | but WITHOUT ANY WARRANTY; without even the implied warranty of
42 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
43 | GNU General Public License for more details.
44 |
45 | You should have received a copy of the GNU General Public License
46 | along with this program. If not, see .
47 | ```
48 |
--------------------------------------------------------------------------------
/TODO.txt:
--------------------------------------------------------------------------------
1 | Outdated###Add per color and format code permissions
2 | Done###Add separate hex color permission
3 | Done###Add easy hex format to placeholders and prefixes
4 | Done###Potentially allow color format 'ffffff'
5 | Done###Auto remove spy and commandspy flags when permissions are removed
6 |
7 | Done###Add PlaceholderAPI placeholders to /message
8 | Done###Make spying not show your own messages
9 | Done###Add tab completion across bungee
10 |
11 | Done###Commit towny changes
12 | Done###Add permission check for ranged spy
13 |
14 | Done###Overhaul player data system
15 | Done###Use more efficient data structures
16 |
17 | Done###Check error on player leaving mcp = null???
18 |
19 | Done###Check null player data on reload config. Create new MCP data profile if MCP == null because of failed load attempt of player data file.
20 |
21 | Done###Fix and update timed muting system
22 | Done###Overhaul timed mute system
23 | Done###Add reason message to mute
24 | Done###Add tab completion for channels to mute command
25 | Done###Overhaul muting over bungee
26 |
27 | Done###Fix sync delay issue. Buffer the call or something else.
28 |
29 | Done###Look into change username not working with nickname
30 |
31 | Done###Update usage of Spigot.broadcastToServer (doesn't support URL's)
32 |
33 | Done###Add configurable message chime/sound.
34 |
35 | Done###Add override permission for commandspy.
36 | Done###Add override permission for spy over Bungee.
37 |
38 | Done###Fix SSL certificate warnings in MySQL database.
39 |
40 | Done###Add multiple color code support to GUI icon
41 | Done###Add hex color support to message remover configuration
42 |
43 | Done###Fix /chatreload
44 |
45 | Done###Add check for missing default channel
46 | Done###Add custom JSON hovers to any placeholder
47 |
48 | Done###Expand placeholder matching regex in convertToJson method
49 |
50 |
51 |
52 | OnHold###Add partial name/nickname compatibility for private messaging
53 | Add JSON to private messaging
54 | Add toggle support for bungee messaging
55 | Add configuration for /reply to be either last player who sent you a message or last player you messaged
56 | Add configuration for spying on private conversation join/leave
57 | Possible???Make player name matching not case sensitive for private messaging
58 | Add vanish support for BungeeCord private messaging.
59 | Add partial name recognition for messaging
60 |
61 | Add chime on name mention in chat
62 |
63 | Add localization for /setnickname command
64 | Add localization for /channelinfo command
65 |
66 | Look into SQL database losing connection
67 |
68 | Update out dated party system
69 |
70 | Send message to channel from console
71 |
72 | Add config option to disable chat logging in the console
73 |
74 | Make filters not case insensitive
75 | Update filter system
76 | Add option to disable filters without having to remove them all
77 |
78 | Add GUI for /channel to join channels
79 | Add configurable channel icon block/item
80 |
81 | Add flag for "always_joined" channel
82 | Rework flag "autojoin" to only join on player's first ever login to the server
83 |
84 | Make message remover work with Spigot API Chat
85 |
86 | Add spy command for Towny and Factions channels
87 | Add alliance channel for Towny
88 |
89 | Add support for Velocity proxy
90 |
91 | Add hover for channels to show who is received it.
92 |
93 | Command blacklist for commandspy
94 |
95 | Enhanced antispam/anticaps
96 |
97 | Make moderation GUI button work on messages from Bungee from players that have never played on receiving server
98 |
99 | Make message remover admin hover not show GUI icon
100 | Add message remover support back to 1.7
101 |
102 | Add list to disable commands in the config.
103 |
104 | Add toggle for moderation gui
105 |
106 | Add cost to chat in a channel through Vault?
107 |
108 | Add clans channel from SimpleClans
109 |
110 | Look into changing Bukkit chat event to not be cancelled.
111 |
112 | Expand on EssentialsDiscord integration to allow for custom MessageTypes for each channel
113 |
--------------------------------------------------------------------------------
/lib/Factions.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aust1n46/VentureChat/d964918a7b5a4777f1ab406ec333cdff02965f53/lib/Factions.jar
--------------------------------------------------------------------------------
/lib/MassiveCore.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Aust1n46/VentureChat/d964918a7b5a4777f1ab406ec333cdff02965f53/lib/MassiveCore.jar
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/ChatMessage.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat;
2 |
3 | import com.comphenix.protocol.wrappers.WrappedChatComponent;
4 |
5 | //This class is used to create ChatMessage objects, which are used to store information about previous text components
6 | //that were sent to the player. This is a main component in making the message remover work.
7 | public class ChatMessage {
8 | private WrappedChatComponent component;
9 | private String message;
10 | private String coloredMessage;
11 | private int hash;
12 |
13 | public ChatMessage(WrappedChatComponent component, String message, String coloredMessage, int hash) {
14 | this.component = component;
15 | this.message = message;
16 | this.coloredMessage = coloredMessage;
17 | this.hash = hash;
18 | }
19 |
20 | public WrappedChatComponent getComponent() {
21 | return this.component;
22 | }
23 |
24 | public void setComponent(WrappedChatComponent component) {
25 | this.component = component;
26 | }
27 |
28 | public String getMessage() {
29 | return this.message;
30 | }
31 |
32 | public String getColoredMessage() {
33 | return this.coloredMessage;
34 | }
35 |
36 | public int getHash() {
37 | return this.hash;
38 | }
39 |
40 | public void setHash(int hash) {
41 | this.hash = hash;
42 | }
43 | }
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/ClickAction.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat;
2 |
3 | public enum ClickAction {
4 | SUGGEST_COMMAND, RUN_COMMAND, OPEN_URL, NONE;
5 |
6 | private final String jsonValue;
7 |
8 | ClickAction() {
9 | jsonValue = name().toLowerCase();
10 | }
11 |
12 | @Override
13 | public String toString() {
14 | return jsonValue;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/VentureChatPlaceholders.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat;
2 |
3 | import org.bukkit.entity.Player;
4 |
5 | import me.clip.placeholderapi.PlaceholderAPIPlugin;
6 | import me.clip.placeholderapi.expansion.PlaceholderExpansion;
7 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
8 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
9 | import mineverse.Aust1n46.chat.channel.ChatChannel;
10 |
11 | public class VentureChatPlaceholders extends PlaceholderExpansion {
12 | @Override
13 | public String onPlaceholderRequest(Player p, String identifier) {
14 | if (p == null) {
15 | return null;
16 | }
17 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(p);
18 | if (mcp == null) {
19 | return "";
20 | }
21 | if (identifier.equalsIgnoreCase("nickname")) {
22 | return mcp.hasNickname() ? mcp.getNickname() : mcp.getName();
23 | }
24 | if (identifier.equalsIgnoreCase("something_else_you_think_of")) {
25 | return "value for that identifier *";
26 | }
27 | if (identifier.startsWith("channel_")) {
28 | ChatChannel currentChannel = mcp.isQuickChat() ? mcp.getQuickChannel() : mcp.getCurrentChannel();
29 | if (currentChannel == null) {
30 | return "";
31 | }
32 | switch (identifier) {
33 | case "channel_name":
34 | return currentChannel.getName();
35 | case "channel_alias":
36 | return currentChannel.getAlias();
37 | case "channel_color":
38 | return currentChannel.getColor();
39 | case "channel_chatcolor":
40 | return currentChannel.getChatColor();
41 | case "channel_is_bungee":
42 | return currentChannel.getBungee() ? PlaceholderAPIPlugin.booleanTrue() : PlaceholderAPIPlugin.booleanFalse();
43 | case "channel_cooldown":
44 | return currentChannel.getCooldown() + "";
45 | case "channel_distance":
46 | return currentChannel.getDistance() + "";
47 | case "channel_prefix":
48 | return currentChannel.getPrefix();
49 | }
50 | }
51 | return null;
52 | }
53 |
54 | @Override
55 | public boolean persist() {
56 | return true;
57 | }
58 |
59 | @Override
60 | public boolean canRegister() {
61 | return true;
62 | }
63 |
64 | @Override
65 | public String getAuthor() {
66 | return "Aust1n46";
67 | }
68 |
69 | @Override
70 | public String getIdentifier() {
71 | return "venturechat";
72 | }
73 |
74 | @Override
75 | public String getVersion() {
76 | return MineverseChat.getInstance().getDescription().getVersion();
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/alias/Alias.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.alias;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | import org.bukkit.configuration.ConfigurationSection;
7 |
8 | import mineverse.Aust1n46.chat.MineverseChat;
9 |
10 | public class Alias {
11 | private static MineverseChat plugin = MineverseChat.getInstance();
12 | private static List aliases;
13 |
14 | private String name;
15 | private int arguments;
16 | private List components;
17 | private String permission;
18 |
19 | public Alias(String name, int arguments, List components, String permission) {
20 | this.name = name;
21 | this.arguments = arguments;
22 | this.components = components;
23 | this.permission = "venturechat." + permission;
24 | }
25 |
26 | public static void initialize() {
27 | aliases = new ArrayList();
28 | ConfigurationSection cs = plugin.getConfig().getConfigurationSection("alias");
29 | for (String key : cs.getKeys(false)) {
30 | String name = key;
31 | int arguments = cs.getInt(key + ".arguments", 0);
32 | List components = cs.getStringList(key + ".components");
33 | String permissions = cs.getString(key + ".permissions", "None");
34 | aliases.add(new Alias(name, arguments, components, permissions));
35 | }
36 | }
37 |
38 | public static List getAliases() {
39 | return aliases;
40 | }
41 |
42 | public String getName() {
43 | return name;
44 | }
45 |
46 | public int getArguments() {
47 | return arguments;
48 | }
49 |
50 | public List getComponents() {
51 | return components;
52 | }
53 |
54 | public String getPermission() {
55 | return permission;
56 | }
57 |
58 | public boolean hasPermission() {
59 | return !permission.equalsIgnoreCase("venturechat.none");
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/api/MineverseChatAPI.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.api;
2 |
3 | import java.util.ArrayList;
4 | import java.util.Collection;
5 | import java.util.HashMap;
6 | import java.util.List;
7 | import java.util.UUID;
8 |
9 | import org.bukkit.entity.Player;
10 |
11 | import mineverse.Aust1n46.chat.MineverseChat;
12 |
13 | /**
14 | * API class for looking up wrapped {@link MineverseChatPlayer} objects from
15 | * {@link Player}, {@link UUID}, or {@link String} user names.
16 | *
17 | * @author Aust1n46
18 | */
19 | public final class MineverseChatAPI {
20 | private static HashMap playerMap = new HashMap();
21 | private static HashMap namesMap = new HashMap();
22 | private static HashMap onlinePlayerMap = new HashMap();
23 | private static List networkPlayerNames = new ArrayList();
24 |
25 | private static HashMap proxyPlayerMap = new HashMap();
26 |
27 | public static List getNetworkPlayerNames() {
28 | return networkPlayerNames;
29 | }
30 |
31 | public static void clearNetworkPlayerNames() {
32 | networkPlayerNames.clear();
33 | }
34 |
35 | public static void addNetworkPlayerName(String name) {
36 | networkPlayerNames.add(name);
37 | }
38 |
39 | public static void addSynchronizedMineverseChatPlayerToMap(SynchronizedMineverseChatPlayer smcp) {
40 | proxyPlayerMap.put(smcp.getUUID(), smcp);
41 | }
42 |
43 | // @Deprecated
44 | // public static void clearBungeePlayerMap() {
45 | // clearProxyPlayerMap();
46 | // }
47 |
48 | public static void clearProxyPlayerMap() {
49 | proxyPlayerMap.clear();
50 | }
51 |
52 | public static Collection getSynchronizedMineverseChatPlayers() {
53 | return proxyPlayerMap.values();
54 | }
55 |
56 | public static void addNameToMap(MineverseChatPlayer mcp) {
57 | namesMap.put(mcp.getName(), mcp.getUUID());
58 | }
59 |
60 | public static void removeNameFromMap(String name) {
61 | namesMap.remove(name);
62 | }
63 |
64 | public static void clearNameMap() {
65 | namesMap.clear();
66 | }
67 |
68 | @SuppressWarnings("deprecation")
69 | public static void addMineverseChatPlayerToMap(MineverseChatPlayer mcp) {
70 | playerMap.put(mcp.getUUID(), mcp);
71 | MineverseChat.players.add(mcp);
72 | }
73 |
74 | @SuppressWarnings("deprecation")
75 | public static void clearMineverseChatPlayerMap() {
76 | playerMap.clear();
77 | MineverseChat.players.clear();
78 | }
79 |
80 | public static Collection getMineverseChatPlayers() {
81 | return playerMap.values();
82 | }
83 |
84 | @SuppressWarnings("deprecation")
85 | public static void addMineverseChatOnlinePlayerToMap(MineverseChatPlayer mcp) {
86 | onlinePlayerMap.put(mcp.getUUID(), mcp);
87 | MineverseChat.onlinePlayers.add(mcp);
88 | }
89 |
90 | @SuppressWarnings("deprecation")
91 | public static void removeMineverseChatOnlinePlayerToMap(MineverseChatPlayer mcp) {
92 | onlinePlayerMap.remove(mcp.getUUID());
93 | MineverseChat.onlinePlayers.remove(mcp);
94 | }
95 |
96 | @SuppressWarnings("deprecation")
97 | public static void clearOnlineMineverseChatPlayerMap() {
98 | onlinePlayerMap.clear();
99 | MineverseChat.onlinePlayers.clear();
100 | }
101 |
102 | public static Collection getOnlineMineverseChatPlayers() {
103 | return onlinePlayerMap.values();
104 | }
105 |
106 | /**
107 | * Get a MineverseChatPlayer wrapper from a Bukkit Player instance.
108 | *
109 | * @param player {@link Player} object.
110 | * @return {@link MineverseChatPlayer}
111 | */
112 | public static MineverseChatPlayer getMineverseChatPlayer(Player player) {
113 | return getMineverseChatPlayer(player.getUniqueId());
114 | }
115 |
116 | /**
117 | * Get a MineverseChatPlayer wrapper from a UUID.
118 | *
119 | * @param uuid {@link UUID}.
120 | * @return {@link MineverseChatPlayer}
121 | */
122 | public static MineverseChatPlayer getMineverseChatPlayer(UUID uuid) {
123 | return playerMap.get(uuid);
124 | }
125 |
126 | /**
127 | * Get a MineverseChatPlayer wrapper from a user name.
128 | *
129 | * @param name {@link String}.
130 | * @return {@link MineverseChatPlayer}
131 | */
132 | public static MineverseChatPlayer getMineverseChatPlayer(String name) {
133 | return getMineverseChatPlayer(namesMap.get(name));
134 | }
135 |
136 | /**
137 | * Get a MineverseChatPlayer wrapper from a Bukkit Player instance. Only checks
138 | * current online players. Much more efficient!
139 | *
140 | * @param player {@link Player} object.
141 | * @return {@link MineverseChatPlayer}
142 | */
143 | public static MineverseChatPlayer getOnlineMineverseChatPlayer(Player player) {
144 | return getOnlineMineverseChatPlayer(player.getUniqueId());
145 | }
146 |
147 | /**
148 | * Get a MineverseChatPlayer wrapper from a UUID. Only checks current online
149 | * players. Much more efficient!
150 | *
151 | * @param uuid {@link UUID}.
152 | * @return {@link MineverseChatPlayer}
153 | */
154 | public static MineverseChatPlayer getOnlineMineverseChatPlayer(UUID uuid) {
155 | return onlinePlayerMap.get(uuid);
156 | }
157 |
158 | /**
159 | * Get a MineverseChatPlayer wrapper from a user name. Only checks current
160 | * online players. Much more efficient!
161 | *
162 | * @param name {@link String}.
163 | * @return {@link MineverseChatPlayer}
164 | */
165 | public static MineverseChatPlayer getOnlineMineverseChatPlayer(String name) {
166 | return getOnlineMineverseChatPlayer(namesMap.get(name));
167 | }
168 |
169 | /**
170 | * Get a SynchronizedMineverseChatPlayer from a UUID.
171 | *
172 | * @param uuid {@link UUID}
173 | * @return {@link SynchronizedMineverseChatPlayer}
174 | */
175 | public static SynchronizedMineverseChatPlayer getSynchronizedMineverseChatPlayer(UUID uuid) {
176 | return proxyPlayerMap.get(uuid);
177 | }
178 | }
179 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/api/SynchronizedMineverseChatPlayer.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.api;
2 |
3 | import java.util.ArrayList;
4 | import java.util.Collection;
5 | import java.util.HashMap;
6 | import java.util.HashSet;
7 | import java.util.List;
8 | import java.util.Set;
9 | import java.util.UUID;
10 |
11 | import mineverse.Aust1n46.chat.command.mute.MuteContainer;
12 |
13 | public class SynchronizedMineverseChatPlayer {
14 | private UUID uuid;
15 | private Set listening;
16 | private HashMap mutes;
17 | private Set ignores;
18 | private int messagePackets;
19 | private List messageData = new ArrayList();
20 | private boolean spy;
21 | private boolean messageToggle;
22 |
23 | public SynchronizedMineverseChatPlayer(UUID uuid, Set listening, HashMap mutes, Set ignores, boolean spy, boolean messageToggle) {
24 | this.uuid = uuid;
25 | this.listening = listening;
26 | this.mutes = mutes;
27 | this.ignores = ignores;
28 | this.spy = spy;
29 | this.messageToggle = messageToggle;
30 | }
31 |
32 | public SynchronizedMineverseChatPlayer(UUID uuid) {
33 | this.uuid = uuid;
34 | listening = new HashSet();
35 | mutes = new HashMap();
36 | ignores = new HashSet();
37 | spy = false;
38 | messageToggle = true;
39 | }
40 |
41 | public List getMessageData() {
42 | return this.messageData;
43 | }
44 |
45 | public void addData(String s) {
46 | this.messageData.add(s);
47 | }
48 |
49 | public void clearMessageData() {
50 | this.messageData.clear();
51 | }
52 |
53 | public int getMessagePackets() {
54 | return this.messagePackets;
55 | }
56 |
57 | public void incrementMessagePackets() {
58 | this.messagePackets++;
59 | }
60 |
61 | public void clearMessagePackets() {
62 | this.messagePackets = 0;
63 | }
64 |
65 | public void addIgnore(SynchronizedMineverseChatPlayer smcp) {
66 | this.ignores.add(smcp.getUUID());
67 | }
68 |
69 | public void removeIgnore(SynchronizedMineverseChatPlayer smcp) {
70 | this.ignores.remove(smcp.getUUID());
71 | }
72 |
73 | public Set getIgnores() {
74 | return this.ignores;
75 | }
76 |
77 | public void addMute(String channel, long time, String reason) {
78 | mutes.put(channel, new MuteContainer(channel, time, reason));
79 | }
80 |
81 | public void clearMutes() {
82 | this.mutes.clear();
83 | }
84 |
85 | public Collection getMutes() {
86 | return this.mutes.values();
87 | }
88 |
89 | public void addListening(String channel) {
90 | this.listening.add(channel);
91 | }
92 |
93 | public void removeListening(String channel) {
94 | this.listening.remove(channel);
95 | }
96 |
97 | public Set getListening() {
98 | return this.listening;
99 | }
100 |
101 | public UUID getUUID() {
102 | return this.uuid;
103 | }
104 |
105 | public boolean isSpy() {
106 | return this.spy;
107 | }
108 |
109 | public void setSpy(boolean spy) {
110 | this.spy = spy;
111 | }
112 |
113 | public boolean getMessageToggle() {
114 | return this.messageToggle;
115 | }
116 |
117 | public void setMessageToggle(boolean messageToggle) {
118 | this.messageToggle = messageToggle;
119 | }
120 | }
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/api/events/ChannelJoinEvent.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.api.events;
2 |
3 | import mineverse.Aust1n46.chat.channel.ChatChannel;
4 |
5 | import org.bukkit.entity.Player;
6 | import org.bukkit.event.Cancellable;
7 | import org.bukkit.event.Event;
8 | import org.bukkit.event.HandlerList;
9 |
10 | /**
11 | * Event called when a player attempts to join a valid channel
12 | */
13 | public class ChannelJoinEvent extends Event implements Cancellable {
14 | private static final HandlerList handlers = new HandlerList();
15 | private boolean cancelled;
16 | private Player player;
17 | private ChatChannel channel;
18 | private String message;
19 |
20 | public ChannelJoinEvent(Player player, ChatChannel channel, String message) {
21 | this.player = player;
22 | this.channel = channel;
23 | this.message = message;
24 | this.cancelled = false;
25 | }
26 |
27 | @Override
28 | public HandlerList getHandlers() {
29 | return handlers;
30 | }
31 |
32 | public static HandlerList getHandlerList() {
33 | return handlers;
34 | }
35 |
36 | @Override
37 | public boolean isCancelled() {
38 | return this.cancelled;
39 | }
40 |
41 | @Override
42 | public void setCancelled(boolean cancel) {
43 | this.cancelled = cancel;
44 | }
45 |
46 | public Player getPlayer() {
47 | return this.player;
48 | }
49 |
50 | public void setChannel(ChatChannel channel) {
51 | this.channel = channel;
52 | }
53 |
54 | public ChatChannel getChannel() {
55 | return this.channel;
56 | }
57 |
58 | public String getMessage() {
59 | return this.message;
60 | }
61 |
62 | public void setMessage(String message) {
63 | this.message = message;
64 | }
65 | }
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/api/events/MutePlayerEvent.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.api.events;
2 |
3 | import mineverse.Aust1n46.chat.channel.ChatChannel;
4 |
5 | import org.bukkit.entity.Player;
6 | import org.bukkit.event.Cancellable;
7 | import org.bukkit.event.Event;
8 | import org.bukkit.event.HandlerList;
9 |
10 | //This class is a custom event that is part of the plugins API. It is called when a player executes the mute command.
11 | public class MutePlayerEvent extends Event implements Cancellable { //unimplemented
12 | private static final HandlerList handlers = new HandlerList();
13 | private boolean cancelled;
14 | private Player player;
15 | private ChatChannel channel;
16 | private int time;
17 |
18 | public MutePlayerEvent(Player player, ChatChannel channel, int time) {
19 | this.player = player;
20 | this.channel = channel;
21 | this.time = time;
22 | this.cancelled = false;
23 | }
24 |
25 | @Override
26 | public HandlerList getHandlers() {
27 | return handlers;
28 | }
29 |
30 | public static HandlerList getHandlerList() {
31 | return handlers;
32 | }
33 |
34 | @Override
35 | public boolean isCancelled() {
36 | return this.cancelled;
37 | }
38 |
39 | @Override
40 | public void setCancelled(boolean cancel) {
41 | this.cancelled = cancel;
42 | }
43 |
44 | public Player getPlayer() {
45 | return this.player;
46 | }
47 |
48 | public void setChannel(ChatChannel channel) {
49 | this.channel = channel;
50 | }
51 |
52 | public ChatChannel getChannel() {
53 | return this.channel;
54 | }
55 |
56 | public int getTime() {
57 | return this.time;
58 | }
59 |
60 | public void setTime(int time) {
61 | this.time = time;
62 | }
63 | }
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/api/events/VentureChatEvent.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.api.events;
2 |
3 | import java.util.Set;
4 |
5 | import org.bukkit.entity.Player;
6 | import org.bukkit.event.Event;
7 | import org.bukkit.event.HandlerList;
8 |
9 | import mineverse.Aust1n46.chat.MineverseChat;
10 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
11 | import mineverse.Aust1n46.chat.channel.ChatChannel;
12 |
13 | /**
14 | * Event called when a message has been sent to a channel.
15 | * This event can not be cancelled.
16 | *
17 | * @author Aust1n46
18 | */
19 | public class VentureChatEvent extends Event {
20 | private static final HandlerList handlers = new HandlerList();
21 | private final MineverseChatPlayer mcp;
22 | private final String username;
23 | private final String nickname;
24 | private final String playerPrimaryGroup;
25 | private final ChatChannel channel;
26 | private final Set recipients;
27 | private final int recipientCount; //For not counting vanished players
28 | private final String format;
29 | private final String chat;
30 | private final String globalJSON;
31 | private final int hash;
32 | private final boolean bungee;
33 |
34 | public VentureChatEvent(MineverseChatPlayer mcp, String username, String nickname, String playerPrimaryGroup, ChatChannel channel, Set recipients, int recipientCount, String format, String chat, String globalJSON, int hash, boolean bungee) {
35 | super(MineverseChat.ASYNC);
36 | this.mcp = mcp;
37 | this.username = username;
38 | this.nickname = nickname;
39 | this.playerPrimaryGroup = playerPrimaryGroup;
40 | this.channel = channel;
41 | this.recipients = recipients;
42 | this.recipientCount = recipientCount;
43 | this.format = format;
44 | this.chat = chat;
45 | this.globalJSON = globalJSON;
46 | this.hash = hash;
47 | this.bungee = bungee;
48 | }
49 |
50 | public MineverseChatPlayer getMineverseChatPlayer() {
51 | return this.mcp;
52 | }
53 |
54 | public String getUsername() {
55 | return this.username;
56 | }
57 |
58 | public String getNickname() {
59 | return this.nickname;
60 | }
61 |
62 | public String getPlayerPrimaryGroup() {
63 | return this.playerPrimaryGroup;
64 | }
65 |
66 | public ChatChannel getChannel() {
67 | return this.channel;
68 | }
69 |
70 | public Set getRecipients() {
71 | return this.recipients;
72 | }
73 |
74 | //Could be lower than the total number of recipients because vanished players are not counted
75 | public int getRecipientCount() {
76 | return this.recipientCount;
77 | }
78 |
79 | public String getFormat() {
80 | return this.format;
81 | }
82 |
83 | public String getChat() {
84 | return this.chat;
85 | }
86 |
87 | public String getConsoleChat() {
88 | return this.format + this.chat;
89 | }
90 |
91 | public String getGlobalJSON() {
92 | return this.globalJSON;
93 | }
94 |
95 | public int getHash() {
96 | return this.hash;
97 | }
98 |
99 | public boolean isBungee() {
100 | return this.bungee;
101 | }
102 |
103 | @Override
104 | public HandlerList getHandlers() {
105 | return handlers;
106 | }
107 |
108 | public static HandlerList getHandlerList() {
109 | return handlers;
110 | }
111 | }
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/channel/ChatChannelInfo.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.channel;
2 |
3 | import mineverse.Aust1n46.chat.utilities.Format;
4 |
5 | public class ChatChannelInfo {
6 | // DiscordSRV backwards compatibility
7 | @Deprecated
8 | public String FilterChat(String msg) {
9 | return Format.FilterChat(msg);
10 | }
11 |
12 | // DiscordSRV backwards compatibility
13 | @Deprecated
14 | public ChatChannel getChannelInfo(String channel) {
15 | return ChatChannel.getChannel(channel);
16 | }
17 | }
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/ChannelAlias.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command;
2 |
3 | import org.bukkit.command.Command;
4 | import org.bukkit.command.CommandSender;
5 | import org.bukkit.entity.Player;
6 |
7 | import mineverse.Aust1n46.chat.MineverseChat;
8 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
9 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
10 | import mineverse.Aust1n46.chat.channel.ChatChannel;
11 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
12 |
13 | public class ChannelAlias extends Command {
14 | private MineverseChat plugin = MineverseChat.getInstance();
15 |
16 | public ChannelAlias() {
17 | super("channelalias");
18 | }
19 |
20 | @Override
21 | public boolean execute(final CommandSender sender, final String commandLabel, final String[] args) {
22 | if (!(sender instanceof Player)) {
23 | plugin.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString());
24 | return true;
25 | }
26 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender);
27 | for (ChatChannel channel : ChatChannel.getChatChannels()) {
28 | if (commandLabel.toLowerCase().equals(channel.getAlias())) {
29 | if (args.length == 0) {
30 | mcp.getPlayer()
31 | .sendMessage(LocalizedMessage.SET_CHANNEL.toString().replace("{channel_color}", channel.getColor() + "").replace("{channel_name}", channel.getName()));
32 | if (mcp.hasConversation()) {
33 | for (MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) {
34 | if (p.isSpy()) {
35 | p.getPlayer().sendMessage(LocalizedMessage.EXIT_PRIVATE_CONVERSATION_SPY.toString().replace("{player_sender}", mcp.getName())
36 | .replace("{player_receiver}", MineverseChatAPI.getMineverseChatPlayer(mcp.getConversation()).getName()));
37 | }
38 | }
39 | mcp.getPlayer().sendMessage(LocalizedMessage.EXIT_PRIVATE_CONVERSATION.toString().replace("{player_receiver}",
40 | MineverseChatAPI.getMineverseChatPlayer(mcp.getConversation()).getName()));
41 | mcp.setConversation(null);
42 | }
43 | mcp.addListening(channel.getName());
44 | mcp.setCurrentChannel(channel);
45 | if (channel.getBungee()) {
46 | MineverseChat.synchronize(mcp, true);
47 | }
48 | return true;
49 | } else {
50 | mcp.setQuickChat(true);
51 | mcp.setQuickChannel(channel);
52 | mcp.addListening(channel.getName());
53 | if (channel.getBungee()) {
54 | MineverseChat.synchronize(mcp, true);
55 | }
56 | String msg = "";
57 | for (int x = 0; x < args.length; x++) {
58 | if (args[x].length() > 0)
59 | msg += " " + args[x];
60 | }
61 | mcp.getPlayer().chat(msg);
62 | return true;
63 | }
64 | }
65 | }
66 | return true;
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Broadcast.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import org.bukkit.ChatColor;
4 | import org.bukkit.command.Command;
5 | import org.bukkit.command.CommandSender;
6 | import org.bukkit.configuration.ConfigurationSection;
7 |
8 | import mineverse.Aust1n46.chat.MineverseChat;
9 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
10 | import mineverse.Aust1n46.chat.utilities.Format;
11 |
12 | public class Broadcast extends Command {
13 | private MineverseChat plugin = MineverseChat.getInstance();
14 |
15 | public Broadcast() {
16 | super("broadcast");
17 | }
18 |
19 | @Override
20 | public boolean execute(CommandSender sender, String command, String[] args) {
21 | ConfigurationSection bs = plugin.getConfig().getConfigurationSection("broadcast");
22 | String broadcastColor = bs.getString("color", "white");
23 | String broadcastPermissions = bs.getString("permissions", "None");
24 | String broadcastDisplayTag = Format.FormatStringAll(bs.getString("displaytag", "[Broadcast]"));
25 | if (broadcastPermissions.equalsIgnoreCase("None") || sender.hasPermission(broadcastPermissions)) {
26 | if (args.length > 0) {
27 | String bc = "";
28 | for (int x = 0; x < args.length; x++) {
29 | if (args[x].length() > 0)
30 | bc += args[x] + " ";
31 | }
32 | bc = Format.FormatStringAll(bc);
33 | Format.broadcastToServer(broadcastDisplayTag + ChatColor.valueOf(broadcastColor.toUpperCase()) + " " + bc);
34 | return true;
35 | } else {
36 | sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/broadcast").replace("{args}", "[msg]"));
37 | return true;
38 | }
39 | } else {
40 | sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
41 | return true;
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/BungeeToggle.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import org.bukkit.Bukkit;
4 | import org.bukkit.command.Command;
5 | import org.bukkit.command.CommandSender;
6 | import org.bukkit.entity.Player;
7 |
8 | import mineverse.Aust1n46.chat.MineverseChat;
9 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
10 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
11 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
12 |
13 | public class BungeeToggle extends Command {
14 | public BungeeToggle() {
15 | super("bungeetoggle");
16 | }
17 |
18 | @Override
19 | public boolean execute(CommandSender sender, String command, String[] args) {
20 | if (!(sender instanceof Player)) {
21 | Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString());
22 | return true;
23 | }
24 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender);
25 | if (mcp.getPlayer().hasPermission("venturechat.bungeetoggle")) {
26 | if (!mcp.getBungeeToggle()) {
27 | mcp.setBungeeToggle(true);
28 | mcp.getPlayer().sendMessage(LocalizedMessage.BUNGEE_TOGGLE_ON.toString());
29 | MineverseChat.synchronize(mcp, true);
30 | return true;
31 | }
32 | mcp.setBungeeToggle(false);
33 | mcp.getPlayer().sendMessage(LocalizedMessage.BUNGEE_TOGGLE_OFF.toString());
34 | MineverseChat.synchronize(mcp, true);
35 | return true;
36 | }
37 | mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
38 | return true;
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Channel.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import org.bukkit.Bukkit;
4 | import org.bukkit.command.Command;
5 | import org.bukkit.command.CommandSender;
6 | import org.bukkit.entity.Player;
7 | import org.bukkit.event.EventHandler;
8 | import org.bukkit.event.EventPriority;
9 | import org.bukkit.event.Listener;
10 |
11 | import mineverse.Aust1n46.chat.MineverseChat;
12 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
13 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
14 | import mineverse.Aust1n46.chat.api.events.ChannelJoinEvent;
15 | import mineverse.Aust1n46.chat.channel.ChatChannel;
16 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
17 |
18 | public class Channel extends Command implements Listener {
19 | public Channel() {
20 | super("channel");
21 | }
22 |
23 | @Override
24 | public boolean execute(CommandSender sender, String command, String[] args) {
25 | if (!(sender instanceof Player)) {
26 | Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString());
27 | return true;
28 | }
29 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender);
30 | if (args.length > 0) {
31 | if (!ChatChannel.isChannel(args[0])) {
32 | mcp.getPlayer().sendMessage(LocalizedMessage.INVALID_CHANNEL.toString().replace("{args}", args[0]));
33 | return true;
34 | }
35 | ChatChannel channel = ChatChannel.getChannel(args[0]);
36 | Bukkit.getServer().getPluginManager().callEvent(new ChannelJoinEvent(mcp.getPlayer(), channel,
37 | LocalizedMessage.SET_CHANNEL.toString().replace("{channel_color}", channel.getColor() + "").replace("{channel_name}", channel.getName())));
38 | return true;
39 | }
40 | mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/channel").replace("{args}", "[channel]"));
41 | return true;
42 | }
43 |
44 | @EventHandler(priority = EventPriority.MONITOR)
45 | public void onChannelJoin(ChannelJoinEvent event) {
46 | if (event.isCancelled())
47 | return;
48 | ChatChannel channel = event.getChannel();
49 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(event.getPlayer());
50 | if (channel.hasPermission()) {
51 | if (!mcp.getPlayer().hasPermission(channel.getPermission())) {
52 | mcp.removeListening(channel.getName());
53 | mcp.getPlayer().sendMessage(LocalizedMessage.CHANNEL_NO_PERMISSION.toString());
54 | return;
55 | }
56 | }
57 | if (mcp.hasConversation()) {
58 | for (MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) {
59 | if (p.isSpy()) {
60 | p.getPlayer().sendMessage(LocalizedMessage.EXIT_PRIVATE_CONVERSATION_SPY.toString().replace("{player_sender}", mcp.getName()).replace("{player_receiver}",
61 | MineverseChatAPI.getMineverseChatPlayer(mcp.getConversation()).getName()));
62 | }
63 | }
64 | mcp.getPlayer().sendMessage(
65 | LocalizedMessage.EXIT_PRIVATE_CONVERSATION.toString().replace("{player_receiver}", MineverseChatAPI.getMineverseChatPlayer(mcp.getConversation()).getName()));
66 | mcp.setConversation(null);
67 | }
68 | mcp.addListening(channel.getName());
69 | mcp.setCurrentChannel(channel);
70 | mcp.getPlayer().sendMessage(event.getMessage());
71 | if (channel.getBungee()) {
72 | MineverseChat.synchronize(mcp, true);
73 | }
74 | return;
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Channelinfo.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import org.bukkit.ChatColor;
4 | import org.bukkit.command.Command;
5 | import org.bukkit.command.CommandSender;
6 |
7 | import mineverse.Aust1n46.chat.channel.ChatChannel;
8 | import mineverse.Aust1n46.chat.utilities.Format;
9 |
10 | public class Channelinfo extends Command {
11 | public Channelinfo() {
12 | super("channelinfo");
13 | }
14 |
15 | @Override
16 | public boolean execute(CommandSender sender, String command, String[] args) {
17 | if (sender.hasPermission("venturechat.channelinfo")) {
18 | if (args.length < 1) {
19 | sender.sendMessage(ChatColor.RED + "Invalid command: /channelinfo [channel]");
20 | return true;
21 | }
22 | ChatChannel chname = ChatChannel.getChannel(args[0]);
23 | if (chname == null) {
24 | sender.sendMessage(ChatColor.RED + "Invalid channel: " + args[0]);
25 | return true;
26 | }
27 | if (chname.hasPermission()) {
28 | if (!sender.hasPermission(chname.getPermission())) {
29 | sender.sendMessage(ChatColor.RED + "You do not have permission to look at this channel.");
30 | return true;
31 | }
32 | }
33 | sender.sendMessage(ChatColor.GOLD + "Channel: " + chname.getColor() + chname.getName());
34 | sender.sendMessage(ChatColor.GOLD + "Alias: " + chname.getColor() + chname.getAlias());
35 | sender.sendMessage(ChatColor.GOLD + "Color: " + chname.getColor() + chname.getColorRaw());
36 | sender.sendMessage(ChatColor.GOLD + "ChatColor: " + (chname.getChatColor().equalsIgnoreCase("None") ? Format.DEFAULT_COLOR_CODE : chname.getChatColor())
37 | + chname.getChatColorRaw());
38 | if (chname.hasPermission()) {
39 | sender.sendMessage(ChatColor.GOLD + "Permission: " + chname.getColor() + chname.getPermission());
40 | } else {
41 | sender.sendMessage(ChatColor.GOLD + "Permission: " + chname.getColor() + "None");
42 | }
43 | if (chname.hasSpeakPermission()) {
44 | sender.sendMessage(ChatColor.GOLD + "Speak Permission: " + chname.getColor() + chname.getSpeakPermission());
45 | } else {
46 | sender.sendMessage(ChatColor.GOLD + "Speak Permission: " + chname.getColor() + "None");
47 | }
48 | sender.sendMessage(ChatColor.GOLD + "Autojoin: " + chname.getColor() + chname.getAutojoin());
49 | sender.sendMessage(ChatColor.GOLD + "Default: " + chname.getColor() + chname.hasDistance());
50 | if (!chname.hasDistance() || chname.getBungee()) {
51 | sender.sendMessage(ChatColor.GOLD + "Distance: " + ChatColor.RED + "N/A");
52 | } else {
53 | sender.sendMessage(ChatColor.GOLD + "Distance: " + chname.getColor() + chname.getDistance());
54 | }
55 | if (!chname.hasCooldown()) {
56 | sender.sendMessage(ChatColor.GOLD + "Cooldown: " + ChatColor.RED + "N/A");
57 | } else {
58 | sender.sendMessage(ChatColor.GOLD + "Cooldown: " + chname.getColor() + chname.getCooldown());
59 | }
60 | sender.sendMessage(ChatColor.GOLD + "Bungeecord: " + chname.getColor() + chname.getBungee());
61 | sender.sendMessage(ChatColor.GOLD + "Format: " + chname.getColor() + chname.getFormat());
62 | return true;
63 | } else {
64 | sender.sendMessage(ChatColor.RED + "You do not have permission for this command.");
65 | return true;
66 | }
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Chatinfo.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import org.bukkit.Bukkit;
4 | import org.bukkit.ChatColor;
5 | import org.bukkit.command.Command;
6 | import org.bukkit.command.CommandSender;
7 | import org.bukkit.entity.Player;
8 |
9 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
10 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
11 | import mineverse.Aust1n46.chat.channel.ChatChannel;
12 | import mineverse.Aust1n46.chat.command.mute.MuteContainer;
13 |
14 | public class Chatinfo extends Command {
15 | public Chatinfo() {
16 | super("chatinfo");
17 | }
18 |
19 | @Override
20 | public boolean execute(CommandSender sender, String command, String[] args) {
21 | if (sender.hasPermission("venturechat.chatinfo")) {
22 | if (args.length == 0) {
23 | if (!(sender instanceof Player)) {
24 | Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.RED + "This command must be run by a player; use /ci [name]");
25 | return true;
26 | }
27 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender);
28 | String listen = "";
29 | String mute = "";
30 | String blockedcommands = "";
31 | if (args.length < 1) {
32 | mcp.getPlayer().sendMessage(ChatColor.GOLD + "Player: " + ChatColor.GREEN + mcp.getName());
33 | for (String c : mcp.getListening()) {
34 | ChatChannel channel = ChatChannel.getChannel(c);
35 | listen += channel.getColor() + channel.getName() + " ";
36 | }
37 | for (MuteContainer muteContainer : mcp.getMutes()) {
38 | ChatChannel channel = ChatChannel.getChannel(muteContainer.getChannel());
39 | mute += channel.getColor() + channel.getName() + " ";
40 | }
41 | for (String bc : mcp.getBlockedCommands()) {
42 | blockedcommands += bc + " ";
43 | }
44 | mcp.getPlayer().sendMessage(ChatColor.GOLD + "Listening: " + listen);
45 | if (mute.length() > 0) {
46 | mcp.getPlayer().sendMessage(ChatColor.GOLD + "Mutes: " + mute);
47 | } else {
48 | mcp.getPlayer().sendMessage(ChatColor.GOLD + "Mutes: " + ChatColor.RED + "N/A");
49 | }
50 | if (blockedcommands.length() > 0) {
51 | mcp.getPlayer().sendMessage(ChatColor.GOLD + "Blocked Commands: " + ChatColor.RED + blockedcommands);
52 | } else {
53 | mcp.getPlayer().sendMessage(ChatColor.GOLD + "Blocked Commands: " + ChatColor.RED + "N/A");
54 | }
55 | if (mcp.hasConversation()) {
56 | mcp.getPlayer().sendMessage(
57 | ChatColor.GOLD + "Private conversation: " + ChatColor.GREEN + MineverseChatAPI.getMineverseChatPlayer(mcp.getConversation()).getName());
58 | } else {
59 | mcp.getPlayer().sendMessage(ChatColor.GOLD + "Private conversation: " + ChatColor.RED + "N/A");
60 | }
61 | if (mcp.isSpy()) {
62 | mcp.getPlayer().sendMessage(ChatColor.GOLD + "Spy: " + ChatColor.GREEN + "true");
63 | } else {
64 | mcp.getPlayer().sendMessage(ChatColor.GOLD + "Spy: " + ChatColor.RED + "false");
65 | }
66 | if (mcp.hasCommandSpy()) {
67 | mcp.getPlayer().sendMessage(ChatColor.GOLD + "Command spy: " + ChatColor.GREEN + "true");
68 | } else {
69 | mcp.getPlayer().sendMessage(ChatColor.GOLD + "Command spy: " + ChatColor.RED + "false");
70 | }
71 | if (mcp.hasFilter()) {
72 | mcp.getPlayer().sendMessage(ChatColor.GOLD + "Filter: " + ChatColor.GREEN + "true");
73 | } else {
74 | mcp.getPlayer().sendMessage(ChatColor.GOLD + "Filter: " + ChatColor.RED + "false");
75 | }
76 | return true;
77 | }
78 | }
79 | if (sender.hasPermission("venturechat.chatinfo.others")) {
80 | String listen = "";
81 | String mute = "";
82 | String blockedcommands = "";
83 | MineverseChatPlayer p = MineverseChatAPI.getMineverseChatPlayer(args[0]);
84 | if (p == null) {
85 | sender.sendMessage(ChatColor.RED + "Player: " + ChatColor.GOLD + args[0] + ChatColor.RED + " is not online.");
86 | return true;
87 | }
88 | sender.sendMessage(ChatColor.GOLD + "Player: " + ChatColor.GREEN + p.getName());
89 | for (String c : p.getListening()) {
90 | ChatChannel channel = ChatChannel.getChannel(c);
91 | listen += channel.getColor() + channel.getName() + " ";
92 | }
93 | for (MuteContainer muteContainer : p.getMutes()) {
94 | ChatChannel channel = ChatChannel.getChannel(muteContainer.getChannel());
95 | mute += channel.getColor() + channel.getName() + " ";
96 | }
97 | for (String bc : p.getBlockedCommands()) {
98 | blockedcommands += bc + " ";
99 | }
100 | sender.sendMessage(ChatColor.GOLD + "Listening: " + listen);
101 | if (mute.length() > 0) {
102 | sender.sendMessage(ChatColor.GOLD + "Mutes: " + mute);
103 | } else {
104 | sender.sendMessage(ChatColor.GOLD + "Mutes: " + ChatColor.RED + "N/A");
105 | }
106 | if (blockedcommands.length() > 0) {
107 | sender.sendMessage(ChatColor.GOLD + "Blocked Commands: " + ChatColor.RED + blockedcommands);
108 | } else {
109 | sender.sendMessage(ChatColor.GOLD + "Blocked Commands: " + ChatColor.RED + "N/A");
110 | }
111 | if (p.hasConversation()) {
112 | sender.sendMessage(ChatColor.GOLD + "Private conversation: " + ChatColor.GREEN + MineverseChatAPI.getMineverseChatPlayer(p.getConversation()).getName());
113 | } else {
114 | sender.sendMessage(ChatColor.GOLD + "Private conversation: " + ChatColor.RED + "N/A");
115 | }
116 | if (p.isSpy()) {
117 | sender.sendMessage(ChatColor.GOLD + "Spy: " + ChatColor.GREEN + "true");
118 | } else {
119 | sender.sendMessage(ChatColor.GOLD + "Spy: " + ChatColor.RED + "false");
120 | }
121 | if (p.hasCommandSpy()) {
122 | sender.sendMessage(ChatColor.GOLD + "Command spy: " + ChatColor.GREEN + "true");
123 | } else {
124 | sender.sendMessage(ChatColor.GOLD + "Command spy: " + ChatColor.RED + "false");
125 | }
126 | if (p.hasFilter()) {
127 | sender.sendMessage(ChatColor.GOLD + "Filter: " + ChatColor.GREEN + "true");
128 | } else {
129 | sender.sendMessage(ChatColor.GOLD + "Filter: " + ChatColor.RED + "false");
130 | }
131 | return true;
132 | } else {
133 | sender.sendMessage(ChatColor.RED + "You do not have permission to check the chat info of others.");
134 | }
135 | return true;
136 | } else {
137 | sender.sendMessage(ChatColor.RED + "You do not have permission for this command.");
138 | return true;
139 | }
140 | }
141 | }
142 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Chatreload.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import java.util.UUID;
4 |
5 | import org.bukkit.Bukkit;
6 | import org.bukkit.command.Command;
7 | import org.bukkit.command.CommandSender;
8 | import org.bukkit.entity.Player;
9 |
10 | import mineverse.Aust1n46.chat.MineverseChat;
11 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
12 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
13 | import mineverse.Aust1n46.chat.database.PlayerData;
14 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
15 | import mineverse.Aust1n46.chat.utilities.Format;
16 |
17 | public class Chatreload extends Command {
18 | private MineverseChat plugin = MineverseChat.getInstance();
19 |
20 | public Chatreload() {
21 | super("chatreload");
22 | }
23 |
24 | @Override
25 | public boolean execute(CommandSender sender, String command, String[] args) {
26 | if (sender.hasPermission("venturechat.reload")) {
27 | PlayerData.savePlayerData();
28 | MineverseChatAPI.clearMineverseChatPlayerMap();
29 | MineverseChatAPI.clearNameMap();
30 | MineverseChatAPI.clearOnlineMineverseChatPlayerMap();
31 |
32 | plugin.reloadConfig();
33 | MineverseChat.initializeConfigReaders();
34 |
35 | PlayerData.loadLegacyPlayerData();
36 | PlayerData.loadPlayerData();
37 | for (Player p : plugin.getServer().getOnlinePlayers()) {
38 | MineverseChatPlayer mcp = MineverseChatAPI.getMineverseChatPlayer(p);
39 | if (mcp == null) {
40 | Bukkit.getConsoleSender()
41 | .sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - Could not find player data post reload for currently online player: " + p.getName()));
42 | Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - There could be an issue with your player data saving."));
43 | String name = p.getName();
44 | UUID uuid = p.getUniqueId();
45 | mcp = new MineverseChatPlayer(uuid, name);
46 | }
47 | mcp.setOnline(true);
48 | mcp.setHasPlayed(false);
49 | mcp.setJsonFormat();
50 | MineverseChatAPI.addMineverseChatOnlinePlayerToMap(mcp);
51 | MineverseChatAPI.addNameToMap(mcp);
52 | }
53 |
54 | Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Config reloaded"));
55 | for (MineverseChatPlayer player : MineverseChatAPI.getOnlineMineverseChatPlayers()) {
56 | if (player.getPlayer().hasPermission("venturechat.reload")) {
57 | player.getPlayer().sendMessage(LocalizedMessage.CONFIG_RELOADED.toString());
58 | }
59 | }
60 | return true;
61 | }
62 | sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
63 | return true;
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Chlist.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import org.bukkit.command.Command;
4 | import org.bukkit.command.CommandSender;
5 |
6 | import mineverse.Aust1n46.chat.channel.ChatChannel;
7 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
8 |
9 | public class Chlist extends Command {
10 | public Chlist() {
11 | super("chlist");
12 | }
13 |
14 | @Override
15 | public boolean execute(CommandSender sender, String command, String[] args) {
16 | sender.sendMessage(LocalizedMessage.CHANNEL_LIST_HEADER.toString());
17 | for (ChatChannel chname : ChatChannel.getChatChannels()) {
18 | if (chname.hasPermission()) {
19 | if (sender.hasPermission(chname.getPermission())) {
20 | sender.sendMessage(LocalizedMessage.CHANNEL_LIST_WITH_PERMISSIONS.toString().replace("{channel_color}", (chname.getColor()).toString())
21 | .replace("{channel_name}", chname.getName()).replace("{channel_alias}", chname.getAlias()));
22 | }
23 | } else {
24 | sender.sendMessage(LocalizedMessage.CHANNEL_LIST.toString().replace("{channel_color}", chname.getColor().toString()).replace("{channel_name}", chname.getName())
25 | .replace("{channel_alias}", chname.getAlias()));
26 | }
27 | }
28 | return true;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Chwho.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import static mineverse.Aust1n46.chat.MineverseChat.LINE_LENGTH;
4 |
5 | import java.io.ByteArrayOutputStream;
6 | import java.io.DataOutputStream;
7 |
8 | import org.bukkit.ChatColor;
9 | import org.bukkit.Location;
10 | import org.bukkit.command.Command;
11 | import org.bukkit.command.CommandSender;
12 | import org.bukkit.entity.Player;
13 | import org.bukkit.plugin.PluginManager;
14 |
15 | import com.massivecraft.factions.entity.MPlayer;
16 | import com.palmergames.bukkit.towny.TownyUniverse;
17 | import com.palmergames.bukkit.towny.object.Resident;
18 |
19 | import mineverse.Aust1n46.chat.MineverseChat;
20 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
21 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
22 | import mineverse.Aust1n46.chat.channel.ChatChannel;
23 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
24 |
25 | public class Chwho extends Command {
26 | private MineverseChat plugin = MineverseChat.getInstance();
27 |
28 | public Chwho() {
29 | super("chwho");
30 | }
31 |
32 | @Override
33 | public boolean execute(CommandSender sender, String command, String[] args) {
34 | String playerlist = "";
35 | if (sender.hasPermission("venturechat.chwho")) {
36 | if (args.length > 0) {
37 | ChatChannel channel = ChatChannel.getChannel(args[0]);
38 | if (channel != null) {
39 | if (channel.hasPermission()) {
40 | if (!sender.hasPermission(channel.getPermission())) {
41 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(((Player) sender));
42 | mcp.removeListening(channel.getName());
43 | mcp.getPlayer().sendMessage(LocalizedMessage.CHANNEL_NO_PERMISSION_VIEW.toString());
44 | return true;
45 | }
46 | }
47 |
48 | if (channel.getBungee() && sender instanceof Player) {
49 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender);
50 | ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
51 | DataOutputStream out = new DataOutputStream(byteOutStream);
52 | try {
53 | out.writeUTF("Chwho");
54 | out.writeUTF("Get");
55 | out.writeUTF(mcp.getUUID().toString());
56 | out.writeUTF(channel.getName());
57 | mcp.getPlayer().sendPluginMessage(plugin, MineverseChat.PLUGIN_MESSAGING_CHANNEL, byteOutStream.toByteArray());
58 | out.close();
59 | } catch (Exception e) {
60 | e.printStackTrace();
61 | }
62 | return true;
63 | }
64 |
65 | PluginManager pluginManager = plugin.getServer().getPluginManager();
66 | long linecount = LINE_LENGTH;
67 | for (MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) {
68 | if (p.getListening().contains(channel.getName())) {
69 | if (sender instanceof Player) {
70 | if (!((Player) sender).canSee(p.getPlayer())) {
71 | continue;
72 | }
73 | }
74 | if (channel.hasDistance() && sender instanceof Player) {
75 | if (!this.isPlayerWithinDistance((Player) sender, p.getPlayer(), channel.getDistance())) {
76 | continue;
77 | }
78 | }
79 | if (plugin.getConfig().getBoolean("enable_towny_channel") && pluginManager.isPluginEnabled("Towny") && sender instanceof Player) {
80 | try {
81 | TownyUniverse towny = TownyUniverse.getInstance();
82 | if (channel.getName().equalsIgnoreCase("Town")) {
83 | Resident r = towny.getResident(p.getName());
84 | Resident pp = towny.getResident(((Player) sender).getName());
85 | if (!pp.hasTown()) {
86 | if (playerlist.length() + p.getName().length() > linecount) {
87 | playerlist += "\n";
88 | linecount = linecount + LINE_LENGTH;
89 | }
90 | if (!p.isMuted(channel.getName())) {
91 | playerlist += ChatColor.WHITE + p.getName();
92 | } else {
93 | playerlist += ChatColor.RED + p.getName();
94 | }
95 | playerlist += ChatColor.WHITE + ", ";
96 | break;
97 | } else if (!r.hasTown()) {
98 | continue;
99 | } else if (!(r.getTown().getName().equals(pp.getTown().getName()))) {
100 | continue;
101 | }
102 | }
103 | if (channel.getName().equalsIgnoreCase("Nation")) {
104 | Resident r = towny.getResident(p.getName());
105 | Resident pp = towny.getResident(((Player) sender).getName());
106 | if (!pp.hasNation()) {
107 | if (playerlist.length() + p.getName().length() > linecount) {
108 | playerlist += "\n";
109 | linecount = linecount + LINE_LENGTH;
110 | }
111 | if (!p.isMuted(channel.getName())) {
112 | playerlist += ChatColor.WHITE + p.getName();
113 | } else {
114 | playerlist += ChatColor.RED + p.getName();
115 | }
116 | playerlist += ChatColor.WHITE + ", ";
117 | break;
118 | } else if (!r.hasNation()) {
119 | continue;
120 | } else if (!(r.getTown().getNation().getName().equals(pp.getTown().getNation().getName()))) {
121 | continue;
122 | }
123 | }
124 | } catch (Exception ex) {
125 | ex.printStackTrace();
126 | }
127 | }
128 | if (plugin.getConfig().getBoolean("enable_factions_channel") && pluginManager.isPluginEnabled("Factions") && sender instanceof Player) {
129 | try {
130 | if (channel.getName().equalsIgnoreCase("Faction")) {
131 | MPlayer mplayer = MPlayer.get(p.getPlayer());
132 | MPlayer mplayerp = MPlayer.get((Player) sender);
133 | if (!mplayerp.hasFaction()) {
134 | if (playerlist.length() + p.getName().length() > linecount) {
135 | playerlist += "\n";
136 | linecount = linecount + LINE_LENGTH;
137 | }
138 | if (!p.isMuted(channel.getName())) {
139 | playerlist += ChatColor.WHITE + p.getName();
140 | } else {
141 | playerlist += ChatColor.RED + p.getName();
142 | }
143 | playerlist += ChatColor.WHITE + ", ";
144 | break;
145 | } else if (!mplayerp.hasFaction()) {
146 | continue;
147 | } else if (!(mplayer.getFactionName().equals(mplayerp.getFactionName()))) {
148 | continue;
149 | }
150 | }
151 | } catch (Exception ex) {
152 | ex.printStackTrace();
153 | }
154 | }
155 | if (playerlist.length() + p.getName().length() > linecount) {
156 | playerlist += "\n";
157 | linecount = linecount + LINE_LENGTH;
158 | }
159 | if (!p.isMuted(channel.getName())) {
160 | playerlist += ChatColor.WHITE + p.getName();
161 | } else {
162 | playerlist += ChatColor.RED + p.getName();
163 | }
164 | playerlist += ChatColor.WHITE + ", ";
165 | }
166 | }
167 | if (playerlist.length() > 2) {
168 | playerlist = playerlist.substring(0, playerlist.length() - 2);
169 | }
170 | sender.sendMessage(LocalizedMessage.CHANNEL_PLAYER_LIST_HEADER.toString().replace("{channel_color}", (channel.getColor()).toString()).replace("{channel_name}",
171 | channel.getName()));
172 | sender.sendMessage(playerlist);
173 | return true;
174 | } else {
175 | sender.sendMessage(LocalizedMessage.INVALID_CHANNEL.toString().replace("{args}", args[0]));
176 | return true;
177 | }
178 | } else {
179 | sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/chwho").replace("{args}", "[channel]"));
180 | return true;
181 | }
182 | } else {
183 | sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
184 | return true;
185 | }
186 | }
187 |
188 | private boolean isPlayerWithinDistance(Player p1, Player p2, double Distance) {
189 | Double chDistance = Distance;
190 | Location locreceip;
191 | Location locsender = p1.getLocation();
192 | Location diff;
193 | if (chDistance > (double) 0) {
194 | locreceip = p2.getLocation();
195 | if (locreceip.getWorld() == p1.getWorld()) {
196 | diff = locreceip.subtract(locsender);
197 | if (Math.abs(diff.getX()) > chDistance || Math.abs(diff.getZ()) > chDistance || Math.abs(diff.getY()) > chDistance) {
198 | return false;
199 | }
200 | } else {
201 | return false;
202 | }
203 | }
204 | return true;
205 | }
206 | }
207 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Clearchat.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import org.bukkit.command.Command;
4 | import org.bukkit.command.CommandSender;
5 |
6 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
7 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
8 | import mineverse.Aust1n46.chat.localization.InternalMessage;
9 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
10 |
11 | public class Clearchat extends Command {
12 | public Clearchat() {
13 | super("clearchat");
14 | }
15 |
16 | @Override
17 | public boolean execute(CommandSender sender, String command, String[] args) {
18 | if (sender.hasPermission("venturechat.clearchat")) {
19 | for (MineverseChatPlayer player : MineverseChatAPI.getOnlineMineverseChatPlayers()) {
20 | if (!player.getPlayer().hasPermission("venturechat.clearchat.bypass")) {
21 | for (int a = 1; a <= 20; a++)
22 | player.getPlayer().sendMessage(InternalMessage.EMPTY_STRING.toString());
23 | player.getPlayer().sendMessage(LocalizedMessage.CLEAR_CHAT_SERVER.toString());
24 | }
25 | }
26 | sender.sendMessage(LocalizedMessage.CLEAR_CHAT_SENDER.toString());
27 | return true;
28 | }
29 | sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
30 | return true;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Commandblock.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import java.util.List;
4 |
5 | import org.bukkit.command.Command;
6 | import org.bukkit.command.CommandSender;
7 |
8 | import mineverse.Aust1n46.chat.MineverseChat;
9 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
10 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
11 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
12 |
13 | public class Commandblock extends Command {
14 | private MineverseChat plugin = MineverseChat.getInstance();
15 |
16 | public Commandblock() {
17 | super("commandblock");
18 | }
19 |
20 | @Override
21 | public boolean execute(CommandSender sender, String command, String[] args) {
22 | if (sender.hasPermission("venturechat.commandblock")) {
23 | if (args.length > 1) {
24 | MineverseChatPlayer player = MineverseChatAPI.getOnlineMineverseChatPlayer(args[0]);
25 | if (player == null) {
26 | sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[0]));
27 | return true;
28 | }
29 | boolean match = false;
30 | for (String cb : (List) plugin.getConfig().getStringList("blockablecommands"))
31 | if (args[1].equals("/" + cb))
32 | match = true;
33 | if (match || player.isBlockedCommand(args[1])) {
34 | if (!player.isBlockedCommand(args[1])) {
35 | player.addBlockedCommand(args[1]);
36 | player.getPlayer().sendMessage(LocalizedMessage.BLOCK_COMMAND_PLAYER.toString().replace("{command}", args[1]));
37 | sender.sendMessage(LocalizedMessage.BLOCK_COMMAND_SENDER.toString().replace("{player}", player.getName()).replace("{command}", args[1]));
38 | return true;
39 | }
40 | player.removeBlockedCommand(args[1]);
41 | player.getPlayer().sendMessage(LocalizedMessage.UNBLOCK_COMMAND_PLAYER.toString().replace("{command}", args[1]));
42 | sender.sendMessage(LocalizedMessage.UNBLOCK_COMMAND_SENDER.toString().replace("{player}", player.getName()).replace("{command}", args[1]));
43 | return true;
44 | }
45 | sender.sendMessage(LocalizedMessage.COMMAND_NOT_BLOCKABLE.toString());
46 | return true;
47 | }
48 | sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/commandblock").replace("{args}", "[player] [command]"));
49 | return true;
50 | }
51 | sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
52 | return true;
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Commandspy.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import org.bukkit.Bukkit;
4 | import org.bukkit.command.Command;
5 | import org.bukkit.command.CommandSender;
6 | import org.bukkit.entity.Player;
7 |
8 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
9 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
10 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
11 |
12 | public class Commandspy extends Command {
13 | public Commandspy() {
14 | super("commandspy");
15 | }
16 |
17 | @Override
18 | public boolean execute(CommandSender sender, String command, String[] args) {
19 | if (!(sender instanceof Player)) {
20 | Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString());
21 | return true;
22 | }
23 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender);
24 | if (mcp.getPlayer().hasPermission("venturechat.commandspy")) {
25 | if (!mcp.hasCommandSpy()) {
26 | mcp.setCommandSpy(true);
27 | mcp.getPlayer().sendMessage(LocalizedMessage.COMMANDSPY_ON.toString());
28 | return true;
29 | }
30 | mcp.setCommandSpy(false);
31 | mcp.getPlayer().sendMessage(LocalizedMessage.COMMANDSPY_OFF.toString());
32 | return true;
33 | }
34 | mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
35 | return true;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Edit.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import java.util.ArrayList;
4 | import java.util.HashMap;
5 | import java.util.List;
6 | import java.util.Map;
7 |
8 | import org.bukkit.command.Command;
9 | import org.bukkit.command.CommandSender;
10 | import org.bukkit.entity.Player;
11 | import org.bukkit.scheduler.BukkitRunnable;
12 |
13 | import com.comphenix.protocol.events.PacketContainer;
14 | import com.comphenix.protocol.wrappers.WrappedChatComponent;
15 |
16 | import mineverse.Aust1n46.chat.ChatMessage;
17 | import mineverse.Aust1n46.chat.MineverseChat;
18 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
19 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
20 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
21 | import mineverse.Aust1n46.chat.utilities.Format;
22 |
23 | public class Edit extends Command {
24 | private PacketContainer emptyLinePacketContainer = Format.createPacketPlayOutChat("{\"extra\":[\" \"],\"text\":\"\"}");
25 | private MineverseChat plugin = MineverseChat.getInstance();
26 | private WrappedChatComponent messageDeletedComponentPlayer;
27 |
28 | public Edit() {
29 | super("edit");
30 | }
31 |
32 | @Override
33 | @SuppressWarnings({ "unchecked", "rawtypes" })
34 | public boolean execute(CommandSender sender, String command, String[] args) {
35 | if (args.length == 0) {
36 | sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/edit").replace("{args}", "[hashcode]"));
37 | return true;
38 | }
39 | final int hash;
40 | try {
41 | hash = Integer.parseInt(args[0]);
42 | } catch (Exception e) {
43 | sender.sendMessage(LocalizedMessage.INVALID_HASH.toString());
44 | return true;
45 | }
46 | new BukkitRunnable() {
47 | public void run() {
48 | final Map> packets = new HashMap();
49 | for (MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) {
50 | List messages = p.getMessages();
51 | List playerPackets = new ArrayList();
52 | boolean resend = false;
53 | for (int fill = 0; fill < 100 - messages.size(); fill++) {
54 | playerPackets.add(Edit.this.emptyLinePacketContainer);
55 | }
56 | for (ChatMessage message : messages) {
57 | if (message.getHash() == hash) {
58 | WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass")
59 | ? Edit.this.getMessageDeletedChatComponentAdmin(message)
60 | : Edit.this.getMessageDeletedChatComponentPlayer();
61 | message.setComponent(removedComponent);
62 | message.setHash(-1);
63 | playerPackets.add(Format.createPacketPlayOutChat(removedComponent));
64 | resend = true;
65 | continue;
66 | }
67 | if (message.getMessage().contains(Format.FormatStringAll(plugin.getConfig().getString("messageremovericon")))) {
68 | String submessage = message.getMessage().substring(0, message.getMessage().length() - plugin.getConfig().getString("messageremovericon").length() - 1)
69 | .replaceAll("(�([a-z0-9]))", "");
70 | if (submessage.hashCode() == hash) {
71 | WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass")
72 | ? Edit.this.getMessageDeletedChatComponentAdmin(message)
73 | : Edit.this.getMessageDeletedChatComponentPlayer();
74 | message.setComponent(removedComponent);
75 | message.setHash(-1);
76 | playerPackets.add(Format.createPacketPlayOutChat(removedComponent));
77 | resend = true;
78 | continue;
79 | }
80 | }
81 | playerPackets.add(Format.createPacketPlayOutChat(message.getComponent()));
82 | }
83 | if (resend) {
84 | packets.put(p.getPlayer(), playerPackets);
85 | }
86 | }
87 | new BukkitRunnable() {
88 | public void run() {
89 | for (Player p : packets.keySet()) {
90 | List pPackets = packets.get(p);
91 | for (PacketContainer c : pPackets) {
92 | Format.sendPacketPlayOutChat(p, c);
93 | }
94 | }
95 | }
96 | }.runTask(plugin);
97 | }
98 | }.runTaskAsynchronously(plugin);
99 | return true;
100 | }
101 |
102 | public WrappedChatComponent getMessageDeletedChatComponentPlayer() {
103 | if (this.messageDeletedComponentPlayer == null) {
104 | this.messageDeletedComponentPlayer = WrappedChatComponent.fromJson(
105 | "{\"text\":\"\",\"extra\":[{\"text\":\"\",\"color\":\"red\",\"italic\":\"true\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\""
106 | + Format.FormatStringAll(plugin.getConfig().getString("messageremoverpermissions")) + "\"}]}}}]}");
107 | }
108 | return this.messageDeletedComponentPlayer;
109 | }
110 |
111 | public WrappedChatComponent getMessageDeletedChatComponentAdmin(ChatMessage message) {
112 | String oMessage = message.getComponent().getJson().substring(1, message.getComponent().getJson().length() - 11);
113 | if (message.getMessage().contains(Format.FormatStringAll(plugin.getConfig().getString("messageremovericon")))) {
114 | oMessage = oMessage.substring(0, oMessage.length() - plugin.getConfig().getString("messageremovericon").length() - 4) + "\"}]";
115 | }
116 | return WrappedChatComponent.fromJson(
117 | Format.FormatStringAll("{\"text\":\"\",\"extra\":[{\"text\":\"&c&o\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"&7Message: \","
118 | + oMessage + "}}}]}"));
119 | }
120 | }
121 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Filter.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import org.bukkit.Bukkit;
4 | import org.bukkit.command.Command;
5 | import org.bukkit.command.CommandSender;
6 | import org.bukkit.entity.Player;
7 |
8 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
9 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
10 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
11 |
12 | public class Filter extends Command {
13 | public Filter() {
14 | super("filter");
15 | }
16 |
17 | @Override
18 | public boolean execute(CommandSender sender, String command, String[] args) {
19 | if (!(sender instanceof Player)) {
20 | Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString());
21 | return true;
22 | }
23 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender);
24 | if (mcp.getPlayer().hasPermission("venturechat.ignorefilter")) {
25 | if (!mcp.hasFilter()) {
26 | mcp.setFilter(true);
27 | mcp.getPlayer().sendMessage(LocalizedMessage.FILTER_ON.toString());
28 | return true;
29 | }
30 | mcp.setFilter(false);
31 | mcp.getPlayer().sendMessage(LocalizedMessage.FILTER_OFF.toString());
32 | return true;
33 | }
34 | mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
35 | return true;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Force.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import org.bukkit.command.Command;
4 | import org.bukkit.command.CommandSender;
5 |
6 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
7 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
8 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
9 |
10 | public class Force extends Command {
11 | public Force() {
12 | super("force");
13 | }
14 |
15 | @Override
16 | public boolean execute(CommandSender sender, String command, String[] args) {
17 | if (sender.hasPermission("venturechat.force")) {
18 | if (args.length < 2) {
19 | sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/force").replace("{args}", "[player] [message]"));
20 | return true;
21 | }
22 | MineverseChatPlayer player = MineverseChatAPI.getOnlineMineverseChatPlayer(args[0]);
23 | if (player == null) {
24 | sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[0]));
25 | return true;
26 | }
27 | String forcemsg = "";
28 | for (int x = 1; x < args.length; x++)
29 | if (args[x].length() > 0)
30 | forcemsg += args[x] + " ";
31 | sender.sendMessage(LocalizedMessage.FORCE_PLAYER.toString().replace("{player}", player.getName()).replace("{message}", forcemsg));
32 | player.getPlayer().chat(forcemsg);
33 | return true;
34 | }
35 | sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
36 | return true;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Forceall.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import org.bukkit.command.Command;
4 | import org.bukkit.command.CommandSender;
5 |
6 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
7 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
8 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
9 |
10 | public class Forceall extends Command {
11 | public Forceall() {
12 | super("forceall");
13 | }
14 |
15 | @Override
16 | public boolean execute(CommandSender sender, String command, String[] args) {
17 | if (sender.hasPermission("venturechat.forceall")) {
18 | if (args.length < 1) {
19 | sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/forceall").replace("{args}", "[message]"));
20 | return true;
21 | }
22 | String forcemsg = "";
23 | for (int x = 0; x < args.length; x++) {
24 | if (args[x].length() > 0) {
25 | forcemsg += args[x] + " ";
26 | }
27 | }
28 | sender.sendMessage(LocalizedMessage.FORCE_ALL.toString().replace("{message}", forcemsg));
29 | for (MineverseChatPlayer player : MineverseChatAPI.getOnlineMineverseChatPlayers()) {
30 | player.getPlayer().chat(forcemsg);
31 | }
32 | return true;
33 | }
34 | sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
35 | return true;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Kickchannel.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import org.bukkit.ChatColor;
4 | import org.bukkit.command.Command;
5 | import org.bukkit.command.CommandSender;
6 |
7 | import mineverse.Aust1n46.chat.MineverseChat;
8 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
9 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
10 | import mineverse.Aust1n46.chat.channel.ChatChannel;
11 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
12 |
13 | public class Kickchannel extends Command {
14 | public Kickchannel() {
15 | super("kickchannel");
16 | }
17 |
18 | @Override
19 | public boolean execute(CommandSender sender, String command, String[] args) {
20 | if (sender.hasPermission("venturechat.kickchannel")) {
21 | if (args.length < 2) {
22 | sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/kickchannel").replace("{args}", "[player] [channel]"));
23 | return true;
24 | }
25 | MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[0]);
26 | if (player == null) {
27 | sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[0]));
28 | return true;
29 | }
30 | ChatChannel channel = ChatChannel.getChannel(args[1]);
31 | if (channel == null) {
32 | sender.sendMessage(LocalizedMessage.INVALID_CHANNEL.toString().replace("{args}", args[1]));
33 | return true;
34 | }
35 | sender.sendMessage(LocalizedMessage.KICK_CHANNEL.toString().replace("{player}", args[0]).replace("{channel_color}", channel.getColor() + "").replace("{channel_name}",
36 | channel.getName()));
37 | player.removeListening(channel.getName());
38 | if (player.isOnline()) {
39 | player.getPlayer()
40 | .sendMessage(LocalizedMessage.LEAVE_CHANNEL.toString().replace("{channel_color}", channel.getColor() + "").replace("{channel_name}", channel.getName()));
41 | } else {
42 | player.setModified(true);
43 | }
44 | boolean isThereABungeeChannel = channel.getBungee();
45 | if (player.getListening().size() == 0) {
46 | player.addListening(ChatChannel.getDefaultChannel().getName());
47 | player.setCurrentChannel(ChatChannel.getDefaultChannel());
48 | if (ChatChannel.getDefaultChannel().getBungee()) {
49 | isThereABungeeChannel = true;
50 | }
51 | if (player.isOnline()) {
52 | player.getPlayer().sendMessage(LocalizedMessage.MUST_LISTEN_ONE_CHANNEL.toString());
53 | player.getPlayer()
54 | .sendMessage(LocalizedMessage.SET_CHANNEL.toString().replace("{channel_color}", ChatColor.valueOf(ChatChannel.getDefaultColor().toUpperCase()) + "")
55 | .replace("{channel_name}", ChatChannel.getDefaultChannel().getName()));
56 | } else
57 | player.setModified(true);
58 | }
59 | if (isThereABungeeChannel) {
60 | MineverseChat.synchronize(player, true);
61 | }
62 | return true;
63 | }
64 | sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
65 | return true;
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Kickchannelall.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import org.bukkit.ChatColor;
4 | import org.bukkit.command.Command;
5 | import org.bukkit.command.CommandSender;
6 |
7 | import mineverse.Aust1n46.chat.MineverseChat;
8 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
9 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
10 | import mineverse.Aust1n46.chat.channel.ChatChannel;
11 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
12 |
13 | public class Kickchannelall extends Command {
14 | public Kickchannelall() {
15 | super("kickchannelall");
16 | }
17 |
18 | @Override
19 | public boolean execute(CommandSender sender, String command, String[] args) {
20 | if (sender.hasPermission("venturechat.kickchannelall")) {
21 | if (args.length < 1) {
22 | sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/kickchannelall").replace("{args}", "[player]"));
23 | return true;
24 | }
25 | MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[0]);
26 | if (player == null) {
27 | sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[0]));
28 | return true;
29 | }
30 | boolean isThereABungeeChannel = false;
31 | for (String channel : player.getListening()) {
32 | if (ChatChannel.isChannel(channel)) {
33 | ChatChannel chatChannelObj = ChatChannel.getChannel(channel);
34 | if (chatChannelObj.getBungee()) {
35 | isThereABungeeChannel = true;
36 | }
37 | }
38 | }
39 | player.clearListening();
40 | sender.sendMessage(LocalizedMessage.KICK_CHANNEL_ALL_SENDER.toString().replace("{player}", player.getName()));
41 | player.addListening(ChatChannel.getDefaultChannel().getName());
42 | player.setCurrentChannel(ChatChannel.getDefaultChannel());
43 | if (ChatChannel.getDefaultChannel().getBungee()) {
44 | isThereABungeeChannel = true;
45 | }
46 | if (isThereABungeeChannel) {
47 | MineverseChat.synchronize(player, true);
48 | }
49 | if (player.isOnline()) {
50 | player.getPlayer().sendMessage(LocalizedMessage.KICK_CHANNEL_ALL_PLAYER.toString());
51 | player.getPlayer().sendMessage(LocalizedMessage.MUST_LISTEN_ONE_CHANNEL.toString());
52 | player.getPlayer()
53 | .sendMessage(LocalizedMessage.SET_CHANNEL.toString().replace("{channel_color}", ChatColor.valueOf(ChatChannel.getDefaultColor().toUpperCase()) + "")
54 | .replace("{channel_name}", ChatChannel.getDefaultChannel().getName()));
55 | } else {
56 | player.setModified(true);
57 | }
58 | return true;
59 | }
60 | sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
61 | return true;
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Leave.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import org.bukkit.Bukkit;
4 | import org.bukkit.ChatColor;
5 | import org.bukkit.command.Command;
6 | import org.bukkit.command.CommandSender;
7 | import org.bukkit.entity.Player;
8 |
9 | import mineverse.Aust1n46.chat.MineverseChat;
10 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
11 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
12 | import mineverse.Aust1n46.chat.channel.ChatChannel;
13 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
14 |
15 | public class Leave extends Command {
16 | public Leave() {
17 | super("leave");
18 | }
19 |
20 | @Override
21 | public boolean execute(CommandSender sender, String command, String[] args) {
22 | if (!(sender instanceof Player)) {
23 | Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString());
24 | return true;
25 | }
26 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender);
27 | if (args.length > 0) {
28 | ChatChannel channel = ChatChannel.getChannel(args[0]);
29 | if (channel == null) {
30 | mcp.getPlayer().sendMessage(LocalizedMessage.INVALID_CHANNEL.toString().replace("{args}", args[0]));
31 | return true;
32 | }
33 | mcp.removeListening(channel.getName());
34 | mcp.getPlayer().sendMessage(LocalizedMessage.LEAVE_CHANNEL.toString().replace("{channel_color}", channel.getColor() + "").replace("{channel_name}", channel.getName()));
35 | boolean isThereABungeeChannel = channel.getBungee();
36 | if (mcp.getListening().size() == 0) {
37 | mcp.addListening(ChatChannel.getDefaultChannel().getName());
38 | mcp.setCurrentChannel(ChatChannel.getDefaultChannel());
39 | if (ChatChannel.getDefaultChannel().getBungee()) {
40 | isThereABungeeChannel = true;
41 | }
42 | mcp.getPlayer().sendMessage(LocalizedMessage.MUST_LISTEN_ONE_CHANNEL.toString());
43 | mcp.getPlayer().sendMessage(LocalizedMessage.SET_CHANNEL.toString().replace("{channel_color}", ChatColor.valueOf(ChatChannel.getDefaultColor().toUpperCase()) + "")
44 | .replace("{channel_name}", ChatChannel.getDefaultChannel().getName()));
45 | }
46 | if (isThereABungeeChannel) {
47 | MineverseChat.synchronize(mcp, true);
48 | }
49 | return true;
50 | }
51 | mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/leave").replace("{args}", "[channel]"));
52 | return true;
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Listen.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import org.bukkit.Bukkit;
4 | import org.bukkit.command.Command;
5 | import org.bukkit.command.CommandSender;
6 | import org.bukkit.entity.Player;
7 |
8 | import mineverse.Aust1n46.chat.MineverseChat;
9 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
10 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
11 | import mineverse.Aust1n46.chat.channel.ChatChannel;
12 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
13 |
14 | public class Listen extends Command {
15 | public Listen() {
16 | super("listen");
17 | }
18 |
19 | @Override
20 | public boolean execute(CommandSender sender, String command, String[] args) {
21 | if (!(sender instanceof Player)) {
22 | Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString());
23 | return true;
24 | }
25 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender);
26 | if (args.length > 0) {
27 | ChatChannel channel = ChatChannel.getChannel(args[0]);
28 | if (channel == null) {
29 | mcp.getPlayer().sendMessage(LocalizedMessage.INVALID_CHANNEL.toString().replace("{args}", args[0]));
30 | return true;
31 | }
32 | if (channel.hasPermission()) {
33 | if (!mcp.getPlayer().hasPermission(channel.getPermission())) {
34 | mcp.removeListening(channel.getName());
35 | mcp.getPlayer().sendMessage(LocalizedMessage.CHANNEL_NO_PERMISSION.toString());
36 | return true;
37 | }
38 | }
39 | mcp.addListening(channel.getName());
40 | mcp.getPlayer()
41 | .sendMessage(LocalizedMessage.LISTEN_CHANNEL.toString().replace("{channel_color}", channel.getColor() + "").replace("{channel_name}", channel.getName()));
42 | if (channel.getBungee()) {
43 | MineverseChat.synchronize(mcp, true);
44 | }
45 | return true;
46 | }
47 | mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/listen").replace("{args}", "[channel]"));
48 | return true;
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Me.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import org.bukkit.command.Command;
4 | import org.bukkit.command.CommandSender;
5 | import org.bukkit.entity.Player;
6 |
7 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
8 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
9 | import mineverse.Aust1n46.chat.utilities.Format;
10 |
11 | public class Me extends Command {
12 | public Me() {
13 | super("me");
14 | }
15 |
16 | @Override
17 | public boolean execute(CommandSender sender, String command, String[] args) {
18 | if (sender.hasPermission("venturechat.me")) {
19 | if (args.length > 0) {
20 | String msg = "";
21 | for (int x = 0; x < args.length; x++)
22 | if (args[x].length() > 0)
23 | msg += " " + args[x];
24 | if (sender instanceof Player && MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender).hasFilter()) {
25 | msg = Format.FilterChat(msg);
26 | }
27 | if (sender.hasPermission("venturechat.color.legacy")) {
28 | msg = Format.FormatStringLegacyColor(msg);
29 | }
30 | if (sender.hasPermission("venturechat.color"))
31 | msg = Format.FormatStringColor(msg);
32 | if (sender.hasPermission("venturechat.format"))
33 | msg = Format.FormatString(msg);
34 | if (sender instanceof Player) {
35 | Player p = (Player) sender;
36 | Format.broadcastToServer("* " + p.getDisplayName() + msg);
37 | return true;
38 | }
39 | Format.broadcastToServer("* " + sender.getName() + msg);
40 | return true;
41 | }
42 | sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/me").replace("{args}", "[message]"));
43 | return true;
44 | }
45 | sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
46 | return true;
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/RangedSpy.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import org.bukkit.Bukkit;
4 | import org.bukkit.command.Command;
5 | import org.bukkit.command.CommandSender;
6 | import org.bukkit.entity.Player;
7 |
8 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
9 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
10 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
11 |
12 | public class RangedSpy extends Command {
13 | public RangedSpy() {
14 | super("rangedspy");
15 | }
16 |
17 | @Override
18 | public boolean execute(CommandSender sender, String command, String[] args) {
19 | if (!(sender instanceof Player)) {
20 | Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString());
21 | return true;
22 | }
23 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender);
24 | if (mcp.getPlayer().hasPermission("venturechat.rangedspy")) {
25 | if (!mcp.getRangedSpy()) {
26 | mcp.setRangedSpy(true);
27 | mcp.getPlayer().sendMessage(LocalizedMessage.RANGED_SPY_ON.toString());
28 | return true;
29 | }
30 | mcp.setRangedSpy(false);
31 | mcp.getPlayer().sendMessage(LocalizedMessage.RANGED_SPY_OFF.toString());
32 | return true;
33 | }
34 | mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
35 | return true;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Removemessage.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import java.io.ByteArrayOutputStream;
4 | import java.io.DataOutputStream;
5 | import java.util.ArrayList;
6 | import java.util.HashMap;
7 | import java.util.List;
8 | import java.util.Map;
9 |
10 | import org.bukkit.ChatColor;
11 | import org.bukkit.command.Command;
12 | import org.bukkit.command.CommandSender;
13 | import org.bukkit.entity.Player;
14 | import org.bukkit.scheduler.BukkitRunnable;
15 |
16 | import com.comphenix.protocol.events.PacketContainer;
17 | import com.comphenix.protocol.wrappers.WrappedChatComponent;
18 |
19 | import mineverse.Aust1n46.chat.ChatMessage;
20 | import mineverse.Aust1n46.chat.MineverseChat;
21 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
22 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
23 | import mineverse.Aust1n46.chat.channel.ChatChannel;
24 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
25 | import mineverse.Aust1n46.chat.utilities.Format;
26 |
27 | public class Removemessage extends Command {
28 | private MineverseChat plugin = MineverseChat.getInstance();
29 | private PacketContainer emptyLinePacketContainer = Format.createPacketPlayOutChat("{\"extra\":[\" \"],\"text\":\"\"}");
30 | private WrappedChatComponent messageDeletedComponentPlayer = WrappedChatComponent.fromJson(
31 | "{\"text\":\"\",\"extra\":[{\"text\":\"\",\"extra\":[" + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("messageremovertext")))
32 | + "],\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":["
33 | + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("messageremoverpermissions"))) + "]}}}]}");
34 |
35 | public Removemessage() {
36 | super("removemessage");
37 | }
38 |
39 | @Override
40 | @SuppressWarnings({ "unchecked", "rawtypes" })
41 | public boolean execute(CommandSender sender, String command, String[] args) {
42 | if (args.length == 0) {
43 | sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/removemessage").replace("{args}", "[hashcode] {channel}"));
44 | return true;
45 | }
46 | final int hash;
47 | try {
48 | hash = Integer.parseInt(args[0]);
49 | } catch (Exception e) {
50 | sender.sendMessage(LocalizedMessage.INVALID_HASH.toString());
51 | return true;
52 | }
53 | if (args.length > 1 && ChatChannel.isChannel(args[1]) && ChatChannel.getChannel(args[1]).getBungee() && sender instanceof Player) {
54 | ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
55 | DataOutputStream out = new DataOutputStream(byteOutStream);
56 | try {
57 | out.writeUTF("RemoveMessage");
58 | out.writeUTF(String.valueOf(hash));
59 | ((Player) sender).sendPluginMessage(plugin, MineverseChat.PLUGIN_MESSAGING_CHANNEL, byteOutStream.toByteArray());
60 | out.close();
61 | } catch (Exception e) {
62 | e.printStackTrace();
63 | }
64 | return true;
65 | } else {
66 | new BukkitRunnable() {
67 | public void run() {
68 | final Map> packets = new HashMap();
69 | for (MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) {
70 | List messages = p.getMessages();
71 | List playerPackets = new ArrayList();
72 | boolean resend = false;
73 | for (int fill = 0; fill < 100 - messages.size(); fill++) {
74 | playerPackets.add(Removemessage.this.emptyLinePacketContainer);
75 | }
76 | for (ChatMessage message : messages) {
77 | if (message.getHash() == hash) {
78 | WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass")
79 | ? Removemessage.this.getMessageDeletedChatComponentAdmin(message)
80 | : Removemessage.this.getMessageDeletedChatComponentPlayer();
81 | message.setComponent(removedComponent);
82 | message.setHash(-1);
83 | playerPackets.add(Format.createPacketPlayOutChat(removedComponent));
84 | resend = true;
85 | continue;
86 | }
87 | if (message.getMessage().contains(ChatColor.stripColor(Format.FormatStringAll(plugin.getConfig().getString("guiicon"))))) {
88 | String submessage = message.getMessage().substring(0,
89 | message.getMessage().length() - ChatColor.stripColor(Format.FormatStringAll(plugin.getConfig().getString("guiicon"))).length());
90 | if (submessage.hashCode() == hash) {
91 | WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass")
92 | ? Removemessage.this.getMessageDeletedChatComponentAdmin(message)
93 | : Removemessage.this.getMessageDeletedChatComponentPlayer();
94 | message.setComponent(removedComponent);
95 | message.setHash(-1);
96 | playerPackets.add(Format.createPacketPlayOutChat(removedComponent));
97 | resend = true;
98 | continue;
99 | }
100 | }
101 | playerPackets.add(Format.createPacketPlayOutChat(message.getComponent()));
102 |
103 | }
104 | if (resend) {
105 | packets.put(p.getPlayer(), playerPackets);
106 | }
107 | }
108 | new BukkitRunnable() {
109 | public void run() {
110 | for (Player p : packets.keySet()) {
111 | List pPackets = packets.get(p);
112 | for (PacketContainer c : pPackets) {
113 | Format.sendPacketPlayOutChat(p, c);
114 | }
115 | }
116 | }
117 | }.runTask(plugin);
118 | }
119 | }.runTaskAsynchronously(plugin);
120 | return true;
121 | }
122 | }
123 |
124 | public WrappedChatComponent getMessageDeletedChatComponentPlayer() {
125 | return this.messageDeletedComponentPlayer;
126 | }
127 |
128 | public WrappedChatComponent getMessageDeletedChatComponentAdmin(ChatMessage message) {
129 | return WrappedChatComponent.fromJson(
130 | "[{\"text\":\"\",\"extra\":[{\"text\":\"\",\"extra\":[" + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("messageremovertext")))
131 | + "],\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\"," + message.getColoredMessage() + "}}}]}]");
132 | }
133 | }
134 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Setchannel.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import org.bukkit.command.Command;
4 | import org.bukkit.command.CommandSender;
5 |
6 | import mineverse.Aust1n46.chat.MineverseChat;
7 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
8 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
9 | import mineverse.Aust1n46.chat.channel.ChatChannel;
10 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
11 |
12 | public class Setchannel extends Command {
13 | public Setchannel() {
14 | super("setchannel");
15 | }
16 |
17 | @Override
18 | public boolean execute(CommandSender sender, String command, String[] args) {
19 | if (sender.hasPermission("venturechat.setchannel")) {
20 | if (args.length < 2) {
21 | sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/setchannel").replace("{args}", "[player] [channel]"));
22 | return true;
23 | }
24 | MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[0]);
25 | if (player == null) {
26 | sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[0]));
27 | return true;
28 | }
29 | ChatChannel channel = ChatChannel.getChannel(args[1]);
30 | if (channel == null) {
31 | sender.sendMessage(LocalizedMessage.INVALID_CHANNEL.toString().replace("{args}", args[1]));
32 | return true;
33 | }
34 | if (channel.hasPermission()) {
35 | if (!player.isOnline()) {
36 | sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE_NO_PERMISSIONS_CHECK.toString());
37 | return true;
38 | }
39 | if (!player.getPlayer().hasPermission(channel.getPermission())) {
40 | player.removeListening(channel.getName());
41 | sender.sendMessage(LocalizedMessage.SET_CHANNEL_PLAYER_CHANNEL_NO_PERMISSION.toString().replace("{player}", player.getName())
42 | .replace("{channel_color}", channel.getColor() + "").replace("{channel_name}", channel.getName()));
43 | return true;
44 | }
45 | }
46 | player.addListening(channel.getName());
47 | player.setCurrentChannel(channel);
48 | sender.sendMessage(LocalizedMessage.SET_CHANNEL_SENDER.toString().replace("{player}", player.getName()).replace("{channel_color}", channel.getColor() + "")
49 | .replace("{channel_name}", channel.getName()));
50 | if (player.hasConversation()) {
51 | for (MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) {
52 | if (p.isSpy()) {
53 | p.getPlayer().sendMessage(LocalizedMessage.EXIT_PRIVATE_CONVERSATION_SPY.toString().replace("{player_sender}", player.getName())
54 | .replace("{player_receiver}", MineverseChatAPI.getMineverseChatPlayer(player.getConversation()).getName()));
55 | }
56 | }
57 | if (player.isOnline())
58 | player.getPlayer().sendMessage(LocalizedMessage.EXIT_PRIVATE_CONVERSATION.toString().replace("{player_receiver}",
59 | MineverseChatAPI.getMineverseChatPlayer(player.getConversation()).getName()));
60 | else
61 | player.setModified(true);
62 | player.setConversation(null);
63 | }
64 | if (player.isOnline())
65 | player.getPlayer()
66 | .sendMessage(LocalizedMessage.SET_CHANNEL.toString().replace("{channel_color}", channel.getColor() + "").replace("{channel_name}", channel.getName()));
67 | else {
68 | player.setModified(true);
69 | }
70 | if (channel.getBungee()) {
71 | MineverseChat.synchronize(player, true);
72 | }
73 | return true;
74 | }
75 | sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
76 | return true;
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Setchannelall.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import org.bukkit.command.Command;
4 | import org.bukkit.command.CommandSender;
5 |
6 | import mineverse.Aust1n46.chat.MineverseChat;
7 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
8 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
9 | import mineverse.Aust1n46.chat.channel.ChatChannel;
10 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
11 |
12 | public class Setchannelall extends Command {
13 | public Setchannelall() {
14 | super("setchannelall");
15 | }
16 |
17 | @Override
18 | public boolean execute(CommandSender sender, String command, String[] args) {
19 | if (sender.hasPermission("venturechat.setchannelall")) {
20 | if (args.length < 1) {
21 | sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/setchannelall").replace("{args}", "[player]"));
22 | return true;
23 | }
24 | MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[0]);
25 | if (player == null) {
26 | sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[0]));
27 | return true;
28 | }
29 | boolean isThereABungeeChannel = false;
30 | for (ChatChannel channel : ChatChannel.getChatChannels()) {
31 | if (channel.hasPermission()) {
32 | if (!player.isOnline()) {
33 | sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE_NO_PERMISSIONS_CHECK.toString());
34 | return true;
35 | }
36 | if (!player.getPlayer().hasPermission(channel.getPermission())) {
37 | player.removeListening(channel.getName());
38 | } else {
39 | player.addListening(channel.getName());
40 | }
41 | } else {
42 | player.addListening(channel.getName());
43 | }
44 | if (channel.getBungee()) {
45 | isThereABungeeChannel = true;
46 | }
47 | }
48 | sender.sendMessage(LocalizedMessage.SET_CHANNEL_ALL_SENDER.toString().replace("{player}", player.getName()));
49 | if (player.isOnline())
50 | player.getPlayer().sendMessage(LocalizedMessage.SET_CHANNEL_ALL_PLAYER.toString());
51 | else
52 | player.setModified(true);
53 | if (isThereABungeeChannel) {
54 | MineverseChat.synchronize(player, true);
55 | }
56 | return true;
57 | }
58 | sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
59 | return true;
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/VentureChatGui.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | import org.bukkit.Bukkit;
7 | import org.bukkit.ChatColor;
8 | import org.bukkit.Material;
9 | import org.bukkit.command.Command;
10 | import org.bukkit.command.CommandSender;
11 | import org.bukkit.entity.Player;
12 | import org.bukkit.inventory.Inventory;
13 | import org.bukkit.inventory.ItemStack;
14 | import org.bukkit.inventory.meta.ItemMeta;
15 | import org.bukkit.inventory.meta.SkullMeta;
16 |
17 | import me.clip.placeholderapi.PlaceholderAPI;
18 | import mineverse.Aust1n46.chat.MineverseChat;
19 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
20 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
21 | import mineverse.Aust1n46.chat.channel.ChatChannel;
22 | import mineverse.Aust1n46.chat.gui.GuiSlot;
23 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
24 | import mineverse.Aust1n46.chat.utilities.Format;
25 | import mineverse.Aust1n46.chat.versions.VersionHandler;
26 |
27 | public class VentureChatGui extends Command {
28 | private MineverseChat plugin = MineverseChat.getInstance();
29 |
30 | public VentureChatGui() {
31 | super("venturechatgui");
32 | }
33 |
34 | @Override
35 | public boolean execute(CommandSender sender, String command, String[] args) {
36 | if (!(sender instanceof Player)) {
37 | Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString());
38 | return true;
39 | }
40 | if (args.length < 3) {
41 | sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/venturechatgui").replace("{args}", "[player] [channel] [hashcode]"));
42 | return true;
43 | }
44 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender);
45 | if (mcp.getPlayer().hasPermission("venturechat.gui")) {
46 | MineverseChatPlayer target = MineverseChatAPI.getMineverseChatPlayer(args[0]);
47 | if (target == null && !args[0].equals("Discord")) {
48 | mcp.getPlayer().sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[0]));
49 | return true;
50 | }
51 | if (ChatChannel.isChannel(args[1])) {
52 | ChatChannel channel = ChatChannel.getChannel(args[1]);
53 | final int hash;
54 | try {
55 | hash = Integer.parseInt(args[2]);
56 | } catch (Exception e) {
57 | sender.sendMessage(LocalizedMessage.INVALID_HASH.toString());
58 | return true;
59 | }
60 | if (args[0].equals("Discord")) {
61 | this.openInventoryDiscord(mcp, channel, hash);
62 | return true;
63 | }
64 | this.openInventory(mcp, target, channel, hash);
65 | return true;
66 | }
67 | mcp.getPlayer().sendMessage(LocalizedMessage.INVALID_CHANNEL.toString().replace("{args}", args[1]));
68 | return true;
69 | }
70 | mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
71 | return true;
72 | }
73 |
74 | @SuppressWarnings("deprecation")
75 | private void openInventory(MineverseChatPlayer mcp, MineverseChatPlayer target, ChatChannel channel, int hash) {
76 | Inventory inv = Bukkit.createInventory(null, this.getSlots(), "VentureChat: " + target.getName() + " GUI");
77 | ItemStack close = null;
78 | ItemStack skull = null;
79 | if (VersionHandler.is1_7()) {
80 | close = new ItemStack(Material.BEDROCK);
81 | } else {
82 | close = new ItemStack(Material.BARRIER);
83 | }
84 |
85 | if (VersionHandler.is1_7() || VersionHandler.is1_8() || VersionHandler.is1_9() || VersionHandler.is1_10() || VersionHandler.is1_11() || VersionHandler.is1_12()) {
86 | skull = new ItemStack(Material.getMaterial("SKULL_ITEM"));
87 | } else {
88 | skull = new ItemStack(Material.PLAYER_HEAD);
89 | }
90 |
91 | ItemMeta closeMeta = close.getItemMeta();
92 | closeMeta.setDisplayName(ChatColor.RED + "" + ChatColor.ITALIC + "Close GUI");
93 | close.setItemMeta(closeMeta);
94 |
95 | SkullMeta skullMeta = (SkullMeta) skull.getItemMeta();
96 | skullMeta.setOwner(target.getName());
97 | skullMeta.setDisplayName(ChatColor.AQUA + target.getName());
98 | List skullLore = new ArrayList();
99 | skullLore.add(ChatColor.GRAY + "Channel: " + channel.getColor() + channel.getName());
100 | skullLore.add(ChatColor.GRAY + "Hash: " + channel.getColor() + hash);
101 | skullMeta.setLore(skullLore);
102 | skull.setItemMeta(skullMeta);
103 | skull.setDurability((short) 3);
104 | inv.setItem(0, skull);
105 |
106 | for (GuiSlot g : GuiSlot.getGuiSlots()) {
107 | if (!g.hasPermission() || mcp.getPlayer().hasPermission(g.getPermission())) {
108 | if (this.checkSlot(g.getSlot())) {
109 | MineverseChat.getInstance().getServer().getConsoleSender()
110 | .sendMessage(Format.FormatStringAll("&cGUI: " + g.getName() + " has invalid slot: " + g.getSlot() + "!"));
111 | continue;
112 | }
113 | ItemStack gStack = new ItemStack(g.getIcon());
114 | gStack.setDurability((short) g.getDurability());
115 | ItemMeta gMeta = gStack.getItemMeta();
116 | String displayName = g.getText().replace("{player_name}", target.getName()).replace("{channel}", channel.getName()).replace("{hash}", hash + "");
117 | if (target.isOnline()) {
118 | displayName = PlaceholderAPI.setBracketPlaceholders(target.getPlayer(), displayName);
119 | }
120 | gMeta.setDisplayName(Format.FormatStringAll(displayName));
121 | List gLore = new ArrayList();
122 | gMeta.setLore(gLore);
123 | gStack.setItemMeta(gMeta);
124 | inv.setItem(g.getSlot(), gStack);
125 | }
126 | }
127 |
128 | inv.setItem(8, close);
129 | mcp.getPlayer().openInventory(inv);
130 | }
131 |
132 | @SuppressWarnings("deprecation")
133 | private void openInventoryDiscord(MineverseChatPlayer mcp, ChatChannel channel, int hash) {
134 | Inventory inv = Bukkit.createInventory(null, this.getSlots(), "VentureChat: Discord_Message GUI");
135 | ItemStack close = null;
136 | ItemStack skull = null;
137 | if (VersionHandler.is1_7()) {
138 | close = new ItemStack(Material.BEDROCK);
139 | } else {
140 | close = new ItemStack(Material.BARRIER);
141 | }
142 |
143 | if (VersionHandler.is1_7() || VersionHandler.is1_8() || VersionHandler.is1_9() || VersionHandler.is1_10() || VersionHandler.is1_11() || VersionHandler.is1_12()) {
144 | skull = new ItemStack(Material.getMaterial("SKULL_ITEM"));
145 | } else {
146 | skull = new ItemStack(Material.PLAYER_HEAD);
147 | }
148 |
149 | ItemMeta closeMeta = close.getItemMeta();
150 | closeMeta.setDisplayName("�oClose GUI");
151 | close.setItemMeta(closeMeta);
152 |
153 | SkullMeta skullMeta = (SkullMeta) skull.getItemMeta();
154 | skullMeta.setOwner("Scarsz");
155 | skullMeta.setDisplayName("�bDiscord_Message");
156 | List skullLore = new ArrayList();
157 | skullLore.add("�7Channel: " + channel.getColor() + channel.getName());
158 | skullLore.add("�7Hash: " + channel.getColor() + hash);
159 | skullMeta.setLore(skullLore);
160 | skull.setItemMeta(skullMeta);
161 | skull.setDurability((short) 3);
162 | inv.setItem(0, skull);
163 |
164 | for (GuiSlot g : GuiSlot.getGuiSlots()) {
165 | if (!g.hasPermission() || mcp.getPlayer().hasPermission(g.getPermission())) {
166 | if (this.checkSlot(g.getSlot())) {
167 | MineverseChat.getInstance().getServer().getConsoleSender()
168 | .sendMessage(Format.FormatStringAll("&cGUI: " + g.getName() + " has invalid slot: " + g.getSlot() + "!"));
169 | continue;
170 | }
171 | ItemStack gStack = new ItemStack(g.getIcon());
172 | gStack.setDurability((short) g.getDurability());
173 | ItemMeta gMeta = gStack.getItemMeta();
174 | String displayName = g.getText().replace("{player_name}", "Discord_Message").replace("{channel}", channel.getName()).replace("{hash}", hash + "");
175 | gMeta.setDisplayName(Format.FormatStringAll(displayName));
176 | List gLore = new ArrayList();
177 | gMeta.setLore(gLore);
178 | gStack.setItemMeta(gMeta);
179 | inv.setItem(g.getSlot(), gStack);
180 | }
181 | }
182 |
183 | inv.setItem(8, close);
184 | mcp.getPlayer().openInventory(inv);
185 | }
186 |
187 | private boolean checkSlot(int slot) {
188 | return slot == 0 || slot == 8;
189 | }
190 |
191 | private int getSlots() {
192 | int rows = plugin.getConfig().getInt("guirows", 1);
193 | if (rows == 2)
194 | return 18;
195 | if (rows == 3)
196 | return 27;
197 | if (rows == 4)
198 | return 36;
199 | if (rows == 5)
200 | return 45;
201 | if (rows == 6)
202 | return 54;
203 | return 9;
204 | }
205 | }
206 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/chat/Venturechat.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.chat;
2 |
3 | import org.bukkit.command.Command;
4 | //import org.bukkit.ChatColor;
5 | import org.bukkit.command.CommandSender;
6 | //import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;
7 | //import org.bukkit.entity.Player;
8 |
9 | import mineverse.Aust1n46.chat.MineverseChat;
10 | import mineverse.Aust1n46.chat.localization.InternalMessage;
11 | //import net.md_5.bungee.api.chat.ClickEvent;
12 | //import net.md_5.bungee.api.chat.ComponentBuilder;
13 | //import net.md_5.bungee.api.chat.HoverEvent;
14 | //import net.md_5.bungee.api.chat.TextComponent;
15 | //import net.minecraft.server.v1_15_R1.IChatBaseComponent;
16 | //import net.minecraft.server.v1_15_R1.PacketPlayOutChat;
17 |
18 | public class Venturechat extends Command {
19 | private MineverseChat plugin = MineverseChat.getInstance();
20 |
21 | public Venturechat() {
22 | super("venturechat");
23 | }
24 |
25 | @Override
26 | public boolean execute(CommandSender sender, String command, String[] args) {
27 | sender.sendMessage(InternalMessage.VENTURECHAT_VERSION.toString()
28 | .replace("{version}", plugin.getDescription().getVersion()));
29 | sender.sendMessage(InternalMessage.VENTURECHAT_AUTHOR.toString());
30 | return true;
31 | // if (sender instanceof Player && plugin.getConfig().getString("loglevel", "info").equals("debug")) {
32 | // Player player = (Player) sender;
33 | // String title = ChatColor.GOLD + " | " + ChatColor.BLUE.toString() + ChatColor.BOLD + "SpigotAPI chat message" + ChatColor.RESET + ChatColor.GOLD + " | ";
34 | // String spaces = " ";
35 | // TextComponent tcSpaces = new TextComponent(spaces);
36 | // TextComponent message = new TextComponent(title);
37 | // message.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Click here to rank up!").create()));
38 | // message.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "Sample SpigotAPI Click Event"));
39 | // tcSpaces.addExtra(message);
40 | // player.spigot().sendMessage(tcSpaces);
41 | //
42 | //// sendActionBar(player, "NMS ActionBar message");
43 | // }
44 | }
45 |
46 | // public static void sendActionBar(Player player, String message) {
47 | // message= message.replaceAll("%player%", player.getDisplayName());
48 | // message = ChatColor.translateAlternateColorCodes('&', message);
49 | // CraftPlayer p = (CraftPlayer) player;
50 | // IChatBaseComponent cbc = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + message + "\"}");
51 | // PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc);
52 | // try {
53 | // MineverseChat.posField.set(ppoc, MineverseChat.chatMessageType.getEnumConstants()[2]);
54 | // }
55 | // catch (Exception e) {
56 | // e.printStackTrace();
57 | // }
58 | // p.getHandle().playerConnection.sendPacket(ppoc);
59 | // }
60 | }
61 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/message/Ignore.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.message;
2 |
3 | import java.io.ByteArrayOutputStream;
4 | import java.io.DataOutputStream;
5 | import java.util.ArrayList;
6 | import java.util.Collections;
7 | import java.util.List;
8 | import java.util.UUID;
9 |
10 | import org.bukkit.ChatColor;
11 | import org.bukkit.command.Command;
12 | import org.bukkit.command.CommandSender;
13 | import org.bukkit.entity.Player;
14 | import org.bukkit.util.StringUtil;
15 |
16 | import mineverse.Aust1n46.chat.MineverseChat;
17 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
18 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
19 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
20 |
21 | public class Ignore extends Command {
22 | public Ignore() {
23 | super("ignore");
24 | }
25 |
26 | private MineverseChat plugin = MineverseChat.getInstance();
27 |
28 | @Override
29 | public boolean execute(CommandSender sender, String command, String[] args) {
30 | if (!(sender instanceof Player)) {
31 | plugin.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString());
32 | return true;
33 | }
34 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender);
35 | if (args.length == 0) {
36 | mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS_IGNORE.toString());
37 | return true;
38 | }
39 | if (args[0].equalsIgnoreCase("list")) {
40 | String ignoreList = "";
41 | for (UUID ignore : mcp.getIgnores()) {
42 | MineverseChatPlayer i = MineverseChatAPI.getMineverseChatPlayer(ignore);
43 | String iName = ignore.toString();
44 | if (i != null) {
45 | iName = i.getName();
46 | }
47 | ignoreList += ChatColor.RED + iName + ChatColor.WHITE + ", ";
48 | }
49 | mcp.getPlayer().sendMessage(LocalizedMessage.IGNORE_LIST_HEADER.toString());
50 | if (ignoreList.length() > 0) {
51 | mcp.getPlayer().sendMessage(ignoreList.substring(0, ignoreList.length() - 2));
52 | }
53 | return true;
54 | }
55 | if (mcp.getName().equalsIgnoreCase(args[0])) {
56 | mcp.getPlayer().sendMessage(LocalizedMessage.IGNORE_YOURSELF.toString());
57 | return true;
58 | }
59 | if (plugin.getConfig().getBoolean("bungeecordmessaging", true)) {
60 | ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
61 | DataOutputStream out = new DataOutputStream(byteOutStream);
62 | try {
63 | out.writeUTF("Ignore");
64 | out.writeUTF("Send");
65 | out.writeUTF(args[0]);
66 | out.writeUTF(mcp.getUUID().toString());
67 | mcp.getPlayer().sendPluginMessage(plugin, MineverseChat.PLUGIN_MESSAGING_CHANNEL, byteOutStream.toByteArray());
68 | out.close();
69 | } catch (Exception e) {
70 | e.printStackTrace();
71 | }
72 | return true;
73 | }
74 |
75 | MineverseChatPlayer player = MineverseChatAPI.getOnlineMineverseChatPlayer(args[0]);
76 | if (player == null) {
77 | mcp.getPlayer().sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[0]));
78 | return true;
79 | }
80 | if (mcp.getIgnores().contains(player.getUUID())) {
81 | mcp.getPlayer().sendMessage(LocalizedMessage.IGNORE_PLAYER_OFF.toString().replace("{player}", player.getName()));
82 | mcp.removeIgnore(player.getUUID());
83 | MineverseChat.synchronize(mcp, true);
84 | return true;
85 | }
86 | if (player.getPlayer().hasPermission("venturechat.ignore.bypass")) {
87 | mcp.getPlayer().sendMessage(LocalizedMessage.IGNORE_PLAYER_CANT.toString().replace("{player}", player.getName()));
88 | return true;
89 | }
90 | mcp.getPlayer().sendMessage(LocalizedMessage.IGNORE_PLAYER_ON.toString().replace("{player}", player.getName()));
91 | mcp.addIgnore(player.getUUID());
92 | MineverseChat.synchronize(mcp, true);
93 | return true;
94 | }
95 |
96 | @Override
97 | public List tabComplete(CommandSender sender, String label, String[] args) {
98 | if (plugin.getConfig().getBoolean("bungeecordmessaging", true)) {
99 | List completions = new ArrayList<>();
100 | StringUtil.copyPartialMatches(args[args.length - 1], MineverseChatAPI.getNetworkPlayerNames(), completions);
101 | Collections.sort(completions);
102 | return completions;
103 | }
104 | return super.tabComplete(sender, label, args);
105 | }
106 | }
107 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/message/MessageToggle.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.message;
2 |
3 | import org.bukkit.Bukkit;
4 | import org.bukkit.command.Command;
5 | import org.bukkit.command.CommandSender;
6 | import org.bukkit.entity.Player;
7 |
8 | import mineverse.Aust1n46.chat.MineverseChat;
9 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
10 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
11 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
12 |
13 | public class MessageToggle extends Command {
14 | public MessageToggle() {
15 | super("messagetoggle");
16 | }
17 |
18 | @Override
19 | public boolean execute(CommandSender sender, String command, String[] args) {
20 | if (!(sender instanceof Player)) {
21 | Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString());
22 | return true;
23 | }
24 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender);
25 | if (mcp.getPlayer().hasPermission("venturechat.messagetoggle")) {
26 | if (!mcp.getMessageToggle()) {
27 | mcp.setMessageToggle(true);
28 | mcp.getPlayer().sendMessage(LocalizedMessage.MESSAGE_TOGGLE_ON.toString());
29 | MineverseChat.synchronize(mcp, true);
30 | return true;
31 | }
32 | mcp.setMessageToggle(false);
33 | mcp.getPlayer().sendMessage(LocalizedMessage.MESSAGE_TOGGLE_OFF.toString());
34 | MineverseChat.synchronize(mcp, true);
35 | return true;
36 | }
37 | mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
38 | return true;
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/message/Notifications.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.message;
2 |
3 | import org.bukkit.Bukkit;
4 | import org.bukkit.command.Command;
5 | import org.bukkit.command.CommandSender;
6 | import org.bukkit.entity.Player;
7 |
8 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
9 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
10 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
11 |
12 | public class Notifications extends Command {
13 | public Notifications() {
14 | super("notifications");
15 | }
16 |
17 | @Override
18 | public boolean execute(CommandSender sender, String command, String[] args) {
19 | if (!(sender instanceof Player)) {
20 | Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString());
21 | return true;
22 | }
23 |
24 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender);
25 | if (!mcp.hasNotifications()) {
26 | mcp.setNotifications(true);
27 | mcp.getPlayer().sendMessage(LocalizedMessage.NOTIFICATIONS_ON.toString());
28 | return true;
29 | }
30 | mcp.setNotifications(false);
31 | mcp.getPlayer().sendMessage(LocalizedMessage.NOTIFICATIONS_OFF.toString());
32 | return true;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/message/Reply.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.message;
2 |
3 | import java.io.ByteArrayOutputStream;
4 | import java.io.DataOutputStream;
5 |
6 | import org.bukkit.command.Command;
7 | import org.bukkit.command.CommandSender;
8 | import org.bukkit.entity.Player;
9 |
10 | import me.clip.placeholderapi.PlaceholderAPI;
11 | import mineverse.Aust1n46.chat.MineverseChat;
12 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
13 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
14 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
15 | import mineverse.Aust1n46.chat.utilities.Format;
16 |
17 | public class Reply extends Command {
18 | private MineverseChat plugin = MineverseChat.getInstance();
19 |
20 | public Reply() {
21 | super("reply");
22 | }
23 |
24 | @Override
25 | public boolean execute(CommandSender sender, String command, String[] args) {
26 | if (!(sender instanceof Player)) {
27 | plugin.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString());
28 | return true;
29 | }
30 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender);
31 | if (args.length > 0) {
32 | if (mcp.hasReplyPlayer()) {
33 | if (plugin.getConfig().getBoolean("bungeecordmessaging", true)) {
34 | sendBungeeCordReply(mcp, args);
35 | return true;
36 | }
37 |
38 | MineverseChatPlayer player = MineverseChatAPI.getOnlineMineverseChatPlayer(mcp.getReplyPlayer());
39 | if (player == null) {
40 | mcp.getPlayer().sendMessage(LocalizedMessage.NO_PLAYER_TO_REPLY_TO.toString());
41 | return true;
42 | }
43 | if (!mcp.getPlayer().canSee(player.getPlayer())) {
44 | mcp.getPlayer().sendMessage(LocalizedMessage.NO_PLAYER_TO_REPLY_TO.toString());
45 | return true;
46 | }
47 | if (player.getIgnores().contains(mcp.getUUID())) {
48 | mcp.getPlayer().sendMessage(LocalizedMessage.IGNORING_MESSAGE.toString().replace("{player}", player.getName()));
49 | return true;
50 | }
51 | if (!player.getMessageToggle()) {
52 | mcp.getPlayer().sendMessage(LocalizedMessage.BLOCKING_MESSAGE.toString().replace("{player}", player.getName()));
53 | return true;
54 | }
55 | String msg = "";
56 | String echo = "";
57 | String send = "";
58 | String spy = "";
59 | if (args.length > 0) {
60 | for (int r = 0; r < args.length; r++)
61 | msg += " " + args[r];
62 | if (mcp.hasFilter()) {
63 | msg = Format.FilterChat(msg);
64 | }
65 | if (mcp.getPlayer().hasPermission("venturechat.color.legacy")) {
66 | msg = Format.FormatStringLegacyColor(msg);
67 | }
68 | if (mcp.getPlayer().hasPermission("venturechat.color")) {
69 | msg = Format.FormatStringColor(msg);
70 | }
71 | if (mcp.getPlayer().hasPermission("venturechat.format")) {
72 | msg = Format.FormatString(msg);
73 | }
74 |
75 | send = Format
76 | .FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("replyformatfrom").replaceAll("sender_", "")));
77 | echo = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("replyformatto").replaceAll("sender_", "")));
78 | spy = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("replyformatspy").replaceAll("sender_", "")));
79 |
80 | send = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(player.getPlayer(), send.replaceAll("receiver_", ""))) + msg;
81 | echo = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(player.getPlayer(), echo.replaceAll("receiver_", ""))) + msg;
82 | spy = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(player.getPlayer(), spy.replaceAll("receiver_", ""))) + msg;
83 |
84 | if (!mcp.getPlayer().hasPermission("venturechat.spy.override")) {
85 | for (MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) {
86 | if (p.getName().equals(mcp.getName()) || p.getName().equals(player.getName())) {
87 | continue;
88 | }
89 | if (p.isSpy()) {
90 | p.getPlayer().sendMessage(spy);
91 | }
92 | }
93 | }
94 | player.getPlayer().sendMessage(send);
95 | mcp.getPlayer().sendMessage(echo);
96 | if (player.hasNotifications()) {
97 | Format.playMessageSound(player);
98 | }
99 | player.setReplyPlayer(mcp.getUUID());
100 | return true;
101 | }
102 | }
103 | mcp.getPlayer().sendMessage(LocalizedMessage.NO_PLAYER_TO_REPLY_TO.toString());
104 | return true;
105 | }
106 | mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/reply").replace("{args}", "[message]"));
107 | return true;
108 | }
109 |
110 | private void sendBungeeCordReply(MineverseChatPlayer mcp, String[] args) {
111 | ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
112 | DataOutputStream out = new DataOutputStream(byteOutStream);
113 | StringBuilder msgBuilder = new StringBuilder();
114 | for (int r = 0; r < args.length; r++) {
115 | msgBuilder.append(" " + args[r]);
116 | }
117 | String msg = msgBuilder.toString();
118 | if (mcp.hasFilter()) {
119 | msg = Format.FilterChat(msg);
120 | }
121 | if (mcp.getPlayer().hasPermission("venturechat.color.legacy")) {
122 | msg = Format.FormatStringLegacyColor(msg);
123 | }
124 | if (mcp.getPlayer().hasPermission("venturechat.color")) {
125 | msg = Format.FormatStringColor(msg);
126 | }
127 | if (mcp.getPlayer().hasPermission("venturechat.format")) {
128 | msg = Format.FormatString(msg);
129 | }
130 |
131 | String send = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("replyformatfrom").replaceAll("sender_", "")));
132 | String echo = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("replyformatto").replaceAll("sender_", "")));
133 | String spy = "VentureChat:NoSpy";
134 | if (!mcp.getPlayer().hasPermission("venturechat.spy.override")) {
135 | spy = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("replyformatspy").replaceAll("sender_", "")));
136 | }
137 | try {
138 | out.writeUTF("Message");
139 | out.writeUTF("Send");
140 | out.writeUTF(MineverseChatAPI.getMineverseChatPlayer(mcp.getReplyPlayer()).getName());
141 | out.writeUTF(mcp.getUUID().toString());
142 | out.writeUTF(mcp.getName());
143 | out.writeUTF(send);
144 | out.writeUTF(echo);
145 | out.writeUTF(spy);
146 | out.writeUTF(msg);
147 | mcp.getPlayer().sendPluginMessage(plugin, MineverseChat.PLUGIN_MESSAGING_CHANNEL, byteOutStream.toByteArray());
148 | out.close();
149 | } catch (Exception e) {
150 | e.printStackTrace();
151 | }
152 | }
153 | }
154 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/message/Spy.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.message;
2 |
3 | import org.bukkit.Bukkit;
4 | import org.bukkit.command.Command;
5 | import org.bukkit.command.CommandSender;
6 | import org.bukkit.entity.Player;
7 |
8 | import mineverse.Aust1n46.chat.MineverseChat;
9 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
10 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
11 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
12 |
13 | public class Spy extends Command {
14 | public Spy() {
15 | super("spy");
16 | }
17 |
18 | @Override
19 | public boolean execute(CommandSender sender, String command, String[] args) {
20 | if (!(sender instanceof Player)) {
21 | Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString());
22 | return true;
23 | }
24 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender);
25 | if (mcp.getPlayer().hasPermission("venturechat.spy")) {
26 | if (!mcp.isSpy()) {
27 | mcp.setSpy(true);
28 | mcp.getPlayer().sendMessage(LocalizedMessage.SPY_ON.toString());
29 | MineverseChat.synchronize(mcp, true);
30 | return true;
31 | }
32 | mcp.setSpy(false);
33 | mcp.getPlayer().sendMessage(LocalizedMessage.SPY_OFF.toString());
34 | MineverseChat.synchronize(mcp, true);
35 | return true;
36 | }
37 | mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
38 | return true;
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/mute/MuteContainer.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.mute;
2 |
3 | public class MuteContainer {
4 | private String channel;
5 | private String reason;
6 | private long duration;
7 |
8 | public MuteContainer(String channel) {
9 | this(channel, 0, "");
10 | }
11 |
12 | public MuteContainer(String channel, long duration) {
13 | this(channel, duration, "");
14 | }
15 |
16 | public MuteContainer(String channel, String reason) {
17 | this(channel, 0, reason);
18 | }
19 |
20 | public MuteContainer(String channel, long duration, String reason) {
21 | this.channel = channel;
22 | this.reason = reason;
23 | this.duration = duration;
24 | }
25 |
26 | public String getChannel() {
27 | return channel;
28 | }
29 |
30 | public boolean hasReason() {
31 | return !reason.equals("");
32 | }
33 |
34 | public String getReason() {
35 | return reason;
36 | }
37 |
38 | public boolean hasDuration() {
39 | return duration > 0;
40 | }
41 |
42 | public long getDuration() {
43 | return duration;
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/mute/Muteall.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.mute;
2 |
3 | import org.bukkit.command.Command;
4 | import org.bukkit.command.CommandSender;
5 |
6 | import mineverse.Aust1n46.chat.MineverseChat;
7 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
8 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
9 | import mineverse.Aust1n46.chat.channel.ChatChannel;
10 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
11 | import mineverse.Aust1n46.chat.utilities.Format;
12 |
13 | public class Muteall extends Command {
14 | public Muteall() {
15 | super("muteall");
16 | }
17 |
18 | @Override
19 | public boolean execute(CommandSender sender, String command, String[] args) {
20 | if (sender.hasPermission("venturechat.mute")) {
21 | if (args.length < 1) {
22 | sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/muteall").replace("{args}", "[player] {reason}"));
23 | return true;
24 | }
25 | MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[0]);
26 | if (player == null || (!player.isOnline() && !sender.hasPermission("venturechat.mute.offline"))) {
27 | sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[0]));
28 | return true;
29 | }
30 | String reason = "";
31 | if (args.length > 1) {
32 | StringBuilder reasonBuilder = new StringBuilder();
33 | for (int a = 1; a < args.length; a++) {
34 | reasonBuilder.append(args[a] + " ");
35 | }
36 | reason = Format.FormatStringAll(reasonBuilder.toString().trim());
37 | }
38 | if (reason.isEmpty()) {
39 | boolean bungee = false;
40 | for (ChatChannel channel : ChatChannel.getChatChannels()) {
41 | if (channel.isMutable()) {
42 | player.addMute(channel.getName());
43 | if (channel.getBungee()) {
44 | bungee = true;
45 | }
46 | }
47 | }
48 | if (bungee) {
49 | MineverseChat.synchronize(player, true);
50 | }
51 | sender.sendMessage(LocalizedMessage.MUTE_PLAYER_ALL_SENDER.toString().replace("{player}", player.getName()));
52 | if (player.isOnline()) {
53 | player.getPlayer().sendMessage(LocalizedMessage.MUTE_PLAYER_ALL_PLAYER.toString());
54 | } else
55 | player.setModified(true);
56 | return true;
57 | } else {
58 | boolean bungee = false;
59 | for (ChatChannel channel : ChatChannel.getChatChannels()) {
60 | if (channel.isMutable()) {
61 | player.addMute(channel.getName(), reason);
62 | if (channel.getBungee()) {
63 | bungee = true;
64 | }
65 | }
66 | }
67 | if (bungee) {
68 | MineverseChat.synchronize(player, true);
69 | }
70 | sender.sendMessage(LocalizedMessage.MUTE_PLAYER_ALL_SENDER_REASON.toString().replace("{player}", player.getName()).replace("{reason}", reason));
71 | if (player.isOnline()) {
72 | player.getPlayer().sendMessage(LocalizedMessage.MUTE_PLAYER_ALL_PLAYER_REASON.toString().replace("{reason}", reason));
73 | } else
74 | player.setModified(true);
75 | return true;
76 | }
77 | } else {
78 | sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
79 | return true;
80 | }
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/mute/Unmute.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.mute;
2 |
3 | import java.io.ByteArrayOutputStream;
4 | import java.io.DataOutputStream;
5 | import java.util.ArrayList;
6 | import java.util.Collections;
7 | import java.util.List;
8 | import java.util.stream.Collectors;
9 |
10 | import org.bukkit.command.Command;
11 | import org.bukkit.command.CommandSender;
12 | import org.bukkit.entity.Player;
13 | import org.bukkit.util.StringUtil;
14 |
15 | import mineverse.Aust1n46.chat.MineverseChat;
16 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
17 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
18 | import mineverse.Aust1n46.chat.channel.ChatChannel;
19 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
20 |
21 | public class Unmute extends Command {
22 | public Unmute() {
23 | super("unmute");
24 | }
25 |
26 | @Override
27 | public boolean execute(CommandSender sender, String command, String[] args) {
28 | if (sender.hasPermission("venturechat.mute")) {
29 | if (args.length < 2) {
30 | sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/unmute").replace("{args}", "[channel] [player]"));
31 | return true;
32 | }
33 | if (ChatChannel.isChannel(args[0])) {
34 | ChatChannel channel = ChatChannel.getChannel(args[0]);
35 | if (channel.getBungee()) {
36 | sendBungeeCordUnmute(sender, args[1], channel);
37 | return true;
38 | }
39 | MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[1]);
40 | if (player == null || (!player.isOnline() && !sender.hasPermission("venturechat.mute.offline"))) {
41 | sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[1]));
42 | return true;
43 | }
44 | if (!player.isMuted(channel.getName())) {
45 | sender.sendMessage(LocalizedMessage.PLAYER_NOT_MUTED.toString().replace("{player}", player.getName()).replace("{channel_color}", channel.getColor())
46 | .replace("{channel_name}", channel.getName()));
47 | return true;
48 | }
49 | player.removeMute(channel.getName());
50 | sender.sendMessage(LocalizedMessage.UNMUTE_PLAYER_SENDER.toString().replace("{player}", player.getName()).replace("{channel_color}", channel.getColor())
51 | .replace("{channel_name}", channel.getName()));
52 | if (player.isOnline()) {
53 | player.getPlayer().sendMessage(LocalizedMessage.UNMUTE_PLAYER_PLAYER.toString().replace("{player}", player.getName())
54 | .replace("{channel_color}", channel.getColor()).replace("{channel_name}", channel.getName()));
55 | } else {
56 | player.setModified(true);
57 | }
58 | return true;
59 | }
60 | sender.sendMessage(LocalizedMessage.INVALID_CHANNEL.toString().replace("{args}", args[0]));
61 | return true;
62 | } else {
63 | sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
64 | return true;
65 | }
66 | }
67 |
68 | @Override
69 | public List tabComplete(CommandSender sender, String label, String[] args) {
70 | List completions = new ArrayList<>();
71 | if (args.length == 1) {
72 | StringUtil.copyPartialMatches(args[0], ChatChannel.getChatChannels().stream().map(ChatChannel::getName).collect(Collectors.toList()), completions);
73 | Collections.sort(completions);
74 | return completions;
75 | }
76 | if (args.length == 2) {
77 | if (ChatChannel.isChannel(args[0])) {
78 | ChatChannel chatChannelObj = ChatChannel.getChannel(args[0]);
79 | if (chatChannelObj.getBungee()) {
80 | StringUtil.copyPartialMatches(args[1], MineverseChatAPI.getNetworkPlayerNames(), completions);
81 | Collections.sort(completions);
82 | return completions;
83 | }
84 | StringUtil.copyPartialMatches(args[1], MineverseChatAPI.getOnlineMineverseChatPlayers().stream().filter(mcp -> mcp.isMuted(chatChannelObj.getName()))
85 | .map(MineverseChatPlayer::getName).collect(Collectors.toList()), completions);
86 | Collections.sort(completions);
87 | return completions;
88 | }
89 | }
90 | return Collections.emptyList();
91 | }
92 |
93 | private void sendBungeeCordUnmute(CommandSender sender, String playerToUnmute, ChatChannel channel) {
94 | ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
95 | DataOutputStream out = new DataOutputStream(byteOutStream);
96 | try {
97 | out.writeUTF("Unmute");
98 | out.writeUTF("Send");
99 | if (sender instanceof Player) {
100 | out.writeUTF(((Player) sender).getUniqueId().toString());
101 | } else {
102 | out.writeUTF("VentureChat:Console");
103 | }
104 | out.writeUTF(playerToUnmute);
105 | out.writeUTF(channel.getName());
106 | MineverseChat.sendPluginMessage(byteOutStream);
107 | out.close();
108 | } catch (Exception e) {
109 | e.printStackTrace();
110 | }
111 | }
112 | }
113 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/command/mute/Unmuteall.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.command.mute;
2 |
3 | import org.bukkit.command.Command;
4 | import org.bukkit.command.CommandSender;
5 |
6 | import mineverse.Aust1n46.chat.MineverseChat;
7 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
8 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
9 | import mineverse.Aust1n46.chat.channel.ChatChannel;
10 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
11 |
12 | public class Unmuteall extends Command {
13 | public Unmuteall() {
14 | super("unmuteall");
15 | }
16 |
17 | @Override
18 | public boolean execute(CommandSender sender, String command, String[] args) {
19 | if (sender.hasPermission("venturechat.mute")) {
20 | if (args.length < 1) {
21 | sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/unmuteall").replace("{args}", "[player]"));
22 | return true;
23 | }
24 | MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[0]);
25 | if (player == null || (!player.isOnline() && !sender.hasPermission("venturechat.mute.offline"))) {
26 | sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[0]));
27 | return true;
28 | }
29 | boolean bungee = false;
30 | for (ChatChannel channel : ChatChannel.getChatChannels()) {
31 | player.removeMute(channel.getName());
32 | if (channel.getBungee()) {
33 | bungee = true;
34 | }
35 | }
36 | if (bungee) {
37 | MineverseChat.synchronize(player, true);
38 | }
39 | sender.sendMessage(LocalizedMessage.UNMUTE_PLAYER_ALL_SENDER.toString().replace("{player}", player.getName()));
40 | if (player.isOnline()) {
41 | player.getPlayer().sendMessage(LocalizedMessage.UNMUTE_PLAYER_ALL_PLAYER.toString());
42 | } else
43 | player.setModified(true);
44 | return true;
45 | } else {
46 | sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString());
47 | return true;
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/database/Database.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.database;
2 |
3 | import java.sql.Connection;
4 | import java.sql.PreparedStatement;
5 | import java.sql.SQLException;
6 | import java.text.SimpleDateFormat;
7 | import java.util.Calendar;
8 |
9 | import org.bukkit.Bukkit;
10 | import org.bukkit.configuration.ConfigurationSection;
11 |
12 | import com.zaxxer.hikari.HikariConfig;
13 | import com.zaxxer.hikari.HikariDataSource;
14 |
15 | import mineverse.Aust1n46.chat.MineverseChat;
16 | import mineverse.Aust1n46.chat.utilities.Format;
17 |
18 | /**
19 | * Initializes and handles writing to the chat logging database.
20 | */
21 | public class Database {
22 | private static HikariDataSource dataSource = null;
23 |
24 | public static void initializeMySQL() {
25 | try {
26 | ConfigurationSection mysqlConfig = MineverseChat.getInstance().getConfig().getConfigurationSection("mysql");
27 | if (mysqlConfig.getBoolean("enabled", false)) {
28 | String host = mysqlConfig.getString("host");
29 | int port = mysqlConfig.getInt("port");
30 | String database = mysqlConfig.getString("database");
31 | String user = mysqlConfig.getString("user");
32 | String password = mysqlConfig.getString("password");
33 |
34 | final HikariConfig config = new HikariConfig();
35 | // config.setDriverClassName(org.postgresql.Driver.class.getName());
36 | // final String jdbcUrl = String.format("jdbc:postgresql://%s:%d/%s", hostname,
37 | // port, database);
38 | final String jdbcUrl = String.format("jdbc:mysql://%s:%d/%s?autoReconnect=true&useSSL=false", host,
39 | port, database);
40 | config.setJdbcUrl(jdbcUrl);
41 | config.setUsername(user);
42 | config.setPassword(password);
43 | config.addDataSourceProperty("cachePrepStmts", "true");
44 | config.addDataSourceProperty("prepStmtCacheSize", "250");
45 | config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
46 | dataSource = new HikariDataSource(config);
47 | final String SQL_CREATE_TABLE = "CREATE TABLE IF NOT EXISTS VentureChat "
48 | + "(ID SERIAL PRIMARY KEY, ChatTime TEXT, UUID TEXT, Name TEXT, "
49 | + "Server TEXT, Channel TEXT, Text TEXT, Type TEXT)";
50 | final Connection conn = dataSource.getConnection();
51 | final PreparedStatement statement = conn.prepareStatement(SQL_CREATE_TABLE);
52 | statement.executeUpdate();
53 | }
54 | } catch (Exception exception) {
55 | Bukkit.getConsoleSender().sendMessage(
56 | Format.FormatStringAll("&8[&eVentureChat&8]&c - Database could not be loaded. Is it running?"));
57 | }
58 | }
59 |
60 | public static boolean isEnabled() {
61 | return dataSource != null;
62 | }
63 |
64 | public static void writeVentureChat(String uuid, String name, String server, String channel, String text,
65 | String type) {
66 | MineverseChat plugin = MineverseChat.getInstance();
67 | Calendar currentDate = Calendar.getInstance();
68 | SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
69 | String date = formatter.format(currentDate.getTime());
70 | Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
71 | try (final Connection conn = dataSource.getConnection();
72 | final PreparedStatement statement = conn.prepareStatement(
73 | "INSERT INTO VentureChat " + "(ChatTime, UUID, Name, Server, Channel, Text, Type) "
74 | + "VALUES (?, ?, ?, ?, ?, ?, ?)")) {
75 | statement.setString(1, date);
76 | statement.setString(2, uuid);
77 | statement.setString(3, name);
78 | statement.setString(4, server);
79 | statement.setString(5, channel);
80 | statement.setString(6, text);
81 | statement.setString(7, type);
82 | statement.executeUpdate();
83 | } catch (SQLException error) {
84 | error.printStackTrace();
85 | }
86 | });
87 | }
88 | }
89 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/database/TemporaryDataInstance.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.database;
2 |
3 | import java.util.HashMap;
4 | import java.util.UUID;
5 |
6 | public class TemporaryDataInstance {
7 | private int messagePackets;
8 | private final UUID uuid;
9 |
10 | private static final HashMap temporaryDataInstances = new HashMap();
11 |
12 | private TemporaryDataInstance(UUID uuid) {
13 | this.uuid = uuid;
14 | }
15 |
16 | public static UUID createTemporaryDataInstance() {
17 | UUID uuid = UUID.randomUUID();
18 | temporaryDataInstances.put(uuid, new TemporaryDataInstance(uuid));
19 | return uuid;
20 | }
21 |
22 | public static TemporaryDataInstance getTemporaryDataInstance(UUID uuid) {
23 | return temporaryDataInstances.get(uuid);
24 | }
25 |
26 | public int getMessagePackets() {
27 | return this.messagePackets;
28 | }
29 |
30 | public void incrementMessagePackets() {
31 | this.messagePackets++;
32 | }
33 |
34 | public void destroyInstance() {
35 | temporaryDataInstances.remove(uuid);
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/gui/GuiSlot.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.gui;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | import org.bukkit.Material;
7 | import org.bukkit.configuration.ConfigurationSection;
8 |
9 | import mineverse.Aust1n46.chat.MineverseChat;
10 |
11 | public class GuiSlot {
12 | private static MineverseChat plugin = MineverseChat.getInstance();
13 | private static List guiSlots;
14 |
15 | private String text;
16 | private String command;
17 | private String permission;
18 | private Material icon;
19 | private String name;
20 | private int durability;
21 | private int slot;
22 |
23 | public GuiSlot(String name, String icon, int durability, String text, String permission, String command, int slot) {
24 | this.name = name;
25 | this.text = text;
26 | this.command = command;
27 | this.permission = "venturechat." + permission;
28 | this.icon = Material.valueOf(icon.toUpperCase());
29 | this.durability = durability;
30 | this.slot = slot;
31 | }
32 |
33 | public static void initialize() {
34 | guiSlots = new ArrayList();
35 | ConfigurationSection cs = plugin.getConfig().getConfigurationSection("venturegui");
36 | for (String key : cs.getKeys(false)) {
37 | String name = key;
38 | String icon = cs.getString(key + ".icon");
39 | int durability = cs.getInt(key + ".durability");
40 | String text = cs.getString(key + ".text");
41 | String permission = cs.getString(key + ".permission");
42 | String command = cs.getString(key + ".command");
43 | int slot = cs.getInt(key + ".slot");
44 | guiSlots.add(new GuiSlot(name, icon, durability, text, permission, command, slot));
45 | }
46 | }
47 |
48 | public static List getGuiSlots() {
49 | return guiSlots;
50 | }
51 |
52 | public String getText() {
53 | return text;
54 | }
55 |
56 | public String getCommand() {
57 | return command;
58 | }
59 |
60 | public String getPermission() {
61 | return permission;
62 | }
63 |
64 | public Material getIcon() {
65 | return icon;
66 | }
67 |
68 | public int getDurability() {
69 | return durability;
70 | }
71 |
72 | public String getName() {
73 | return name;
74 | }
75 |
76 | public int getSlot() {
77 | return slot;
78 | }
79 |
80 | public boolean hasPermission() {
81 | return !permission.equalsIgnoreCase("venturechat.none");
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/json/JsonAttribute.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.json;
2 |
3 | import java.util.List;
4 |
5 | import mineverse.Aust1n46.chat.ClickAction;
6 |
7 | public class JsonAttribute {
8 | private String name;
9 | private List hoverText;
10 | private ClickAction clickAction;
11 | private String clickText;
12 |
13 | public JsonAttribute(String name, List hoverText, ClickAction clickAction, String clickText) {
14 | this.name = name;
15 | this.hoverText = hoverText;
16 | this.clickAction = clickAction;
17 | this.clickText = clickText;
18 | }
19 |
20 | public String getName() {
21 | return name;
22 | }
23 |
24 | public List getHoverText() {
25 | return hoverText;
26 | }
27 |
28 | public ClickAction getClickAction() {
29 | return clickAction;
30 | }
31 |
32 | public String getClickText() {
33 | return clickText;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/json/JsonFormat.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.json;
2 |
3 | import java.util.ArrayList;
4 | import java.util.Collection;
5 | import java.util.HashMap;
6 | import java.util.List;
7 |
8 | import org.bukkit.configuration.ConfigurationSection;
9 |
10 | import mineverse.Aust1n46.chat.ClickAction;
11 | import mineverse.Aust1n46.chat.MineverseChat;
12 | import mineverse.Aust1n46.chat.utilities.Format;
13 |
14 | public class JsonFormat {
15 | private static MineverseChat plugin = MineverseChat.getInstance();
16 | private static HashMap jsonFormats;
17 |
18 | private List jsonAttributes;
19 | private int priority;
20 | private String name;
21 |
22 | public JsonFormat(String name, int priority, List jsonAttributes) {
23 | this.name = name;
24 | this.priority = priority;
25 | this.jsonAttributes = jsonAttributes;
26 | }
27 |
28 | public static void initialize() {
29 | jsonFormats = new HashMap();
30 | ConfigurationSection jsonFormatSection = plugin.getConfig().getConfigurationSection("jsonformatting");
31 | for (String jsonFormat : jsonFormatSection.getKeys(false)) {
32 | int priority = jsonFormatSection.getInt(jsonFormat + ".priority", 0);
33 | List jsonAttributes = new ArrayList<>();
34 | ConfigurationSection jsonAttributeSection = jsonFormatSection.getConfigurationSection(jsonFormat + ".json_attributes");
35 | if (jsonAttributeSection != null) {
36 | for (String attribute : jsonAttributeSection.getKeys(false)) {
37 | List hoverText = jsonAttributeSection.getStringList(attribute + ".hover_text");
38 | String clickActionText = jsonAttributeSection.getString(attribute + ".click_action", "none");
39 | try {
40 | ClickAction clickAction = ClickAction.valueOf(clickActionText.toUpperCase());
41 | String clickText = jsonAttributeSection.getString(attribute + ".click_text", "");
42 | jsonAttributes.add(new JsonAttribute(attribute, hoverText, clickAction, clickText));
43 | } catch (IllegalArgumentException | NullPointerException exception) {
44 | plugin.getServer().getConsoleSender()
45 | .sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - Illegal click_action: " + clickActionText + " in jsonFormat: " + jsonFormat));
46 | }
47 | }
48 | }
49 | jsonFormats.put(jsonFormat.toLowerCase(), new JsonFormat(jsonFormat, priority, jsonAttributes));
50 | }
51 | }
52 |
53 | public static Collection getJsonFormats() {
54 | return jsonFormats.values();
55 | }
56 |
57 | public static JsonFormat getJsonFormat(String name) {
58 | return jsonFormats.get(name.toLowerCase());
59 | }
60 |
61 | public String getName() {
62 | return name;
63 | }
64 |
65 | public int getPriority() {
66 | return priority;
67 | }
68 |
69 | public List getJsonAttributes() {
70 | return jsonAttributes;
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/listeners/CommandListener.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.listeners;
2 |
3 | import java.io.FileNotFoundException;
4 |
5 | import org.bukkit.Bukkit;
6 | import org.bukkit.ChatColor;
7 | import org.bukkit.Material;
8 | import org.bukkit.configuration.ConfigurationSection;
9 | import org.bukkit.entity.Player;
10 | import org.bukkit.event.EventHandler;
11 | import org.bukkit.event.EventPriority;
12 | import org.bukkit.event.Listener;
13 | import org.bukkit.event.inventory.InventoryClickEvent;
14 | import org.bukkit.event.player.PlayerCommandPreprocessEvent;
15 | import org.bukkit.event.server.ServerCommandEvent;
16 | import org.bukkit.inventory.ItemStack;
17 | import org.bukkit.inventory.meta.SkullMeta;
18 |
19 | import me.clip.placeholderapi.PlaceholderAPI;
20 | import mineverse.Aust1n46.chat.MineverseChat;
21 | import mineverse.Aust1n46.chat.alias.Alias;
22 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
23 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
24 | import mineverse.Aust1n46.chat.channel.ChatChannel;
25 | import mineverse.Aust1n46.chat.database.Database;
26 | import mineverse.Aust1n46.chat.gui.GuiSlot;
27 | import mineverse.Aust1n46.chat.localization.LocalizedMessage;
28 | import mineverse.Aust1n46.chat.utilities.Format;
29 | import mineverse.Aust1n46.chat.versions.VersionHandler;
30 |
31 | public class CommandListener implements Listener {
32 | private MineverseChat plugin = MineverseChat.getInstance();
33 |
34 | @EventHandler
35 | public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) throws FileNotFoundException {
36 | if (event.getPlayer() == null) {
37 | Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - Event.getPlayer() returned null in PlayerCommandPreprocessEvent"));
38 | return;
39 | }
40 | ConfigurationSection cs = plugin.getConfig().getConfigurationSection("commandspy");
41 | Boolean wec = cs.getBoolean("worldeditcommands", true);
42 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(event.getPlayer());
43 | if (!mcp.getPlayer().hasPermission("venturechat.commandspy.override")) {
44 | for (MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) {
45 | if (p.hasCommandSpy()) {
46 | if (wec) {
47 | p.getPlayer().sendMessage(Format.FormatStringAll(cs.getString("format").replace("{player}", mcp.getName()).replace("{command}", event.getMessage())));
48 | } else {
49 | if (!(event.getMessage().toLowerCase().startsWith("//"))) {
50 | p.getPlayer().sendMessage(Format.FormatStringAll(cs.getString("format").replace("{player}", mcp.getName()).replace("{command}", event.getMessage())));
51 | } else {
52 | if (!(event.getMessage().toLowerCase().startsWith("//"))) {
53 | p.getPlayer().sendMessage(ChatColor.GOLD + mcp.getName() + ": " + event.getMessage());
54 | }
55 | }
56 | }
57 | }
58 | }
59 | }
60 |
61 | String[] blocked = event.getMessage().split(" ");
62 | if (mcp.getBlockedCommands().contains(blocked[0])) {
63 | mcp.getPlayer().sendMessage(LocalizedMessage.BLOCKED_COMMAND.toString().replace("{command}", event.getMessage()));
64 | event.setCancelled(true);
65 | return;
66 | }
67 |
68 | String message = event.getMessage();
69 |
70 | if (Database.isEnabled()) {
71 | Database.writeVentureChat(mcp.getUUID().toString(), mcp.getName(), "Local", "Command_Component", event.getMessage().replace("'", "''"), "Command");
72 | }
73 |
74 | for (Alias a : Alias.getAliases()) {
75 | if (message.toLowerCase().substring(1).split(" ")[0].equals(a.getName().toLowerCase())) {
76 | for (String s : a.getComponents()) {
77 | if (!mcp.getPlayer().hasPermission(a.getPermission()) && a.hasPermission()) {
78 | mcp.getPlayer().sendMessage(ChatColor.RED + "You do not have permission for this alias.");
79 | event.setCancelled(true);
80 | return;
81 | }
82 | int num = 1;
83 | if (message.length() < a.getName().length() + 2 || a.getArguments() == 0)
84 | num = 0;
85 | int arg = 0;
86 | if (message.substring(a.getName().length() + 1 + num).length() == 0)
87 | arg = 1;
88 | String[] args = message.substring(a.getName().length() + 1 + num).split(" ");
89 | String send = "";
90 | if (args.length - arg < a.getArguments()) {
91 | String keyword = "arguments.";
92 | if (a.getArguments() == 1)
93 | keyword = "argument.";
94 | mcp.getPlayer().sendMessage(ChatColor.RED + "Invalid arguments for this alias, enter at least " + a.getArguments() + " " + keyword);
95 | event.setCancelled(true);
96 | return;
97 | }
98 | for (int b = 0; b < args.length; b++) {
99 | send += " " + args[b];
100 | }
101 | if (send.length() > 0)
102 | send = send.substring(1);
103 | s = Format.FormatStringAll(s);
104 | if (mcp.getPlayer().hasPermission("venturechat.color.legacy")) {
105 | send = Format.FormatStringLegacyColor(send);
106 | }
107 | if (mcp.getPlayer().hasPermission("venturechat.color")) {
108 | send = Format.FormatStringColor(send);
109 | }
110 | if (mcp.getPlayer().hasPermission("venturechat.format")) {
111 | send = Format.FormatString(send);
112 | }
113 | if (s.startsWith("Command:")) {
114 | mcp.getPlayer().chat(s.substring(9).replace("$", send));
115 | event.setCancelled(true);
116 | }
117 | if (s.startsWith("Message:")) {
118 | mcp.getPlayer().sendMessage(s.substring(9).replace("$", send));
119 | event.setCancelled(true);
120 | }
121 | if (s.startsWith("Broadcast:")) {
122 | Format.broadcastToServer(s.substring(11).replace("$", send));
123 | event.setCancelled(true);
124 | }
125 | }
126 | }
127 | }
128 | }
129 |
130 | // old 1.8 command map
131 | @EventHandler
132 | public void onServerCommand(ServerCommandEvent event) {
133 | if (Database.isEnabled()) {
134 | Database.writeVentureChat("N/A", "Console", "Local", "Command_Component", event.getCommand().replace("'", "''"), "Command");
135 | }
136 | }
137 |
138 | @SuppressWarnings("deprecation")
139 | @EventHandler(priority = EventPriority.LOW)
140 | public void InventoryClick(InventoryClickEvent e) {
141 | ItemStack item = e.getCurrentItem();
142 | if (item == null || !e.getView().getTitle().contains("VentureChat")) {
143 | return;
144 | }
145 | e.setCancelled(true);
146 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) e.getWhoClicked());
147 | String playerName = e.getView().getTitle().replace(" GUI", "").replace("VentureChat: ", "");
148 | MineverseChatPlayer target = MineverseChatAPI.getMineverseChatPlayer(playerName);
149 | ItemStack skull = e.getInventory().getItem(0);
150 | SkullMeta skullMeta = (SkullMeta) skull.getItemMeta();
151 | ChatChannel channel = ChatChannel.getChannel(ChatColor.stripColor(skullMeta.getLore().get(0)).replace("Channel: ", ""));
152 | int hash = Integer.parseInt(ChatColor.stripColor(skullMeta.getLore().get(1).replace("Hash: ", "")));
153 | if (VersionHandler.is1_7()) {
154 | if (item.getType() == Material.BEDROCK) {
155 | mcp.getPlayer().closeInventory();
156 | }
157 | } else {
158 | if (item.getType() == Material.BARRIER) {
159 | mcp.getPlayer().closeInventory();
160 | }
161 | }
162 | for (GuiSlot g : GuiSlot.getGuiSlots()) {
163 | if (g.getIcon() == item.getType() && g.getDurability() == item.getDurability() && g.getSlot() == e.getSlot()) {
164 | String command = g.getCommand().replace("{channel}", channel.getName()).replace("{hash}", hash + "");
165 | if (target != null) {
166 | command = command.replace("{player_name}", target.getName());
167 | if (target.isOnline()) {
168 | command = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(target.getPlayer(), command));
169 | }
170 | } else {
171 | command = command.replace("{player_name}", "Discord_Message");
172 | }
173 | mcp.getPlayer().chat(command);
174 | }
175 | }
176 | }
177 | }
178 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/listeners/LoginListener.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.listeners;
2 |
3 | import java.util.UUID;
4 |
5 | import org.bukkit.Bukkit;
6 | import org.bukkit.entity.Player;
7 | import org.bukkit.event.EventHandler;
8 | import org.bukkit.event.EventPriority;
9 | import org.bukkit.event.Listener;
10 | import org.bukkit.event.player.PlayerJoinEvent;
11 | import org.bukkit.event.player.PlayerQuitEvent;
12 |
13 | import mineverse.Aust1n46.chat.MineverseChat;
14 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
15 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
16 | import mineverse.Aust1n46.chat.channel.ChatChannel;
17 | import mineverse.Aust1n46.chat.database.PlayerData;
18 | import mineverse.Aust1n46.chat.utilities.Format;
19 | import mineverse.Aust1n46.chat.utilities.UUIDFetcher;
20 |
21 | /**
22 | * Manages player login and logout events.
23 | *
24 | * @author Aust1n46
25 | */
26 | public class LoginListener implements Listener {
27 | private MineverseChat plugin = MineverseChat.getInstance();
28 |
29 | @EventHandler(priority = EventPriority.LOW)
30 | public void onPlayerQuit(PlayerQuitEvent playerQuitEvent) {
31 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(playerQuitEvent.getPlayer());
32 | PlayerData.savePlayerData(mcp);
33 | mcp.clearMessages();
34 | mcp.setOnline(false);
35 | MineverseChatAPI.removeMineverseChatOnlinePlayerToMap(mcp);
36 | }
37 |
38 | void handleNameChange(MineverseChatPlayer mcp, Player eventPlayerInstance) {
39 | Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Detected Name Change. Old Name:&c " + mcp.getName() + " &eNew Name:&c " + eventPlayerInstance.getName()));
40 | MineverseChatAPI.removeNameFromMap(mcp.getName());
41 | mcp.setName(eventPlayerInstance.getName());
42 | MineverseChatAPI.addNameToMap(mcp);
43 | }
44 |
45 | @EventHandler(priority = EventPriority.LOW)
46 | public void onPlayerJoin(PlayerJoinEvent event) throws Exception {
47 | MineverseChatPlayer mcp = MineverseChatAPI.getMineverseChatPlayer(event.getPlayer());
48 | Player player = event.getPlayer();
49 | String name = player.getName();
50 | if(mcp == null) {
51 | UUID uuid = player.getUniqueId();
52 | mcp = new MineverseChatPlayer(uuid, name);
53 | MineverseChatAPI.addMineverseChatPlayerToMap(mcp);
54 | MineverseChatAPI.addNameToMap(mcp);
55 | }
56 | UUIDFetcher.checkOfflineUUIDWarning(mcp.getUUID());
57 | //check for name change
58 | if(!mcp.getName().equals(name)) {
59 | handleNameChange(mcp, event.getPlayer());
60 | }
61 | mcp.setOnline(true);
62 | mcp.setHasPlayed(false);
63 | MineverseChatAPI.addMineverseChatOnlinePlayerToMap(mcp);
64 | mcp.setJsonFormat();
65 | for(ChatChannel ch : ChatChannel.getAutojoinList()) {
66 | if(ch.hasPermission()) {
67 | if(mcp.getPlayer().hasPermission(ch.getPermission())) {
68 | mcp.addListening(ch.getName());
69 | }
70 | }
71 | else {
72 | mcp.addListening(ch.getName());
73 | }
74 | }
75 |
76 | if (MineverseChat.isConnectedToProxy()) {
77 | long delayInTicks = 20L;
78 | final MineverseChatPlayer sync = mcp;
79 | plugin.getServer().getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() {
80 | public void run() {
81 | MineverseChat.synchronize(sync, false);
82 | }
83 | }, delayInTicks);
84 | }
85 | }
86 | }
87 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/listeners/PacketListenerLegacyChat.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.listeners;
2 |
3 | import mineverse.Aust1n46.chat.ChatMessage;
4 | import mineverse.Aust1n46.chat.MineverseChat;
5 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
6 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
7 | import mineverse.Aust1n46.chat.utilities.Format;
8 | import mineverse.Aust1n46.chat.versions.VersionHandler;
9 |
10 | import com.comphenix.protocol.PacketType;
11 | import com.comphenix.protocol.events.ListenerPriority;
12 | import com.comphenix.protocol.events.PacketAdapter;
13 | import com.comphenix.protocol.events.PacketContainer;
14 | import com.comphenix.protocol.events.PacketEvent;
15 | import com.comphenix.protocol.wrappers.WrappedChatComponent;
16 |
17 | public class PacketListenerLegacyChat extends PacketAdapter {
18 | public PacketListenerLegacyChat() {
19 | super(MineverseChat.getInstance(), ListenerPriority.MONITOR, new PacketType[] { PacketType.Play.Server.CHAT });
20 | }
21 |
22 | @Override
23 | public void onPacketSending(PacketEvent event) {
24 | if(event.isCancelled()) {
25 | return;
26 | }
27 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(event.getPlayer());
28 | if(mcp == null) {
29 | return;
30 | }
31 |
32 | PacketContainer packet = event.getPacket();
33 | WrappedChatComponent chat = packet.getChatComponents().read(0);
34 | if(chat == null) {
35 | return;
36 | }
37 | try {
38 | if(VersionHandler.is1_7()) {
39 | packet.getBooleans().getField(0).setAccessible(true);
40 | if(!((boolean) packet.getBooleans().getField(0).get(packet.getHandle()))) {
41 | return;
42 | }
43 | }
44 | else if(VersionHandler.is1_8() || VersionHandler.is1_9() || VersionHandler.is1_10() || VersionHandler.is1_11()) {
45 | packet.getBytes().getField(0).setAccessible(true);
46 | if(((Byte) packet.getBytes().getField(0).get(packet.getHandle())).intValue() > 1) {
47 | return;
48 | }
49 | }
50 | else {
51 | packet.getChatTypes().getField(0).setAccessible(true);
52 | if(packet.getChatTypes().getField(0).get(packet.getHandle()) == packet.getChatTypes().getField(0).getType().getEnumConstants()[2]) {
53 | return;
54 | }
55 | }
56 | }
57 | catch(Exception e) {
58 | e.printStackTrace();
59 | }
60 | String message = Format.toPlainText(chat.getHandle(), chat.getHandleType());
61 | String coloredMessage = Format.toColoredText(chat.getHandle(), chat.getHandleType());
62 | if(message == null) {
63 | return;
64 | }
65 | int hash = message.hashCode();
66 | mcp.addMessage(new ChatMessage(chat, message, coloredMessage, hash));
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/listeners/SignListener.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.listeners;
2 |
3 | import org.bukkit.event.EventHandler;
4 | import org.bukkit.event.EventPriority;
5 | import org.bukkit.event.Listener;
6 | import org.bukkit.event.block.SignChangeEvent;
7 |
8 | import mineverse.Aust1n46.chat.MineverseChat;
9 | import mineverse.Aust1n46.chat.api.MineverseChatAPI;
10 | import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
11 | import mineverse.Aust1n46.chat.utilities.Format;
12 |
13 | //This class listens for text being added to signs, and it formats them to allow colors and formatting.
14 | public class SignListener implements Listener {
15 | MineverseChat plugin = MineverseChat.getInstance();
16 |
17 | @EventHandler(priority = EventPriority.HIGH)
18 | public void onSignChange(SignChangeEvent event) {
19 | MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(event.getPlayer());
20 | for(int a = 0; a < event.getLines().length; a++) {
21 | String line = event.getLine(a);
22 | if(mcp.getPlayer().hasPermission("venturechat.color.legacy")) {
23 | line = Format.FormatStringLegacyColor(line);
24 | }
25 | if(mcp.getPlayer().hasPermission("venturechat.color")) {
26 | line = Format.FormatStringColor(line);
27 | }
28 | if(mcp.getPlayer().hasPermission("venturechat.format")) {
29 | line = Format.FormatString(line);
30 | }
31 | event.setLine(a, line);
32 | }
33 | }
34 | }
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/localization/InternalMessage.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.localization;
2 |
3 | import mineverse.Aust1n46.chat.utilities.Format;
4 |
5 | /**
6 | * Messages internal to the plugin
7 | */
8 | public enum InternalMessage {
9 | EMPTY_STRING(""),
10 | VENTURECHAT_AUTHOR("&6Written by Aust1n46"),
11 | VENTURECHAT_VERSION("&6VentureChat Version: {version}");
12 |
13 | private final String message;
14 |
15 | InternalMessage(String message) {
16 | this.message = message;
17 | }
18 |
19 | @Override
20 | public String toString() {
21 | return Format.FormatStringAll(this.message);
22 | }
23 | }
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/localization/Localization.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.localization;
2 |
3 | import java.io.File;
4 |
5 | import mineverse.Aust1n46.chat.MineverseChat;
6 | import mineverse.Aust1n46.chat.utilities.Format;
7 |
8 | import org.bukkit.Bukkit;
9 | import org.bukkit.configuration.file.FileConfiguration;
10 | import org.bukkit.configuration.file.YamlConfiguration;
11 |
12 | //This class is used to create objects of localization for different languages.
13 | public class Localization {
14 | private static MineverseChat plugin = MineverseChat.getInstance();
15 | private static FileConfiguration localization;
16 |
17 | private static final String VERSION = "2.22.4";
18 |
19 | public static void initialize() {
20 | File localizationFile = new File(plugin.getDataFolder().getAbsolutePath(), "Messages.yml");
21 | if(!localizationFile.isFile()) {
22 | plugin.saveResource("Messages.yml", true);
23 | }
24 |
25 | localization = YamlConfiguration.loadConfiguration(localizationFile);
26 |
27 | String fileVersion = localization.getString("Version", "null");
28 |
29 | if(!fileVersion.equals(VERSION)) {
30 | Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Version Change Detected! Saving Old Messages.yml and Generating Latest File"));
31 | localizationFile.renameTo(new File(plugin.getDataFolder().getAbsolutePath(), "Messages_Old_" + fileVersion + ".yml"));
32 | plugin.saveResource("Messages.yml", true);
33 | localization = YamlConfiguration.loadConfiguration(localizationFile);
34 | }
35 | }
36 |
37 | public static FileConfiguration getLocalization() {
38 | return localization;
39 | }
40 | }
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/localization/LocalizedMessage.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.localization;
2 |
3 | import mineverse.Aust1n46.chat.utilities.Format;
4 |
5 | /**
6 | * Messages configurable in Messages.yml file.
7 | */
8 | public enum LocalizedMessage {
9 | BLOCK_COMMAND_PLAYER("BlockCommandPlayer"),
10 | BLOCK_COMMAND_SENDER("BlockCommandSender"),
11 | BLOCKED_COMMAND("BlockedCommand"),
12 | BLOCKING_MESSAGE("BlockingMessage"),
13 | BUNGEE_TOGGLE_OFF("BungeeToggleOff"),
14 | BUNGEE_TOGGLE_ON("BungeeToggleOn"),
15 | CLEAR_CHAT_SENDER("ClearChatSender"),
16 | CLEAR_CHAT_SERVER("ClearChatServer"),
17 | CHANNEL_CANNOT_MUTE("ChannelCannotMute"),
18 | CHANNEL_COOLDOWN("ChannelCooldown"),
19 | CHANNEL_LIST("ChannelList"),
20 | CHANNEL_LIST_HEADER("ChannelListHeader"),
21 | CHANNEL_LIST_WITH_PERMISSIONS("ChannelListWithPermissions"),
22 | CHANNEL_NO_PERMISSION("ChannelNoPermission"),
23 | CHANNEL_NO_PERMISSION_VIEW("ChannelNoPermissionView"),
24 | CHANNEL_NO_SPEAK_PERMISSIONS("ChannelNoSpeakPermissions"),
25 | CHANNEL_PLAYER_LIST_HEADER("ChannelPlayerListHeader"),
26 | CHANNEL_MUTED("ChannelMuted"),
27 | CHANNEL_MUTED_REASON("ChannelMutedReason"),
28 | CHANNEL_MUTED_TIMED("ChannelMutedTimed"),
29 | CHANNEL_MUTED_TIMED_REASON("ChannelMutedTimedReason"),
30 | COMMAND_INVALID_ARGUMENTS("CommandInvalidArguments"),
31 | COMMAND_INVALID_ARGUMENTS_IGNORE("CommandInvalidArgumentsIgnore"),
32 | COMMAND_MUST_BE_RUN_BY_PLAYER("CommandMustBeRunByPlayer"),
33 | COMMAND_NO_PERMISSION("CommandNoPermission"),
34 | COMMAND_NOT_BLOCKABLE("CommandNotBlockable"),
35 | COMMANDSPY_OFF("CommandSpyOff"),
36 | COMMANDSPY_ON("CommandSpyOn"),
37 | CONFIG_RELOADED("ConfigReloaded"),
38 | ENTER_PRIVATE_CONVERSATION("EnterPrivateConversation"),
39 | ENTER_PRIVATE_CONVERSATION_SPY("EnterPrivateConversationSpy"),
40 | EXIT_PRIVATE_CONVERSATION("ExitPrivateConversation"),
41 | EXIT_PRIVATE_CONVERSATION_SPY("ExitPrivateConversationSpy"),
42 | FILTER_OFF("FilterOff"),
43 | FILTER_ON("FilterOn"),
44 | FORCE_ALL("ForceAll"),
45 | FORCE_PLAYER("ForcePlayer"),
46 | IGNORE_LIST_HEADER("IgnoreListHeader"),
47 | IGNORE_PLAYER_CANT("IgnorePlayerCant"),
48 | IGNORE_PLAYER_OFF("IgnorePlayerOff"),
49 | IGNORE_PLAYER_ON("IgnorePlayerOn"),
50 | IGNORE_YOURSELF("IgnoreYourself"),
51 | IGNORING_MESSAGE("IgnoringMessage"),
52 | INVALID_CHANNEL("InvalidChannel"),
53 | INVALID_HASH("InvalidHash"),
54 | INVALID_TIME("InvalidTime"),
55 | KICK_CHANNEL("KickChannel"),
56 | KICK_CHANNEL_ALL_PLAYER("KickChannelAllPlayer"),
57 | KICK_CHANNEL_ALL_SENDER("KickChannelAllSender"),
58 | LEAVE_CHANNEL("LeaveChannel"),
59 | LISTEN_CHANNEL("ListenChannel"),
60 | MESSAGE_TOGGLE_OFF("MessageToggleOff"),
61 | MESSAGE_TOGGLE_ON("MessageToggleOn"),
62 | MUST_LISTEN_ONE_CHANNEL("MustListenOneChannel"),
63 | MUTE_PLAYER_ALL_PLAYER("MutePlayerAllPlayer"),
64 | MUTE_PLAYER_ALL_PLAYER_REASON("MutePlayerAllPlayerReason"),
65 | MUTE_PLAYER_ALL_SENDER("MutePlayerAllSender"),
66 | MUTE_PLAYER_ALL_SENDER_REASON("MutePlayerAllSenderReason"),
67 | MUTE_PLAYER_PLAYER("MutePlayerPlayer"),
68 | MUTE_PLAYER_PLAYER_TIME("MutePlayerPlayerTime"),
69 | MUTE_PLAYER_PLAYER_TIME_REASON("MutePlayerPlayerTimeReason"),
70 | MUTE_PLAYER_PLAYER_REASON("MutePlayerPlayerReason"),
71 | MUTE_PLAYER_SPAM("MutePlayerSpam"),
72 | MUTE_PLAYER_SPAM_TIME("MutePlayerSpamTime"),
73 | MUTE_PLAYER_SENDER("MutePlayerSender"),
74 | MUTE_PLAYER_SENDER_REASON("MutePlayerSenderReason"),
75 | MUTE_PLAYER_SENDER_TIME("MutePlayerSenderTime"),
76 | MUTE_PLAYER_SENDER_TIME_REASON("MutePlayerSenderTimeReason"),
77 | NO_PLAYER_TO_REPLY_TO("NoPlayerToReplyTo"),
78 | NOTIFICATIONS_OFF("NotificationsOff"),
79 | NOTIFICATIONS_ON("NotificationsOn"),
80 | PLAYER_ALREADY_MUTED("PlayerAlreadyMuted"),
81 | PLAYER_NOT_MUTED("PlayerNotMuted"),
82 | PLAYER_OFFLINE("PlayerOffline"),
83 | PLAYER_OFFLINE_NO_PERMISSIONS_CHECK("PlayerOfflineNoPermissionsCheck"),
84 | RANGED_SPY_OFF("RangedSpyOff"),
85 | RANGED_SPY_ON("RangedSpyOn"),
86 | SET_CHANNEL("SetChannel"),
87 | SET_CHANNEL_ALL_PLAYER("SetChannelAllPlayer"),
88 | SET_CHANNEL_ALL_SENDER("SetChannelAllSender"),
89 | SET_CHANNEL_PLAYER_CHANNEL_NO_PERMISSION("SetChannelPlayerChannelNoPermission"),
90 | SET_CHANNEL_SENDER("SetChannelSender"),
91 | SPAM_MUTE_REASON_TEXT("SpamMuteReasonText"),
92 | SPAM_WARNING("SpamWarning"),
93 | SPY_OFF("SpyOff"),
94 | SPY_ON("SpyOn"),
95 | UNBLOCK_COMMAND_PLAYER("UnblockCommandPlayer"),
96 | UNBLOCK_COMMAND_SENDER("UnblockCommandSender"),
97 | UNITS_DAY_PLURAL("UnitsDayPlural"),
98 | UNITS_DAY_SINGULAR("UnitsDaySingular"),
99 | UNITS_HOUR_PLURAL("UnitsHourPlural"),
100 | UNITS_HOUR_SINGULAR("UnitsHourSingular"),
101 | UNITS_MINUTE_PLURAL("UnitsMinutePlural"),
102 | UNITS_MINUTE_SINGULAR("UnitsMinuteSingular"),
103 | UNITS_SECOND_PLURAL("UnitsSecondPlural"),
104 | UNITS_SECOND_SINGULAR("UnitsSecondSingular"),
105 | UNMUTE_PLAYER_ALL_PLAYER("UnmutePlayerAllPlayer"),
106 | UNMUTE_PLAYER_ALL_SENDER("UnmutePlayerAllSender"),
107 | UNMUTE_PLAYER_PLAYER("UnmutePlayerPlayer"),
108 | UNMUTE_PLAYER_SENDER("UnmutePlayerSender");
109 |
110 | private final String message;
111 |
112 | LocalizedMessage(String message) {
113 | this.message = message;
114 | }
115 |
116 | @Override
117 | public String toString() {
118 | return Format.FormatStringAll(Localization.getLocalization().getString(this.message));
119 | }
120 | }
121 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/proxy/VentureChatBungee.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.proxy;
2 |
3 | import java.io.ByteArrayOutputStream;
4 | import java.io.DataOutputStream;
5 | import java.io.File;
6 | import java.nio.file.Files;
7 | import java.util.List;
8 | import java.util.stream.Collectors;
9 |
10 | import mineverse.Aust1n46.chat.database.ProxyPlayerData;
11 | import mineverse.Aust1n46.chat.utilities.Format;
12 | import mineverse.Aust1n46.chat.utilities.UUIDFetcher;
13 | import net.md_5.bungee.api.ProxyServer;
14 | import net.md_5.bungee.api.chat.TextComponent;
15 | import net.md_5.bungee.api.config.ServerInfo;
16 | import net.md_5.bungee.api.connection.ProxiedPlayer;
17 | import net.md_5.bungee.api.connection.Server;
18 | import net.md_5.bungee.api.event.PluginMessageEvent;
19 | import net.md_5.bungee.api.event.PostLoginEvent;
20 | import net.md_5.bungee.api.event.ServerDisconnectEvent;
21 | import net.md_5.bungee.api.event.ServerSwitchEvent;
22 | import net.md_5.bungee.api.plugin.Listener;
23 | import net.md_5.bungee.api.plugin.Plugin;
24 | import net.md_5.bungee.config.Configuration;
25 | import net.md_5.bungee.config.ConfigurationProvider;
26 | import net.md_5.bungee.config.YamlConfiguration;
27 | import net.md_5.bungee.event.EventHandler;
28 |
29 | /**
30 | * VentureChat Minecraft plugin for BungeeCord.
31 | *
32 | * @author Aust1n46
33 | */
34 | public class VentureChatBungee extends Plugin implements Listener, VentureChatProxySource {
35 | private static Configuration bungeeConfig;
36 | private File bungeePlayerDataDirectory;
37 |
38 | @Override
39 | public void onEnable() {
40 | if(!getDataFolder().exists()) {
41 | getDataFolder().mkdir();
42 | }
43 | File config = new File(getDataFolder(), "bungeeconfig.yml");
44 | try {
45 | if(!config.exists()) {
46 | Files.copy(getResourceAsStream("bungeeconfig.yml"), config.toPath());
47 | }
48 | bungeeConfig = ConfigurationProvider.getProvider(YamlConfiguration.class).load(new File(getDataFolder(), "bungeeconfig.yml"));
49 | }
50 | catch(Exception e) {
51 | e.printStackTrace();
52 | }
53 |
54 | bungeePlayerDataDirectory = new File(getDataFolder().getAbsolutePath() + "/PlayerData");
55 | ProxyPlayerData.loadLegacyBungeePlayerData(bungeePlayerDataDirectory, this);
56 | ProxyPlayerData.loadProxyPlayerData(bungeePlayerDataDirectory, this);
57 |
58 | this.getProxy().registerChannel(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_STRING);
59 | this.getProxy().getPluginManager().registerListener(this, this);
60 | }
61 |
62 | @Override
63 | public void onDisable() {
64 | ProxyPlayerData.saveProxyPlayerData(bungeePlayerDataDirectory, this);
65 | }
66 |
67 | @EventHandler
68 | public void onPlayerJoin(ServerSwitchEvent event) {
69 | updatePlayerNames();
70 | }
71 |
72 | @EventHandler
73 | public void onPlayerLeave(ServerDisconnectEvent event) {
74 | updatePlayerNames();
75 | }
76 |
77 | @EventHandler
78 | public void onPlayerJoinNetwork(PostLoginEvent event) {
79 | UUIDFetcher.checkOfflineUUIDWarningProxy(event.getPlayer().getUniqueId(), this);
80 | }
81 |
82 | private void updatePlayerNames() {
83 | try {
84 | ByteArrayOutputStream outstream = new ByteArrayOutputStream();
85 | DataOutputStream out = new DataOutputStream(outstream);
86 | out.writeUTF("PlayerNames");
87 | out.writeInt(getProxy().getPlayers().size());
88 | for(ProxiedPlayer pp : getProxy().getPlayers()) {
89 | out.writeUTF(pp.getName());
90 | }
91 |
92 | for(String send : getProxy().getServers().keySet()) {
93 | if(getProxy().getServers().get(send).getPlayers().size() > 0) {
94 | getProxy().getServers().get(send).sendData(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_STRING, outstream.toByteArray());
95 | }
96 | }
97 | }
98 | catch(Exception e) {
99 | e.printStackTrace();
100 | }
101 | }
102 |
103 | @EventHandler
104 | public void onPluginMessage(PluginMessageEvent event) {
105 | if(!event.getTag().equals(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_STRING) && !event.getTag().contains("viaversion:")) {
106 | return;
107 | }
108 | // Critical to prevent client from sending or receiving messages
109 | event.setCancelled(true);
110 |
111 | if(!(event.getSender() instanceof Server)) {
112 | return;
113 | }
114 | String serverName = ((Server) event.getSender()).getInfo().getName();
115 | VentureChatProxy.onPluginMessage(event.getData(), serverName, this);
116 | }
117 |
118 | @Override
119 | public void sendPluginMessage(String serverName, byte[] data) {
120 | getProxy().getServers().get(serverName).sendData(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_STRING, data);
121 | }
122 |
123 | @Override
124 | public List getServers() {
125 | return getProxy().getServers().values().stream().map(bungeeServer -> new VentureChatProxyServer(bungeeServer.getName(), bungeeServer.getPlayers().isEmpty())).collect(Collectors.toList());
126 | }
127 |
128 | @Override
129 | public VentureChatProxyServer getServer(String serverName) {
130 | ServerInfo server = (ServerInfo) getProxy().getServers().get(serverName);
131 | return new VentureChatProxyServer(serverName, server.getPlayers().isEmpty());
132 | }
133 |
134 | @Override
135 | public void sendConsoleMessage(String message) {
136 | ProxyServer.getInstance().getConsole().sendMessage(TextComponent.fromLegacyText(Format.FormatStringAll(message)));
137 | }
138 |
139 | @Override
140 | public boolean isOfflineServerAcknowledgementSet() {
141 | return bungeeConfig.getBoolean("offline_server_acknowledgement");
142 | }
143 | }
144 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/proxy/VentureChatProxyServer.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.proxy;
2 |
3 | public class VentureChatProxyServer {
4 | private String name;
5 | private boolean empty;
6 |
7 | public VentureChatProxyServer(String name, boolean empty) {
8 | this.name = name;
9 | this.empty = empty;
10 | }
11 |
12 | public boolean isEmpty() {
13 | return empty;
14 | }
15 |
16 | public String getName() {
17 | return name;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/proxy/VentureChatProxySource.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.proxy;
2 |
3 | import java.util.List;
4 |
5 | public interface VentureChatProxySource {
6 | public void sendPluginMessage(String serverName, byte[] data);
7 |
8 | public List getServers();
9 |
10 | public VentureChatProxyServer getServer(String serverName);
11 |
12 | public void sendConsoleMessage(String message);
13 |
14 | public boolean isOfflineServerAcknowledgementSet();
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/proxy/VentureChatVelocity.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.proxy;
2 |
3 | import java.io.ByteArrayOutputStream;
4 | import java.io.DataOutputStream;
5 | import java.io.File;
6 | import java.io.IOException;
7 | import java.nio.file.Files;
8 | import java.nio.file.Path;
9 | import java.util.List;
10 | import java.util.Optional;
11 | import java.util.concurrent.TimeUnit;
12 | import java.util.stream.Collectors;
13 |
14 | import org.slf4j.Logger;
15 |
16 | import com.google.inject.Inject;
17 | import com.velocitypowered.api.event.Subscribe;
18 | import com.velocitypowered.api.event.connection.DisconnectEvent;
19 | import com.velocitypowered.api.event.connection.PluginMessageEvent;
20 | import com.velocitypowered.api.event.connection.PluginMessageEvent.ForwardResult;
21 | import com.velocitypowered.api.event.player.ServerPostConnectEvent;
22 | import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
23 | import com.velocitypowered.api.event.proxy.ProxyShutdownEvent;
24 | import com.velocitypowered.api.plugin.annotation.DataDirectory;
25 | import com.velocitypowered.api.proxy.Player;
26 | import com.velocitypowered.api.proxy.ProxyServer;
27 | import com.velocitypowered.api.proxy.ServerConnection;
28 | import com.velocitypowered.api.proxy.messages.ChannelIdentifier;
29 | import com.velocitypowered.api.proxy.messages.MinecraftChannelIdentifier;
30 | import com.velocitypowered.api.proxy.server.RegisteredServer;
31 |
32 | import mineverse.Aust1n46.chat.database.ProxyPlayerData;
33 | import mineverse.Aust1n46.chat.utilities.Format;
34 | import net.md_5.bungee.config.Configuration;
35 | import net.md_5.bungee.config.ConfigurationProvider;
36 | import net.md_5.bungee.config.YamlConfiguration;
37 |
38 | /**
39 | * VentureChat Minecraft plugin for Velocity.
40 | *
41 | * @author Aust1n46
42 | */
43 | public class VentureChatVelocity implements VentureChatProxySource {
44 | private final ProxyServer proxyServer;
45 | private final ChannelIdentifier channelIdentifier = MinecraftChannelIdentifier.create(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_NAMESPACE, VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_NAME);
46 | private final Logger logger;
47 |
48 | @Inject
49 | @DataDirectory
50 | private Path dataPath;
51 | private File velocityPlayerDataDirectory;
52 |
53 | private static Configuration velocityConfig;
54 |
55 | @Inject
56 | public VentureChatVelocity(ProxyServer server, Logger logger) {
57 | this.proxyServer = server;
58 | this.logger = logger;
59 | }
60 |
61 | public static Configuration getVelocityConfig() {
62 | return velocityConfig;
63 | }
64 |
65 | @Subscribe
66 | public void onInitialize(ProxyInitializeEvent event) {
67 | proxyServer.getChannelRegistrar().register(channelIdentifier);
68 |
69 | File dataFolder = dataPath.toFile();
70 | if(!dataFolder.exists()) {
71 | dataFolder.mkdir();
72 | }
73 | File config = new File(dataFolder, "velocityconfig.yml");
74 | try {
75 | if(!config.exists()) {
76 | Files.copy(getClass().getClassLoader().getResourceAsStream("velocityconfig.yml"), config.toPath());
77 | }
78 | velocityConfig = ConfigurationProvider.getProvider(YamlConfiguration.class).load(new File(dataFolder, "velocityconfig.yml"));
79 | }
80 | catch(Exception e) {
81 | e.printStackTrace();
82 | }
83 |
84 | velocityPlayerDataDirectory = new File(dataPath.toAbsolutePath().toString() + "/PlayerData");
85 | ProxyPlayerData.loadProxyPlayerData(velocityPlayerDataDirectory, this);
86 | }
87 |
88 | @Subscribe
89 | public void onShutdown(ProxyShutdownEvent event) {
90 | ProxyPlayerData.saveProxyPlayerData(velocityPlayerDataDirectory, this);
91 | }
92 |
93 | @Subscribe
94 | public void onPlayerJoin(ServerPostConnectEvent event) {
95 | updatePlayerNames();
96 | }
97 |
98 | @Subscribe
99 | public void onPlayerQuit(DisconnectEvent event) {
100 | // Delay sending plugin message to make sure disconnecting player is truly disconnected.
101 | proxyServer.getScheduler().buildTask(this, () -> {
102 | updatePlayerNames();
103 | })
104 | .delay(1, TimeUnit.SECONDS)
105 | .schedule();
106 | }
107 |
108 | private void updatePlayerNames() {
109 | try {
110 | ByteArrayOutputStream outstream = new ByteArrayOutputStream();
111 | DataOutputStream out = new DataOutputStream(outstream);
112 | out.writeUTF("PlayerNames");
113 | out.writeInt(proxyServer.getPlayerCount());
114 | for(Player player : proxyServer.getAllPlayers()) {
115 | out.writeUTF(player.getUsername());
116 | }
117 | getServers().forEach(send -> {
118 | if(!send.isEmpty()) {
119 | sendPluginMessage(send.getName(), outstream.toByteArray());
120 | }
121 | });
122 | }
123 | catch(IllegalStateException e) {
124 | sendConsoleMessage("Velocity being finicky with DisconnectEvent.");
125 | }
126 | catch (IOException e) {
127 | e.printStackTrace();
128 | }
129 | }
130 |
131 | @Subscribe
132 | public void onPluginMessage(PluginMessageEvent event) {
133 | String channelIdentifierId = event.getIdentifier().getId();
134 | if(!channelIdentifierId.equals(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_STRING) && !channelIdentifierId.contains("viaversion:")) {
135 | return;
136 | }
137 | // Critical to prevent client from sending or receiving messages
138 | event.setResult(ForwardResult.handled());
139 |
140 | if(!(event.getSource() instanceof ServerConnection)) {
141 | return;
142 | }
143 | String serverName = ((ServerConnection) event.getSource()).getServerInfo().getName();
144 | VentureChatProxy.onPluginMessage(event.getData(), serverName, this);
145 | }
146 |
147 | @Override
148 | public void sendPluginMessage(String serverName, byte[] data) {
149 | Optional server = proxyServer.getServer(serverName);
150 | if(server.isPresent()) {
151 | server.get().sendPluginMessage(channelIdentifier, data);
152 | }
153 | }
154 |
155 | @Override
156 | public List getServers() {
157 | return proxyServer.getAllServers().stream().map(velocityServer -> new VentureChatProxyServer(velocityServer.getServerInfo().getName(), velocityServer.getPlayersConnected().isEmpty())).collect(Collectors.toList());
158 | }
159 |
160 | @Override
161 | public VentureChatProxyServer getServer(String serverName) {
162 | RegisteredServer server = proxyServer.getServer(serverName).get();
163 | return new VentureChatProxyServer(serverName, server.getPlayersConnected().isEmpty());
164 | }
165 |
166 | @Override
167 | public void sendConsoleMessage(String message) {
168 | logger.info(Format.stripColor(message));
169 | }
170 |
171 | @Override
172 | public boolean isOfflineServerAcknowledgementSet() {
173 | return velocityConfig.getBoolean("offline_server_acknowledgement");
174 | }
175 | }
176 |
--------------------------------------------------------------------------------
/src/main/java/mineverse/Aust1n46/chat/utilities/UUIDFetcher.java:
--------------------------------------------------------------------------------
1 | package mineverse.Aust1n46.chat.utilities;
2 |
3 | import java.io.InputStreamReader;
4 | import java.io.OutputStream;
5 | import java.net.HttpURLConnection;
6 | import java.net.URL;
7 | import java.nio.ByteBuffer;
8 | import java.util.Arrays;
9 | import java.util.HashMap;
10 | import java.util.List;
11 | import java.util.Map;
12 | import java.util.UUID;
13 | import java.util.concurrent.Callable;
14 |
15 | import org.bukkit.Bukkit;
16 | import org.json.simple.JSONArray;
17 | import org.json.simple.JSONObject;
18 | import org.json.simple.parser.JSONParser;
19 |
20 | import com.google.common.collect.ImmutableList;
21 |
22 | import mineverse.Aust1n46.chat.MineverseChat;
23 | import mineverse.Aust1n46.chat.proxy.VentureChatProxySource;
24 |
25 | public class UUIDFetcher implements Callable