-
-
Notifications
You must be signed in to change notification settings - Fork 104
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add dragon phase change event, fixes #1923
- Loading branch information
1 parent
1b23608
commit 2eb13ab
Showing
2 changed files
with
114 additions
and
0 deletions.
There are no files selected for viewing
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
113 changes: 113 additions & 0 deletions
113
plugin/src/main/java/net/aufdemrand/denizen/events/entity/DragonPhaseChangeScriptEvent.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,113 @@ | ||
package net.aufdemrand.denizen.events.entity; | ||
|
||
import net.aufdemrand.denizen.BukkitScriptEntryData; | ||
import net.aufdemrand.denizen.events.BukkitScriptEvent; | ||
import net.aufdemrand.denizen.objects.dEntity; | ||
import net.aufdemrand.denizencore.objects.Element; | ||
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.entity.EnderDragon; | ||
import org.bukkit.event.EventHandler; | ||
import org.bukkit.event.Listener; | ||
import org.bukkit.event.entity.EnderDragonChangePhaseEvent; | ||
|
||
public class DragonPhaseChangeScriptEvent extends BukkitScriptEvent implements Listener { | ||
|
||
// <--[event] | ||
// @Events | ||
// dragon changes phase | ||
// <entity> changes phase | ||
// | ||
// @Regex ^on [^\s]+ changes phase$ | ||
// @Switch in <area> | ||
// @Switch from <phase> | ||
// @Switch to <phase> | ||
// | ||
// @Cancellable true | ||
// | ||
// @Triggers when a dragon's combat phase changes. | ||
// | ||
// @Context | ||
// <context.entity> returns the dEntity of the dragon. | ||
// <context.new_phase> returns an Element of the dragon's new phase. Phases: <@see link https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/entity/EnderDragonChangePhaseEvent.html> | ||
// <context.old_phase> returns an Element of the dragon's old phase. Can be any phase or 'null' in some cases. | ||
// | ||
// @Determine | ||
// Element to change the dragon's new phase. | ||
// | ||
// --> | ||
|
||
public DragonPhaseChangeScriptEvent() { | ||
instance = this; | ||
} | ||
|
||
public static DragonPhaseChangeScriptEvent instance; | ||
public dEntity entity; | ||
public EnderDragonChangePhaseEvent event; | ||
|
||
@Override | ||
public boolean couldMatch(ScriptContainer scriptContainer, String s) { | ||
return (CoreUtilities.toLowerCase(s).contains("changes phase")); | ||
} | ||
|
||
@Override | ||
public boolean matches(ScriptPath path) { | ||
String target = path.eventArgLowerAt(0); | ||
|
||
if (!tryEntity(entity, target)) { | ||
return false; | ||
} | ||
|
||
if (!runInCheck(path, entity.getLocation())) { | ||
return false; | ||
} | ||
|
||
path.checkSwitch("from", event.getCurrentPhase() == null ? "null" : event.getCurrentPhase().name()); | ||
path.checkSwitch("to", event.getNewPhase().name()); | ||
|
||
return true; | ||
} | ||
|
||
@Override | ||
public String getName() { | ||
return "AirLevelChanged"; | ||
} | ||
|
||
@Override | ||
public boolean applyDetermination(ScriptContainer container, String determination) { | ||
if (!isDefaultDetermination(determination)) { | ||
EnderDragon.Phase phase = EnderDragon.Phase.valueOf(determination.toUpperCase()); | ||
event.setNewPhase(phase); | ||
return true; | ||
} | ||
return super.applyDetermination(container, determination); | ||
} | ||
|
||
@Override | ||
public ScriptEntryData getScriptEntryData() { | ||
return new BukkitScriptEntryData(null, null); | ||
} | ||
|
||
@Override | ||
public dObject getContext(String name) { | ||
if (name.equals("entity")) { | ||
return entity.getDenizenObject(); | ||
} | ||
else if (name.equals("old_phase")) { | ||
return new Element(event.getCurrentPhase() == null ? "null" : event.getCurrentPhase().name()); | ||
} | ||
else if (name.equals("new_phase")) { | ||
return new Element(event.getNewPhase().name()); | ||
} | ||
return super.getContext(name); | ||
} | ||
|
||
@EventHandler | ||
public void onEnderDragonChangePhase(EnderDragonChangePhaseEvent event) { | ||
entity = new dEntity(event.getEntity()); | ||
this.event = event; | ||
fire(event); | ||
} | ||
} |