Search in sources :

Example 46 with Listener

use of org.spongepowered.api.event.Listener in project Skree by Skelril.

the class AntiCactusFarmListener method onItemDrop.

@Listener
public void onItemDrop(DropItemEvent.Destruct event, @Named(NamedCause.SOURCE) BlockSpawnCause spawnCause) {
    if (event.getCause().containsType(Player.class)) {
        return;
    }
    BlockSnapshot blockSnapshot = spawnCause.getBlockSnapshot();
    Optional<Location<World>> optLocation = blockSnapshot.getLocation();
    if (!optLocation.isPresent()) {
        return;
    }
    Location<World> location = optLocation.get();
    while (true) {
        location = location.add(0, -1, 0);
        if (location.getBlockType() != BlockTypes.CACTUS) {
            break;
        }
        location.setBlockType(BlockTypes.AIR, Cause.source(SkreePlugin.container()).build());
    }
}
Also used : BlockSnapshot(org.spongepowered.api.block.BlockSnapshot) World(org.spongepowered.api.world.World) Location(org.spongepowered.api.world.Location) Listener(org.spongepowered.api.event.Listener)

Example 47 with Listener

use of org.spongepowered.api.event.Listener in project Skree by Skelril.

the class GoldRushListener method onChestClose.

@Listener
public void onChestClose(InteractInventoryEvent.Close event) {
    Inventory inventory = event.getTargetInventory();
    if (inventory instanceof ContainerChest) {
        IInventory chestInv = ((ContainerChest) inventory).getLowerChestInventory();
        if (chestInv instanceof ILockableContainer) {
            String lockCode = ((ILockableContainer) chestInv).getLockCode().getLock();
            Optional<Player> optPlayer = Optional.ofNullable(tileEntityClaimMap.remove(lockCode));
            if (optPlayer.isPresent()) {
                Player player = optPlayer.get();
                ((ILockableContainer) chestInv).setLockCode(LockCode.EMPTY_CODE);
                Optional<GoldRushInstance> optInst = manager.getApplicableZone(player);
                if (!optInst.isPresent()) {
                    return;
                }
                // TODO Sponge port
                GoldRushInstance inst = optInst.get();
                List<org.spongepowered.api.item.inventory.ItemStack> toEvaluate = new ArrayList<>();
                ArrayDeque<org.spongepowered.api.item.inventory.ItemStack> toReturn = new ArrayDeque<>();
                for (int i = 0; i < chestInv.getSizeInventory(); ++i) {
                    ItemStack stack = chestInv.getStackInSlot(i);
                    if (stack == ItemStack.EMPTY) {
                        continue;
                    }
                    if (stack.getItem() instanceof CofferItem) {
                        toEvaluate.add(tf(stack));
                    } else {
                        toReturn.add(tf(stack));
                    }
                    chestInv.setInventorySlotContents(i, ItemStack.EMPTY);
                }
                BigDecimal value = BigDecimal.ZERO;
                for (org.spongepowered.api.item.inventory.ItemStack stack : toEvaluate) {
                    value = value.add(new BigDecimal(CofferValueMap.inst().getValue(Collections.singleton(stack)).orElse(BigInteger.ZERO)));
                }
                inst.cofferRisk.put(player.getUniqueId(), value);
                for (Inventory slot : player.getInventory().slots()) {
                    if (toReturn.isEmpty()) {
                        break;
                    }
                    if (slot.size() == 0) {
                        slot.set(toReturn.poll());
                    }
                }
                if (!toReturn.isEmpty()) {
                    new ItemDropper(player.getLocation()).dropStacks(toReturn, SpawnTypes.PLUGIN);
                }
                player.sendMessage(Text.of(TextColors.YELLOW, "You are now risking ", format(value), " coffers."));
                MessageChannel targetChannel = inst.getPlayerMessageChannel(PlayerClassifier.SPECTATOR);
                targetChannel.send(Text.of(TextColors.YELLOW, "Group risk of ", format(inst.getTotalRisk()), " coffers."));
                targetChannel.send(Text.of(TextColors.YELLOW, "Risk of lava ", inst.getChanceOfLava(), " / 100."));
                targetChannel.send(Text.of(TextColors.YELLOW, "Security system delay ", inst.getBaseTime(), " +/- ", inst.getTimeVariance(), " seconds."));
            }
        }
    }
}
Also used : ItemDropper(com.skelril.nitro.item.ItemDropper) ILockableContainer(net.minecraft.world.ILockableContainer) ContainerChest(net.minecraft.inventory.ContainerChest) IInventory(net.minecraft.inventory.IInventory) Player(org.spongepowered.api.entity.living.player.Player) BigDecimal(java.math.BigDecimal) MessageChannel(org.spongepowered.api.text.channel.MessageChannel) CofferItem(com.skelril.skree.content.registry.item.currency.CofferItem) ItemStack(net.minecraft.item.ItemStack) Inventory(org.spongepowered.api.item.inventory.Inventory) IInventory(net.minecraft.inventory.IInventory) Listener(org.spongepowered.api.event.Listener)

Example 48 with Listener

use of org.spongepowered.api.event.Listener in project Skree by Skelril.

the class GoldRushListener method onPlayerInteractEvent.

@Listener(order = Order.FIRST)
public void onPlayerInteractEvent(InteractBlockEvent.Secondary.MainHand event, @Root Player player) {
    Optional<GoldRushInstance> optInst = manager.getApplicableZone(player);
    if (!optInst.isPresent()) {
        return;
    }
    GoldRushInstance inst = optInst.get();
    BlockSnapshot snapshot = event.getTargetBlock();
    BlockState state = snapshot.getState();
    if (!snapshot.getLocation().isPresent()) {
        return;
    }
    Location<World> targetBlock = snapshot.getLocation().get();
    if (state.getType() == BlockTypes.WALL_SIGN && inst.getLockLocations().contains(targetBlock)) {
        Optional<TileEntity> optTileEnt = snapshot.getLocation().get().getTileEntity();
        if (!optTileEnt.isPresent()) {
            return;
        }
        TileEntity tileEntity = optTileEnt.get();
        Optional<List<Text>> optTexts = tileEntity.get(Keys.SIGN_LINES);
        if (!optTexts.isPresent()) {
            return;
        }
        List<Text> texts = optTexts.get();
        boolean unlocked = false;
        String text = texts.get(1).toPlain().toLowerCase();
        NonNullList<ItemStack> itemStacks = tf(player).inventory.mainInventory;
        for (int i = 0; i < itemStacks.size(); ++i) {
            ItemStack is = itemStacks.get(i);
            if (is == ItemStack.EMPTY || is.getItem() != CustomItemTypes.GOLD_RUSH_KEY) {
                continue;
            }
            if (text.contains("blue")) {
                if (is.getItemDamage() != 1) {
                    continue;
                }
            } else if (text.contains("red")) {
                if (is.getItemDamage() != 0) {
                    continue;
                }
            } else {
                continue;
            }
            unlocked = true;
            itemStacks.set(i, ItemStack.EMPTY);
            break;
        }
        if (unlocked) {
            tf(player).inventoryContainer.detectAndSendChanges();
            texts.set(2, Text.of("Locked"));
            texts.set(3, Text.of("- Unlocked -"));
            tileEntity.offer(Keys.SIGN_LINES, texts);
        }
    } else if (state.getType() == BlockTypes.LEVER) {
        Task.builder().execute(() -> {
            if (inst.checkLevers()) {
                inst.completeGame();
            }
        }).delayTicks(1).submit(SkreePlugin.inst());
    } else if (targetBlock.equals(inst.getRewardChestLoc()) && inst.isComplete()) {
        event.setUseItemResult(Tristate.FALSE);
        event.setUseBlockResult(Tristate.FALSE);
        player.sendMessage(Text.of(TextColors.YELLOW, "You have successfully robbed the bank!"));
        inst.payPlayer(player);
    } else if (!inst.isLocked()) {
        if (state.getType() == BlockTypes.STONE_BUTTON) {
            inst.tryToStart();
        }
    }
}
Also used : BlockSnapshot(org.spongepowered.api.block.BlockSnapshot) Text(org.spongepowered.api.text.Text) World(org.spongepowered.api.world.World) TileEntity(org.spongepowered.api.block.tileentity.TileEntity) BlockState(org.spongepowered.api.block.BlockState) NonNullList(net.minecraft.util.NonNullList) ItemStack(net.minecraft.item.ItemStack) Listener(org.spongepowered.api.event.Listener)

Example 49 with Listener

use of org.spongepowered.api.event.Listener in project Skree by Skelril.

the class SkyWarsListener method onInteract.

@Listener
public void onInteract(InteractBlockEvent event, @First Player player) {
    Optional<SkyWarsInstance> optInst = manager.getApplicableZone(player);
    if (!optInst.isPresent()) {
        return;
    }
    SkyWarsInstance inst = optInst.get();
    if (inst.getState() != SkyWarsState.IN_PROGRESS) {
        return;
    }
    Optional<SkyWarsPlayerData> optPlayerData = inst.getPlayerData(player);
    if (!optPlayerData.isPresent()) {
        return;
    }
    SkyWarsPlayerData playerData = optPlayerData.get();
    Optional<ItemStack> optStack = player.getItemInHand(HandTypes.MAIN_HAND);
    if (!optStack.isPresent()) {
        return;
    }
    ItemStack stack = optStack.get();
    if (stack.getItem() == CustomItemTypes.SKY_FEATHER) {
        Vector3d vel = EntityDirectionUtil.getFacingVector(player);
        Optional<SkyFeather.Data> optData = SkyFeather.getDataFor(stack);
        if (!optData.isPresent()) {
            return;
        }
        SkyFeather.Data data = optData.get();
        double radius = data.radius;
        double flight = data.flight;
        double pushBack = data.pushBack;
        if (event instanceof InteractBlockEvent.Primary.MainHand) {
            if (!playerData.canFly()) {
                return;
            }
            vel = vel.mul(flight);
            player.setVelocity(vel);
            playerData.stopFlight(250);
        } else if (event instanceof InteractBlockEvent.Secondary.MainHand) {
            if (!playerData.canPushBack()) {
                return;
            }
            vel = vel.mul(pushBack * 2);
            SpongePlayer spongePlayer = SpongeWorldEdit.inst().wrapPlayer(player);
            Collection<Entity> possibleTargets = inst.getContained(Player.class, Chicken.class);
            possibleTargets.remove(player);
            ParticleEffect radiationEffect = ParticleEffect.builder().type(ParticleTypes.FLAME).quantity(1).build();
            TargetBlock targetBlock = new TargetBlock(spongePlayer, 50, .2);
            while (targetBlock.getNextBlock() != null) {
                BlockWorldVector weBlock = targetBlock.getCurrentBlock();
                Location<World> loc = new Location<>(inst.getRegion().getExtent(), weBlock.getX(), weBlock.getY(), weBlock.getZ());
                for (int i = 0; i < 10; ++i) {
                    inst.getRegion().getExtent().spawnParticles(radiationEffect, loc.getPosition().add(Probability.getRangedRandom(0, 1.0), Probability.getRangedRandom(0, 1.0), Probability.getRangedRandom(0, 1.0)));
                }
                for (Entity aEntity : possibleTargets) {
                    if (aEntity.getLocation().getPosition().distanceSquared(loc.getPosition()) <= Math.pow(radius, 2)) {
                        if (aEntity instanceof Player) {
                            Player aPlayer = (Player) aEntity;
                            if (inst.isFriendlyFire(player, aPlayer)) {
                                continue;
                            }
                            // Handle Sender
                            playerData.stopPushBack(250);
                            player.sendMessage(Text.of(TextColors.YELLOW, "You push back: ", aPlayer.getName(), "!"));
                            // Handle Target
                            aPlayer.setVelocity(vel);
                            Optional<SkyWarsPlayerData> optAPlayerData = inst.getPlayerData(aPlayer);
                            if (optAPlayerData.isPresent()) {
                                SkyWarsPlayerData aPlayerData = optAPlayerData.get();
                                if (aPlayerData.canDefrost()) {
                                    aPlayerData.stopFlight();
                                }
                            }
                        } else {
                            inst.awardPowerup(player, stack);
                            aEntity.remove();
                        }
                    }
                }
            }
        }
        tf(stack).attemptDamageItem(1, new Random());
    }
}
Also used : Entity(org.spongepowered.api.entity.Entity) SpongePlayer(com.sk89q.worldedit.sponge.SpongePlayer) SkyFeather(com.skelril.skree.content.registry.item.minigame.SkyFeather) TargetBlock(com.sk89q.worldedit.util.TargetBlock) InteractBlockEvent(org.spongepowered.api.event.block.InteractBlockEvent) Random(java.util.Random) SpongePlayer(com.sk89q.worldedit.sponge.SpongePlayer) Player(org.spongepowered.api.entity.living.player.Player) Optional(java.util.Optional) ParticleEffect(org.spongepowered.api.effect.particle.ParticleEffect) BlockWorldVector(com.sk89q.worldedit.BlockWorldVector) Vector3d(com.flowpowered.math.vector.Vector3d) Collection(java.util.Collection) Chicken(org.spongepowered.api.entity.living.animal.Chicken) ItemStack(org.spongepowered.api.item.inventory.ItemStack) Location(org.spongepowered.api.world.Location) Listener(org.spongepowered.api.event.Listener)

Example 50 with Listener

use of org.spongepowered.api.event.Listener in project Skree by Skelril.

the class DropClearServiceImpl method onItemSpawn.

@Listener(order = Order.POST)
public void onItemSpawn(SpawnEntityEvent event) {
    event.getEntities().stream().filter(DropClearServiceImpl.CHECK_PREDICATE).forEach((e) -> {
        World targetWorld = e.getWorld();
        entityCount.merge(targetWorld, 1L, (a, b) -> a + b);
    });
    entityCount.forEach((world, count) -> {
        if (count > autoAmt) {
            checkedCleanup(world);
        }
    });
}
Also used : World(org.spongepowered.api.world.World) Listener(org.spongepowered.api.event.Listener)

Aggregations

Listener (org.spongepowered.api.event.Listener)360 Player (org.spongepowered.api.entity.living.player.Player)118 World (org.spongepowered.api.world.World)97 BlockSnapshot (org.spongepowered.api.block.BlockSnapshot)65 Entity (org.spongepowered.api.entity.Entity)58 Region (br.net.fabiozumbi12.RedProtect.Sponge.Region)46 Text (org.spongepowered.api.text.Text)46 ItemStack (org.spongepowered.api.item.inventory.ItemStack)45 Location (org.spongepowered.api.world.Location)45 Sponge (org.spongepowered.api.Sponge)22 BlockType (org.spongepowered.api.block.BlockType)22 Task (org.spongepowered.api.scheduler.Task)17 IOException (java.io.IOException)16 Optional (java.util.Optional)16 Living (org.spongepowered.api.entity.living.Living)15 ItemType (org.spongepowered.api.item.ItemType)15 UUID (java.util.UUID)14 Monster (org.spongepowered.api.entity.living.monster.Monster)14 ItemStackSnapshot (org.spongepowered.api.item.inventory.ItemStackSnapshot)14 Map (java.util.Map)13