Skip to content

Commit

Permalink
add 'player prepares smithing' event
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Dec 13, 2020
1 parent 41bd425 commit 6865285
Show file tree
Hide file tree
Showing 3 changed files with 122 additions and 1 deletion.
Expand Up @@ -163,6 +163,9 @@ public static void registerMainEvents() {
ScriptEvent.registerScriptEvent(new PlayerRightClicksEntityScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerRiptideScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerShearsScriptEvent());
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_16)) {
ScriptEvent.registerScriptEvent(new PlayersPrepareSmithingTableScriptEvent());
}
ScriptEvent.registerScriptEvent(new PlayerSneakScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerSprintScriptEvent());
ScriptEvent.registerScriptEvent(new PlayerStandsOnScriptEvent());
Expand Down
@@ -0,0 +1,118 @@
package com.denizenscript.denizen.events.player;

import com.denizenscript.denizen.events.BukkitScriptEvent;
import com.denizenscript.denizen.objects.EntityTag;
import com.denizenscript.denizen.objects.InventoryTag;
import com.denizenscript.denizen.objects.ItemTag;
import com.denizenscript.denizen.objects.PlayerTag;
import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.scripts.ScriptEntryData;
import org.bukkit.entity.HumanEntity;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.PrepareSmithingEvent;

public class PlayersPrepareSmithingTableScriptEvent extends BukkitScriptEvent implements Listener {

// <--[event]
// @Events
// player prepares smithing item
// player prepares smithing <item>
//
// @Regex ^on player prepares smithing [^\s]+$
//
// @Group Player
//
// @Triggers when a player prepares to upgrade an item on a smithing table.
//
// @Warning The player doing the smithing is estimated and may be inaccurate.
//
// @Context
// <context.inventory> returns the InventoryTag of the smithing table inventory.
// <context.item> returns the ItemTag after upgrading.
//
// @Determine
// ItemTag to change the item that results from the upgrade.
//
// @Player Always.
//
// -->

public PlayersPrepareSmithingTableScriptEvent() {
instance = this;
}

public static PlayersPrepareSmithingTableScriptEvent instance;
public PrepareSmithingEvent event;
public ItemTag result;
public PlayerTag player;

@Override
public boolean couldMatch(ScriptPath path) {
if (!path.eventLower.startsWith("player prepares smithing")) {
return false;
}
if (!couldMatchItem(path.eventArgLowerAt(3))) {
return false;
}
return true;
}

@Override
public boolean matches(ScriptPath path) {
String eItem = path.eventArgLowerAt(3);
if (!tryItem(result, eItem)) {
return false;
}
return super.matches(path);
}

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

@Override
public boolean applyDetermination(ScriptPath path, ObjectTag determinationObj) {
String determination = determinationObj.toString();
if (ItemTag.matches(determination)) {
result = determinationObj.asType(ItemTag.class, getTagContext(path));
event.setResult(result.getItemStack());
return true;
}
return super.applyDetermination(path, determinationObj);
}

@Override
public ScriptEntryData getScriptEntryData() {
return new BukkitScriptEntryData(player, null);
}

@Override
public ObjectTag getContext(String name) {
if (name.equals("item")) {
return result;
}
else if (name.equals("inventory")) {
return InventoryTag.mirrorBukkitInventory(event.getInventory());
}
return super.getContext(name);
}

@EventHandler
public void onCraftItem(PrepareSmithingEvent event) {
if (event.getInventory().getViewers().isEmpty()) {
return;
}
HumanEntity humanEntity = event.getInventory().getViewers().get(0);
if (EntityTag.isNPC(humanEntity)) {
return;
}
this.event = event;
result = new ItemTag(event.getResult());
this.player = EntityTag.getPlayerFrom(humanEntity);
this.cancelled = false;
fire(event);
}
}
Expand Up @@ -106,7 +106,7 @@ public InventoryCommand() {
//
// @Usage
// Use to open a virtual inventory with a title and some items.
// - inventory open d:generic[size=27;title=BestInventory;contents=snow_ball|clay_brick]
// - inventory open d:generic[size=27;title=BestInventory;contents=snow_ball|stick]
//
// @Usage
// Use to open another player's inventory.
Expand Down

0 comments on commit 6865285

Please sign in to comment.