SendChatMessage refactor, ignoreSenderPermissions
Used for channelcon
This commit is contained in:
parent
a691278ea9
commit
86a2a41511
3 changed files with 76 additions and 9 deletions
|
@ -5,6 +5,8 @@ import lombok.Getter;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Make sure to only send the message to users where {@link #shouldSendTo(CommandSender)} returns true.
|
* Make sure to only send the message to users where {@link #shouldSendTo(CommandSender)} returns true.
|
||||||
*
|
*
|
||||||
|
@ -17,15 +19,55 @@ public class TBMCChatEvent extends TBMCChatEventBase {
|
||||||
super(channel, message, score, groupid);
|
super(channel, message, score, groupid);
|
||||||
this.sender = sender;
|
this.sender = sender;
|
||||||
this.fromcmd = fromcmd;
|
this.fromcmd = fromcmd;
|
||||||
}
|
this.ignoreSenderPermissions = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TBMCChatEvent(CommandSender sender, Channel channel, String message, int score, boolean fromcmd, String groupid, boolean ignoreSenderPermissions) {
|
||||||
|
super(channel, message, score, groupid);
|
||||||
|
this.sender = sender;
|
||||||
|
this.fromcmd = fromcmd;
|
||||||
|
this.ignoreSenderPermissions = ignoreSenderPermissions;
|
||||||
|
}
|
||||||
|
|
||||||
private static final HandlerList handlers = new HandlerList();
|
private static final HandlerList handlers = new HandlerList();
|
||||||
|
|
||||||
private CommandSender sender;
|
private CommandSender sender;
|
||||||
private boolean fromcmd;
|
private boolean fromcmd;
|
||||||
|
private final boolean ignoreSenderPermissions;
|
||||||
// TODO: Message object with data?
|
// TODO: Message object with data?
|
||||||
|
|
||||||
@Override
|
/**
|
||||||
|
* This will allow the sender of the message if {@link #isIgnoreSenderPermissions()} is true.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean shouldSendTo(CommandSender sender) {
|
||||||
|
if (isIgnoreSenderPermissions() && sender.equals(this.sender))
|
||||||
|
return true; //Allow sending the message no matter what
|
||||||
|
return super.shouldSendTo(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This will allow the sender of the message if {@link #isIgnoreSenderPermissions()} is true.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int getMCScore(CommandSender sender) {
|
||||||
|
if (isIgnoreSenderPermissions() && sender.equals(this.sender))
|
||||||
|
return getScore(); //Send in the correct group no matter what
|
||||||
|
return super.getMCScore(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This will allow the sender of the message if {@link #isIgnoreSenderPermissions()} is true.
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public String getGroupID(CommandSender sender) {
|
||||||
|
if (isIgnoreSenderPermissions() && sender.equals(this.sender))
|
||||||
|
return getGroupID(); //Send in the correct group no matter what
|
||||||
|
return super.getGroupID(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public HandlerList getHandlers() {
|
public HandlerList getHandlers() {
|
||||||
return handlers;
|
return handlers;
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,12 +48,14 @@ public abstract class TBMCChatEventBase extends Event implements Cancellable {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Note: Errors are sent to the sender automatically
|
* Note: Errors are sent to the sender automatically<br>
|
||||||
|
*
|
||||||
|
* Null means don't send
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public String getGroupID(CommandSender sender) {
|
public String getGroupID(CommandSender sender) {
|
||||||
if (channel.filteranderrormsg == null)
|
if (channel.filteranderrormsg == null)
|
||||||
return null;
|
return "everyone";
|
||||||
RecipientTestResult result = channel.filteranderrormsg.apply(sender);
|
RecipientTestResult result = channel.filteranderrormsg.apply(sender);
|
||||||
return result.errormessage == null ? result.groupID : null;
|
return result.errormessage == null ? result.groupID : null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -231,21 +231,44 @@ public class TBMCChatAPI {
|
||||||
* @return The event cancelled state
|
* @return The event cancelled state
|
||||||
*/
|
*/
|
||||||
public static boolean SendChatMessage(Channel channel, CommandSender sender, String message, boolean fromcommand) {
|
public static boolean SendChatMessage(Channel channel, CommandSender sender, String message, boolean fromcommand) {
|
||||||
|
return sendChatMessageInternal(channel, sender, message, fromcommand, sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean sendChatMessageInternal(Channel channel, CommandSender sender, String message, boolean fromcommand, CommandSender permcheck) {
|
||||||
if (!Channel.getChannels().contains(channel))
|
if (!Channel.getChannels().contains(channel))
|
||||||
throw new RuntimeException("Channel " + channel.DisplayName + " not registered!");
|
throw new RuntimeException("Channel " + channel.DisplayName + " not registered!");
|
||||||
|
RecipientTestResult rtr = getScoreOrSendError(channel, permcheck);
|
||||||
|
int score = rtr.score;
|
||||||
|
if (score == -1 || rtr.groupID == null)
|
||||||
|
return true;
|
||||||
TBMCChatPreprocessEvent eventPre = new TBMCChatPreprocessEvent(sender, channel, message);
|
TBMCChatPreprocessEvent eventPre = new TBMCChatPreprocessEvent(sender, channel, message);
|
||||||
Bukkit.getPluginManager().callEvent(eventPre);
|
Bukkit.getPluginManager().callEvent(eventPre);
|
||||||
if (eventPre.isCancelled())
|
if (eventPre.isCancelled())
|
||||||
return true;
|
return true;
|
||||||
RecipientTestResult rtr = getScoreOrSendError(channel, sender);
|
TBMCChatEvent event;
|
||||||
int score = rtr.score;
|
if (permcheck == sender)
|
||||||
if (score == -1 || rtr.groupID == null)
|
event = new TBMCChatEvent(sender, channel, eventPre.getMessage(), score, fromcommand, rtr.groupID);
|
||||||
return true;
|
else
|
||||||
TBMCChatEvent event = new TBMCChatEvent(sender, channel, eventPre.getMessage(), score, fromcommand, rtr.groupID);
|
event = new TBMCChatEvent(sender, channel, eventPre.getMessage(), score, fromcommand, rtr.groupID, true);
|
||||||
Bukkit.getPluginManager().callEvent(event);
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
return event.isCancelled();
|
return event.isCancelled();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends a chat message to Minecraft. Make sure that the channel is registered with {@link #RegisterChatChannel(Channel)}.<br>
|
||||||
|
* This will not check if the sender has permission.
|
||||||
|
*
|
||||||
|
* @param channel The channel to send to
|
||||||
|
* @param sender The sender to send from
|
||||||
|
* @param message The message to send
|
||||||
|
* @param fromcommand Whether this message comes from running a command, used to determine whether to delete Discord messages for example
|
||||||
|
* @param permcheck The sender to check permissions
|
||||||
|
* @return The event cancelled state
|
||||||
|
*/
|
||||||
|
public static boolean SendChatMessageDontCheckSender(Channel channel, CommandSender sender, String message, boolean fromcommand, CommandSender permcheck) {
|
||||||
|
return sendChatMessageInternal(channel, sender, message, fromcommand, permcheck);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends a regular message to Minecraft. Make sure that the channel is registered with {@link #RegisterChatChannel(Channel)}.
|
* Sends a regular message to Minecraft. Make sure that the channel is registered with {@link #RegisterChatChannel(Channel)}.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue