-
-
Notifications
You must be signed in to change notification settings - Fork 1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add separate events for local and global chat
This commit adds two new events: GlobalChatEvent and LocalChatEvent, which allow other plugin developers to know whether the message sent is a global or local one and act accordingly. If either of those events is cancelled, then the source event is cancelled too. Since all chat-related events share the same structure, a new abstract class ChatEvent is created with change made for LocalChatSpyEvent to use it without breaking its API. Aids DiscordSRV/DiscordSRV#1223
- Loading branch information
Showing
8 changed files
with
262 additions
and
109 deletions.
There are no files selected for viewing
99 changes: 6 additions & 93 deletions
99
Essentials/src/main/java/net/ess3/api/events/LocalChatSpyEvent.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
33 changes: 33 additions & 0 deletions
33
Essentials/src/main/java/net/essentialsx/api/v2/ChatType.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
package net.essentialsx.api.v2; | ||
|
||
/** | ||
* Represent a type of chat for a message | ||
*/ | ||
public enum ChatType { | ||
/** | ||
* Message is being sent to global chat as a shout | ||
*/ | ||
SHOUT, | ||
|
||
/** | ||
* Message is being sent to global chat as a question | ||
*/ | ||
QUESTION, | ||
|
||
/** | ||
* Message is being sent locally | ||
*/ | ||
LOCAL, | ||
|
||
/** | ||
* Message is being sent to spy channel | ||
*/ | ||
SPY, | ||
|
||
/** | ||
* Type of chat is not determined | ||
* | ||
* <p>This type used when local/global chat features are disabled | ||
*/ | ||
UNKNOWN, | ||
} |
118 changes: 118 additions & 0 deletions
118
Essentials/src/main/java/net/essentialsx/api/v2/events/ChatEvent.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
package net.essentialsx.api.v2.events; | ||
|
||
import net.essentialsx.api.v2.ChatType; | ||
import org.bukkit.entity.Player; | ||
import org.bukkit.event.Cancellable; | ||
import org.bukkit.event.Event; | ||
|
||
import java.util.IllegalFormatException; | ||
import java.util.Set; | ||
|
||
/** | ||
* This handles common boilerplate for other ChatEvents | ||
*/ | ||
public abstract class ChatEvent extends Event implements Cancellable { | ||
private final ChatType chatType; | ||
private final Player player; | ||
private final Set<Player> recipients; | ||
private String message; | ||
private String format; | ||
|
||
private boolean cancelled = false; | ||
|
||
public ChatEvent(final boolean async, final ChatType chatType, final Player player, final String format, final String message, final Set<Player> recipients) { | ||
super(async); | ||
|
||
this.chatType = chatType; | ||
this.player = player; | ||
this.format = format; | ||
this.message = message; | ||
this.recipients = recipients; | ||
} | ||
|
||
/** | ||
* Gets the message that the player is attempting to send. This message will be used with {@link #getFormat()}. | ||
* | ||
* @return Message the player is attempting to send | ||
*/ | ||
public String getMessage() { | ||
return message; | ||
} | ||
|
||
/** | ||
* Sets the message that the player will send. This message will be used with {@link #getFormat()}. | ||
* | ||
* @param message New message that the player will send | ||
*/ | ||
public void setMessage(final String message) { | ||
this.message = message; | ||
} | ||
|
||
/** | ||
* Gets the format to use to display this chat message. When this event finishes execution, the first format | ||
* parameter is the {@link Player#getDisplayName()} and the second parameter is {@link #getMessage()} | ||
* | ||
* @return {@link String#format(String, Object...)} compatible format string | ||
*/ | ||
public String getFormat() { | ||
return format; | ||
} | ||
|
||
/** | ||
* Sets the format to use to display this chat message. When this event finishes execution, the first format | ||
* parameter is the {@link Player#getDisplayName()} and the second parameter is {@link #getMessage()} | ||
* | ||
* @param format {@link String#format(String, Object...)} compatible format string | ||
* @throws IllegalFormatException if the underlying API throws the exception | ||
* @throws NullPointerException if format is null | ||
* @see String#format(String, Object...) | ||
*/ | ||
public void setFormat(final String format) throws IllegalFormatException, NullPointerException { | ||
// Oh for a better way to do this! | ||
try { | ||
String.format(format, player, message); | ||
} catch (final RuntimeException ex) { | ||
ex.fillInStackTrace(); | ||
throw ex; | ||
} | ||
|
||
this.format = format; | ||
} | ||
|
||
/** | ||
* Gets a set of recipients that this chat message will be displayed to. | ||
* | ||
* @return All Players who will see this chat message | ||
*/ | ||
public Set<Player> getRecipients() { | ||
return recipients; | ||
} | ||
|
||
/** | ||
* Returns the player involved in this event | ||
* | ||
* @return Player who is involved in this event | ||
*/ | ||
public final Player getPlayer() { | ||
return player; | ||
} | ||
|
||
/** | ||
* Returns the type of chat this event is fired for | ||
* | ||
* @return Type of chat this event is fired for | ||
*/ | ||
public ChatType getChatType() { | ||
return chatType; | ||
} | ||
|
||
@Override | ||
public boolean isCancelled() { | ||
return cancelled; | ||
} | ||
|
||
@Override | ||
public void setCancelled(final boolean cancel) { | ||
this.cancelled = cancel; | ||
} | ||
} |
28 changes: 28 additions & 0 deletions
28
Essentials/src/main/java/net/essentialsx/api/v2/events/GlobalChatEvent.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package net.essentialsx.api.v2.events; | ||
|
||
import net.essentialsx.api.v2.ChatType; | ||
import org.bukkit.entity.Player; | ||
import org.bukkit.event.Cancellable; | ||
import org.bukkit.event.HandlerList; | ||
|
||
import java.util.Set; | ||
|
||
/** | ||
* Fired when a player uses global chat | ||
*/ | ||
public class GlobalChatEvent extends ChatEvent implements Cancellable { | ||
private static final HandlerList handlers = new HandlerList(); | ||
|
||
public GlobalChatEvent(final boolean async, final ChatType chatType, final Player player, final String format, final String message, final Set<Player> recipients) { | ||
super(async, chatType, player, format, message, recipients); | ||
} | ||
|
||
public static HandlerList getHandlerList() { | ||
return handlers; | ||
} | ||
|
||
@Override | ||
public HandlerList getHandlers() { | ||
return handlers; | ||
} | ||
} |
28 changes: 28 additions & 0 deletions
28
Essentials/src/main/java/net/essentialsx/api/v2/events/LocalChatEvent.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package net.essentialsx.api.v2.events; | ||
|
||
import net.essentialsx.api.v2.ChatType; | ||
import org.bukkit.entity.Player; | ||
import org.bukkit.event.Cancellable; | ||
import org.bukkit.event.HandlerList; | ||
|
||
import java.util.Set; | ||
|
||
/** | ||
* Fired when a player uses local chat | ||
*/ | ||
public class LocalChatEvent extends ChatEvent implements Cancellable { | ||
private static final HandlerList handlers = new HandlerList(); | ||
|
||
public LocalChatEvent(final boolean async, final Player player, final String format, final String message, final Set<Player> recipients) { | ||
super(async, ChatType.LOCAL, player, format, message, recipients); | ||
} | ||
|
||
public static HandlerList getHandlerList() { | ||
return handlers; | ||
} | ||
|
||
@Override | ||
public HandlerList getHandlers() { | ||
return handlers; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.