use of org.spongepowered.api.event.filter.cause.Root in project Nucleus by NucleusPowered.
the class CommandSpyListener method onCommand.
@Listener(order = Order.LAST)
public void onCommand(SendCommandEvent event, @Root Player player) {
if (!player.hasPermission(this.exemptTarget)) {
boolean isInList = false;
if (!this.listIsEmpty) {
String command = event.getCommand().toLowerCase();
Optional<? extends CommandMapping> oc = Sponge.getCommandManager().get(command, player);
Set<String> cmd;
// If the command exists, then get all aliases.
cmd = oc.map(commandMapping -> commandMapping.getAllAliases().stream().map(String::toLowerCase).collect(Collectors.toSet())).orElseGet(() -> Sets.newHashSet(command));
isInList = this.config.getCommands().stream().map(String::toLowerCase).anyMatch(cmd::contains);
}
// If the command is in the list, report it.
if (isInList == this.config.isUseWhitelist()) {
List<Player> playerList = Sponge.getServer().getOnlinePlayers().stream().filter(x -> !x.getUniqueId().equals(player.getUniqueId())).filter(x -> x.hasPermission(this.basePermission)).filter(x -> Nucleus.getNucleus().getUserDataManager().getUnchecked(x).get(CommandSpyUserDataModule.class).isCommandSpy()).collect(Collectors.toList());
if (!playerList.isEmpty()) {
Text prefix = this.config.getTemplate().getForCommandSource(player);
TextParsingUtils.StyleTuple st = TextParsingUtils.getLastColourAndStyle(prefix, null);
Text messageToSend = prefix.toBuilder().append(Text.of(st.colour, st.style, "/", event.getCommand(), Util.SPACE, event.getArguments())).build();
playerList.forEach(x -> x.sendMessage(messageToSend));
}
}
}
}
use of org.spongepowered.api.event.filter.cause.Root in project Nucleus by NucleusPowered.
the class PowertoolListener method onUserInteract.
@Listener
@Exclude(InteractBlockEvent.class)
public void onUserInteract(final InteractEvent event, @Root Player player) {
// No item in hand or no permission -> no powertool.
if (!permissionRegistry.testBase(player) || !player.getItemInHand(HandTypes.MAIN_HAND).isPresent()) {
return;
}
// Get the item and the user.
ItemType item = player.getItemInHand(HandTypes.MAIN_HAND).get().getType();
PowertoolUserDataModule user;
try {
user = Nucleus.getNucleus().getUserDataManager().getUnchecked(player).get(PowertoolUserDataModule.class);
} catch (Exception e) {
Nucleus.getNucleus().printStackTraceIfDebugMode(e);
return;
}
// If the powertools are toggled on.
if (user.isPowertoolToggled()) {
// Execute all powertools if they exist.
user.getPowertoolForItem(item).ifPresent(x -> {
// Cancel the interaction.
event.setCancelled(true);
final Player interacting;
if (event instanceof InteractEntityEvent && ((InteractEntityEvent) event).getTargetEntity() instanceof Player) {
interacting = (Player) ((InteractEntityEvent) event).getTargetEntity();
} else {
interacting = null;
}
// Run each command.
if (interacting == null && x.stream().allMatch(i -> i.contains("{{subject}}"))) {
player.sendMessage(plugin.getMessageProvider().getTextMessageWithFormat("powertool.playeronly"));
return;
}
x.forEach(s -> {
if (s.contains("{{subject}}")) {
if (interacting != null) {
s = s.replace("{{subject}}", interacting.getName());
} else {
// Don't execute when no subject is in the way.
return;
}
}
Sponge.getCommandManager().process(player, s);
});
});
}
}
use of org.spongepowered.api.event.filter.cause.Root in project Skree by Skelril.
the class PactScroll method onBlockInteract.
@Listener
public void onBlockInteract(InteractBlockEvent.Secondary.MainHand event, @Root Player player) {
Optional<ItemStack> optItemStack = player.getItemInHand(HandTypes.MAIN_HAND);
if (!optItemStack.isPresent()) {
return;
}
ItemStack itemStack = optItemStack.get();
if (itemStack.getItem() != this) {
return;
}
UserStorageService userService = Sponge.getServiceManager().provideUnchecked(UserStorageService.class);
PaginationService pagination = Sponge.getServiceManager().provideUnchecked(PaginationService.class);
List<Text> result = pactMap.getOrDefault(player.getUniqueId(), new ArrayList<>()).stream().map(userService::get).filter(Optional::isPresent).map(Optional::get).sorted((a, b) -> a.getName().compareToIgnoreCase(b.getName())).map(a -> Text.of((a.isOnline() ? TextColors.GREEN : TextColors.RED), a.getName())).collect(Collectors.toList());
pagination.builder().contents(result).title(Text.of(TextColors.GOLD, "Pact Members")).padding(Text.of(" ")).sendTo(player);
event.setUseBlockResult(Tristate.FALSE);
}
use of org.spongepowered.api.event.filter.cause.Root in project modules-extra by CubeEngine.
the class ItemDuctListener method onInteractPiston.
@Listener
public void onInteractPiston(InteractBlockEvent.Secondary.MainHand event, @Root Player player) {
Optional<ItemStack> itemInHand = player.getItemInHand(HandTypes.MAIN_HAND);
Boolean hasActivator = itemInHand.map(ItemDuctListener::isActivator).orElse(false);
if (hasActivator) {
event.setCancelled(true);
}
if (!isDuctInteraction(event)) {
return;
}
Location<World> loc = event.getTargetBlock().getLocation().get();
Direction dir = loc.get(Keys.DIRECTION).orElse(Direction.NONE);
Location<World> te = loc.getRelative(dir);
Optional<DuctData> ductData = te.get(DuctData.class);
Direction dirO = dir.getOpposite();
if (!ductData.map(d -> d.has(dirO)).orElse(false) && hasActivator) {
if (loc.getBlockType() == BlockTypes.OBSERVER) {
if (!player.hasPermission(this.activateObserverPerm.getId())) {
event.setCancelled(true);
return;
}
} else {
if (!player.hasPermission(this.activatePistonPerm.getId())) {
event.setCancelled(true);
return;
}
}
te.offer(ductData.orElse(new DuctData()).with(dirO));
playCreateEffect(loc);
if (player.get(Keys.GAME_MODE).get() != GameModes.CREATIVE) {
ItemStack newStack = itemInHand.get().copy();
Integer uses = newStack.get(IDuctData.USES).orElse(0) - 1;
if (uses <= 0) {
if (// Infinite usage?
uses == -2) {
uses++;
} else {
newStack.setQuantity(itemInHand.get().getQuantity() - 1);
uses = module.getConfig().activatorUses;
}
}
newStack.offer(IDuctData.USES, uses);
module.getManager().updateUses(newStack);
player.setItemInHand(HandTypes.MAIN_HAND, newStack);
}
player.getProgress(module.activate).grant();
}
}
use of org.spongepowered.api.event.filter.cause.Root in project Nucleus by NucleusPowered.
the class KitListener method onPlayerInteractInventoryClose.
@Listener
public void onPlayerInteractInventoryClose(final InteractInventoryEvent.Close event, @Root final Player player, @Getter("getTargetInventory") final Container inventory) {
handler.getCurrentlyOpenInventoryCommandKit(inventory).ifPresent(x -> {
// Set the commands.
Kit kitInfo = x.getFirst();
List<String> c = Lists.newArrayList();
// For each slot, is it a written book?
x.getSecond().slots().forEach(slot -> slot.poll().ifPresent(item -> {
if (item.getType().equals(ItemTypes.WRITTEN_BOOK)) {
item.get(Keys.BOOK_PAGES).ifPresent(y -> c.add(fixup(y)));
} else if (item.getType().equals(ItemTypes.WRITABLE_BOOK)) {
item.get(Keys.BOOK_PAGES).ifPresent(page -> c.add(getCommandFromText(page)));
} else {
// Drop the item.
item.get(Keys.ITEM_BLOCKSTATE).ifPresent(z -> {
World world = player.getLocation().getExtent();
Entity e = world.createEntity(EntityTypes.ITEM, player.getLocation().getPosition());
e.offer(Keys.ITEM_BLOCKSTATE, z);
world.spawnEntity(e);
});
}
kitInfo.setCommands(c);
handler.saveKit(kitInfo);
}));
player.sendMessage(plugin.getMessageProvider().getTextMessageWithFormat("command.kit.command.edit.success", kitInfo.getName()));
handler.removeKitCommandInventoryFromListener(inventory);
});
handler.removeViewer(inventory);
}
Aggregations