Skip to content

Commit 3184d23

Browse files
committed
3.2.2 Added Command to Disable Player Mention for Self
1 parent 94e2738 commit 3184d23

File tree

14 files changed

+407
-13
lines changed

14 files changed

+407
-13
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>com.loohp</groupId>
66
<artifactId>InteractiveChat</artifactId>
7-
<version>3.2.1</version>
7+
<version>3.2.2</version>
88
<build>
99
<sourceDirectory>src</sourceDirectory>
1010
<resources>

src/com/loohp/interactivechat/Bungee/InteractiveChatBungee.java

Lines changed: 70 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.io.File;
44
import java.io.IOException;
55
import java.io.InputStream;
6+
import java.io.StringWriter;
67
import java.lang.reflect.Field;
78
import java.net.SocketAddress;
89
import java.nio.ByteBuffer;
@@ -69,6 +70,7 @@
6970
import net.md_5.bungee.api.event.ServerSwitchEvent;
7071
import net.md_5.bungee.api.plugin.Listener;
7172
import net.md_5.bungee.api.plugin.Plugin;
73+
import net.md_5.bungee.config.Configuration;
7274
import net.md_5.bungee.config.ConfigurationProvider;
7375
import net.md_5.bungee.config.YamlConfiguration;
7476
import net.md_5.bungee.event.EventHandler;
@@ -78,8 +80,10 @@
7880

7981
public class InteractiveChatBungee extends Plugin implements Listener {
8082

81-
public static net.md_5.bungee.config.Configuration configuration = null;
82-
public static ConfigurationProvider config = null;
83+
public static Configuration config = null;
84+
public static ConfigurationProvider yamlConfigProvider = null;
85+
public static File configFile;
86+
public static File playerDataFolder;
8387

8488
public static Plugin plugin;
8589
public static Metrics metrics;
@@ -104,15 +108,19 @@ public class InteractiveChatBungee extends Plugin implements Listener {
104108
public void onEnable() {
105109
plugin = this;
106110

107-
config = ConfigurationProvider.getProvider(YamlConfiguration.class);
108-
if (!getDataFolder().exists())
111+
yamlConfigProvider = ConfigurationProvider.getProvider(YamlConfiguration.class);
112+
if (!getDataFolder().exists()) {
109113
getDataFolder().mkdir();
114+
}
115+
configFile = new File(getDataFolder(), "bungeeconfig.yml");
116+
playerDataFolder = new File(getDataFolder(), "player_data");
117+
if (!playerDataFolder.exists()) {
118+
playerDataFolder.mkdirs();
119+
}
110120

111-
File file = new File(getDataFolder(), "bungeeconfig.yml");
112-
113-
if (!file.exists()) {
121+
if (!configFile.exists()) {
114122
try (InputStream in = getResourceAsStream("bungeeconfig.yml")) {
115-
Files.copy(in, file.toPath());
123+
Files.copy(in, configFile.toPath());
116124
} catch (IOException e) {
117125
e.printStackTrace();
118126
}
@@ -142,8 +150,8 @@ public void onDisable() {
142150

143151
public static void loadConfig() {
144152
try {
145-
configuration = config.load(new File(plugin.getDataFolder(), "bungeeconfig.yml"));
146-
parseCommands = configuration.getStringList("Settings.CommandsToParse");
153+
config = yamlConfigProvider.load(configFile);
154+
parseCommands = config.getStringList("Settings.CommandsToParse");
147155
} catch (IOException e) {
148156
e.printStackTrace();
149157
}
@@ -308,6 +316,13 @@ public void run() {
308316
placeholderList.put(((Server) event.getSender()).getInfo().getName(), list);
309317
forwardPlaceholderList(list, ((Server) event.getSender()).getInfo());
310318
break;
319+
case 0x12:
320+
UUID uuid2 = DataTypeIO.readUUID(input);
321+
String playerdata = DataTypeIO.readString(input, StandardCharsets.UTF_8);
322+
Configuration playerconfig = yamlConfigProvider.load(playerdata);
323+
yamlConfigProvider.save(playerconfig, new File(playerDataFolder, uuid2.toString()));
324+
forwardPlayerData(uuid2, playerdata, ((Server) event.getSender()).getInfo());
325+
break;
311326
}
312327
} catch (IOException | DataFormatException e) {
313328
e.printStackTrace();
@@ -322,6 +337,38 @@ public void run() {
322337
}
323338
}
324339

340+
private void forwardPlayerData(UUID uuid, String playerdata, ServerInfo serverFrom) throws IOException {
341+
ByteArrayDataOutput output = ByteStreams.newDataOutput();
342+
343+
DataTypeIO.writeUUID(output, uuid);
344+
DataTypeIO.writeString(output, playerdata, StandardCharsets.UTF_8);
345+
346+
int packetNumber = random.nextInt();
347+
int packetId = 0x12;
348+
byte[] data = output.toByteArray();
349+
350+
byte[][] dataArray = CustomArrayUtils.divideArray(CompressionUtils.compress(data), 32700);
351+
352+
for (int i = 0; i < dataArray.length; i++) {
353+
byte[] chunk = dataArray[i];
354+
355+
ByteArrayDataOutput out = ByteStreams.newDataOutput();
356+
out.writeInt(packetNumber);
357+
358+
out.writeShort(packetId);
359+
out.writeBoolean(i == (dataArray.length - 1));
360+
361+
out.write(chunk);
362+
363+
for (ServerInfo server : getProxy().getServers().values()) {
364+
if (!server.getSocketAddress().equals(serverFrom.getSocketAddress())) {
365+
server.sendData("interchat:main", out.toByteArray());
366+
pluginMessagesCounter.incrementAndGet();
367+
}
368+
}
369+
}
370+
}
371+
325372
private void forwardPlaceholderList(List<ICPlaceholder> serverPlaceholderList, ServerInfo serverFrom) throws IOException {
326373
ByteArrayDataOutput output = ByteStreams.newDataOutput();
327374

@@ -539,10 +586,23 @@ public void write(ChannelHandlerContext channelHandlerContext, Object obj, Chann
539586
@EventHandler
540587
public void onPlayerConnected(PostLoginEvent event) {
541588
ProxiedPlayer player = event.getPlayer();
589+
UUID uuid = player.getUniqueId();
542590
forwardedMessages.put(player.getUniqueId(), new ArrayList<>());
543591
List<UUID> messageQueue = Collections.synchronizedList(new LinkedList<>());
544592
requestedMessageProcesses.put(player.getUniqueId(), messageQueue);
545593

594+
File playerFile = new File(playerDataFolder, uuid.toString());
595+
if (playerFile.exists()) {
596+
try {
597+
Configuration playerconfig = yamlConfigProvider.load(playerFile);
598+
StringWriter writer = new StringWriter();
599+
yamlConfigProvider.save(playerconfig, writer);
600+
forwardPlayerData(uuid, writer.toString(), player.getServer().getInfo());
601+
} catch (IOException e) {
602+
e.printStackTrace();
603+
}
604+
}
605+
546606
UserConnection userConnection = (UserConnection) player;
547607
ChannelWrapper channelWrapper;
548608
Field channelField = null;

src/com/loohp/interactivechat/Commands.java

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.bukkit.entity.Player;
1313
import org.bukkit.inventory.Inventory;
1414

15+
import com.loohp.interactivechat.Data.PlayerDataManager.PlayerData;
1516
import com.loohp.interactivechat.PluginMessaging.BungeeMessageSender;
1617
import com.loohp.interactivechat.Updater.Updater;
1718
import com.loohp.interactivechat.Utils.ChatColorUtils;
@@ -70,6 +71,65 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String
7071
return true;
7172
}
7273

74+
if (args[0].equalsIgnoreCase("mentiontoggle")) {
75+
if (sender.hasPermission("interactivechat.mention.toggle")) {
76+
if (args.length == 1) {
77+
if (sender instanceof Player) {
78+
Player player = (Player) sender;
79+
PlayerData pd = InteractiveChat.playerDataManager.getPlayerData(player);
80+
if (pd.isMentionDisabled()) {
81+
pd.setMentionDisabled(false);
82+
pd.saveConfig();
83+
sender.sendMessage(InteractiveChat.mentionEnable);
84+
} else {
85+
pd.setMentionDisabled(true);
86+
pd.saveConfig();
87+
sender.sendMessage(InteractiveChat.mentionDisable);
88+
}
89+
if (InteractiveChat.bungeecordMode) {
90+
try {
91+
BungeeMessageSender.forwardPlayerDataUpdate(player.getUniqueId(), pd.getConfig());
92+
} catch (IOException e) {
93+
e.printStackTrace();
94+
}
95+
}
96+
} else {
97+
sender.sendMessage(InteractiveChat.Console);
98+
}
99+
} else {
100+
if (sender.hasPermission("interactivechat.mention.toggle.others")) {
101+
Player player = Bukkit.getPlayer(args[1]);
102+
if (player != null) {
103+
PlayerData pd = InteractiveChat.playerDataManager.getPlayerData(player);
104+
if (pd.isMentionDisabled()) {
105+
pd.setMentionDisabled(false);
106+
pd.saveConfig();
107+
sender.sendMessage(InteractiveChat.mentionEnable);
108+
} else {
109+
pd.setMentionDisabled(true);
110+
pd.saveConfig();
111+
sender.sendMessage(InteractiveChat.mentionDisable);
112+
}
113+
if (InteractiveChat.bungeecordMode) {
114+
try {
115+
BungeeMessageSender.forwardPlayerDataUpdate(player.getUniqueId(), pd.getConfig());
116+
} catch (IOException e) {
117+
e.printStackTrace();
118+
}
119+
}
120+
} else {
121+
sender.sendMessage(InteractiveChat.InvalidPlayer);
122+
}
123+
} else {
124+
sender.sendMessage(InteractiveChat.NoPermission);
125+
}
126+
}
127+
} else {
128+
sender.sendMessage(InteractiveChat.NoPermission);
129+
}
130+
return true;
131+
}
132+
73133
if (sender instanceof Player) {
74134
Player player = (Player) sender;
75135
if (args[0].equals("viewinv")) {
@@ -121,6 +181,9 @@ public List<String> onTabComplete(CommandSender sender, Command cmd, String labe
121181
if (sender.hasPermission("interactivechat.update")) {
122182
tab.add("update");
123183
}
184+
if (sender.hasPermission("interactivechat.mention.toggle")) {
185+
tab.add("mentiontoggle");
186+
}
124187
return tab;
125188
case 1:
126189
if (sender.hasPermission("interactivechat.reload")) {
@@ -133,6 +196,22 @@ public List<String> onTabComplete(CommandSender sender, Command cmd, String labe
133196
tab.add("update");
134197
}
135198
}
199+
if (sender.hasPermission("interactivechat.mention.toggle")) {
200+
if ("mentiontoggle".startsWith(args[0].toLowerCase())) {
201+
tab.add("mentiontoggle");
202+
}
203+
}
204+
return tab;
205+
case 2:
206+
if (sender.hasPermission("interactivechat.mention.toggle.others")) {
207+
if ("mentiontoggle".equalsIgnoreCase(args[0])) {
208+
for (Player player : Bukkit.getOnlinePlayers()) {
209+
if (player.getName().toLowerCase().startsWith(args[1])) {
210+
tab.add(player.getName());
211+
}
212+
}
213+
}
214+
}
136215
return tab;
137216
default:
138217
return tab;

src/com/loohp/interactivechat/ConfigManager.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ public static void loadConfig() {
5656
InteractiveChat.NoPermission = ChatColorUtils.translateAlternateColorCodes('&', getConfig().getString("Messages.NoPermission"));
5757
InteractiveChat.InvExpired = ChatColorUtils.translateAlternateColorCodes('&', getConfig().getString("Messages.InvExpired"));
5858
InteractiveChat.ReloadPlugin = ChatColorUtils.translateAlternateColorCodes('&', getConfig().getString("Messages.ReloadPlugin"));
59+
InteractiveChat.Console = ChatColorUtils.translateAlternateColorCodes('&', getConfig().getString("Messages.PlayerOnlyCommand"));
60+
InteractiveChat.InvalidPlayer = ChatColorUtils.translateAlternateColorCodes('&', getConfig().getString("Messages.InvalidPlayer"));
5961

6062
InteractiveChat.useItem = getConfig().getBoolean("ItemDisplay.Item.Enabled");
6163
InteractiveChat.useInventory = getConfig().getBoolean("ItemDisplay.Inventory.Enabled");
@@ -183,6 +185,9 @@ public static void loadConfig() {
183185
InteractiveChat.mentionHover = String.join("\n", stringList3);
184186
InteractiveChat.mentionDuration = getConfig().getLong("Chat.MentionedTitleDuration");
185187

188+
InteractiveChat.mentionEnable = ChatColorUtils.translateAlternateColorCodes('&', getConfig().getString("Messages.EnableMentions"));
189+
InteractiveChat.mentionDisable = ChatColorUtils.translateAlternateColorCodes('&', getConfig().getString("Messages.DisableMentions"));
190+
186191
InteractiveChat.UpdaterEnabled = getConfig().getBoolean("Options.Updater");
187192
InteractiveChat.cancelledMessage = getConfig().getBoolean("Options.ShowCancelledNotice");
188193

0 commit comments

Comments
 (0)