-
-
Notifications
You must be signed in to change notification settings - Fork 42
/
mcMMOPlayerGainsXPScriptEvent.java
135 lines (118 loc) · 4.21 KB
/
mcMMOPlayerGainsXPScriptEvent.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
129
130
131
132
133
134
135
package com.morphanone.depenizenbukkit.events.mcmmo;
import com.gmail.nossr50.events.experience.McMMOPlayerXpGainEvent;
import net.aufdemrand.denizen.BukkitScriptEntryData;
import net.aufdemrand.denizen.events.BukkitScriptEvent;
import net.aufdemrand.denizen.objects.dEntity;
import net.aufdemrand.denizen.objects.dPlayer;
import net.aufdemrand.denizen.utilities.DenizenAPI;
import net.aufdemrand.denizencore.objects.Element;
import net.aufdemrand.denizencore.objects.aH;
import net.aufdemrand.denizencore.objects.dObject;
import net.aufdemrand.denizencore.scripts.ScriptEntryData;
import net.aufdemrand.denizencore.scripts.containers.ScriptContainer;
import net.aufdemrand.denizencore.utilities.CoreUtilities;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
// <--[event]
// @Events
// mcmmo player gains xp for skill (in <area>)
// mcmmo player gains xp for <skill> (in <area>)
//
// @Regex ^on mcmmo player gains xp for [^\s]+( in ((notable (cuboid|ellipsoid))|([^\s]+)))?$
//
// @Cancellable true
//
// @Triggers when a player gains mcMMO xp.
//
// @Context
// <context.skill> returns the name of the skill that the player gained xp for.
// (Based on the mcMMO language file).
// <context.xp> returns the amount of xp gained.
// <context.cause> returns the cause of the xp gain.
// Will be one of: 'PVP', 'PVE', 'VAMPIRISM', 'SHARED_PVP', 'SHARED_PVE', 'COMMAND', 'UNKNOWN'.
//
// @Plugin Depenizen, mcMMO
//
// -->
public class mcMMOPlayerGainsXPScriptEvent extends BukkitScriptEvent implements Listener {
public mcMMOPlayerGainsXPScriptEvent() {
instance = this;
}
public static mcMMOPlayerGainsXPScriptEvent instance;
public McMMOPlayerXpGainEvent event;
public dPlayer player;
public Element skill;
public Element xp;
public Element cause;
@Override
public boolean couldMatch(ScriptContainer scriptContainer, String s) {
String lower = CoreUtilities.toLowerCase(s);
return lower.startsWith("mcmmo player gains xp for");
}
@Override
public boolean matches(ScriptContainer scriptContainer, String s) {
String lower = CoreUtilities.toLowerCase(s);
String eSkill = CoreUtilities.getXthArg(5, lower);
if (!eSkill.equals("skill") && !eSkill.equals(CoreUtilities.toLowerCase(skill.asString()))) {
return false;
}
if (!runInCheck(scriptContainer, s, lower, player.getLocation())) {
return false;
}
return true;
}
@Override
public String getName() {
return "mcMMOPlayerXPGain";
}
@Override
public void init() {
Bukkit.getServer().getPluginManager().registerEvents(this, DenizenAPI.getCurrentInstance());
}
@Override
public void destroy() {
McMMOPlayerXpGainEvent.getHandlerList().unregister(this);
}
@Override
public boolean applyDetermination(ScriptContainer container, String determination) {
String lower = CoreUtilities.toLowerCase(determination);
if (aH.Argument.valueOf(lower).matchesPrimitive(aH.PrimitiveType.Float)) {
xp = new Element(lower);
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("skill")) {
return skill;
}
else if (name.equals("xp")) {
return xp;
}
else if (name.equals("cause")) {
return cause;
}
return super.getContext(name);
}
@EventHandler
public void onmcMMOPlayerLevelChanges(McMMOPlayerXpGainEvent event) {
if (dEntity.isNPC(event.getPlayer())) {
return;
}
player = dPlayer.mirrorBukkitPlayer(event.getPlayer());
cause = new Element(event.getXpGainReason().toString());
skill = new Element(event.getSkill().getName());
xp = new Element(event.getRawXpGained());
cancelled = event.isCancelled();
this.event = event;
fire();
event.setCancelled(cancelled);
event.setRawXpGained(xp.asFloat());
}
}