diff --git a/TheButtonAutoFlair.jar b/TheButtonAutoFlair.jar
index 3989550..4ff44d8 100644
Binary files a/TheButtonAutoFlair.jar and b/TheButtonAutoFlair.jar differ
diff --git a/TheButtonAutoFlair/.classpath b/TheButtonAutoFlair/.classpath
index 46076ca..7eabf54 100644
--- a/TheButtonAutoFlair/.classpath
+++ b/TheButtonAutoFlair/.classpath
@@ -23,5 +23,6 @@
+
diff --git a/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/Channel.java b/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/Channel.java
index e435da0..4c9eb31 100644
--- a/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/Channel.java
+++ b/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/Channel.java
@@ -14,4 +14,6 @@ public class Channel {
public static Channel GlobalChat = new Channel("§fg§f", "white", "g");
public static Channel TownChat = new Channel("§3TC§f", "dark_aqua", "tc");
public static Channel NationChat = new Channel("§6NC§f", "gold", "nc");
+ public static Channel AdminChat = new Channel("§cADMIN§f", "red", "a");
+ public static Channel ModChat = new Channel("§9MOD§f", "blue", "mod");
}
diff --git a/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PlayerListener.java b/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PlayerListener.java
index c02cab5..2cf3ee3 100644
--- a/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PlayerListener.java
+++ b/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PlayerListener.java
@@ -19,6 +19,8 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.SkullMeta;
import org.bukkit.scoreboard.Objective;
+import ru.tehkode.permissions.bukkit.PermissionsEx;
+
import com.palmergames.bukkit.towny.exceptions.NotRegisteredException;
import com.palmergames.bukkit.towny.object.Nation;
import com.palmergames.bukkit.towny.object.Resident;
@@ -29,6 +31,8 @@ import au.com.mineauz.minigames.Minigames;
import java.io.File;
import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
@@ -37,6 +41,8 @@ import java.util.TimerTask;
import java.util.UUID;
import java.util.regex.Pattern;
+import com.earth2me.essentials.*;
+
public class PlayerListener implements Listener { // 2015.07.16.
public static HashMap nicknames = new HashMap<>();
@@ -44,6 +50,9 @@ public class PlayerListener implements Listener { // 2015.07.16.
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
+ if (essentials == null)
+ essentials = ((Essentials) Bukkit.getPluginManager().getPlugin(
+ "Essentials"));
Player p = event.getPlayer();
MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p
.getUniqueId());
@@ -122,13 +131,18 @@ public class PlayerListener implements Listener { // 2015.07.16.
nicknames.remove(deletenick);
}
- public static String NotificationSound; // 2015.08.14.
- public static double NotificationPitch; // 2015.08.14.
+ public static String NotificationSound;
+ public static double NotificationPitch;
- public static boolean ShowRPTag = false; // 2015.08.31.
+ public static boolean ShowRPTag = false;
+
+ private Essentials essentials = null;
@EventHandler
public void onPlayerChat(AsyncPlayerChatEvent event) {
+ if (essentials == null)
+ essentials = ((Essentials) Bukkit.getPluginManager().getPlugin(
+ "Essentials"));
if (event.getMessage().equalsIgnoreCase("F")) {
MaybeOfflinePlayer mp = MaybeOfflinePlayer.AllPlayers.get(event
.getPlayer().getUniqueId());
@@ -143,31 +157,32 @@ public class PlayerListener implements Listener { // 2015.07.16.
boolean greentext = event.getMessage().startsWith(">");
if (event.getMessage().contains("lol"))
Commands.Lastlol = MaybeOfflinePlayer.AllPlayers.get(event
- .getPlayer().getUniqueId()); //TODO: Formatting after nicknames
+ .getPlayer().getUniqueId());
MaybeOfflinePlayer player = MaybeOfflinePlayer.AllPlayers.get(event
.getPlayer().getUniqueId());
- String flair = player.GetFormattedFlair();
String message = event.getMessage(); // 2015.08.08.
for (Player p : PluginMain.GetPlayers()) { // 2015.08.12.
String color = ""; // 2015.08.17.
- if (message.contains(p.getName())) {
+ if (message.matches("(?i).*" + Pattern.quote(p.getName()) + ".*")) {
if (NotificationSound == null)
p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12.
else
p.playSound(p.getLocation(), NotificationSound, 1.0f,
(float) NotificationPitch); // 2015.08.14.
MaybeOfflinePlayer mp = MaybeOfflinePlayer.AddPlayerIfNeeded(p
- .getUniqueId()); // 2015.08.17.
+ .getUniqueId());
color = String.format("§%x", (mp.GetFlairColor() == 0x00 ? 0xb
: mp.GetFlairColor())); // TODO: Quiz queue
}
- message = message.replaceAll("(?i)" + Pattern.quote(p.getName()),
+ message = message.replaceAll(
+ "(?i)" + Pattern.quote(p.getName()),
color
+ p.getName()
- + (event.getMessage().startsWith("§2>") ? "§2"
- : "§r"));
+ + (greentext ? "§2"
+ : player.CurrentChannel.DisplayName
+ .substring(0, 2)));
}
for (String n : nicknames.keySet()) {
Player p = null;
@@ -183,7 +198,8 @@ public class PlayerListener implements Listener { // 2015.07.16.
while ((index = nwithoutformatting.indexOf('§')) != -1)
nwithoutformatting = nwithoutformatting.replace("§"
+ nwithoutformatting.charAt(index + 1), "");
- if (message.contains(nwithoutformatting)) {
+ if (message.matches("(?i).*" + Pattern.quote(nwithoutformatting)
+ + ".*")) {
p = Bukkit.getPlayer(nicknames.get(n));
if (NotificationSound == null)
p.playSound(p.getLocation(), Sound.ORB_PICKUP, 1.0f, 0.5f); // 2015.08.12.
@@ -194,27 +210,28 @@ public class PlayerListener implements Listener { // 2015.07.16.
}
if (p != null) {
message = message.replaceAll(
- "(?i)" + Pattern.quote(nwithoutformatting), n
- + (event.getMessage().startsWith("§2>") ? "§2"
- : "§r"));
+ "(?i)" + Pattern.quote(nwithoutformatting),
+ n
+ + (greentext ? "§2"
+ : player.CurrentChannel.DisplayName
+ .substring(0, 2)));
}
}
- event.setMessage(message); // 2015.09.05.
+ event.setMessage(message);
- event.setFormat(event
- .getFormat()
- .replace(
- "{rptag}",
- (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "")
- : "§8[OOC]§r"))
- .replace("{buttonflair}", flair)
- .replace(
- "{isitwilds}",
- (event.getPlayer().getWorld().getName()
- .equalsIgnoreCase("wilds") ? "[PVP]" : ""))); // 2015.09.04.
+ /*
+ * event.setFormat(event .getFormat() .replace( "{rptag}",
+ * (player.RPMode ? (ShowRPTag ? "§2[RP]§r" : "") : "§8[OOC]§r"))
+ * .replace("{buttonflair}", flair) .replace( "{isitwilds}",
+ * (event.getPlayer().getWorld().getName() .equalsIgnoreCase("wilds") ?
+ * "[PVP]" : ""))); // 2015.09.04.
+ */
event.setCancelled(true);
+ if (essentials.getUser(event.getPlayer()).isMuted())
+ return;
+
StringBuilder json = new StringBuilder();
json.append("[\"\",");
json.append(String.format("{\"text\":\"[%s]%s <\"},",
@@ -249,7 +266,7 @@ public class PlayerListener implements Listener { // 2015.07.16.
String original = event.getMessage().substring(index + 1, index2);
list.add(original);
}
- String finalstring = event.getMessage().replace('"', '\'');
+ String finalstring = event.getMessage().replace("\"", "''");
for (String original : list)
// Hashtags
finalstring = finalstring
@@ -260,10 +277,31 @@ public class PlayerListener implements Listener { // 2015.07.16.
(greentext ? "dark_green"
: player.CurrentChannel.Color),
original, original));
+
+ String[] parts = finalstring.split("\\s+");
+
+ // URLs
+ for (String item : parts)
+ try {
+ URL url = new URL(item);
+ finalstring = finalstring
+ .replace(
+ item,
+ String.format(
+ "\",\"color\":\"%s\"},{\"text\":\"%s\",\"color\":\"%s\",\"underlined\":\"true\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"%s\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Open URL\",\"color\":\"blue\"}]}}},{\"text\":\"",
+ (greentext ? "dark_green"
+ : player.CurrentChannel.Color),
+ url, (greentext ? "dark_green"
+ : player.CurrentChannel.Color),
+ url));
+ } catch (MalformedURLException e) {
+ }
+
json.append(String.format("{\"text\":\"%s\",\"color\":\"%s\"}]",
finalstring, (greentext ? "dark_green"
: player.CurrentChannel.Color)));
- if (!player.CurrentChannel.equals(Channel.GlobalChat))
+ if (player.CurrentChannel.equals(Channel.TownChat)
+ || player.CurrentChannel.equals(Channel.NationChat))
// for (Resident resident :
// PluginMain.Instance.TU.getResidentMap().values()) {
for (Player p : PluginMain.GetPlayers()) {
@@ -305,7 +343,9 @@ public class PlayerListener implements Listener { // 2015.07.16.
Objective obj = PluginMain.SB.getObjective("town");
// System.out.println("obj: " + obj);
for (Player p : PluginMain.GetPlayers()) {
- //System.out.println(town.getName());
+ // System.out.println(town.getName()); //Mute fixed,
+ // re-enabled /minecraft:me except when muted, admin and mod
+ // channel added, links implemented
try {
if (PluginMain.Instance.TU.getResidentMap()
.get(p.getName().toLowerCase()).getTown()
@@ -397,6 +437,72 @@ public class PlayerListener implements Listener { // 2015.07.16.
"§cAn error occured while sending the message. (IllegalArgumentException)");
return;
}
+ } else if (player.CurrentChannel.equals(Channel.AdminChat)) {
+ try {
+ if (!event.getPlayer().isOp()) {
+ event.getPlayer().sendMessage(
+ "§cYou need to be an OP to use this channel.");
+ return;
+ }
+ Objective obj = PluginMain.SB.getObjective("admin");
+ for (Player p : PluginMain.GetPlayers()) {
+ if (p.isOp())
+ obj.getScore(p.getName()).setScore(1);
+ else
+ obj.getScore(p.getName()).setScore(0);
+ }
+ PluginMain.Instance
+ .getServer()
+ .dispatchCommand(
+ PluginMain.Console,
+ String.format(
+ "tellraw @a[score_admin=%d,score_admin_min=%d] %s",
+ 1, 1, json.toString()));
+ } catch (IllegalStateException e) {
+ e.printStackTrace();
+ event.getPlayer()
+ .sendMessage(
+ "§cAn error occured while sending the message. (IllegalStateException)");
+ return;
+ } catch (IllegalArgumentException e) {
+ e.printStackTrace();
+ event.getPlayer()
+ .sendMessage(
+ "§cAn error occured while sending the message. (IllegalArgumentException)");
+ return;
+ }
+ } else if (player.CurrentChannel.equals(Channel.ModChat)) {
+ try {
+ if (!PermissionsEx.getUser(event.getPlayer()).inGroup("mod")) {
+ event.getPlayer().sendMessage(
+ "§cYou need to be a mod to use this channel.");
+ return;
+ }
+ Objective obj = PluginMain.SB.getObjective("mod");
+ for (Player p : PluginMain.GetPlayers()) {
+ if (PermissionsEx.getUser(p).inGroup("mod"))
+ obj.getScore(p.getName()).setScore(1);
+ else
+ obj.getScore(p.getName()).setScore(0);
+ }
+ PluginMain.Instance.getServer().dispatchCommand(
+ PluginMain.Console,
+ String.format(
+ "tellraw @a[score_mod=%d,score_mod_min=%d] %s",
+ 1, 1, json.toString()));
+ } catch (IllegalStateException e) {
+ e.printStackTrace();
+ event.getPlayer()
+ .sendMessage(
+ "§cAn error occured while sending the message. (IllegalStateException)");
+ return;
+ } catch (IllegalArgumentException e) {
+ e.printStackTrace();
+ event.getPlayer()
+ .sendMessage(
+ "§cAn error occured while sending the message. (IllegalArgumentException)");
+ return;
+ }
} else
PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console,
String.format("tellraw @a %s", json.toString()));
@@ -444,6 +550,24 @@ public class PlayerListener implements Listener { // 2015.07.16.
"§6You are now talking in: §b"
+ mp.CurrentChannel.DisplayName);
event.setCancelled(true);
+ } else if (cmd.equalsIgnoreCase(Channel.AdminChat.Command)) {
+ if (mp.CurrentChannel.equals(Channel.AdminChat))
+ mp.CurrentChannel = Channel.GlobalChat;
+ else
+ mp.CurrentChannel = Channel.AdminChat;
+ event.getPlayer().sendMessage(
+ "§6You are now talking in: §b"
+ + mp.CurrentChannel.DisplayName);
+ event.setCancelled(true);
+ } else if (cmd.equalsIgnoreCase(Channel.ModChat.Command)) {
+ if (mp.CurrentChannel.equals(Channel.ModChat))
+ mp.CurrentChannel = Channel.GlobalChat;
+ else
+ mp.CurrentChannel = Channel.ModChat;
+ event.getPlayer().sendMessage(
+ "§6You are now talking in: §b"
+ + mp.CurrentChannel.DisplayName);
+ event.setCancelled(true);
}
} else {
String cmd = event.getMessage().substring(1, index);
@@ -466,6 +590,18 @@ public class PlayerListener implements Listener { // 2015.07.16.
mp.CurrentChannel = Channel.NationChat;
event.getPlayer().chat(event.getMessage().substring(index + 1));
mp.CurrentChannel = c;
+ } else if (cmd.equalsIgnoreCase(Channel.AdminChat.Command)) {
+ event.setCancelled(true);
+ Channel c = mp.CurrentChannel;
+ mp.CurrentChannel = Channel.AdminChat;
+ event.getPlayer().chat(event.getMessage().substring(index + 1));
+ mp.CurrentChannel = c;
+ } else if (cmd.equalsIgnoreCase(Channel.ModChat.Command)) {
+ event.setCancelled(true);
+ Channel c = mp.CurrentChannel;
+ mp.CurrentChannel = Channel.ModChat;
+ event.getPlayer().chat(event.getMessage().substring(index + 1));
+ mp.CurrentChannel = c;
} else if (cmd.equalsIgnoreCase("tpahere")) {
Player player = Bukkit.getPlayer(event.getMessage().substring(
index + 1));
@@ -474,6 +610,14 @@ public class PlayerListener implements Listener { // 2015.07.16.
+ event.getPlayer().getDisplayName()
+ " §bis in this world: "
+ event.getPlayer().getWorld().getName());
+ } else if (cmd.equalsIgnoreCase("minecraft:me")) {
+ if (!essentials.getUser(event.getPlayer()).isMuted()) {
+ event.setCancelled(true);
+ String message = event.getMessage().substring(index + 1);
+ for (Player p : PluginMain.GetPlayers())
+ p.sendMessage(String.format("* %s %s", event
+ .getPlayer().getDisplayName(), message));
+ }
}
}
}
diff --git a/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PluginMain.java b/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PluginMain.java
index 849d786..85411b7 100644
--- a/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PluginMain.java
+++ b/TheButtonAutoFlair/src/tk/sznp/thebuttonautoflair/PluginMain.java
@@ -92,6 +92,10 @@ public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15.
SB.registerNewObjective("town", "dummy");
if (SB.getObjective("nation") == null)
SB.registerNewObjective("nation", "dummy");
+ if (SB.getObjective("admin") == null)
+ SB.registerNewObjective("admin", "dummy");
+ if (SB.getObjective("mod") == null)
+ SB.registerNewObjective("mod", "dummy");
TU = ((Towny) Bukkit.getPluginManager().getPlugin("Towny"))
.getTownyUniverse();
Towns = new ArrayList(TU.getTownsMap().values());
diff --git a/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/Channel.class b/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/Channel.class
index 0c2ad77..9aeafb5 100644
Binary files a/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/Channel.class and b/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/Channel.class differ
diff --git a/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PlayerListener$1.class b/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PlayerListener$1.class
index f476a58..0412755 100644
Binary files a/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PlayerListener$1.class and b/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PlayerListener$1.class differ
diff --git a/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PlayerListener$2.class b/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PlayerListener$2.class
index 9005a57..b48f3f6 100644
Binary files a/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PlayerListener$2.class and b/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PlayerListener$2.class differ
diff --git a/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PlayerListener.class b/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PlayerListener.class
index 56aed74..ae25cf3 100644
Binary files a/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PlayerListener.class and b/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PlayerListener.class differ
diff --git a/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PluginMain$1.class b/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PluginMain$1.class
index f5ffd18..8eb29e8 100644
Binary files a/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PluginMain$1.class and b/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PluginMain$1.class differ
diff --git a/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PluginMain$2.class b/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PluginMain$2.class
index e8f482b..c13d878 100644
Binary files a/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PluginMain$2.class and b/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PluginMain$2.class differ
diff --git a/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PluginMain.class b/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PluginMain.class
index 50a7993..da6ce02 100644
Binary files a/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PluginMain.class and b/TheButtonAutoFlair/target/classes/tk/sznp/thebuttonautoflair/PluginMain.class differ