Start fixing errors related to player API changes

- The fancy chat API would be useful here, I don't want to update my old code
This commit is contained in:
Norbi Peti 2023-06-09 01:25:09 +02:00
parent 2242655c41
commit 51cf31713b
No known key found for this signature in database
GPG key ID: DBA4C4549A927E56
11 changed files with 75 additions and 75 deletions

View file

@ -1,8 +1,8 @@
package buttondevteam.chat;
import buttondevteam.core.component.channel.Channel;
import buttondevteam.lib.ChromaUtils;
import buttondevteam.lib.TBMCChatEvent;
import buttondevteam.lib.player.ChromaGamerBase;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -48,19 +48,18 @@ public final class ChatUtils {
* @param e The chat event
*/
public static void sendChatMessage(TBMCChatEvent e) {
var str = getMessageString(e.getChannel(), e.getSender(), e.getMessage());
var str = getMessageString(e.getChannel(), e.getUser(), e.getMessage());
for (Player p : Bukkit.getOnlinePlayers())
if (e.shouldSendTo(p))
if (e.shouldSendTo(ChromaGamerBase.getFromSender(p)))
p.sendMessage(str);
Bukkit.getConsoleSender().sendMessage(str);
}
public static String getMessageString(Channel channel, CommandSender sender, String message) {
return "§c!§r[" + channel.displayName.get() + "] <"
+ ChromaUtils.getDisplayName(sender) + "> " + message;
public static String getMessageString(Channel channel, ChromaGamerBase sender, String message) {
return "§c!§r[" + channel.displayName.get() + "] <" + sender.getName() + "> " + message;
}
public static void sendChatMessage(Channel channel, CommandSender sender, String message, CommandSender to) {
public static void sendChatMessage(Channel channel, ChromaGamerBase sender, String message, CommandSender to) {
to.sendMessage(getMessageString(channel, sender, message));
}
}

View file

@ -2,6 +2,7 @@ package buttondevteam.chat;
import buttondevteam.core.MainPlugin;
import buttondevteam.lib.TBMCChatEvent;
import buttondevteam.lib.player.ChromaGamerBase;
import lombok.experimental.UtilityClass;
import lombok.val;
import org.bukkit.entity.Player;
@ -16,14 +17,12 @@ import java.util.function.Predicate;
public class VanillaUtils {
public String getGroupIfChatOn(Player p, TBMCChatEvent e) {
try {
if (isChatOn(p)) // Only send if client allows chat
return e.getGroupID(p);
else
if (!isChatOn(p)) // Only send if client allows chat
return null;
} catch (NoClassDefFoundError ex) {
MainPlugin.instance.getLogger().warning("Compatibility error, can't check if the chat is hidden by the player.");
return e.getGroupID(p);
}
return e.getGroupID(ChromaGamerBase.getFromSender(p));
}
private Predicate<Player> isChatOn;

View file

@ -1,6 +1,5 @@
package buttondevteam.chat.commands;
import buttondevteam.lib.ChromaUtils;
import buttondevteam.lib.TBMCSystemChatEvent;
import buttondevteam.lib.chat.*;
@ -11,6 +10,6 @@ import buttondevteam.lib.chat.*;
public class MeCommand extends ICommand2MC {
@Command2.Subcommand
public void def(Command2MCSender sender, @Command2.TextArg String message) {
TBMCChatAPI.SendSystemMessage(sender.getChannel(), sender.getChannel().getRTR(sender.getPermCheck()), "§5* " + ChromaUtils.getDisplayName(sender.getSender()) + " " + message, TBMCSystemChatEvent.BroadcastTarget.ALL);
TBMCChatAPI.SendSystemMessage(sender.getChannel(), sender.getChannel().getRTR(sender.getPermCheck()), "§5* " + sender.getSender().getName() + " " + message, TBMCSystemChatEvent.BroadcastTarget.ALL);
}
}

View file

@ -6,9 +6,8 @@ import buttondevteam.lib.chat.ChatMessage;
import buttondevteam.lib.chat.Command2;
import buttondevteam.lib.chat.CommandClass;
import buttondevteam.lib.chat.CustomTabCompleteMethod;
import lombok.RequiredArgsConstructor;
import buttondevteam.lib.player.ChromaGamerBase;
import lombok.val;
import org.bukkit.command.CommandSender;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
@ -26,11 +25,11 @@ public class HistoryCommand extends UCommandBase {
private static final HashMap<String, LinkedList<HistoryEntry>> messages = new HashMap<>();
@Command2.Subcommand
public boolean def(CommandSender sender, @Command2.OptionalArg String channel) {
public boolean def(ChromaGamerBase sender, @Command2.OptionalArg String channel) {
return showHistory(sender, channel);
}
public static boolean showHistory(CommandSender sender, String channel) {
public static boolean showHistory(ChromaGamerBase sender, String channel) {
if (!PluginMain.Instance.storeChatHistory.get()) {
sender.sendMessage("§6Chat history is disabled");
return true;
@ -55,7 +54,7 @@ public class HistoryCommand extends UCommandBase {
for (int i = Math.max(0, arr.length - 10); i < arr.length; i++) {
HistoryEntry e = arr[i];
val cm = e.chatMessage;
sender.sendMessage("[" + e.channel.displayName.get() + "] " + cm.getSender().getName() + ": " + cm.getMessage());
sender.sendMessage("[" + e.channel.displayName.get() + "] " + cm.getUser().getName() + ": " + cm.getMessage());
sent.set(true);
}
}
@ -69,14 +68,10 @@ public class HistoryCommand extends UCommandBase {
return Channel.getChannels().map(Channel::getIdentifier)::iterator;
}
@RequiredArgsConstructor
private static class HistoryEntry {
/**
* System.nanoTime()
*/
private final long timestamp;
private final ChatMessage chatMessage;
private final Channel channel;
/**
* @param timestamp System.nanoTime()
*/
private record HistoryEntry(long timestamp, ChatMessage chatMessage, Channel channel) {
}
public static void addChatMessage(ChatMessage chatMessage, Channel channel) {

View file

@ -5,7 +5,6 @@ import buttondevteam.lib.architecture.Component;
import buttondevteam.lib.architecture.ConfigData;
import buttondevteam.lib.architecture.IHaveConfig;
import buttondevteam.lib.chat.*;
import buttondevteam.lib.player.ChromaGamerBase;
import lombok.val;
import java.lang.reflect.Method;
@ -101,7 +100,7 @@ public class AppendTextComponent extends Component<PluginMain> {
@Command2.Subcommand
public void def(Command2MCSender sender, @Command2.OptionalArg @Command2.TextArg String message) {
TBMCChatAPI.sendChatMessage(ChatMessage.builder(sender.getSender(), ChromaGamerBase.getFromSender(sender.getSender()),
TBMCChatAPI.sendChatMessage(ChatMessage.builder(sender.getSender(),
(message == null ? "" : message + " ") + appendedText).fromCommand(true).permCheck(sender.getPermCheck()).build());
}

View file

@ -26,6 +26,7 @@ import com.google.common.collect.Lists;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import lombok.val;
import net.ess3.api.events.AfkStatusChangeEvent;
import org.bukkit.Bukkit;
import org.bukkit.Sound;
import org.bukkit.command.CommandSender;
@ -103,14 +104,14 @@ public class ChatProcessing {
public static boolean ProcessChat(TBMCChatEvent e, FormatterComponent component) {
Channel channel = e.getChannel();
CommandSender sender = e.getSender();
ChromaGamerBase cuser = e.getUser();
String message = e.getMessage();
long processstart = System.nanoTime();
Player player = (sender instanceof Player ? (Player) sender : null);
Player player = (cuser instanceof TBMCPlayerBase ? ((TBMCPlayerBase) cuser).getPlayer() : null);
User user = PluginMain.essentials.getUser(player);
if (player != null && PluginMain.essentials.getSettings().cancelAfkOnInteract()) {
user.updateActivity(true); //Could talk in a private channel, so broadcast
user.updateActivity(true, AfkStatusChangeEvent.Cause.CHAT); //Could talk in a private channel, so broadcast
if (user.isMuted())
return true;
}
@ -123,7 +124,7 @@ public class ChatProcessing {
if (mp != null) {
if (System.nanoTime() - mp.LastMessageTime < 1000L * 1000L * component.minTimeBetweenMessages.get()) { //0.1s by default
sender.sendMessage("§cYou are sending messages too quickly!");
cuser.sendMessage("§cYou are sending messages too quickly!");
return true;
}
mp.LastMessageTime = System.nanoTime();
@ -135,12 +136,12 @@ public class ChatProcessing {
//IRegistry
//CraftServer
doFunStuff(sender, e, message);
doFunStuff(cuser, e, message);
final String channelidentifier = getChannelID(channel, e.getOrigin());
PluginMain.Instance.getServer().getConsoleSender()
.sendMessage(String.format("%s <%s§r> %s", channelidentifier, getSenderName(sender, player), message));
.sendMessage(String.format("%s <%s§r> %s", channelidentifier, cuser.getName(), message));
if (Bukkit.getOnlinePlayers().size() == 0) return false; //Don't try to send to nobody (errors on 1.14)
@ -150,7 +151,7 @@ public class ChatProcessing {
ArrayList<MatchProviderBase> formatters;
if (component.allowFormatting.get()) {
formatters = addFormatters(e::shouldSendTo, component);
formatters = addFormatters(sender -> e.shouldSendTo(ChromaGamerBase.getFromSender(sender)), component);
if (colormode == channel.color.get() && mp != null && mp.RainbowPresserColorMode) { // Only overwrite channel color
createRPC(colormode, formatters);
}
@ -158,14 +159,13 @@ public class ChatProcessing {
} else
formatters = Lists.newArrayList();
TellrawPart json = createTellraw(sender, message, player, mp, e.getUser(), channelidentifier, e.getOrigin());
TellrawPart json = createTellraw(cuser, message, player, mp, e.getUser(), channelidentifier, e.getOrigin());
long combinetime = System.nanoTime();
ChatFormatter.Combine(formatters, message, json, component.getConfig(), FormatSettings.builder().color(colormode).build());
combinetime = System.nanoTime() - combinetime;
String jsonstr = toJson(json);
if (jsonstr.length() >= 32767) {
sender.sendMessage(
"§cError: Message too long. Try shortening it, or remove hashtags and other formatting.");
cuser.sendMessage("§cError: Message too long. Try shortening it, or remove hashtags and other formatting.");
return true;
}
DebugCommand.SendDebugMessage(jsonstr);
@ -180,7 +180,7 @@ public class ChatProcessing {
val tc = ComponentManager.getIfEnabled(TownyComponent.class);
Consumer<Player> spyConsumer = null;
if (tc != null)
spyConsumer = tc.handleSpiesInit(channel, json, ChatProcessing::toJson, sender, message);
spyConsumer = tc.handleSpiesInit(channel, json, ChatProcessing::toJson, cuser, message);
for (Player p : Bukkit.getOnlinePlayers()) {
final String group;
if (player != null
@ -221,11 +221,11 @@ public class ChatProcessing {
return gson.toJson(json);
}
static TellrawPart createTellraw(CommandSender sender, String message, @Nullable Player player,
static TellrawPart createTellraw(ChromaGamerBase user, String message, @Nullable Player player,
@Nullable ChatPlayer mp, @Nullable ChromaGamerBase cg, final String channelidentifier,
String origin) {
TellrawPart json = new TellrawPart("");
ChatOnlyComponent.tellrawCreate(mp, json); //TODO: Make nice API
ChatOnlyComponent.tellrawCreate(mp, json); //TODO: Use nice API (Paper)
json.addExtra(
new TellrawPart(channelidentifier)
.setHoverEvent(
@ -243,7 +243,7 @@ public class ChatProcessing {
TellrawPart hovertp = new TellrawPart("");
if (cg != null)
hovertp.addExtra(new TellrawPart(cg.getInfo(ChromaGamerBase.InfoTarget.MCHover)));
json.addExtra(new TellrawPart(getSenderName(sender, player))
json.addExtra(new TellrawPart(user.getName())
.setHoverEvent(TellrawEvent.create(TellrawEvent.HoverAction.SHOW_TEXT, hovertp)));
json.addExtra(new TellrawPart("> "));
return json;
@ -330,8 +330,8 @@ public class ChatProcessing {
component.notificationPitch.get());
}
static void doFunStuff(CommandSender sender, TBMCChatEventBase event, String message) {
static void doFunStuff(ChromaGamerBase user, TBMCChatEventBase event, String message) {
val fc = ComponentManager.getIfEnabled(FunComponent.class);
if (fc != null) fc.onChat(sender, event, message);
if (fc != null) fc.onChat(user, event, message);
}
}

View file

@ -3,7 +3,6 @@ package buttondevteam.chat.components.fun;
import buttondevteam.chat.ChatPlayer;
import buttondevteam.chat.PluginMain;
import buttondevteam.core.component.channel.Channel;
import buttondevteam.lib.ChromaUtils;
import buttondevteam.lib.TBMCChatEventBase;
import buttondevteam.lib.TBMCCommandPreprocessEvent;
import buttondevteam.lib.TBMCSystemChatEvent;
@ -12,9 +11,9 @@ import buttondevteam.lib.architecture.ConfigData;
import buttondevteam.lib.chat.TBMCChatAPI;
import buttondevteam.lib.player.ChromaGamerBase;
import buttondevteam.lib.player.TBMCPlayer;
import buttondevteam.lib.player.TBMCPlayerBase;
import lombok.val;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -36,7 +35,7 @@ public class FunComponent extends Component<PluginMain> implements Listener {
private boolean ActiveF = false;
private ChatPlayer FPlayer = null;
private BukkitTask Ftask = null;
private final HashSet<CommandSender> Fs = new HashSet<>();
private final HashSet<ChromaGamerBase> Fs = new HashSet<>();
private UnlolCommand command;
private TBMCSystemChatEvent.BroadcastTarget unlolTarget;
private TBMCSystemChatEvent.BroadcastTarget fTarget;
@ -80,20 +79,21 @@ public class FunComponent extends Component<PluginMain> implements Listener {
}
public void onChat(CommandSender sender, TBMCChatEventBase event, String message) {
public void onChat(ChromaGamerBase sender, TBMCChatEventBase event, String message) {
if (ActiveF && !Fs.contains(sender) && message.equalsIgnoreCase("F"))
Fs.add(sender);
if (unlol.get()) {
String msg = message.toLowerCase();
val lld = new UnlolCommand.LastlolData(sender, event, System.nanoTime());
boolean add;
if (add = msg.contains("lol"))
boolean add = msg.contains("lol");
if (add)
lld.setLolornot(true);
else {
String[] laughs = laughStrings.get();
for (String laugh : laughs) {
if (add = msg.contains(laugh)) {
add = msg.contains(laugh);
if (add) {
lld.setLolornot(false);
break;
}
@ -136,7 +136,7 @@ public class FunComponent extends Component<PluginMain> implements Listener {
@EventHandler
public void onPlayerLeave(PlayerQuitEvent event) {
if (unlol.get())
command.Lastlol.values().removeIf(lld -> lld.getLolowner().equals(event.getPlayer()));
command.Lastlol.values().removeIf(lld -> lld.getLolowner().equals(ChromaGamerBase.getFromSender(event.getPlayer())));
}
@EventHandler(priority = EventPriority.LOWEST)
@ -150,7 +150,14 @@ public class FunComponent extends Component<PluginMain> implements Listener {
if (ht.getName().equalsIgnoreCase(cmd))
return;
}
if (PluginMain.permission.has(event.getSender(), "chroma.unanything")) {
val user = event.getSender();
if (!(user instanceof TBMCPlayerBase)) {
// TODO: Cross-platform permission check; console is not supported here
user.sendMessage("§cError: You must be a player to use this command.");
return;
}
val player = ((TBMCPlayerBase) user).getPlayer();
if (player != null && PluginMain.permission.has(player, "chroma.unanything")) {
event.setCancelled(true);
int index = cmd.lastIndexOf(' ');
if (index == -1) {
@ -163,10 +170,9 @@ public class FunComponent extends Component<PluginMain> implements Listener {
event.getSender().sendMessage("§cError: Player not found. (/un" + s + " <player>)");
return;
}
val user = ChromaGamerBase.getFromSender(event.getSender());
target.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 10 * 20, 5, false, false));
val chan = user.channel.get();
TBMCChatAPI.SendSystemMessage(chan, chan.getRTR(event.getSender()), ChromaUtils.getDisplayName(event.getSender()) + " un" + s
val chan = user.getChannel().get();
TBMCChatAPI.SendSystemMessage(chan, chan.getRTR(event.getSender()), event.getSender().getName() + " un" + s
+ "'d " + target.getDisplayName(), unlolTarget);
}
}

View file

@ -1,17 +1,16 @@
package buttondevteam.chat.components.fun;
import buttondevteam.core.component.channel.Channel;
import buttondevteam.lib.ChromaUtils;
import buttondevteam.lib.TBMCChatEventBase;
import buttondevteam.lib.TBMCSystemChatEvent;
import buttondevteam.lib.chat.Command2;
import buttondevteam.lib.chat.CommandClass;
import buttondevteam.lib.chat.ICommand2MC;
import buttondevteam.lib.chat.TBMCChatAPI;
import buttondevteam.lib.player.ChromaGamerBase;
import buttondevteam.lib.player.TBMCPlayerBase;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
@ -33,17 +32,17 @@ public final class UnlolCommand extends ICommand2MC {
private final TBMCSystemChatEvent.BroadcastTarget target;
@Command2.Subcommand
public boolean def(CommandSender sender) {
public boolean def(ChromaGamerBase sender) {
LastlolData lol = Lastlol.values().stream().filter(lld -> lld.Chatevent.shouldSendTo(sender))
.max(Comparator.comparingLong(lld -> lld.Loltime)).orElse(null);
.max(Comparator.comparingLong(lld -> lld.Loltime)).orElse(null);
if (lol == null)
return true;
if (lol.Lolowner instanceof Player)
((Player) lol.Lolowner)
.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 2 * 20, 5, false, false));
String msg = ChromaUtils.getDisplayName(sender)
+ (lol.Lolornot ? " unlolled " : " unlaughed ")
+ ChromaUtils.getDisplayName(lol.Lolowner);
if (lol.Lolowner instanceof TBMCPlayerBase) {
var player = ((TBMCPlayerBase) lol.Lolowner).getPlayer();
if (player != null)
player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 2 * 20, 5, false, false));
}
String msg = sender.getName() + (lol.Lolornot ? " unlolled " : " unlaughed ") + lol.Lolowner.getName();
TBMCChatAPI.SendSystemMessage(Channel.globalChat, Channel.RecipientTestResult.ALL, msg, target);
Lastlol.remove(lol.Chatevent.getChannel());
return true;
@ -52,7 +51,7 @@ public final class UnlolCommand extends ICommand2MC {
@Data
public static class LastlolData {
private boolean Lolornot;
private final CommandSender Lolowner;
private final ChromaGamerBase Lolowner;
private final TBMCChatEventBase Chatevent;
private final long Loltime;
}

View file

@ -8,6 +8,8 @@ import buttondevteam.core.component.channel.Channel;
import buttondevteam.lib.architecture.Component;
import buttondevteam.lib.chat.Color;
import buttondevteam.lib.chat.TBMCChatAPI;
import buttondevteam.lib.player.ChromaGamerBase;
import buttondevteam.lib.player.TBMCPlayerBase;
import com.palmergames.bukkit.towny.TownyAPI;
import com.palmergames.bukkit.towny.TownyUniverse;
import com.palmergames.bukkit.towny.exceptions.NotRegisteredException;
@ -15,7 +17,6 @@ import com.palmergames.bukkit.towny.object.Nation;
import com.palmergames.bukkit.towny.object.Resident;
import com.palmergames.bukkit.towny.object.Town;
import lombok.val;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.ArrayList;
@ -55,7 +56,7 @@ public class TownyComponent extends Component<PluginMain> {
}
public Consumer<Player> handleSpiesInit(Channel channel, TellrawPart json, Function<TellrawPart, String> toJson,
CommandSender sender, String message) {
ChromaGamerBase sender, String message) {
if (channel.getIdentifier().equals(TownChat.getIdentifier()) || channel.getIdentifier().equals(NationChat.getIdentifier())) {
((List<TellrawPart>) json.getExtra()).add(0, new TellrawPart("[SPY]"));
String jsonstr = toJson.apply(json);
@ -64,7 +65,7 @@ public class TownyComponent extends Component<PluginMain> {
return p -> {};
}
private void handleSpies(Channel channel, Player p, String jsonstr, CommandSender sender, String message) {
private void handleSpies(Channel channel, Player p, String jsonstr, ChromaGamerBase sender, String message) {
if (channel.getIdentifier().equals(TownChat.getIdentifier()) || channel.getIdentifier().equals(NationChat.getIdentifier())) {
val res = dataSource.getResident(p.getName());
if (res == null) {
@ -79,9 +80,10 @@ public class TownyComponent extends Component<PluginMain> {
/**
* Return the error message for the message sender if they can't send it and the score
*/
private static Channel.RecipientTestResult checkTownNationChat(CommandSender sender, boolean nationchat) {
if (!(sender instanceof Player))
private static Channel.RecipientTestResult checkTownNationChat(ChromaGamerBase user, boolean nationchat) {
if (!(user instanceof TBMCPlayerBase))
return new Channel.RecipientTestResult("§cYou are not a player!");
val sender = ((TBMCPlayerBase) user).getOfflinePlayer();
Resident resident = dataSource.getResident(sender.getName());
Channel.RecipientTestResult result = checkTownNationChatInternal(nationchat, resident);
if (result.errormessage != null && resident != null && resident.getModes().contains("spy")) // Only use spy if they wouldn't see it

View file

@ -7,6 +7,7 @@ import buttondevteam.chat.commands.ucmds.HistoryCommand;
import buttondevteam.chat.components.flair.FlairComponent;
import buttondevteam.chat.components.flair.FlairStates;
import buttondevteam.core.ComponentManager;
import buttondevteam.lib.player.ChromaGamerBase;
import buttondevteam.lib.player.TBMCPlayerBase;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@ -53,7 +54,7 @@ public class PlayerJoinLeaveListener implements Listener {
PlayerListener.nicknames.forcePut(nwithoutformatting.toLowerCase(), p.getUniqueId());
if (PluginMain.Instance.storeChatHistory.get())
HistoryCommand.showHistory(e.getPlayer(), null);
HistoryCommand.showHistory(ChromaGamerBase.getFromSender(e.getPlayer()), null);
}
@EventHandler

View file

@ -10,6 +10,7 @@ import buttondevteam.chat.components.towncolors.TownColorComponent;
import buttondevteam.core.ComponentManager;
import buttondevteam.lib.TBMCChatEvent;
import buttondevteam.lib.TBMCCoreAPI;
import buttondevteam.lib.player.ChromaGamerBase;
import buttondevteam.lib.player.ChromaGamerBase.InfoTarget;
import buttondevteam.lib.player.TBMCPlayerGetInfoEvent;
import com.google.common.collect.BiMap;
@ -81,7 +82,7 @@ public class PlayerListener implements Listener {
&& Bukkit.getOnlinePlayers().size() > 0) { //If there are no players on, display to the first person
lastError = System.nanoTime(); //I put the whole thing in the if to protect against race conditions
for (Player p : Bukkit.getOnlinePlayers())
if (e.shouldSendTo(p))
if (e.shouldSendTo(ChromaGamerBase.getFromSender(p)))
p.sendMessage("[" + e.getChannel().displayName.get() + "] §cSome features in the message below might be unavailable due to an error.");
}
ChatUtils.sendChatMessage(e);