Skip to content

Commit

Permalink
Convert "on inv picks up item" to ScriptEvent format
Browse files Browse the repository at this point in the history
  • Loading branch information
Talamar1 committed Jun 23, 2015
1 parent 67ff11c commit 86780f5
Show file tree
Hide file tree
Showing 3 changed files with 110 additions and 45 deletions.
1 change: 1 addition & 0 deletions src/main/java/net/aufdemrand/denizen/Denizen.java
Expand Up @@ -621,6 +621,7 @@ public void onEnable() {
ScriptEvent.registerScriptEvent(new FurnaceSmeltsItemScriptEvent());
ScriptEvent.registerScriptEvent(new HangingBreaksScriptEvent());
ScriptEvent.registerScriptEvent(new HorseJumpsScriptEvent());
ScriptEvent.registerScriptEvent(new InvPicksUpItemScriptEvent());
ScriptEvent.registerScriptEvent(new ItemDespawnsScriptEvent());
ScriptEvent.registerScriptEvent(new ItemMoveScriptEvent());
ScriptEvent.registerScriptEvent(new ItemScrollScriptEvent());
Expand Down
@@ -0,0 +1,109 @@
package net.aufdemrand.denizen.events.world;

import net.aufdemrand.denizen.objects.dInventory;
import net.aufdemrand.denizen.objects.dItem;
import net.aufdemrand.denizen.utilities.DenizenAPI;
import net.aufdemrand.denizencore.events.ScriptEvent;
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.inventory.InventoryPickupItemEvent;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

public class InvPicksUpItemScriptEvent extends ScriptEvent implements Listener {

// <--[event]
// @Events
// inventory picks up item
// inventory picks up <item>
// <inventory type> picks up item
// <inventory type> picks up <item>
//
// @Cancellable true
//
// @Triggers when a hopper or hopper minecart picks up an item.
//
// @Context
// <context.inventory> returns the dInventory that picked up the item.
// <context.item> returns the dItem.
//
// -->

public InvPicksUpItemScriptEvent() {
instance = this;
}
public static InvPicksUpItemScriptEvent instance;
public dInventory inventory;
public dItem item;
public InventoryPickupItemEvent event;

@Override
public boolean couldMatch(ScriptContainer scriptContainer, String s) {
String lower = CoreUtilities.toLowerCase(s);
String inv = CoreUtilities.getXthArg(0, lower);
List<String> types = Arrays.asList("inventory", "hopper", "hopper_minecart");
return lower.contains("picks up")
&& types.contains(inv);
}

@Override
public boolean matches(ScriptContainer scriptContainer, String s) {
String lower = CoreUtilities.toLowerCase(s);
String inv = CoreUtilities.getXthArg(0, lower);
String itemName = CoreUtilities.getXthArg(3, lower);
if (!inv.equals("inventory")) {
if (!inventory.getInventoryType().toString().toLowerCase().equals(inv)) {
return false;
}
}
if (!itemName.equals("item")) {
if (!itemName.equals(item.identifySimpleNoIdentifier()) && !itemName.equals(inventory.identifySimple())) {
return false;
}
}
return true;
}

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

@Override
public void init() {
Bukkit.getServer().getPluginManager().registerEvents(this, DenizenAPI.getCurrentInstance());
}

@Override
public void destroy() {
InventoryPickupItemEvent.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("inventory", inventory);
context.put("item", item);
return context;
}

@EventHandler
public void onInvPicksUpItem(InventoryPickupItemEvent event) {
inventory = dInventory.mirrorBukkitInventory(event.getInventory());
item = new dItem(event.getItem());
cancelled = event.isCancelled();
fire();
event.setCancelled(cancelled);
}
}
Expand Up @@ -691,51 +691,6 @@ public void inventoryOpenEvent(InventoryOpenEvent event) {
event.setCancelled(true);
}

// <--[event]
// @Events
// inventory picks up item
// inventory picks up <item>
// <inventory type> picks up item
// <inventory type> picks up <item>
//
// @Triggers when a hopper or hopper minecart picks up an item.
// @Context
// <context.inventory> returns the dInventory that picked up the item.
// <context.item> returns the dItem.
//
// @Determine
// "CANCELLED" to stop the item from being moved.
//
// -->
@EventHandler
public void inventoryPickupItemEvent(InventoryPickupItemEvent event) {

// Too laggy! TODO: Evaluate further.
if (event.getInventory().getType() == InventoryType.HOPPER)
return;

Map<String, dObject> context = new HashMap<String, dObject>();

String type = event.getInventory().getType().name();
dItem item = new dItem(event.getItem());

List<String> events = Arrays.asList("inventory picks up item",
"inventory picks up " + item.identifySimple(),
type + " picks up item",
type + " picks up " + item.identifySimple());

dInventory inventory = dInventory.mirrorBukkitInventory(event.getInventory());
context.put("inventory", inventory);
context.put("item", item);

String determination = doEvents(events,
null, null, context, true);

if (determination.toUpperCase().startsWith("CANCELLED"))
event.setCancelled(true);
}


/////////////////////
// PLAYER EVENTS
/////////////////
Expand Down

0 comments on commit 86780f5

Please sign in to comment.