Search in sources :

Example 6 with DuctData

use of org.cubeengine.module.itemduct.data.DuctData 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 7 with DuctData

use of org.cubeengine.module.itemduct.data.DuctData in project modules-extra by CubeEngine.

the class ItemDuctTransferListener method onInteractPiston.

@Listener
public void onInteractPiston(InteractBlockEvent.Secondary.MainHand event, @Root Player player) {
    event.getTargetBlock().getLocation().ifPresent(loc -> {
        Direction dir = loc.get(Keys.DIRECTION).orElse(Direction.NONE);
        Location<World> te = loc.getRelative(dir);
        Optional<DuctData> ductData = te.get(DuctData.class);
        Optional<ItemStack> itemInHand = player.getItemInHand(HandTypes.MAIN_HAND);
        if (ductData.isPresent() && !itemInHand.isPresent() && !player.get(Keys.IS_SNEAKING).orElse(false)) {
            // Play Effect for DuctPiston
            manager.playEffect(loc);
        }
    });
}
Also used : DuctData(org.cubeengine.module.itemduct.data.DuctData) World(org.spongepowered.api.world.World) ItemStack(org.spongepowered.api.item.inventory.ItemStack) Direction(org.spongepowered.api.util.Direction) Listener(org.spongepowered.api.event.Listener)

Aggregations

DuctData (org.cubeengine.module.itemduct.data.DuctData)7 Direction (org.spongepowered.api.util.Direction)6 World (org.spongepowered.api.world.World)6 Listener (org.spongepowered.api.event.Listener)5 ItemStack (org.spongepowered.api.item.inventory.ItemStack)4 IDuctData (org.cubeengine.module.itemduct.data.IDuctData)3 BlockType (org.spongepowered.api.block.BlockType)3 TileEntity (org.spongepowered.api.block.tileentity.TileEntity)3 Carrier (org.spongepowered.api.item.inventory.Carrier)3 Location (org.spongepowered.api.world.Location)3 List (java.util.List)2 Map (java.util.Map)2 Optional (java.util.Optional)2 Inject (javax.inject.Inject)2 Itemduct (org.cubeengine.module.itemduct.Itemduct)2 BlockSnapshot (org.spongepowered.api.block.BlockSnapshot)2 STICKY_PISTON (org.spongepowered.api.block.BlockTypes.STICKY_PISTON)2 Chest (org.spongepowered.api.block.tileentity.carrier.Chest)2 Keys (org.spongepowered.api.data.key.Keys)2 HandTypes (org.spongepowered.api.data.type.HandTypes)2