Removed scoreboard that has been there for a long time
PluginMain.java:40 Also made the channel scores unnecessary As well as the recently introduced dispatchConsoleCommand method Also probably fixed Towny spy (#100)
This commit is contained in:
parent
f3904a8448
commit
1275cdafd0
8
pom.xml
8
pom.xml
|
@ -155,10 +155,10 @@
|
||||||
<id>Essentials</id>
|
<id>Essentials</id>
|
||||||
<url>http://repo.ess3.net/content/repositories/essrel/</url>
|
<url>http://repo.ess3.net/content/repositories/essrel/</url>
|
||||||
</repository>
|
</repository>
|
||||||
<repository>
|
<!-- <repository>
|
||||||
<id>Minigames</id>
|
<id>Minigames</id>
|
||||||
<url>http://maven.addstar.com.au/artifactory/release</url>
|
<url>http://maven.addstar.com.au/artifactory/release</url>
|
||||||
</repository>
|
</repository> -->
|
||||||
<!-- <repository>
|
<!-- <repository>
|
||||||
<id>vault-repo</id>
|
<id>vault-repo</id>
|
||||||
<url>http://nexus.hc.to/content/repositories/pub_releases</url>
|
<url>http://nexus.hc.to/content/repositories/pub_releases</url>
|
||||||
|
|
|
@ -29,7 +29,6 @@ import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scoreboard.Objective;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
@ -38,287 +37,283 @@ import java.util.function.Consumer;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class ChatProcessing {
|
public class ChatProcessing {
|
||||||
private static final Pattern NULL_MENTION_PATTERN = Pattern.compile("null");
|
private static final Pattern NULL_MENTION_PATTERN = Pattern.compile("null");
|
||||||
private static final Pattern CYAN_PATTERN = Pattern.compile("cyan");
|
private static final Pattern CYAN_PATTERN = Pattern.compile("cyan");
|
||||||
private static final Pattern ESCAPE_PATTERN = Pattern.compile("\\\\");
|
private static final Pattern ESCAPE_PATTERN = Pattern.compile("\\\\");
|
||||||
private static final Pattern CONSOLE_PING_PATTERN = Pattern.compile("(?i)" + Pattern.quote("@console"));
|
private static final Pattern CONSOLE_PING_PATTERN = Pattern.compile("(?i)" + Pattern.quote("@console"));
|
||||||
private static final Pattern HASHTAG_PATTERN = Pattern.compile("#(\\w+)");
|
private static final Pattern HASHTAG_PATTERN = Pattern.compile("#(\\w+)");
|
||||||
private static final Pattern URL_PATTERN = Pattern.compile("(http[\\w:/?=$\\-_.+!*'(),&]+(?:#[\\w]+)?)");
|
private static final Pattern URL_PATTERN = Pattern.compile("(http[\\w:/?=$\\-_.+!*'(),&]+(?:#[\\w]+)?)");
|
||||||
public static final Pattern ENTIRE_MESSAGE_PATTERN = Pattern.compile(".+");
|
public static final Pattern ENTIRE_MESSAGE_PATTERN = Pattern.compile(".+");
|
||||||
private static final Pattern UNDERLINED_PATTERN = Pattern.compile("_");
|
private static final Pattern UNDERLINED_PATTERN = Pattern.compile("_");
|
||||||
private static final Pattern ITALIC_PATTERN = Pattern.compile("\\*");
|
private static final Pattern ITALIC_PATTERN = Pattern.compile("\\*");
|
||||||
private static final Pattern BOLD_PATTERN = Pattern.compile("\\*\\*");
|
private static final Pattern BOLD_PATTERN = Pattern.compile("\\*\\*");
|
||||||
private static final Pattern CODE_PATTERN = Pattern.compile("`");
|
private static final Pattern CODE_PATTERN = Pattern.compile("`");
|
||||||
private static final Pattern MASKED_LINK_PATTERN = Pattern.compile("\\[([^\\[\\]]+)]\\(([^()]+)\\)");
|
private static final Pattern MASKED_LINK_PATTERN = Pattern.compile("\\[([^\\[\\]]+)]\\(([^()]+)\\)");
|
||||||
private static final Pattern SOMEONE_PATTERN = Pattern.compile("@someone"); //TODO
|
private static final Pattern SOMEONE_PATTERN = Pattern.compile("@someone"); //TODO
|
||||||
private static final Pattern STRIKETHROUGH_PATTERN = Pattern.compile("~~");
|
private static final Pattern STRIKETHROUGH_PATTERN = Pattern.compile("~~");
|
||||||
private static final Pattern SPOILER_PATTERN = Pattern.compile("\\|\\|");
|
private static final Pattern SPOILER_PATTERN = Pattern.compile("\\|\\|");
|
||||||
private static final Color[] RainbowPresserColors = new Color[]{Color.Red, Color.Gold, Color.Yellow, Color.Green,
|
private static final Color[] RainbowPresserColors = new Color[]{Color.Red, Color.Gold, Color.Yellow, Color.Green,
|
||||||
Color.Blue, Color.DarkPurple};
|
Color.Blue, Color.DarkPurple};
|
||||||
private static final Pattern WORD_PATTERN = Pattern.compile("\\S+");
|
private static final Pattern WORD_PATTERN = Pattern.compile("\\S+");
|
||||||
private static boolean pingedconsole = false;
|
private static boolean pingedconsole = false;
|
||||||
|
|
||||||
public static final ChatFormatter ESCAPE_FORMATTER = ChatFormatter.builder().regex(ESCAPE_PATTERN).build();
|
public static final ChatFormatter ESCAPE_FORMATTER = ChatFormatter.builder().regex(ESCAPE_PATTERN).build();
|
||||||
|
|
||||||
private static ArrayList<ChatFormatter> commonFormatters = Lists.newArrayList(
|
private static ArrayList<ChatFormatter> commonFormatters = Lists.newArrayList(
|
||||||
ChatFormatter.builder().regex(BOLD_PATTERN).bold(true).removeCharCount((short) 2).type(ChatFormatter.Type.Range)
|
ChatFormatter.builder().regex(BOLD_PATTERN).bold(true).removeCharCount((short) 2).type(ChatFormatter.Type.Range)
|
||||||
.priority(Priority.High).build(),
|
.priority(Priority.High).build(),
|
||||||
ChatFormatter.builder().regex(ITALIC_PATTERN).italic(true).removeCharCount((short) 1).type(ChatFormatter.Type.Range).build(),
|
ChatFormatter.builder().regex(ITALIC_PATTERN).italic(true).removeCharCount((short) 1).type(ChatFormatter.Type.Range).build(),
|
||||||
ChatFormatter.builder().regex(UNDERLINED_PATTERN).underlined(true).removeCharCount((short) 1).type(ChatFormatter.Type.Range)
|
ChatFormatter.builder().regex(UNDERLINED_PATTERN).underlined(true).removeCharCount((short) 1).type(ChatFormatter.Type.Range)
|
||||||
.build(),
|
.build(),
|
||||||
ChatFormatter.builder().regex(STRIKETHROUGH_PATTERN).strikethrough(true).removeCharCount((short) 2).type(ChatFormatter.Type.Range)
|
ChatFormatter.builder().regex(STRIKETHROUGH_PATTERN).strikethrough(true).removeCharCount((short) 2).type(ChatFormatter.Type.Range)
|
||||||
.build(),
|
.build(),
|
||||||
ChatFormatter.builder().regex(SPOILER_PATTERN).obfuscated(true).removeCharCount((short) 2).type(ChatFormatter.Type.Range)
|
ChatFormatter.builder().regex(SPOILER_PATTERN).obfuscated(true).removeCharCount((short) 2).type(ChatFormatter.Type.Range)
|
||||||
.onmatch((match, cf, fs) -> {
|
.onmatch((match, cf, fs) -> {
|
||||||
cf.setHoverText(match);
|
cf.setHoverText(match);
|
||||||
return match;
|
return match;
|
||||||
}).build(),
|
}).build(),
|
||||||
ESCAPE_FORMATTER, ChatFormatter.builder().regex(NULL_MENTION_PATTERN).color(Color.DarkRed).build(), // Properly added a bug as a feature
|
ESCAPE_FORMATTER, ChatFormatter.builder().regex(NULL_MENTION_PATTERN).color(Color.DarkRed).build(), // Properly added a bug as a feature
|
||||||
ChatFormatter.builder().regex(CONSOLE_PING_PATTERN).color(Color.Aqua).onmatch((match, builder, section) -> {
|
ChatFormatter.builder().regex(CONSOLE_PING_PATTERN).color(Color.Aqua).onmatch((match, builder, section) -> {
|
||||||
if (!pingedconsole) {
|
if (!pingedconsole) {
|
||||||
System.out.print("\007");
|
System.out.print("\007");
|
||||||
pingedconsole = true; // Will set it to false in ProcessChat
|
pingedconsole = true; // Will set it to false in ProcessChat
|
||||||
}
|
}
|
||||||
return match;
|
return match;
|
||||||
}).priority(Priority.High).build(),
|
}).priority(Priority.High).build(),
|
||||||
|
|
||||||
ChatFormatter.builder().regex(HASHTAG_PATTERN).color(Color.Blue).openlink("https://twitter.com/hashtag/$1")
|
ChatFormatter.builder().regex(HASHTAG_PATTERN).color(Color.Blue).openlink("https://twitter.com/hashtag/$1")
|
||||||
.priority(Priority.High).build(),
|
.priority(Priority.High).build(),
|
||||||
ChatFormatter.builder().regex(CYAN_PATTERN).color(Color.Aqua).build(), // #55
|
ChatFormatter.builder().regex(CYAN_PATTERN).color(Color.Aqua).build(), // #55
|
||||||
ChatFormatter.builder().regex(CODE_PATTERN).color(Color.DarkGray).removeCharCount((short) 1).type(ChatFormatter.Type.Range)
|
ChatFormatter.builder().regex(CODE_PATTERN).color(Color.DarkGray).removeCharCount((short) 1).type(ChatFormatter.Type.Range)
|
||||||
.build(),
|
.build(),
|
||||||
ChatFormatter.builder().regex(MASKED_LINK_PATTERN).underlined(true).onmatch((match, builder, section) -> {
|
ChatFormatter.builder().regex(MASKED_LINK_PATTERN).underlined(true).onmatch((match, builder, section) -> {
|
||||||
String text, link;
|
String text, link;
|
||||||
if (section.Matches.size() < 2 || (text = section.Matches.get(0)).length() == 0 || (link = section.Matches.get(1)).length() == 0)
|
if (section.Matches.size() < 2 || (text = section.Matches.get(0)).length() == 0 || (link = section.Matches.get(1)).length() == 0)
|
||||||
return "";
|
return "";
|
||||||
builder.setOpenlink(link);
|
builder.setOpenlink(link);
|
||||||
return text;
|
return text;
|
||||||
}).type(ChatFormatter.Type.Excluder).build(),
|
}).type(ChatFormatter.Type.Excluder).build(),
|
||||||
ChatFormatter.builder().regex(URL_PATTERN).underlined(true).openlink("$1").type(ChatFormatter.Type.Excluder).build());
|
ChatFormatter.builder().regex(URL_PATTERN).underlined(true).openlink("$1").type(ChatFormatter.Type.Excluder).build());
|
||||||
private static Gson gson = new GsonBuilder()
|
private static Gson gson = new GsonBuilder()
|
||||||
.registerTypeHierarchyAdapter(TellrawSerializableEnum.class, new TellrawSerializer.TwEnum())
|
.registerTypeHierarchyAdapter(TellrawSerializableEnum.class, new TellrawSerializer.TwEnum())
|
||||||
.registerTypeHierarchyAdapter(Collection.class, new TellrawSerializer.TwCollection())
|
.registerTypeHierarchyAdapter(Collection.class, new TellrawSerializer.TwCollection())
|
||||||
.registerTypeAdapter(Boolean.class, new TellrawSerializer.TwBool())
|
.registerTypeAdapter(Boolean.class, new TellrawSerializer.TwBool())
|
||||||
.registerTypeAdapter(boolean.class, new TellrawSerializer.TwBool()).disableHtmlEscaping().create();
|
.registerTypeAdapter(boolean.class, new TellrawSerializer.TwBool()).disableHtmlEscaping().create();
|
||||||
private static final String[] testPlayers = {"Koiiev", "iie", "Alisolarflare", "NorbiPeti", "Arsen_Derby_FTW", "carrot_lynx"};
|
private static final String[] testPlayers = {"Koiiev", "iie", "Alisolarflare", "NorbiPeti", "Arsen_Derby_FTW", "carrot_lynx"};
|
||||||
public static final String MCORIGIN = "Minecraft"; //Shouldn't change, like ever - TBMCPlayer.getFolderForType(TBMCPlayer.class) capitalized
|
public static final String MCORIGIN = "Minecraft"; //Shouldn't change, like ever - TBMCPlayer.getFolderForType(TBMCPlayer.class) capitalized
|
||||||
|
|
||||||
private ChatProcessing() {
|
private ChatProcessing() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean ProcessChat(TBMCChatEvent e) {
|
public static boolean ProcessChat(TBMCChatEvent e) {
|
||||||
Channel channel = e.getChannel();
|
Channel channel = e.getChannel();
|
||||||
CommandSender sender = e.getSender();
|
CommandSender sender = e.getSender();
|
||||||
String message = e.getMessage();
|
String message = e.getMessage();
|
||||||
long processstart = System.nanoTime();
|
long processstart = System.nanoTime();
|
||||||
Player player = (sender instanceof Player ? (Player) sender : null);
|
Player player = (sender instanceof Player ? (Player) sender : null);
|
||||||
User user = PluginMain.essentials.getUser(player);
|
User user = PluginMain.essentials.getUser(player);
|
||||||
|
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
user.updateActivity(true); //Could talk in a private channel, so broadcast
|
user.updateActivity(true); //Could talk in a private channel, so broadcast
|
||||||
if (user.isMuted())
|
if (user.isMuted())
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
doFunStuff(sender, e, message);
|
doFunStuff(sender, e, message);
|
||||||
|
|
||||||
final String channelidentifier = getChannelID(channel, e.getOrigin());
|
final String channelidentifier = getChannelID(channel, e.getOrigin());
|
||||||
PluginMain.Instance.getServer().getConsoleSender()
|
PluginMain.Instance.getServer().getConsoleSender()
|
||||||
.sendMessage(String.format("%s <%s§r> %s", channelidentifier, getSenderName(sender, player), message));
|
.sendMessage(String.format("%s <%s§r> %s", channelidentifier, getSenderName(sender, player), message));
|
||||||
|
|
||||||
if (Bukkit.getOnlinePlayers().size() == 0) return false; //Don't try to send to nobody (errors on 1.14)
|
if (Bukkit.getOnlinePlayers().size() == 0) return false; //Don't try to send to nobody (errors on 1.14)
|
||||||
|
|
||||||
ChatPlayer mp;
|
ChatPlayer mp;
|
||||||
if (player != null)
|
if (player != null)
|
||||||
mp = TBMCPlayerBase.getPlayer(player.getUniqueId(), ChatPlayer.class);
|
mp = TBMCPlayerBase.getPlayer(player.getUniqueId(), ChatPlayer.class);
|
||||||
else //Due to the online player map, getPlayer() can be more efficient than getAs()
|
else //Due to the online player map, getPlayer() can be more efficient than getAs()
|
||||||
mp = e.getUser().getAs(ChatPlayer.class); //May be null
|
mp = e.getUser().getAs(ChatPlayer.class); //May be null
|
||||||
|
|
||||||
Color colormode = channel.Color().get();
|
Color colormode = channel.Color().get();
|
||||||
if (mp != null && mp.OtherColorMode != null)
|
if (mp != null && mp.OtherColorMode != null)
|
||||||
colormode = mp.OtherColorMode;
|
colormode = mp.OtherColorMode;
|
||||||
if (message.startsWith(">"))
|
if (message.startsWith(">"))
|
||||||
colormode = Color.Green;
|
colormode = Color.Green;
|
||||||
// If greentext, ignore channel or player colors
|
// If greentext, ignore channel or player colors
|
||||||
|
|
||||||
ArrayList<ChatFormatter> formatters = addFormatters(colormode);
|
ArrayList<ChatFormatter> formatters = addFormatters(colormode);
|
||||||
if (colormode == channel.Color().get() && mp != null && mp.RainbowPresserColorMode) { // Only overwrite channel color
|
if (colormode == channel.Color().get() && mp != null && mp.RainbowPresserColorMode) { // Only overwrite channel color
|
||||||
final AtomicInteger rpc = new AtomicInteger(0);
|
final AtomicInteger rpc = new AtomicInteger(0);
|
||||||
formatters.add(ChatFormatter.builder().regex(WORD_PATTERN).color(colormode).onmatch((match, cf, s) -> {
|
formatters.add(ChatFormatter.builder().regex(WORD_PATTERN).color(colormode).onmatch((match, cf, s) -> {
|
||||||
cf.setColor(RainbowPresserColors[rpc.getAndUpdate(i -> ++i < RainbowPresserColors.length ? i : 0)]);
|
cf.setColor(RainbowPresserColors[rpc.getAndUpdate(i -> ++i < RainbowPresserColors.length ? i : 0)]);
|
||||||
return match;
|
return match;
|
||||||
}).build());
|
}).build());
|
||||||
}
|
}
|
||||||
pingedconsole = false; // Will set it to true onmatch (static constructor)
|
pingedconsole = false; // Will set it to true onmatch (static constructor)
|
||||||
|
|
||||||
TellrawPart json = createTellraw(sender, message, player, mp, e.getUser(), channelidentifier, e.getOrigin());
|
TellrawPart json = createTellraw(sender, message, player, mp, e.getUser(), channelidentifier, e.getOrigin());
|
||||||
long combinetime = System.nanoTime();
|
long combinetime = System.nanoTime();
|
||||||
ChatFormatter.Combine(formatters, message, json);
|
ChatFormatter.Combine(formatters, message, json);
|
||||||
combinetime = System.nanoTime() - combinetime;
|
combinetime = System.nanoTime() - combinetime;
|
||||||
String jsonstr = toJson(json);
|
String jsonstr = toJson(json);
|
||||||
if (jsonstr.length() >= 32767) {
|
if (jsonstr.length() >= 32767) {
|
||||||
sender.sendMessage(
|
sender.sendMessage(
|
||||||
"§cError: Message too long. Try shortening it, or remove hashtags and other formatting.");
|
"§cError: Message too long. Try shortening it, or remove hashtags and other formatting.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
DebugCommand.SendDebugMessage(jsonstr);
|
DebugCommand.SendDebugMessage(jsonstr);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (!channel.isGlobal()) {
|
if (!channel.isGlobal()) {
|
||||||
Objective obj = PluginMain.SB.getObjective(channel.ID);
|
String senderGroup = e.getGroupID(sender);
|
||||||
int score = -1;
|
if (senderGroup == null) { // Never send messages to score below 0
|
||||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
sender.sendMessage("§cYou don't have permission to send this message or something went wrong");
|
||||||
final int mcScore;
|
return true;
|
||||||
if (player != null
|
}
|
||||||
&& PluginMain.essentials.getUser(p).isIgnoredPlayer(PluginMain.essentials.getUser(player)))
|
val tc = ComponentManager.getIfEnabled(TownyComponent.class);
|
||||||
mcScore = -1; // Don't send the message to them
|
if (tc != null) tc.handleSpiesInit(channel, json, ChatProcessing::toJson);
|
||||||
else
|
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||||
mcScore = VanillaUtils.getMCScoreIfChatOn(p, e);
|
final String group;
|
||||||
obj.getScore(p.getName())
|
if (player != null
|
||||||
.setScore(p.getUniqueId().equals(player == null ? null : player.getUniqueId()) // p.UniqueID==player?.UniqueID
|
&& PluginMain.essentials.getUser(p).isIgnoredPlayer(PluginMain.essentials.getUser(player)))
|
||||||
? score = mcScore : mcScore);
|
group = null; // Don't send the message to them
|
||||||
}
|
else
|
||||||
if (score == -1) // Even if the player object isn't null, it may not be in OnlinePlayers
|
group = VanillaUtils.getGroupIfChatOn(p, e);
|
||||||
score = e.getMCScore(sender);
|
if (group != null)
|
||||||
if (score < 0) // Never send messages to score below 0
|
VanillaUtils.tellRaw(p, jsonstr);
|
||||||
sender.sendMessage("§cYou don't have permission to send this message or something went wrong");
|
else if (tc != null) tc.handleSpies(channel, p);
|
||||||
else {
|
//Only sends if didn't send normally
|
||||||
ChatUtils.dispatchConsoleCommand(
|
}
|
||||||
String.format("tellraw @a[score_%s=%d,score_%s_min=%d] %s", channel.ID, score, channel.ID,
|
} else
|
||||||
score, jsonstr), true);
|
for (Player p : Bukkit.getOnlinePlayers())
|
||||||
val tc = ComponentManager.getIfEnabled(TownyComponent.class);
|
VanillaUtils.tellRaw(p, jsonstr);
|
||||||
if (tc != null) tc.handleSpies(channel, json, ChatProcessing::toJson);
|
} catch (Exception ex) {
|
||||||
}
|
TBMCCoreAPI.SendException("An error occured while sending a chat message!", ex);
|
||||||
} else
|
sender.sendMessage("§cAn error occured while sending the message.");
|
||||||
ChatUtils.dispatchConsoleCommand(String.format("tellraw @a %s", jsonstr), true);
|
return true;
|
||||||
} catch (Exception ex) {
|
}
|
||||||
TBMCCoreAPI.SendException("An error occured while sending a chat message!", ex);
|
DebugCommand.SendDebugMessage(
|
||||||
sender.sendMessage("§cAn error occured while sending the message.");
|
"-- Full ChatProcessing time: " + (System.nanoTime() - processstart) / 1000000f + " ms");
|
||||||
return true;
|
DebugCommand.SendDebugMessage("-- ChatFormatter.Combine time: " + combinetime / 1000000f + " ms");
|
||||||
}
|
return false;
|
||||||
DebugCommand.SendDebugMessage(
|
}
|
||||||
"-- Full ChatProcessing time: " + (System.nanoTime() - processstart) / 1000000f + " ms");
|
|
||||||
DebugCommand.SendDebugMessage("-- ChatFormatter.Combine time: " + combinetime / 1000000f + " ms");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static String toJson(TellrawPart json) {
|
static String toJson(TellrawPart json) {
|
||||||
return gson.toJson(json);
|
return gson.toJson(json);
|
||||||
}
|
}
|
||||||
|
|
||||||
static TellrawPart createTellraw(CommandSender sender, String message, @Nullable Player player,
|
static TellrawPart createTellraw(CommandSender sender, String message, @Nullable Player player,
|
||||||
@Nullable ChatPlayer mp, @Nullable ChromaGamerBase cg, final String channelidentifier,
|
@Nullable ChatPlayer mp, @Nullable ChromaGamerBase cg, final String channelidentifier,
|
||||||
String origin) {
|
String origin) {
|
||||||
TellrawPart json = new TellrawPart("");
|
TellrawPart json = new TellrawPart("");
|
||||||
ChatOnlyComponent.tellrawCreate(mp, json); //TODO: Make nice API
|
ChatOnlyComponent.tellrawCreate(mp, json); //TODO: Make nice API
|
||||||
json.addExtra(
|
json.addExtra(
|
||||||
new TellrawPart(channelidentifier)
|
new TellrawPart(channelidentifier)
|
||||||
.setHoverEvent(
|
.setHoverEvent(
|
||||||
TellrawEvent.create(TellrawEvent.HoverAction.SHOW_TEXT,
|
TellrawEvent.create(TellrawEvent.HoverAction.SHOW_TEXT,
|
||||||
new TellrawPart((MCORIGIN.equals(origin) ? "" : "From " + origin + "n")
|
new TellrawPart((MCORIGIN.equals(origin) ? "" : "From " + origin + "n")
|
||||||
+ "Copy message").setColor(Color.Blue)))
|
+ "Copy message").setColor(Color.Blue)))
|
||||||
.setClickEvent(TellrawEvent.create(TellrawEvent.ClickAction.SUGGEST_COMMAND, message)));
|
.setClickEvent(TellrawEvent.create(TellrawEvent.ClickAction.SUGGEST_COMMAND, message)));
|
||||||
if (PluginMain.permission.has(sender, "tbmc.badge.diamond"))
|
if (PluginMain.permission.has(sender, "tbmc.badge.diamond"))
|
||||||
json.addExtra(new TellrawPart("[P]").setColor(Color.Aqua).setBold(true)
|
json.addExtra(new TellrawPart("[P]").setColor(Color.Aqua).setBold(true)
|
||||||
.setHoverEvent(TellrawEvent.create(TellrawEvent.HoverAction.SHOW_TEXT, "Diamond Patreon supporter")));
|
.setHoverEvent(TellrawEvent.create(TellrawEvent.HoverAction.SHOW_TEXT, "Diamond Patreon supporter")));
|
||||||
else if (PluginMain.permission.has(sender, "tbmc.badge.gold"))
|
else if (PluginMain.permission.has(sender, "tbmc.badge.gold"))
|
||||||
json.addExtra(new TellrawPart("[P]").setColor(Color.Gold).setBold(true)
|
json.addExtra(new TellrawPart("[P]").setColor(Color.Gold).setBold(true)
|
||||||
.setHoverEvent(TellrawEvent.create(TellrawEvent.HoverAction.SHOW_TEXT, "Gold Patreon supporter")));
|
.setHoverEvent(TellrawEvent.create(TellrawEvent.HoverAction.SHOW_TEXT, "Gold Patreon supporter")));
|
||||||
json.addExtra(new TellrawPart(" <"));
|
json.addExtra(new TellrawPart(" <"));
|
||||||
TellrawPart hovertp = new TellrawPart("");
|
TellrawPart hovertp = new TellrawPart("");
|
||||||
if (cg != null)
|
if (cg != null)
|
||||||
hovertp.addExtra(new TellrawPart(cg.getInfo(ChromaGamerBase.InfoTarget.MCHover)));
|
hovertp.addExtra(new TellrawPart(cg.getInfo(ChromaGamerBase.InfoTarget.MCHover)));
|
||||||
json.addExtra(new TellrawPart(getSenderName(sender, player))
|
json.addExtra(new TellrawPart(getSenderName(sender, player))
|
||||||
.setHoverEvent(TellrawEvent.create(TellrawEvent.HoverAction.SHOW_TEXT, hovertp)));
|
.setHoverEvent(TellrawEvent.create(TellrawEvent.HoverAction.SHOW_TEXT, hovertp)));
|
||||||
json.addExtra(new TellrawPart("> "));
|
json.addExtra(new TellrawPart("> "));
|
||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getSenderName(CommandSender sender, Player player) {
|
private static String getSenderName(CommandSender sender, Player player) {
|
||||||
if (player == null)
|
if (player == null)
|
||||||
return sender.getName();
|
return sender.getName();
|
||||||
return player.getDisplayName();
|
return player.getDisplayName();
|
||||||
}
|
}
|
||||||
|
|
||||||
static String getChannelID(Channel channel, String origin) {
|
static String getChannelID(Channel channel, String origin) {
|
||||||
return ("[" + (MCORIGIN.equals(origin) ? "" : "§8" + origin.substring(0, 1) + "§r|") + channel.DisplayName().get())
|
return ("[" + (MCORIGIN.equals(origin) ? "" : "§8" + origin.substring(0, 1) + "§r|") + channel.DisplayName().get())
|
||||||
+ "]";
|
+ "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
static ArrayList<ChatFormatter> addFormatters(Color colormode) {
|
static ArrayList<ChatFormatter> addFormatters(Color colormode) {
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
ArrayList<ChatFormatter> formatters = (ArrayList<ChatFormatter>) commonFormatters.clone();
|
ArrayList<ChatFormatter> formatters = (ArrayList<ChatFormatter>) commonFormatters.clone();
|
||||||
|
|
||||||
formatters.add(
|
formatters.add(
|
||||||
ChatFormatter.builder().regex(ENTIRE_MESSAGE_PATTERN).color(colormode).priority(Priority.Low).build());
|
ChatFormatter.builder().regex(ENTIRE_MESSAGE_PATTERN).color(colormode).priority(Priority.Low).build());
|
||||||
|
|
||||||
boolean nottest; //Not assigning a default value, so that it can only be used in the if
|
boolean nottest; //Not assigning a default value, so that it can only be used in the if
|
||||||
if ((nottest = Bukkit.getOnlinePlayers().size() > 0) || Bukkit.getVersion().equals("test")) {
|
if ((nottest = Bukkit.getOnlinePlayers().size() > 0) || Bukkit.getVersion().equals("test")) {
|
||||||
StringBuilder namesb = new StringBuilder("(?i)(");
|
StringBuilder namesb = new StringBuilder("(?i)(");
|
||||||
if (nottest)
|
if (nottest)
|
||||||
for (Player p : Bukkit.getOnlinePlayers())
|
for (Player p : Bukkit.getOnlinePlayers())
|
||||||
namesb.append(p.getName()).append("|");
|
namesb.append(p.getName()).append("|");
|
||||||
else
|
else
|
||||||
for (String testPlayer : testPlayers)
|
for (String testPlayer : testPlayers)
|
||||||
namesb.append(testPlayer).append("|");
|
namesb.append(testPlayer).append("|");
|
||||||
namesb.deleteCharAt(namesb.length() - 1);
|
namesb.deleteCharAt(namesb.length() - 1);
|
||||||
namesb.append(")");
|
namesb.append(")");
|
||||||
StringBuilder nicksb = new StringBuilder("(?i)(");
|
StringBuilder nicksb = new StringBuilder("(?i)(");
|
||||||
boolean addNickFormatter = false;
|
boolean addNickFormatter = false;
|
||||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||||
final String nick = PlayerListener.nicknames.inverse().get(p.getUniqueId());
|
final String nick = PlayerListener.nicknames.inverse().get(p.getUniqueId());
|
||||||
if (nick != null) {
|
if (nick != null) {
|
||||||
nicksb.append(nick).append("|");
|
nicksb.append(nick).append("|");
|
||||||
addNickFormatter = true; //Add it even if there's only 1 player online (it was in the if)
|
addNickFormatter = true; //Add it even if there's only 1 player online (it was in the if)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
nicksb.deleteCharAt(nicksb.length() - 1);
|
nicksb.deleteCharAt(nicksb.length() - 1);
|
||||||
nicksb.append(")");
|
nicksb.append(")");
|
||||||
|
|
||||||
Consumer<String> error = message -> {
|
Consumer<String> error = message -> {
|
||||||
if (PluginMain.Instance != null)
|
if (PluginMain.Instance != null)
|
||||||
PluginMain.Instance.getLogger().warning(message);
|
PluginMain.Instance.getLogger().warning(message);
|
||||||
else
|
else
|
||||||
System.out.println(message);
|
System.out.println(message);
|
||||||
};
|
};
|
||||||
|
|
||||||
formatters.add(ChatFormatter.builder().regex(Pattern.compile(namesb.toString())).color(Color.Aqua)
|
formatters.add(ChatFormatter.builder().regex(Pattern.compile(namesb.toString())).color(Color.Aqua)
|
||||||
.onmatch((match, builder, section) -> {
|
.onmatch((match, builder, section) -> {
|
||||||
Player p = Bukkit.getPlayer(match);
|
Player p = Bukkit.getPlayer(match);
|
||||||
Optional<String> pn = nottest ? Optional.empty()
|
Optional<String> pn = nottest ? Optional.empty()
|
||||||
: Arrays.stream(testPlayers).filter(tp -> tp.equalsIgnoreCase(match)).findAny();
|
: Arrays.stream(testPlayers).filter(tp -> tp.equalsIgnoreCase(match)).findAny();
|
||||||
if (nottest ? p == null : !pn.isPresent()) {
|
if (nottest ? p == null : !pn.isPresent()) {
|
||||||
error.accept("Error: Can't find player " + match + " but was reported as online.");
|
error.accept("Error: Can't find player " + match + " but was reported as online.");
|
||||||
return "§c" + match + "§r";
|
return "§c" + match + "§r";
|
||||||
}
|
}
|
||||||
ChatPlayer mpp = TBMCPlayer.getPlayer(nottest ? p.getUniqueId() : new UUID(0, 0), ChatPlayer.class);
|
ChatPlayer mpp = TBMCPlayer.getPlayer(nottest ? p.getUniqueId() : new UUID(0, 0), ChatPlayer.class);
|
||||||
if (nottest) {
|
if (nottest) {
|
||||||
|
playPingSound(p);
|
||||||
|
}
|
||||||
|
String color = String.format("§%x", (mpp.GetFlairColor() == 0x00 ? 0xb : mpp.GetFlairColor()));
|
||||||
|
return color + (nottest ? p.getName() : pn.get()) + "§r"; //Fix name casing, except when testing
|
||||||
|
}).priority(Priority.High).type(ChatFormatter.Type.Excluder).build());
|
||||||
|
|
||||||
|
if (addNickFormatter)
|
||||||
|
formatters.add(ChatFormatter.builder().regex((Pattern.compile(nicksb.toString()))).color(Color.Aqua)
|
||||||
|
.onmatch((match, builder, section) -> {
|
||||||
|
if (PlayerListener.nicknames.containsKey(match.toLowerCase())) { //Made a stream and all that but I can actually store it lowercased
|
||||||
|
Player p = Bukkit.getPlayer(PlayerListener.nicknames.get(match.toLowerCase()));
|
||||||
|
if (p == null) {
|
||||||
|
error.accept("Error: Can't find player nicknamed "
|
||||||
|
+ match.toLowerCase() + " but was reported as online.");
|
||||||
|
return "§c" + match + "§r";
|
||||||
|
}
|
||||||
playPingSound(p);
|
playPingSound(p);
|
||||||
|
return PluginMain.essentials.getUser(p).getNickname();
|
||||||
}
|
}
|
||||||
String color = String.format("§%x", (mpp.GetFlairColor() == 0x00 ? 0xb : mpp.GetFlairColor()));
|
error.accept("Player nicknamed " + match.toLowerCase()
|
||||||
return color + (nottest ? p.getName() : pn.get()) + "§r"; //Fix name casing, except when testing
|
+ " not found in nickname map but was reported as online.");
|
||||||
}).priority(Priority.High).type(ChatFormatter.Type.Excluder).build());
|
return "§c" + match + "§r";
|
||||||
|
}).priority(Priority.High).type(ChatFormatter.Type.Excluder).build());
|
||||||
if (addNickFormatter)
|
}
|
||||||
formatters.add(ChatFormatter.builder().regex((Pattern.compile(nicksb.toString()))).color(Color.Aqua)
|
return formatters;
|
||||||
.onmatch((match, builder, section) -> {
|
}
|
||||||
if (PlayerListener.nicknames.containsKey(match.toLowerCase())) { //Made a stream and all that but I can actually store it lowercased
|
|
||||||
Player p = Bukkit.getPlayer(PlayerListener.nicknames.get(match.toLowerCase()));
|
|
||||||
if (p == null) {
|
|
||||||
error.accept("Error: Can't find player nicknamed "
|
|
||||||
+ match.toLowerCase() + " but was reported as online.");
|
|
||||||
return "§c" + match + "§r";
|
|
||||||
}
|
|
||||||
playPingSound(p);
|
|
||||||
return PluginMain.essentials.getUser(p).getNickname();
|
|
||||||
}
|
|
||||||
error.accept("Player nicknamed " + match.toLowerCase()
|
|
||||||
+ " not found in nickname map but was reported as online.");
|
|
||||||
return "§c" + match + "§r";
|
|
||||||
}).priority(Priority.High).type(ChatFormatter.Type.Excluder).build());
|
|
||||||
}
|
|
||||||
return formatters;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void playPingSound(Player p) {
|
private static void playPingSound(Player p) {
|
||||||
if (PluginMain.Instance.notificationSound().get().length() == 0)
|
if (PluginMain.Instance.notificationSound().get().length() == 0)
|
||||||
|
@ -329,7 +324,7 @@ public class ChatProcessing {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void doFunStuff(CommandSender sender, TBMCChatEventBase event, String message) {
|
static void doFunStuff(CommandSender sender, TBMCChatEventBase event, String message) {
|
||||||
val fc=ComponentManager.getIfEnabled(FunComponent.class);
|
val fc = ComponentManager.getIfEnabled(FunComponent.class);
|
||||||
if(fc!=null) fc.onChat(sender, event, message);
|
if (fc != null) fc.onChat(sender, event, message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,6 @@ import net.milkbowl.vault.permission.Permission;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.ConsoleCommandSender;
|
import org.bukkit.command.ConsoleCommandSender;
|
||||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||||
import org.bukkit.scoreboard.Scoreboard;
|
|
||||||
|
|
||||||
public class PluginMain extends ButtonPlugin { // Translated to Java: 2015.07.15.
|
public class PluginMain extends ButtonPlugin { // Translated to Java: 2015.07.15.
|
||||||
// A user, which flair isn't obtainable:
|
// A user, which flair isn't obtainable:
|
||||||
|
@ -37,8 +36,6 @@ public class PluginMain extends ButtonPlugin { // Translated to Java: 2015.07.15
|
||||||
public static PluginMain Instance;
|
public static PluginMain Instance;
|
||||||
public static ConsoleCommandSender Console;
|
public static ConsoleCommandSender Console;
|
||||||
|
|
||||||
public static Scoreboard SB;
|
|
||||||
|
|
||||||
public ConfigData<String> notificationSound() {
|
public ConfigData<String> notificationSound() {
|
||||||
return getIConfig().getData("notificationSound", "");
|
return getIConfig().getData("notificationSound", "");
|
||||||
}
|
}
|
||||||
|
@ -58,8 +55,6 @@ public class PluginMain extends ButtonPlugin { // Translated to Java: 2015.07.15
|
||||||
MainPlugin.Instance.setChatHandlerEnabled(false); //Disable Core chat handler
|
MainPlugin.Instance.setChatHandlerEnabled(false); //Disable Core chat handler
|
||||||
Console = this.getServer().getConsoleSender();
|
Console = this.getServer().getConsoleSender();
|
||||||
|
|
||||||
SB = getServer().getScoreboardManager().getMainScoreboard(); // Main can be detected with @a[score_...]
|
|
||||||
|
|
||||||
if (Bukkit.getPluginManager().isPluginEnabled("Towny"))
|
if (Bukkit.getPluginManager().isPluginEnabled("Towny"))
|
||||||
Component.registerComponent(this, new TownyComponent());
|
Component.registerComponent(this, new TownyComponent());
|
||||||
|
|
||||||
|
|
|
@ -4,25 +4,22 @@ import buttondevteam.core.MainPlugin;
|
||||||
import buttondevteam.lib.TBMCChatEvent;
|
import buttondevteam.lib.TBMCChatEvent;
|
||||||
import lombok.experimental.UtilityClass;
|
import lombok.experimental.UtilityClass;
|
||||||
import lombok.val;
|
import lombok.val;
|
||||||
import net.minecraft.server.v1_12_R1.ChatComponentUtils;
|
|
||||||
import net.minecraft.server.v1_12_R1.IChatBaseComponent;
|
|
||||||
import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiPredicate;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
@UtilityClass
|
@UtilityClass
|
||||||
public class VanillaUtils {
|
public class VanillaUtils {
|
||||||
public int getMCScoreIfChatOn(Player p, TBMCChatEvent e) {
|
public String getGroupIfChatOn(Player p, TBMCChatEvent e) {
|
||||||
try {
|
try {
|
||||||
if (isChatOn(p)) // Only send if client allows chat
|
if (isChatOn(p)) // Only send if client allows chat
|
||||||
return e.getMCScore(p);
|
return e.getGroupID(p);
|
||||||
else
|
else
|
||||||
return -1;
|
return null;
|
||||||
} catch (NoClassDefFoundError ex) {
|
} catch (NoClassDefFoundError ex) {
|
||||||
MainPlugin.Instance.getLogger().warning("Compatibility error, can't check if the chat is hidden by the player.");
|
MainPlugin.Instance.getLogger().warning("Compatibility error, can't check if the chat is hidden by the player.");
|
||||||
return e.getMCScore(p);
|
return e.getGroupID(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,6 +44,7 @@ public class VanillaUtils {
|
||||||
val full = ff.get(null); // EnumChatVisibility.FULL
|
val full = ff.get(null); // EnumChatVisibility.FULL
|
||||||
isChatOn = pl -> {
|
isChatOn = pl -> {
|
||||||
try {
|
try {
|
||||||
|
if (notCraftPlayer(pl.getClass())) return true; //Need to check each time
|
||||||
val ph = hm.invoke(pl); //pl.getHandle()
|
val ph = hm.invoke(pl); //pl.getHandle()
|
||||||
val flags = gcfm.invoke(ph); //handle.getChatFlags()
|
val flags = gcfm.invoke(ph); //handle.getChatFlags()
|
||||||
return flags == full; //TODO: It's only checked if not global
|
return flags == full; //TODO: It's only checked if not global
|
||||||
|
@ -72,34 +70,49 @@ public class VanillaUtils {
|
||||||
return Short.parseShort(v);
|
return Short.parseShort(v);
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
private BiConsumer<Player, String> tellRaw;
|
private BiPredicate<Player, String> tellRaw;
|
||||||
|
|
||||||
public boolean tellRaw(Player p, String json) {
|
public boolean tellRaw(Player p, String json) {
|
||||||
try {
|
try {
|
||||||
val pcl = p.getClass();
|
if (tellRaw == null) {
|
||||||
if (notCraftPlayer(pcl)) return false;
|
val pcl = p.getClass();
|
||||||
val hm = pcl.getMethod("getHandle");
|
if (notCraftPlayer(pcl)) return false;
|
||||||
val handle = hm.invoke(p); ;
|
val hm = pcl.getMethod("getHandle");
|
||||||
val nms = handle.getClass().getPackage().getName();
|
val handle = hm.invoke(p);
|
||||||
val chatcompcl = Class.forName(nms + ".IChatBaseComponent");
|
val nms = handle.getClass().getPackage().getName();
|
||||||
val sendmsg = handle.getClass().getMethod("sendMessage", chatcompcl);
|
val chatcompcl = Class.forName(nms + ".IChatBaseComponent");
|
||||||
|
val sendmsg = handle.getClass().getMethod("sendMessage", chatcompcl);
|
||||||
|
|
||||||
val ccucl = Class.forName(nms + ".ChatComponentUtils");
|
val ccucl = Class.forName(nms + ".ChatComponentUtils");
|
||||||
val iclcl = Class.forName(nms + ".ICommandListener");
|
val iclcl = Class.forName(nms + ".ICommandListener");
|
||||||
val encl = Class.forName(nms + ".Entity");
|
val encl = Class.forName(nms + ".Entity");
|
||||||
val ffdm = ccucl.getMethod("filterForDisplay", iclcl, chatcompcl, encl);
|
//val ffdm = ccucl.getMethod("filterForDisplay", iclcl, chatcompcl, encl);
|
||||||
|
|
||||||
val cscl = Class.forName(chatcompcl.getName() + "$ChatSerializer");
|
val cscl = Class.forName(chatcompcl.getName() + "$ChatSerializer");
|
||||||
val am = cscl.getMethod("a", String.class);
|
val am = cscl.getMethod("a", String.class);
|
||||||
val deserialized = am.invoke(null, json);
|
|
||||||
val filtered = ffdm.invoke(null, handle, deserialized, handle); //TODO: Use BiConsumer
|
|
||||||
sendmsg.invoke(handle, filtered);
|
|
||||||
|
|
||||||
((CraftPlayer) p).getHandle().sendMessage(ChatComponentUtils
|
tellRaw = (pl, jsonStr) -> {
|
||||||
|
if (notCraftPlayer(pl.getClass())) return false;
|
||||||
|
try {
|
||||||
|
val hhandle = hm.invoke(pl);
|
||||||
|
val deserialized = am.invoke(null, jsonStr);
|
||||||
|
//val filtered = ffdm.invoke(null, hhandle, deserialized, hhandle);
|
||||||
|
sendmsg.invoke(hhandle, deserialized);
|
||||||
|
return true;
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/*((CraftPlayer) p).getHandle().sendMessage(ChatComponentUtils
|
||||||
.filterForDisplay(((CraftPlayer) p).getHandle(),
|
.filterForDisplay(((CraftPlayer) p).getHandle(),
|
||||||
IChatBaseComponent.ChatSerializer.a(json), ((CraftPlayer) p).getHandle()));
|
IChatBaseComponent.ChatSerializer.a(json), ((CraftPlayer) p).getHandle()));*/
|
||||||
|
return tellRaw.test(p, json);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
PluginMain.Instance.getLogger().warning("Could not use tellRaw: " + e.getMessage());
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package buttondevteam.chat.components.towny;
|
package buttondevteam.chat.components.towny;
|
||||||
|
|
||||||
import buttondevteam.chat.ChatUtils;
|
|
||||||
import buttondevteam.chat.PluginMain;
|
import buttondevteam.chat.PluginMain;
|
||||||
|
import buttondevteam.chat.VanillaUtils;
|
||||||
import buttondevteam.chat.formatting.TellrawPart;
|
import buttondevteam.chat.formatting.TellrawPart;
|
||||||
import buttondevteam.core.component.channel.Channel;
|
import buttondevteam.core.component.channel.Channel;
|
||||||
import buttondevteam.lib.architecture.Component;
|
import buttondevteam.lib.architecture.Component;
|
||||||
|
@ -20,6 +20,7 @@ import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@ -48,12 +49,20 @@ public class TownyComponent extends Component<PluginMain> {
|
||||||
TownyAnnouncer.setdown();
|
TownyAnnouncer.setdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handleSpies(Channel channel, TellrawPart json, Function<TellrawPart, String> toJson) {
|
public void handleSpiesInit(Channel channel, TellrawPart json, Function<TellrawPart, String> toJson) {
|
||||||
if (channel.ID.equals(TownChat.ID) || channel.ID.equals(NationChat.ID)) {
|
if (channel.ID.equals(TownChat.ID) || channel.ID.equals(NationChat.ID)) {
|
||||||
((List<TellrawPart>) json.getExtra()).add(0, new TellrawPart("[SPY]"));
|
((List<TellrawPart>) json.getExtra()).add(0, new TellrawPart("[SPY]"));
|
||||||
String jsonstr = toJson.apply(json);
|
jsonstr = toJson.apply(json);
|
||||||
ChatUtils.dispatchConsoleCommand(String.format(
|
}
|
||||||
"tellraw @a[score_%s=1000,score_%s_min=1000] %s", channel.ID, channel.ID, jsonstr), true);
|
}
|
||||||
|
|
||||||
|
private String jsonstr;
|
||||||
|
|
||||||
|
public void handleSpies(Channel channel, Player p) {
|
||||||
|
if (channel.ID.equals(TownChat.ID) || channel.ID.equals(NationChat.ID)) {
|
||||||
|
if (Optional.ofNullable(TU.getResidentMap().get(p.getName().toLowerCase()))
|
||||||
|
.filter(r -> r.hasMode("spy")).isPresent())
|
||||||
|
VanillaUtils.tellRaw(p, jsonstr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@ import buttondevteam.chat.components.flair.FlairComponent;
|
||||||
import buttondevteam.chat.components.towncolors.TownColorComponent;
|
import buttondevteam.chat.components.towncolors.TownColorComponent;
|
||||||
import buttondevteam.core.ComponentManager;
|
import buttondevteam.core.ComponentManager;
|
||||||
import buttondevteam.core.component.channel.Channel;
|
import buttondevteam.core.component.channel.Channel;
|
||||||
import buttondevteam.core.component.channel.ChatChannelRegisterEvent;
|
|
||||||
import buttondevteam.core.component.channel.ChatRoom;
|
import buttondevteam.core.component.channel.ChatRoom;
|
||||||
import buttondevteam.lib.TBMCChatEvent;
|
import buttondevteam.lib.TBMCChatEvent;
|
||||||
import buttondevteam.lib.TBMCCoreAPI;
|
import buttondevteam.lib.TBMCCoreAPI;
|
||||||
|
@ -178,12 +177,6 @@ public class PlayerListener implements Listener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onChannelRegistered(ChatChannelRegisterEvent e) {
|
|
||||||
if (!e.getChannel().isGlobal() && PluginMain.SB.getObjective(e.getChannel().ID) == null) // Not global chat and doesn't exist yet
|
|
||||||
PluginMain.SB.registerNewObjective(e.getChannel().ID, "dummy");
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onNickChange(NickChangeEvent e) {
|
public void onNickChange(NickChangeEvent e) {
|
||||||
String nick = e.getValue();
|
String nick = e.getValue();
|
||||||
|
|
Loading…
Reference in a new issue