use of io.github.wysohn.triggerreactor.core.manager.trigger.AbstractTriggerManager.Trigger in project TriggerReactor by wysohn.
the class JavaPluginBridge method createInterrupterForInv.
@Override
public ProcessInterrupter createInterrupterForInv(Object e, Interpreter interpreter, Map<UUID, Long> cooldowns, Map<IInventory, InventoryTrigger> inventoryMap) {
return new ProcessInterrupter() {
@Override
public boolean onNodeProcess(Node node) {
if (interpreter.isCooldown()) {
if (e instanceof InventoryInteractEvent) {
HumanEntity he = ((InventoryInteractEvent) e).getWhoClicked();
if (he instanceof Player) {
Player player = (Player) he;
UUID uuid = player.getUniqueId();
cooldowns.put(uuid, interpreter.getCooldownEnd());
}
}
return false;
}
// is still running after the inventory is closed.
if (e instanceof InventoryOpenEvent || e instanceof InventoryClickEvent) {
Inventory inv = ((InventoryEvent) e).getInventory();
// it's not GUI so stop execution
if (!inventoryMap.containsKey(new BukkitInventory(inv)))
return true;
}
return false;
}
@Override
public boolean onCommand(Object context, String command, Object[] args) {
if ("CALL".equals(command)) {
if (args.length < 1)
throw new RuntimeException("Need parameter [String] or [String, boolean]");
if (args[0] instanceof String) {
Trigger trigger = getNamedTriggerManager().getTriggerForName((String) args[0]);
if (trigger == null)
throw new RuntimeException("No trigger found for Named Trigger " + args[0]);
if (args.length > 1 && args[1] instanceof Boolean) {
trigger.setSync((boolean) args[1]);
} else {
trigger.setSync(true);
}
if (trigger.isSync()) {
trigger.activate(e, interpreter.getVars());
} else {
// use snapshot to avoid concurrent modification
trigger.activate(e, new HashMap<>(interpreter.getVars()));
}
return true;
} else {
throw new RuntimeException("Parameter type not match; it should be a String." + " Make sure to put double quotes, if you provided String literal.");
}
} else if ("CANCELEVENT".equals(command)) {
if (!interpreter.isSync())
throw new RuntimeException("CANCELEVENT is illegal in async mode!");
if (context instanceof Cancellable) {
((Cancellable) context).setCancelled(true);
return true;
} else {
throw new RuntimeException(context + " is not a Cancellable event!");
}
}
return false;
}
};
}
use of io.github.wysohn.triggerreactor.core.manager.trigger.AbstractTriggerManager.Trigger in project TriggerReactor by wysohn.
the class JavaPluginBridge method showGlowStones.
@Override
@SuppressWarnings("deprecation")
protected void showGlowStones(ICommandSender sender, Set<Entry<SimpleLocation, Trigger>> set) {
for (Entry<SimpleLocation, Trigger> entry : set) {
SimpleLocation sloc = entry.getKey();
Player player = sender.get();
player.sendBlockChange(new Location(Bukkit.getWorld(sloc.getWorld()), sloc.getX(), sloc.getY(), sloc.getZ()), Material.GLOWSTONE, (byte) 0);
}
}
use of io.github.wysohn.triggerreactor.core.manager.trigger.AbstractTriggerManager.Trigger in project TriggerReactor by wysohn.
the class AbstractLocationBasedTriggerManager method loadTriggers.
private void loadTriggers(File[] target) {
for (File file : target) {
if (file.isDirectory()) {
loadTriggers(file.listFiles());
} else {
if (!isTriggerFile(file))
continue;
String triggerName = extractName(file);
SimpleLocation sloc = null;
try {
sloc = stringToSloc(triggerName);
} catch (Exception e) {
e.printStackTrace();
continue;
}
String script = null;
try {
script = FileUtil.readFromFile(file);
} catch (IOException e1) {
e1.printStackTrace();
continue;
}
T trigger = null;
try {
trigger = constructTrigger(sloc.toString(), script);
} catch (TriggerInitFailedException e) {
e.printStackTrace();
continue;
}
if (sloc != null && trigger != null) {
SimpleChunkLocation scloc = new SimpleChunkLocation(sloc);
Map<SimpleLocation, T> triggerMap = locationTriggers.get(scloc);
if (!locationTriggers.containsKey(scloc)) {
triggerMap = new ConcurrentHashMap<>();
locationTriggers.put(scloc, triggerMap);
}
if (triggerMap.containsKey(sloc)) {
Trigger previous = triggerMap.get(sloc);
plugin.getLogger().warning("Found a duplicating " + trigger.getClass().getSimpleName());
plugin.getLogger().warning("Existing: " + previous.file.getAbsolutePath());
plugin.getLogger().warning("Skipped: " + trigger.file.getAbsolutePath());
} else {
triggerMap.put(sloc, trigger);
}
}
}
}
}
use of io.github.wysohn.triggerreactor.core.manager.trigger.AbstractTriggerManager.Trigger in project TriggerReactor by wysohn.
the class JavaPluginBridge method createInterrupter.
@Override
public ProcessInterrupter createInterrupter(Object e, Interpreter interpreter, Map<UUID, Long> cooldowns) {
return new ProcessInterrupter() {
@Override
public boolean onNodeProcess(Node node) {
if (interpreter.isCooldown() && e instanceof PlayerEvent) {
Player player = ((PlayerEvent) e).getPlayer();
UUID uuid = player.getUniqueId();
cooldowns.put(uuid, interpreter.getCooldownEnd());
}
return false;
}
@Override
public boolean onCommand(Object context, String command, Object[] args) {
if ("CALL".equals(command)) {
if (args.length < 1)
throw new RuntimeException("Need parameter [String] or [String, boolean]");
if (args[0] instanceof String) {
Trigger trigger = getNamedTriggerManager().getTriggerForName((String) args[0]);
if (trigger == null)
throw new RuntimeException("No trigger found for Named Trigger " + args[0]);
if (args.length > 1 && args[1] instanceof Boolean) {
trigger.setSync((boolean) args[1]);
} else {
trigger.setSync(true);
}
if (trigger.isSync()) {
trigger.activate(e, interpreter.getVars());
} else {
// use snapshot to avoid concurrent modification
trigger.activate(e, new HashMap<>(interpreter.getVars()));
}
return true;
} else {
throw new RuntimeException("Parameter type not match; it should be a String." + " Make sure to put double quotes, if you provided String literal.");
}
} else if ("CANCELEVENT".equals(command)) {
if (!interpreter.isSync())
throw new RuntimeException("CANCELEVENT is illegal in async mode!");
if (context instanceof Cancellable) {
((Cancellable) context).setCancelled(true);
return true;
} else {
throw new RuntimeException(context + " is not a Cancellable event!");
}
}
return false;
}
};
}
use of io.github.wysohn.triggerreactor.core.manager.trigger.AbstractTriggerManager.Trigger in project TriggerReactor by wysohn.
the class LocationBasedTriggerManager method showTriggerInfo.
protected void showTriggerInfo(ICommandSender sender, Block clicked) {
Trigger trigger = getTriggerForLocation(LocationUtil.convertToSimpleLocation(clicked.getLocation()));
if (trigger == null) {
return;
}
sender.sendMessage("- - - - - - - - - - - - - -");
sender.sendMessage("Trigger: " + getTriggerTypeName());
sender.sendMessage("Block Type: " + clicked.getType().name());
sender.sendMessage("Location: " + clicked.getWorld().getName() + "@" + clicked.getLocation().getBlockX() + "," + clicked.getLocation().getBlockY() + "," + clicked.getLocation().getBlockZ());
sender.sendMessage("");
sender.sendMessage("Script:");
sender.sendMessage(trigger.getScript());
sender.sendMessage("- - - - - - - - - - - - - -");
}
Aggregations