Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add Entity Enters Block Event (#2418)
* Added Entity Enters Block event * Meta <material> -> <block> * Added missed cancellable * Changed Meta based off other events * getContext made into Switch * enters -> goes into * remove <> in meta link * entity getDenizenObject * fix argIndex of material
- Loading branch information
daniel
committed
Dec 25, 2022
1 parent
da2e6e1
commit 525df9f
Showing
2 changed files
with
88 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
87 changes: 87 additions & 0 deletions
87
...n/src/main/java/com/denizenscript/denizen/events/entity/EntityEntersBlockScriptEvent.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,87 @@ | ||
package com.denizenscript.denizen.events.entity; | ||
|
||
import com.denizenscript.denizen.events.BukkitScriptEvent; | ||
import com.denizenscript.denizen.objects.EntityTag; | ||
import com.denizenscript.denizen.objects.LocationTag; | ||
import com.denizenscript.denizen.objects.MaterialTag; | ||
import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData; | ||
import com.denizenscript.denizencore.objects.ObjectTag; | ||
import com.denizenscript.denizencore.scripts.ScriptEntryData; | ||
import org.bukkit.event.EventHandler; | ||
import org.bukkit.event.Listener; | ||
import org.bukkit.event.entity.EntityEnterBlockEvent; | ||
|
||
public class EntityEntersBlockScriptEvent extends BukkitScriptEvent implements Listener { | ||
|
||
// <--[event] | ||
// @Events | ||
// <entity> goes into <block> | ||
// | ||
// @Group Entity | ||
// | ||
// @Location true | ||
// | ||
// @Cancellable true | ||
// | ||
// @Triggers when an entity enters, and is stored in a block (EG a bee enters a bee nest) | ||
// Does not fire when a silverfish "enters" a stone block. Prefer <@link event entity changes block (into block)> for that. | ||
// | ||
// @Context | ||
// <context.entity> returns the EntityTag. | ||
// <context.location> returns the LocationTag of the block entered by the entity. | ||
// <context.material> returns the MaterialTag of the block entered by the entity. | ||
// | ||
// @Player when the entity that entered the block is a player | ||
// | ||
// @NPC when the entity that entered the block is an NPC. | ||
// | ||
// --> | ||
|
||
public EntityEntersBlockScriptEvent() { | ||
registerCouldMatcher("<entity> goes into <block>"); | ||
} | ||
|
||
public EntityTag entity; | ||
public MaterialTag material; | ||
public LocationTag location; | ||
public EntityEnterBlockEvent event; | ||
|
||
@Override | ||
public boolean matches(ScriptPath path) { | ||
String target = path.eventArgLowerAt(0); | ||
if (!entity.tryAdvancedMatcher(target)) { | ||
return false; | ||
} | ||
if (!path.tryArgObject(3, material)) { | ||
return false; | ||
} | ||
if (!runInCheck(path, location)) { | ||
return false; | ||
} | ||
return super.matches(path); | ||
} | ||
|
||
@Override | ||
public ScriptEntryData getScriptEntryData() { | ||
return new BukkitScriptEntryData(entity); | ||
} | ||
|
||
@Override | ||
public ObjectTag getContext(String name) { | ||
switch (name) { | ||
case "entity": return entity.getDenizenObject(); | ||
case "location": return location; | ||
case "material": return material; | ||
} | ||
return super.getContext(name); | ||
} | ||
|
||
@EventHandler | ||
public void onEntityEntersBlock(EntityEnterBlockEvent event) { | ||
entity = new EntityTag(event.getEntity()); | ||
location = new LocationTag(event.getBlock().getLocation()); | ||
material = new MaterialTag(event.getBlock()); | ||
this.event = event; | ||
fire(event); | ||
} | ||
} |