Skip to content

Commit 09684e1

Browse files
committed
Added broadcast_message event.
Added support for Bukkit's BroadcastMessageEvent.
1 parent 86d4f78 commit 09684e1

5 files changed

Lines changed: 164 additions & 1 deletion

File tree

src/main/java/com/laytonsmith/abstraction/bukkit/events/BukkitServerEvents.java

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,15 @@
22

33
import com.laytonsmith.abstraction.MCCommandSender;
44
import com.laytonsmith.abstraction.MCPlayer;
5+
import com.laytonsmith.abstraction.bukkit.BukkitMCCommandSender;
56
import com.laytonsmith.abstraction.bukkit.entities.BukkitMCPlayer;
7+
import com.laytonsmith.abstraction.events.MCBroadcastMessageEvent;
68
import com.laytonsmith.abstraction.events.MCServerCommandEvent;
79
import com.laytonsmith.abstraction.events.MCServerPingEvent;
10+
11+
import org.bukkit.command.CommandSender;
812
import org.bukkit.entity.Player;
13+
import org.bukkit.event.server.BroadcastMessageEvent;
914
import org.bukkit.event.server.ServerCommandEvent;
1015
import org.bukkit.event.server.ServerListPingEvent;
1116

@@ -124,5 +129,72 @@ public void setPlayers(Collection<MCPlayer> players) {
124129
}
125130
}
126131

127-
132+
public static class BukkitMCBroadcastMessageEvent implements MCBroadcastMessageEvent {
133+
134+
private final BroadcastMessageEvent bme;
135+
136+
public BukkitMCBroadcastMessageEvent(BroadcastMessageEvent event) {
137+
this.bme = event;
138+
}
139+
140+
@Override
141+
public Object _GetObject() {
142+
return this.bme;
143+
}
144+
145+
@Override
146+
public void cancel(boolean state) {
147+
this.bme.setCancelled(state);
148+
}
149+
150+
@Override
151+
public String getMessage() {
152+
return this.bme.getMessage();
153+
}
154+
155+
@Override
156+
public void setMessage(String message) {
157+
this.bme.setMessage(message);
158+
}
159+
160+
/**
161+
* Gets the recipients of this message.
162+
* Modifications made to the returned set do not have influence on the event itself.
163+
* This set can contain command senders like players, command blocks, command block functions and console.
164+
* To only receive the player recipients, use the {@link #getPlayerRecipients()} method.
165+
* @return The recipients of this message.
166+
*/
167+
@Override
168+
public Set<MCCommandSender> getRecipients() {
169+
Set<MCCommandSender> ret = new HashSet<MCCommandSender>();
170+
for(CommandSender sender : this.bme.getRecipients()) {
171+
ret.add(new BukkitMCCommandSender(sender));
172+
}
173+
return ret;
174+
}
175+
176+
/**
177+
* Gets the player recipients of this message.
178+
* Modifications made to the returned set do not have influence on the event itself.
179+
* This set can contain command senders like players, command blocks, command block functions and console.
180+
* To receive player and non-player recipients, use the {@link #getRecipients()} method.
181+
* @return The player recipients of this message.
182+
*/
183+
@Override
184+
public Set<MCPlayer> getPlayerRecipients() {
185+
Set<MCPlayer> ret = new HashSet<MCPlayer>();
186+
for(CommandSender sender : this.bme.getRecipients()) {
187+
if(sender instanceof Player) {
188+
ret.add(new BukkitMCPlayer((Player) sender));
189+
}
190+
}
191+
return ret;
192+
}
193+
194+
@Override
195+
public boolean isCancelled() {
196+
return this.bme.isCancelled();
197+
}
198+
199+
}
128200
}

src/main/java/com/laytonsmith/abstraction/bukkit/events/drivers/BukkitServerListener.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.bukkit.event.EventPriority;
1313
import org.bukkit.event.Listener;
1414
import org.bukkit.event.block.BlockPhysicsEvent;
15+
import org.bukkit.event.server.BroadcastMessageEvent;
1516
import org.bukkit.event.server.ServerListPingEvent;
1617

1718
public class BukkitServerListener implements Listener {
@@ -57,4 +58,10 @@ public Object _GetObject() {
5758
}
5859
}
5960
}
61+
62+
@EventHandler(priority = EventPriority.LOWEST)
63+
public void onBroadcast(BroadcastMessageEvent event) {
64+
EventUtils.TriggerListener(Driver.BROADCAST_MESSAGE, "broadcast_message",
65+
new BukkitServerEvents.BukkitMCBroadcastMessageEvent(event));
66+
}
6067
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.laytonsmith.abstraction.events;
2+
3+
import java.util.Set;
4+
5+
import com.laytonsmith.abstraction.MCCommandSender;
6+
import com.laytonsmith.abstraction.MCPlayer;
7+
import com.laytonsmith.core.events.BindableEvent;
8+
import com.laytonsmith.core.events.CancellableEvent;
9+
10+
public interface MCBroadcastMessageEvent extends BindableEvent, CancellableEvent {
11+
String getMessage();
12+
void setMessage(String message);
13+
Set<MCCommandSender> getRecipients();
14+
Set<MCPlayer> getPlayerRecipients();
15+
boolean isCancelled();
16+
}

src/main/java/com/laytonsmith/core/events/Driver.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ public enum Driver {
101101
*/
102102
SERVER_COMMAND,
103103
SERVER_PING,
104+
BROADCAST_MESSAGE,
104105
/**
105106
* Vehicle events
106107
*/

src/main/java/com/laytonsmith/core/events/drivers/ServerEvents.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.laytonsmith.PureUtilities.Version;
44
import com.laytonsmith.abstraction.MCLocation;
55
import com.laytonsmith.abstraction.MCPlayer;
6+
import com.laytonsmith.abstraction.events.MCBroadcastMessageEvent;
67
import com.laytonsmith.abstraction.events.MCCommandTabCompleteEvent;
78
import com.laytonsmith.abstraction.events.MCServerCommandEvent;
89
import com.laytonsmith.abstraction.events.MCRedstoneChangedEvent;
@@ -408,4 +409,70 @@ public Version since() {
408409

409410
}
410411

412+
@api
413+
public static class broadcast_message extends AbstractEvent {
414+
415+
@Override
416+
public String getName() {
417+
return "broadcast_message";
418+
}
419+
420+
@Override
421+
public String docs() {
422+
return "{message: <string match>}"
423+
+ " Fired when a message is broadcasted on the server."
424+
+ " {message: The message that will be broadcasted"
425+
+ " | player_recipients: An array of players who will receive the message.}"
426+
+ " {message}"
427+
+ " {}";
428+
}
429+
430+
@Override
431+
public boolean matches(Map<String, Construct> prefilter, BindableEvent e) throws PrefilterNonMatchException {
432+
if(e instanceof MCBroadcastMessageEvent) {
433+
MCBroadcastMessageEvent event = (MCBroadcastMessageEvent) e;
434+
Prefilters.match(prefilter, "message", event.getMessage(), PrefilterType.STRING_MATCH);
435+
return true;
436+
}
437+
return false;
438+
}
439+
440+
@Override
441+
public BindableEvent convert(CArray manualObject, Target t) {
442+
throw new UnsupportedOperationException("Not supported yet.");
443+
}
444+
445+
@Override
446+
public Map<String, Construct> evaluate(BindableEvent e) throws EventException {
447+
MCBroadcastMessageEvent event = (MCBroadcastMessageEvent) e;
448+
Map<String, Construct> map = evaluate_helper(e);
449+
map.put("message", new CString(event.getMessage(), Target.UNKNOWN));
450+
CArray cRecipients = new CArray(Target.UNKNOWN);
451+
for(MCPlayer player : event.getPlayerRecipients()) {
452+
cRecipients.push(new CString(player.getName(), Target.UNKNOWN), Target.UNKNOWN);
453+
}
454+
map.put("player_recipients", cRecipients);
455+
return map;
456+
}
457+
458+
@Override
459+
public Driver driver() {
460+
return Driver.BROADCAST_MESSAGE;
461+
}
462+
463+
@Override
464+
public boolean modifyEvent(String key, Construct value, BindableEvent e) {
465+
if(key.equals("message")) {
466+
MCBroadcastMessageEvent event = (MCBroadcastMessageEvent) e;
467+
event.setMessage(value.nval());
468+
return true;
469+
}
470+
return false;
471+
}
472+
473+
@Override
474+
public Version since() {
475+
return CHVersion.V3_3_2;
476+
}
477+
}
411478
}

0 commit comments

Comments
 (0)