-
-
Notifications
You must be signed in to change notification settings - Fork 104
/
PlayerKickedScriptEvent.java
128 lines (115 loc) · 4.35 KB
/
PlayerKickedScriptEvent.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package net.aufdemrand.denizen.events.player;
import net.aufdemrand.denizen.BukkitScriptEntryData;
import net.aufdemrand.denizen.events.BukkitScriptEvent;
import net.aufdemrand.denizen.nms.NMSHandler;
import net.aufdemrand.denizen.objects.dEntity;
import net.aufdemrand.denizen.objects.dPlayer;
import com.denizenscript.denizencore.objects.Duration;
import com.denizenscript.denizencore.objects.Element;
import com.denizenscript.denizencore.objects.dObject;
import com.denizenscript.denizencore.scripts.ScriptEntryData;
import com.denizenscript.denizencore.scripts.containers.ScriptContainer;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerKickEvent;
public class PlayerKickedScriptEvent extends BukkitScriptEvent implements Listener {
// <--[event]
// @Events
// player kicked (for flying)
//
// @Regex ^on player kicked( for flying)?$
//
// @Cancellable true
//
// @Triggers when a player is kicked from the server.
//
// @Context
// <context.message> returns an Element of the kick message sent to all players.
// <context.reason> returns an Element of the kick reason.
// <context.flying> returns whether the player is being automatically kicked for flying.
//
// @Determine
// "MESSAGE:" + Element to change the kick message.
// "REASON:" + Element to change the kick reason.
// "FLY_COOLDOWN:" + Duration to cancel the automatic fly kick and set its next cooldown.
//
// -->
public PlayerKickedScriptEvent() {
instance = this;
}
public static PlayerKickedScriptEvent instance;
public dPlayer player;
public Element message;
public Element reason;
public PlayerKickEvent event;
public boolean isFlying() {
return NMSHandler.getInstance().getPlayerHelper().getFlyKickCooldown(player.getPlayerEntity()) == 0;
}
@Override
public boolean couldMatch(ScriptContainer scriptContainer, String s) {
return CoreUtilities.toLowerCase(s).startsWith("player kicked");
}
@Override
public boolean matches(ScriptPath path) {
if (path.eventArgLowerAt(3).equals("flying")) {
return isFlying();
}
return true;
}
@Override
public String getName() {
return "PlayerKicked";
}
@Override
public boolean applyDetermination(ScriptContainer container, String determination) {
String lower = CoreUtilities.toLowerCase(determination);
if (lower.startsWith("message:")) {
message = new Element(lower.substring("message:".length()));
return true;
}
else if (lower.startsWith("reason:")) {
reason = new Element(lower.substring("reason:".length()));
return true;
}
else if (lower.startsWith("fly_cooldown:")) {
Duration duration = Duration.valueOf(lower.substring("fly_cooldown:".length()));
if (duration != null) {
NMSHandler.getInstance().getPlayerHelper().setFlyKickCooldown(player.getPlayerEntity(), (int) duration.getTicks());
cancelled = true;
return true;
}
}
return super.applyDetermination(container, determination);
}
@Override
public ScriptEntryData getScriptEntryData() {
return new BukkitScriptEntryData(player, null);
}
@Override
public dObject getContext(String name) {
if (name.equals("message")) {
return message;
}
else if (name.equals("reason")) {
return reason;
}
else if (name.equals("flying")) {
return new Element(isFlying());
}
return super.getContext(name);
}
@EventHandler
public void onPlayerKicked(PlayerKickEvent event) {
if (dEntity.isNPC(event.getPlayer())) {
return;
}
player = dPlayer.mirrorBukkitPlayer(event.getPlayer());
message = new Element(event.getLeaveMessage());
reason = new Element(event.getReason());
this.event = event;
fire(event);
event.setLeaveMessage(message.asString());
event.setReason(reason.asString());
}
}