Skip to content

Commit

Permalink
Rewrote "on furnace smelts" event in new ScriptEvent format.
Browse files Browse the repository at this point in the history
Removed from BukkitWorldScriptHelper.
  • Loading branch information
Talamar1 committed Jun 13, 2015
1 parent f785462 commit c0e3c87
Show file tree
Hide file tree
Showing 3 changed files with 113 additions and 41 deletions.
1 change: 1 addition & 0 deletions src/main/java/net/aufdemrand/denizen/Denizen.java
Expand Up @@ -603,6 +603,7 @@ public void onEnable() {
ScriptEvent.registerScriptEvent(new EntitySpawnScriptEvent());
ScriptEvent.registerScriptEvent(new EntityTeleportScriptEvent());
ScriptEvent.registerScriptEvent(new FurnaceBurnsItemScriptEvent());
ScriptEvent.registerScriptEvent(new FurnaceSmeltsItemScriptEvent());
ScriptEvent.registerScriptEvent(new ItemMoveScriptEvent());
ScriptEvent.registerScriptEvent(new ItemScrollScriptEvent());
ScriptEvent.registerScriptEvent(new LiquidSpreadScriptEvent());
Expand Down
@@ -0,0 +1,112 @@
package net.aufdemrand.denizen.events.scriptevents;

import net.aufdemrand.denizen.objects.dItem;
import net.aufdemrand.denizen.objects.dLocation;
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.FurnaceSmeltEvent;

import java.util.HashMap;

public class FurnaceSmeltsItemScriptEvent extends ScriptEvent implements Listener {

// <--[event]
// @Events
// furnace smelts item (into <item>)
// furnace smelts <item> (into <item>)
//
// @Cancellable true
//
// @Triggers when a furnace smelts an item.
//
// @Context
// <context.location> returns the dLocation of the furnace.
// <context.source_item> returns the dItem that is being smelted.
// <context.result_item> returns the dItem that is the result of the smelting.
//
// @Determine
// dItem to set the item that is the result of the smelting.
//
// -->

public FurnaceSmeltsItemScriptEvent() {
instance = this;
}
public static FurnaceSmeltsItemScriptEvent instance;
public dItem source_item;
public dItem result_item;
public dLocation location;
public FurnaceSmeltEvent event;

@Override
public boolean couldMatch(ScriptContainer scriptContainer, String s) {
return CoreUtilities.toLowerCase(s).startsWith("furnace smelts");
}

@Override
public boolean matches(ScriptContainer scriptContainer, String s) {
String lower = CoreUtilities.toLowerCase(s);
String srcItem = CoreUtilities.getXthArg(2,lower);
if (!srcItem.equals("item") && (!dItem.matches(srcItem) && !srcItem.equals(source_item.identifyNoIdentifier()))) {
return false;
}

String resItem = CoreUtilities.getXthArg(4,lower);
if (!resItem.equals("item") && (!dItem.matches(resItem)) && !resItem.equals(result_item.identifyNoIdentifier())) {
return false;
}
return true;
}

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

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

@Override
public void destroy() {
FurnaceSmeltEvent.getHandlerList().unregister(this);
}

@Override
public boolean applyDetermination(ScriptContainer container, String determination) {
if (dItem.matches(determination)) {
result_item = dItem.valueOf(determination);
return true;
}
return super.applyDetermination(container, determination);
}

@Override
public HashMap<String, dObject> getContext() {
HashMap<String, dObject> context = super.getContext();
context.put("location", location);
context.put("source_item", source_item);
context.put("result_item", result_item);
return context;
}

@EventHandler
public void onFurnaceSmelts(FurnaceSmeltEvent event) {
location = new dLocation(event.getBlock().getLocation());
source_item = new dItem(event.getSource());
result_item = new dItem(event.getResult());
cancelled = event.isCancelled();
this.event = event;
fire();
event.setResult(result_item.getItemStack());
event.setCancelled(cancelled);
}
}
Expand Up @@ -68,47 +68,6 @@ public static String doEvents(List<String> events, dNPC npc, dPlayer player, Map
// BLOCK EVENTS
/////////////////

// <--[event]
// @Events
// furnace smelts item (into <item>)
// furnace smelts <item> (into <item>)
//
// @Triggers when a furnace smelts an item.
// @Context
// <context.location> returns the dLocation of the furnace.
// <context.source_item> returns the dItem that is being smelted.
// <context.result_item> returns the dItem that is the result of the smelting.
//
// @Determine
// "CANCELLED" to stop the furnace from smelting the item.
// dItem to set the item that is the result of the smelting.
//
// -->
@EventHandler
public void furnaceSmelt(FurnaceSmeltEvent event) {

Map<String, dObject> context = new HashMap<String, dObject>();
dItem source = new dItem(event.getSource());
dItem result = new dItem(event.getResult());

context.put("location", new dLocation(event.getBlock().getLocation()));
context.put("source_item", source);
context.put("result_item", result);

String determination = doEvents(Arrays.asList
("furnace smelts item",
"furnace smelts " + source.identifySimple(),
"furnace smelts item into " + result.identifySimple(),
"furnace smelts " + source.identifySimple() + " into " + result.identifySimple()),
null, null, context, true);

if (determination.toUpperCase().startsWith("CANCELLED"))
event.setCancelled(true);
else if (dItem.matches(determination)) {
event.setResult(dItem.valueOf(determination).getItemStack());
}
}

// <--[event]
// @Events
// leaves decay
Expand Down

0 comments on commit c0e3c87

Please sign in to comment.