Search in sources :

Example 1 with Root

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));
            }
        }
    }
}
Also used : CommandPermissionHandler(io.github.nucleuspowered.nucleus.internal.CommandPermissionHandler) Nucleus(io.github.nucleuspowered.nucleus.Nucleus) CommandSpyConfig(io.github.nucleuspowered.nucleus.modules.commandspy.config.CommandSpyConfig) TextParsingUtils(io.github.nucleuspowered.nucleus.internal.text.TextParsingUtils) Sponge(org.spongepowered.api.Sponge) Set(java.util.Set) CommandMapping(org.spongepowered.api.command.CommandMapping) CommandSpyModule(io.github.nucleuspowered.nucleus.modules.commandspy.CommandSpyModule) Collectors(java.util.stream.Collectors) Sets(com.google.common.collect.Sets) Reloadable(io.github.nucleuspowered.nucleus.internal.interfaces.Reloadable) Root(org.spongepowered.api.event.filter.cause.Root) List(java.util.List) CommandSpyConfigAdapter(io.github.nucleuspowered.nucleus.modules.commandspy.config.CommandSpyConfigAdapter) Text(org.spongepowered.api.text.Text) Order(org.spongepowered.api.event.Order) Optional(java.util.Optional) ListenerBase(io.github.nucleuspowered.nucleus.internal.ListenerBase) CommandSpyCommand(io.github.nucleuspowered.nucleus.modules.commandspy.commands.CommandSpyCommand) Util(io.github.nucleuspowered.nucleus.Util) CommandSpyUserDataModule(io.github.nucleuspowered.nucleus.modules.commandspy.datamodules.CommandSpyUserDataModule) Player(org.spongepowered.api.entity.living.player.Player) Listener(org.spongepowered.api.event.Listener) SendCommandEvent(org.spongepowered.api.event.command.SendCommandEvent) Player(org.spongepowered.api.entity.living.player.Player) CommandSpyUserDataModule(io.github.nucleuspowered.nucleus.modules.commandspy.datamodules.CommandSpyUserDataModule) Text(org.spongepowered.api.text.Text) TextParsingUtils(io.github.nucleuspowered.nucleus.internal.text.TextParsingUtils) Listener(org.spongepowered.api.event.Listener)

Example 2 with Root

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);
            });
        });
    }
}
Also used : CommandPermissionHandler(io.github.nucleuspowered.nucleus.internal.CommandPermissionHandler) Nucleus(io.github.nucleuspowered.nucleus.Nucleus) InteractEntityEvent(org.spongepowered.api.event.entity.InteractEntityEvent) PowertoolCommand(io.github.nucleuspowered.nucleus.modules.powertool.commands.PowertoolCommand) Sponge(org.spongepowered.api.Sponge) PowertoolUserDataModule(io.github.nucleuspowered.nucleus.modules.powertool.datamodules.PowertoolUserDataModule) Root(org.spongepowered.api.event.filter.cause.Root) HandTypes(org.spongepowered.api.data.type.HandTypes) ListenerBase(io.github.nucleuspowered.nucleus.internal.ListenerBase) InteractEvent(org.spongepowered.api.event.action.InteractEvent) Player(org.spongepowered.api.entity.living.player.Player) InteractBlockEvent(org.spongepowered.api.event.block.InteractBlockEvent) Exclude(org.spongepowered.api.event.filter.type.Exclude) Listener(org.spongepowered.api.event.Listener) ItemType(org.spongepowered.api.item.ItemType) Player(org.spongepowered.api.entity.living.player.Player) InteractEntityEvent(org.spongepowered.api.event.entity.InteractEntityEvent) ItemType(org.spongepowered.api.item.ItemType) PowertoolUserDataModule(io.github.nucleuspowered.nucleus.modules.powertool.datamodules.PowertoolUserDataModule) Listener(org.spongepowered.api.event.Listener) Exclude(org.spongepowered.api.event.filter.type.Exclude)

Example 3 with Root

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);
}
Also used : UserStorageService(org.spongepowered.api.service.user.UserStorageService) java.util(java.util) GameRegistry(net.minecraftforge.fml.common.registry.GameRegistry) UserStorageService(org.spongepowered.api.service.user.UserStorageService) Craftable(com.skelril.nitro.registry.Craftable) ItemStack(org.spongepowered.api.item.inventory.ItemStack) Text(org.spongepowered.api.text.Text) Order(org.spongepowered.api.event.Order) DamageEntityEvent(org.spongepowered.api.event.entity.DamageEntityEvent) CollideEntityEvent(org.spongepowered.api.event.entity.CollideEntityEvent) CreativeTabs(net.minecraft.creativetab.CreativeTabs) InteractBlockEvent(org.spongepowered.api.event.block.InteractBlockEvent) TextColors(org.spongepowered.api.text.format.TextColors) InteractEntityEvent(org.spongepowered.api.event.entity.InteractEntityEvent) Items(net.minecraft.init.Items) CustomItem(com.skelril.nitro.registry.item.CustomItem) Sponge(org.spongepowered.api.Sponge) PaginationService(org.spongepowered.api.service.pagination.PaginationService) Entity(org.spongepowered.api.entity.Entity) Collectors(java.util.stream.Collectors) EventAwareContent(com.skelril.nitro.selector.EventAwareContent) ClientConnectionEvent(org.spongepowered.api.event.network.ClientConnectionEvent) Tristate(org.spongepowered.api.util.Tristate) Root(org.spongepowered.api.event.filter.cause.Root) Cancellable(org.spongepowered.api.event.Cancellable) PlayerCombatParser(com.skelril.nitro.combat.PlayerCombatParser) HandTypes(org.spongepowered.api.data.type.HandTypes) ItemStackFactory.newItemStack(com.skelril.nitro.item.ItemStackFactory.newItemStack) Player(org.spongepowered.api.entity.living.player.Player) Listener(org.spongepowered.api.event.Listener) ItemType(org.spongepowered.api.item.ItemType) Text(org.spongepowered.api.text.Text) PaginationService(org.spongepowered.api.service.pagination.PaginationService) ItemStack(org.spongepowered.api.item.inventory.ItemStack) ItemStackFactory.newItemStack(com.skelril.nitro.item.ItemStackFactory.newItemStack) Listener(org.spongepowered.api.event.Listener)

Example 4 with Root

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();
    }
}
Also used : Keys(org.spongepowered.api.data.key.Keys) ChangeBlockEvent(org.spongepowered.api.event.block.ChangeBlockEvent) ItemTypes(org.spongepowered.api.item.ItemTypes) PermissionManager(org.cubeengine.libcube.service.permission.PermissionManager) Vector3d(com.flowpowered.math.vector.Vector3d) GameModes(org.spongepowered.api.entity.living.player.gamemode.GameModes) EnchantmentTypes(org.spongepowered.api.item.enchantment.EnchantmentTypes) Enchantment(org.spongepowered.api.item.enchantment.Enchantment) Itemduct(org.cubeengine.module.itemduct.Itemduct) Inject(javax.inject.Inject) ParticleEffect(org.spongepowered.api.effect.particle.ParticleEffect) ItemStack(org.spongepowered.api.item.inventory.ItemStack) IDuctData(org.cubeengine.module.itemduct.data.IDuctData) TileEntity(org.spongepowered.api.block.tileentity.TileEntity) ParticleTypes(org.spongepowered.api.effect.particle.ParticleTypes) SoundTypes(org.spongepowered.api.effect.sound.SoundTypes) InteractBlockEvent(org.spongepowered.api.event.block.InteractBlockEvent) Transaction(org.spongepowered.api.data.Transaction) Location(org.spongepowered.api.world.Location) STICKY_PISTON(org.spongepowered.api.block.BlockTypes.STICKY_PISTON) BlockTypes(org.spongepowered.api.block.BlockTypes) Carrier(org.spongepowered.api.item.inventory.Carrier) Root(org.spongepowered.api.event.filter.cause.Root) Direction(org.spongepowered.api.util.Direction) Permission(org.cubeengine.libcube.service.permission.Permission) World(org.spongepowered.api.world.World) BlockType(org.spongepowered.api.block.BlockType) HandTypes(org.spongepowered.api.data.type.HandTypes) Optional(java.util.Optional) Player(org.spongepowered.api.entity.living.player.Player) Listener(org.spongepowered.api.event.Listener) Collections(java.util.Collections) DuctData(org.cubeengine.module.itemduct.data.DuctData) BlockSnapshot(org.spongepowered.api.block.BlockSnapshot) IDuctData(org.cubeengine.module.itemduct.data.IDuctData) DuctData(org.cubeengine.module.itemduct.data.DuctData) ItemStack(org.spongepowered.api.item.inventory.ItemStack) World(org.spongepowered.api.world.World) Direction(org.spongepowered.api.util.Direction) Listener(org.spongepowered.api.event.Listener)

Example 5 with Root

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);
}
Also used : KitRedeemException(io.github.nucleuspowered.nucleus.api.exceptions.KitRedeemException) Getter(org.spongepowered.api.event.filter.Getter) Keys(org.spongepowered.api.data.key.Keys) ItemTypes(org.spongepowered.api.item.ItemTypes) Kit(io.github.nucleuspowered.nucleus.api.nucleusdata.Kit) Lists(com.google.common.collect.Lists) PermissionRegistry(io.github.nucleuspowered.nucleus.internal.PermissionRegistry) KitUserDataModule(io.github.nucleuspowered.nucleus.modules.kit.datamodules.KitUserDataModule) EntityTypes(org.spongepowered.api.entity.EntityTypes) Text(org.spongepowered.api.text.Text) ListenerBase(io.github.nucleuspowered.nucleus.internal.ListenerBase) Exclude(org.spongepowered.api.event.filter.type.Exclude) KitHandler(io.github.nucleuspowered.nucleus.modules.kit.handlers.KitHandler) Nucleus(io.github.nucleuspowered.nucleus.Nucleus) UserDataManager(io.github.nucleuspowered.nucleus.dataservices.loaders.UserDataManager) InteractInventoryEvent(org.spongepowered.api.event.item.inventory.InteractInventoryEvent) Entity(org.spongepowered.api.entity.Entity) Collectors(java.util.stream.Collectors) ClientConnectionEvent(org.spongepowered.api.event.network.ClientConnectionEvent) Reloadable(io.github.nucleuspowered.nucleus.internal.interfaces.Reloadable) Root(org.spongepowered.api.event.filter.cause.Root) TextSerializers(org.spongepowered.api.text.serializer.TextSerializers) List(java.util.List) Container(org.spongepowered.api.item.inventory.Container) NucleusFirstJoinEvent(io.github.nucleuspowered.nucleus.api.events.NucleusFirstJoinEvent) World(org.spongepowered.api.world.World) KitService(io.github.nucleuspowered.nucleus.dataservices.KitService) Player(org.spongepowered.api.entity.living.player.Player) Listener(org.spongepowered.api.event.Listener) KitConfigAdapter(io.github.nucleuspowered.nucleus.modules.kit.config.KitConfigAdapter) Entity(org.spongepowered.api.entity.Entity) Kit(io.github.nucleuspowered.nucleus.api.nucleusdata.Kit) World(org.spongepowered.api.world.World) Listener(org.spongepowered.api.event.Listener)

Aggregations

Player (org.spongepowered.api.entity.living.player.Player)6 Listener (org.spongepowered.api.event.Listener)6 Root (org.spongepowered.api.event.filter.cause.Root)6 Nucleus (io.github.nucleuspowered.nucleus.Nucleus)4 ListenerBase (io.github.nucleuspowered.nucleus.internal.ListenerBase)4 Collectors (java.util.stream.Collectors)4 Text (org.spongepowered.api.text.Text)4 Reloadable (io.github.nucleuspowered.nucleus.internal.interfaces.Reloadable)3 List (java.util.List)3 Keys (org.spongepowered.api.data.key.Keys)3 HandTypes (org.spongepowered.api.data.type.HandTypes)3 Entity (org.spongepowered.api.entity.Entity)3 InteractBlockEvent (org.spongepowered.api.event.block.InteractBlockEvent)3 Exclude (org.spongepowered.api.event.filter.type.Exclude)3 ClientConnectionEvent (org.spongepowered.api.event.network.ClientConnectionEvent)3 ItemTypes (org.spongepowered.api.item.ItemTypes)3 World (org.spongepowered.api.world.World)3 Lists (com.google.common.collect.Lists)2 NucleusFirstJoinEvent (io.github.nucleuspowered.nucleus.api.events.NucleusFirstJoinEvent)2 KitRedeemException (io.github.nucleuspowered.nucleus.api.exceptions.KitRedeemException)2