@EventHandler(priority = EventPriority.HIGHEST) public void onTraderTransaction(TraderTransactionEvent event) { if (!plugin.getDenizenNPCRegistry().isDenizenNPC(event.getNpc())) return; /* Shortcut to the ScriptHelper */ // ScriptHelper sE = plugin.getScriptEngine().helper; DenizenNPC theDenizen = plugin.getDenizenNPCRegistry().getDenizen(event.getNpc()); Player player = (Player) event.getParticipant(); /* Show NPC info if sneaking and right clicking */ if (player.isSneaking() && player.isOp() && plugin.settings.RightClickAndSneakInfoModeEnabled()) { theDenizen.showInfo(player); return; } if (!theDenizen.hasTrigger(triggerName)) { if (plugin.debugMode) plugin.getLogger().log(Level.INFO, "...click trigger not enabled for this Denizen."); return; } // If Denizen is not interactable (ie. Denizen is toggled off, engaged or not cooled down) if (!theDenizen.isInteractable(triggerName, player)) { theDenizen.talk(TalkType.CHAT_PLAYERONLY, player, Reason.DenizenIsUnavailable); return; } if (!event.getResult().equals(TransactionResult.SUCCESS_BUY)) { if (plugin.debugMode) plugin.getLogger().log(Level.INFO, "...transaction not succeded."); return; } // Cool! Parse the Trigger... // Apply default cool-down to avoid click-spam, then send to parser. */ // sE.setCooldown(theDenizen, DenizenTriggerTransactionTrigger.class, // plugin.settings.DefaultClickCooldown()); if (!parseClickTrigger(theDenizen, player, event.getItem())) { theDenizen.talk(TalkType.CHAT_PLAYERONLY, player, Reason.NoMatchingClickTrigger); return; } // Success! }
private boolean parseClickTrigger(DenizenNPC theDenizen, Player thePlayer, StockItem item) { CommandSender cs = Bukkit.getConsoleSender(); ScriptHelper sE = plugin.getScriptEngine().helper; /* Check for Quick Click Script */ if (!plugin .getAssignments() .contains("Denizens." + theDenizen.getName() + ".Interact Scripts")) { if (plugin .getAssignments() .contains("Denizens." + theDenizen.getName() + ".Quick Scripts.Click")) { if (plugin.debugMode) cs.sendMessage( ChatColor.LIGHT_PURPLE + "+- Parsing QUICK CLICK script: " + theDenizen.getName() + "/" + thePlayer.getName() + " -+"); /* Get the contents of the Script. */ List<String> theScript = plugin .getAssignments() .getStringList("Denizens." + theDenizen.getName() + ".Quick Scripts.Click"); if (theScript.isEmpty()) return false; /* Build scriptEntries from theScript and add it into the queue */ sE.queueScriptEntries( thePlayer, sE.buildScriptEntries(thePlayer, theDenizen, theScript, "Quick Click", 1), QueueType.TASK); return true; } } /* Get Interact Script, if any. */ String theScriptName = theDenizen.getInteractScript(thePlayer, this.getClass()); if (theScriptName == null) return false; if (plugin.debugMode) cs.sendMessage( ChatColor.LIGHT_PURPLE + "+- Parsing click trigger: " + theDenizen.getName() + "/" + thePlayer.getName() + " -+"); if (plugin.debugMode) cs.sendMessage(ChatColor.LIGHT_PURPLE + "| " + ChatColor.WHITE + "Getting current step:"); /* Get Player's current step */ Integer theStep = sE.getCurrentStep(thePlayer, theScriptName); /* Get the contents of the Script. */ List<String> theScript = sE.getScript(sE.getTriggerPath(theScriptName, theStep, triggerName) + sE.scriptString); if (theScript.isEmpty()) return false; theScript.add(0, "^FLAG TransactionItem:" + item.getItemStack().getType().name()); /* Build scriptEntries from theScript and add it into the queue */ sE.queueScriptEntries( thePlayer, sE.buildScriptEntries(thePlayer, theDenizen, theScript, theScriptName, theStep), QueueType.TRIGGER); return true; }