Skip to content

Commit

Permalink
Add Entity Enters Block Event (#2418)
Browse files Browse the repository at this point in the history
* 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
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 0 deletions.
Expand Up @@ -106,6 +106,7 @@ public static void registerMainEvents() {
ScriptEvent.registerScriptEvent(EntityDeathScriptEvent.class);
ScriptEvent.registerScriptEvent(EntityDespawnScriptEvent.class);
ScriptEvent.registerScriptEvent(EntityDropsItemScriptEvent.class);
ScriptEvent.registerScriptEvent(EntityEntersBlockScriptEvent.class);
ScriptEvent.registerScriptEvent(EntityEntersPortalScriptEvent.class);
ScriptEvent.registerScriptEvent(EntityEntersVehicleScriptEvent.class);
ScriptEvent.registerScriptEvent(EntityExitsPortalScriptEvent.class);
Expand Down
@@ -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);
}
}

0 comments on commit 525df9f

Please sign in to comment.