Skip to content

Commit

Permalink
rework player drops item to generic entity drops item
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Jan 26, 2021
1 parent d6a8367 commit 3b8ccc1
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 24 deletions.
Expand Up @@ -56,6 +56,7 @@ public static void registerMainEvents() {
ScriptEvent.registerScriptEvent(new EntityDamagedScriptEvent());
ScriptEvent.registerScriptEvent(new EntityDeathScriptEvent());
ScriptEvent.registerScriptEvent(new EntityDespawnScriptEvent());
ScriptEvent.registerScriptEvent(new EntityDropsItemScriptEvent());
ScriptEvent.registerScriptEvent(new EntityEntersPortalScriptEvent());
ScriptEvent.registerScriptEvent(new EntityEntersVehicleScriptEvent());
ScriptEvent.registerScriptEvent(new EntityExitsPortalScriptEvent());
Expand Down Expand Up @@ -131,7 +132,6 @@ public static void registerMainEvents() {
ScriptEvent.registerScriptEvent(new PlayerCraftsItemScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerDamagesBlockScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerDragsInInvScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerDropsItemScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerEditsBookScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerEmptiesBucketScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerEntersBedScriptEvent());
Expand Down
@@ -1,4 +1,4 @@
package com.denizenscript.denizen.events.player;
package com.denizenscript.denizen.events.entity;

import com.denizenscript.denizen.objects.EntityTag;
import com.denizenscript.denizen.objects.ItemTag;
Expand All @@ -10,46 +10,55 @@
import org.bukkit.entity.Item;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDropItemEvent;
import org.bukkit.event.player.PlayerDropItemEvent;

public class PlayerDropsItemScriptEvent extends BukkitScriptEvent implements Listener {
public class EntityDropsItemScriptEvent extends BukkitScriptEvent implements Listener {

// <--[event]
// @Events
// player drops item
// player drops <item>
// entity drops item
// <entity> drops <item>
//
// @Regex ^on player drops [^\s]+$
// @Regex ^on [^\s]+ drops [^\s]+$
//
// @Group Player
// @Group Entity
//
// @Location true
//
// @Cancellable true
//
// @Triggers when a player drops an item.
// @Triggers when an entity drops an item.
//
// @Context
// <context.item> returns the ItemTag.
// <context.entity> returns a EntityTag of the item.
// <context.dropped_by> returns the EntityTag that dropped the item.
// <context.location> returns a LocationTag of the item's location.
//
// @Player Always.
// @Player When the entity dropping an item is a player.
//
// -->

public PlayerDropsItemScriptEvent() {
public EntityDropsItemScriptEvent() {
instance = this;
}

public static PlayerDropsItemScriptEvent instance;
public static EntityDropsItemScriptEvent instance;
public ItemTag item;
public LocationTag location;
public PlayerDropItemEvent event;
public EntityTag itemEntity;
public EntityTag dropper;

@Override
public boolean couldMatch(ScriptPath path) {
if (!path.eventLower.startsWith("player drops")) {
if (!path.eventArgLowerAt(1).equals("drops")) {
return false;
}
if (!couldMatchEntity(path.eventArgLowerAt(0))) {
return false;
}
if (path.eventArgLowerAt(2).equals("from")) {
return false;
}
if (!couldMatchItem(path.eventArgLowerAt(2))) {
Expand All @@ -60,6 +69,9 @@ public boolean couldMatch(ScriptPath path) {

@Override
public boolean matches(ScriptPath path) {
if (!tryEntity(dropper, path.eventArgLowerAt(0))) {
return false;
}
String iCheck = path.eventArgLowerAt(2);
if (!iCheck.equals("item") && !tryItem(item, iCheck)) {
return false;
Expand All @@ -72,12 +84,12 @@ public boolean matches(ScriptPath path) {

@Override
public String getName() {
return "PlayerDropsItem";
return "EntityDropsItem";
}

@Override
public ScriptEntryData getScriptEntryData() {
return new BukkitScriptEntryData(event.getPlayer());
return new BukkitScriptEntryData(dropper);
}

@Override
Expand All @@ -86,7 +98,10 @@ public ObjectTag getContext(String name) {
return item;
}
else if (name.equals("entity")) {
return new EntityTag(event.getItemDrop());
return itemEntity;
}
else if (name.equals("dropped_by")) {
return dropper.getDenizenObject();
}
else if (name.equals("location")) {
return location;
Expand All @@ -96,14 +111,21 @@ else if (name.equals("location")) {

@EventHandler
public void onPlayerDropsItem(PlayerDropItemEvent event) {
if (EntityTag.isNPC(event.getPlayer())) {
return;
}
location = new LocationTag(event.getPlayer().getLocation());
Item itemDrop = event.getItemDrop();
EntityTag.rememberEntity(itemDrop);
item = new ItemTag(itemDrop.getItemStack());
this.event = event;
dropper = new EntityTag(event.getPlayer());
location = dropper.getLocation();
itemEntity = new EntityTag(event.getItemDrop());
EntityTag.rememberEntity(itemEntity.getBukkitEntity());
item = new ItemTag(((Item) itemEntity.getBukkitEntity()).getItemStack());
fire(event);
}

@EventHandler
public void onEntityDropsItem(EntityDropItemEvent event) {
dropper = new EntityTag(event.getEntity());
location = dropper.getLocation();
itemEntity = new EntityTag(event.getItemDrop());
EntityTag.rememberEntity(itemEntity.getBukkitEntity());
item = new ItemTag(((Item) itemEntity.getBukkitEntity()).getItemStack());
fire(event);
}
}

0 comments on commit 3b8ccc1

Please sign in to comment.