Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rewrote "on player places hanging" event in new ScriptEvent format.
Removed from BukkitWorldScriptHelper. Fixed couldMatch on other events because it was triggering multiple events when it shouldn't.
- Loading branch information
Showing
6 changed files
with
144 additions
and
41 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
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
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
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
133 changes: 133 additions & 0 deletions
133
src/main/java/net/aufdemrand/denizen/events/scriptevents/PlayerPlacesHangingScriptEvent.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,133 @@ | ||
package net.aufdemrand.denizen.events.scriptevents; | ||
|
||
import net.aufdemrand.denizen.objects.dCuboid; | ||
import net.aufdemrand.denizen.objects.dEllipsoid; | ||
import net.aufdemrand.denizen.objects.dEntity; | ||
import net.aufdemrand.denizen.objects.dLocation; | ||
import net.aufdemrand.denizen.utilities.DenizenAPI; | ||
import net.aufdemrand.denizen.utilities.debugging.dB; | ||
import net.aufdemrand.denizencore.events.ScriptEvent; | ||
import net.aufdemrand.denizencore.objects.dList; | ||
import net.aufdemrand.denizencore.objects.dObject; | ||
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; | ||
import org.bukkit.event.hanging.HangingPlaceEvent; | ||
|
||
import java.util.HashMap; | ||
|
||
public class PlayerPlacesHangingScriptEvent extends ScriptEvent implements Listener { | ||
|
||
// <--[event] | ||
// @Events | ||
// player places hanging (in <notable>) | ||
// player places <hanging> (in <notable>) | ||
// | ||
// @Cancellable true | ||
// | ||
// @Triggers when a hanging entity (painting or itemframe) is placed. | ||
// | ||
// @Context | ||
// <context.hanging> returns the dEntity of the hanging. | ||
// <context.location> returns the dLocation of the block the hanging was placed on. | ||
// <context.cuboids> returns a dList of the cuboids the hanging is in. | ||
// | ||
// --> | ||
|
||
public PlayerPlacesHangingScriptEvent() { | ||
instance = this; | ||
} | ||
public static PlayerPlacesHangingScriptEvent instance; | ||
public dEntity hanging; | ||
public dList cuboids; | ||
public dLocation location; | ||
public HangingPlaceEvent event; | ||
|
||
@Override | ||
public boolean couldMatch(ScriptContainer scriptContainer, String s) { | ||
String lower = CoreUtilities.toLowerCase(s); | ||
String mat = CoreUtilities.getXthArg(2, lower); | ||
return lower.startsWith("player places") | ||
&& (mat.equals("hanging") || mat.equals("painting") || mat.equals("item_frame")); | ||
} | ||
|
||
@Override | ||
public boolean matches(ScriptContainer scriptContainer, String s) { | ||
String lower = CoreUtilities.toLowerCase(s); | ||
String hangCheck = CoreUtilities.getXthArg(2, lower); | ||
if (!hangCheck.equals("hanging") | ||
&& hanging.matchesEntity(hangCheck)){ | ||
return false; | ||
} | ||
String notable = null; | ||
if (CoreUtilities.xthArgEquals(3, lower, "in")) { | ||
notable = CoreUtilities.getXthArg(4, lower); | ||
} | ||
if (notable != null) { | ||
if (dCuboid.matches(notable)) { | ||
dCuboid cuboid = dCuboid.valueOf(notable); | ||
if (!cuboid.isInsideCuboid(location)) { | ||
return false; | ||
} | ||
} | ||
else if (dEllipsoid.matches(notable)) { | ||
dEllipsoid ellipsoid = dEllipsoid.valueOf(notable); | ||
if (!ellipsoid.contains(location)) { | ||
return false; | ||
} | ||
} | ||
else { | ||
dB.echoError("Invalid event 'IN ...' check [" + getName() + "]: '" + s + "' for " + scriptContainer.getName()); | ||
return false; | ||
} | ||
} | ||
|
||
return true; | ||
} | ||
|
||
@Override | ||
public String getName() { | ||
return "PlayerPlacesHanging"; | ||
} | ||
|
||
@Override | ||
public void init() { | ||
Bukkit.getServer().getPluginManager().registerEvents(this, DenizenAPI.getCurrentInstance()); | ||
} | ||
|
||
@Override | ||
public void destroy() { | ||
HangingPlaceEvent.getHandlerList().unregister(this); | ||
} | ||
|
||
@Override | ||
public boolean applyDetermination(ScriptContainer container, String determination) { | ||
return super.applyDetermination(container, determination); | ||
} | ||
|
||
@Override | ||
public HashMap<String, dObject> getContext() { | ||
HashMap<String, dObject> context = super.getContext(); | ||
context.put("hanging", hanging); | ||
context.put("cuboids", cuboids); | ||
context.put("location", location); | ||
return context; | ||
} | ||
|
||
@EventHandler | ||
public void pnPlayerPlacesHanging(HangingPlaceEvent event) { | ||
hanging = new dEntity(event.getEntity()); | ||
location = new dLocation(event.getBlock().getLocation()); | ||
cuboids = new dList(); | ||
for (dCuboid cuboid: dCuboid.getNotableCuboidsContaining(location)) { | ||
cuboids.add(cuboid.identifySimple()); | ||
} | ||
cancelled = event.isCancelled(); | ||
this.event = event; | ||
fire(); | ||
event.setCancelled(cancelled); | ||
} | ||
} |
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