Search in sources :

Example 51 with Location

use of org.spongepowered.api.world.Location in project modules-extra by CubeEngine.

the class RepairBlockManager method removePlayer.

public void removePlayer(final Player player) {
    if (player == null) {
        return;
    }
    RepairBlockInventory inventory;
    for (RepairBlock repairBlock : this.repairBlocks.values()) {
        inventory = repairBlock.removeInventory(player);
        if (inventory != null) {
            final World world = player.getWorld();
            final Location loc = player.getLocation();
            Sponge.getCauseStackManager().pushCause(player);
            for (Inventory slot : inventory.inventory) {
                if (slot.peek().isPresent()) {
                    Entity drop = world.createEntity(EntityTypes.ITEM, loc.getPosition());
                    drop.offer(Keys.REPRESENTED_ITEM, slot.peek().get().createSnapshot());
                    world.spawnEntity(drop);
                }
            }
        }
    }
}
Also used : Entity(org.spongepowered.api.entity.Entity) RepairBlockInventory(org.cubeengine.module.itemrepair.repair.blocks.RepairBlock.RepairBlockInventory) RepairBlock(org.cubeengine.module.itemrepair.repair.blocks.RepairBlock) World(org.spongepowered.api.world.World) Inventory(org.spongepowered.api.item.inventory.Inventory) RepairBlockInventory(org.cubeengine.module.itemrepair.repair.blocks.RepairBlock.RepairBlockInventory) Location(org.spongepowered.api.world.Location)

Example 52 with Location

use of org.spongepowered.api.world.Location in project modules-extra by CubeEngine.

the class ItemDuctTransferListener method activate.

private void activate() {
    List<Network> networks = new ArrayList<>();
    for (Iterator<Location<World>> it = this.promptedActivations.keySet().iterator(); it.hasNext(); ) {
        Location<World> loc = it.next();
        if (this.promptedActivations.get(loc) - 1000 > System.currentTimeMillis()) {
            promptedActivations.clear();
            continue;
        }
        it.remove();
        // Check if data is still present
        Optional<DuctData> data = loc.get(DuctData.class);
        if (data.isPresent()) {
            for (Direction dir : Direction.values()) {
                if (dir.isCardinal() || dir.isUpright()) {
                    BlockType type = loc.getRelative(dir).getBlockType();
                    if (STICKY_PISTON.equals(type) || OBSERVER.equals(type)) {
                        Optional<List<ItemStack>> filters = data.get().get(dir);
                        if (filters.isPresent()) {
                            Network network = manager.findNetwork(loc.getRelative(dir));
                            TileEntity te = loc.getTileEntity().get();
                            Inventory inventory = ((Carrier) te).getInventory();
                            if (te instanceof Chest) {
                                inventory = ((Chest) te).getDoubleChestInventory().orElse(inventory);
                            }
                            network.activate(inventory, filters.get());
                            networks.add(network);
                        }
                    }
                }
            }
        }
    }
    for (Network network : networks) {
        for (Location<World> exitLoc : network.exitPoints.keySet()) {
            Direction exitDir = exitLoc.get(Keys.DIRECTION).orElse(Direction.NONE).getOpposite();
            exitLoc = exitLoc.getRelative(exitDir.getOpposite());
            promptActivation(exitLoc.getTileEntity().filter(t -> t instanceof Carrier).map(Carrier.class::cast).orElse(null), true, null);
        }
    }
    if (promptedActivations.isEmpty()) {
        task.cancel();
    }
}
Also used : Inventory(org.spongepowered.api.item.inventory.Inventory) Chest(org.spongepowered.api.block.tileentity.carrier.Chest) Getter(org.spongepowered.api.event.filter.Getter) Keys(org.spongepowered.api.data.key.Keys) HashMap(java.util.HashMap) Itemduct(org.cubeengine.module.itemduct.Itemduct) ArrayList(java.util.ArrayList) Inject(javax.inject.Inject) Network(org.cubeengine.module.itemduct.Network) OBSERVER(org.spongepowered.api.block.BlockTypes.OBSERVER) ItemStack(org.spongepowered.api.item.inventory.ItemStack) TileEntity(org.spongepowered.api.block.tileentity.TileEntity) BlockCarrier(org.spongepowered.api.item.inventory.BlockCarrier) Map(java.util.Map) Task(org.spongepowered.api.scheduler.Task) InteractBlockEvent(org.spongepowered.api.event.block.InteractBlockEvent) PluginContainer(org.spongepowered.api.plugin.PluginContainer) ItemDuctManager(org.cubeengine.module.itemduct.ItemDuctManager) Location(org.spongepowered.api.world.Location) Iterator(java.util.Iterator) STICKY_PISTON(org.spongepowered.api.block.BlockTypes.STICKY_PISTON) Sponge(org.spongepowered.api.Sponge) InteractInventoryEvent(org.spongepowered.api.event.item.inventory.InteractInventoryEvent) Carrier(org.spongepowered.api.item.inventory.Carrier) Root(org.spongepowered.api.event.filter.cause.Root) Direction(org.spongepowered.api.util.Direction) List(java.util.List) Container(org.spongepowered.api.item.inventory.Container) MultiBlockCarrier(org.spongepowered.api.item.inventory.MultiBlockCarrier) ChangeInventoryEvent(org.spongepowered.api.event.item.inventory.ChangeInventoryEvent) CarriedInventory(org.spongepowered.api.item.inventory.type.CarriedInventory) 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) DuctData(org.cubeengine.module.itemduct.data.DuctData) Chest(org.spongepowered.api.block.tileentity.carrier.Chest) ArrayList(java.util.ArrayList) World(org.spongepowered.api.world.World) Direction(org.spongepowered.api.util.Direction) TileEntity(org.spongepowered.api.block.tileentity.TileEntity) BlockType(org.spongepowered.api.block.BlockType) Network(org.cubeengine.module.itemduct.Network) DuctData(org.cubeengine.module.itemduct.data.DuctData) ArrayList(java.util.ArrayList) List(java.util.List) BlockCarrier(org.spongepowered.api.item.inventory.BlockCarrier) Carrier(org.spongepowered.api.item.inventory.Carrier) MultiBlockCarrier(org.spongepowered.api.item.inventory.MultiBlockCarrier) Inventory(org.spongepowered.api.item.inventory.Inventory) CarriedInventory(org.spongepowered.api.item.inventory.type.CarriedInventory) Location(org.spongepowered.api.world.Location)

Example 53 with Location

use of org.spongepowered.api.world.Location in project modules-extra by CubeEngine.

the class Network method activate.

public void activate(Inventory inventory, List<ItemStack> filters) {
    if (isStorage()) {
        pullFromStorage(inventory, filters);
        return;
    }
    for (Map.Entry<Location<World>, DuctData> entry : exitPoints.entrySet()) {
        Inventory pollFrom = inventory;
        Location<World> loc = entry.getKey();
        DuctData data = entry.getValue();
        Direction dir = loc.get(Keys.DIRECTION).orElse(Direction.NONE).getOpposite();
        Location<World> targetLoc = loc.getRelative(dir.getOpposite());
        TileEntity te = targetLoc.getTileEntity().get();
        Inventory target = ((Carrier) te).getInventory();
        if (te instanceof Dropper) {
            Network nw = manager.findNetwork(targetLoc);
            nw.transferToStorage(queryFiltered(filters, inventory), data.get(dir).get());
            continue;
        }
        if (te instanceof Chest) {
            target = ((Chest) te).getDoubleChestInventory().orElse(target);
        }
        Optional<List<ItemStack>> targetFilter = data.get(dir);
        if (targetFilter.isPresent()) {
            if (// Only allow to extract items in the filter
            !filters.isEmpty()) {
                // TODO more filters
                pollFrom = queryFiltered(filters, inventory);
            }
            Inventory pollFromTo = pollFrom;
            if (// Only allow to insert items in the filter
            !targetFilter.get().isEmpty()) {
                // TODO more filters
                pollFromTo = queryFiltered(targetFilter.get(), inventory);
            }
            // For all filtered slots
            doTransfer(pollFromTo, target);
        }
    }
}
Also used : Chest(org.spongepowered.api.block.tileentity.carrier.Chest) World(org.spongepowered.api.world.World) Direction(org.spongepowered.api.util.Direction) Dropper(org.spongepowered.api.block.tileentity.carrier.Dropper) TileEntity(org.spongepowered.api.block.tileentity.TileEntity) DuctData(org.cubeengine.module.itemduct.data.DuctData) List(java.util.List) Carrier(org.spongepowered.api.item.inventory.Carrier) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) Inventory(org.spongepowered.api.item.inventory.Inventory) Location(org.spongepowered.api.world.Location)

Example 54 with Location

use of org.spongepowered.api.world.Location in project modules-extra by CubeEngine.

the class Preview method send.

public void send(User user) {
    // test limit preview changes to 1k
    Location location = new Location(null, 0, 0, 0);
    for (int i = 0; i < 1000; i++) {
        if (states.isEmpty())
            return;
        Object poll = states.poll();
        if (poll instanceof BlockState) {
            ((BlockState) poll).getLocation(location);
            user.sendBlockChange(location, ((BlockState) poll).getType(), ((BlockState) poll).getRawData());
        } else if (poll instanceof SignChange) {
            user.sendSignChange(((SignChange) poll).loc, ((SignChange) poll).lines);
        }
    }
}
Also used : Location(org.spongepowered.api.world.Location)

Example 55 with Location

use of org.spongepowered.api.world.Location in project modules-extra by CubeEngine.

the class ListenerBlock method onBlockFall.

@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockFall(final BlockPhysicsEvent event) {
    if (!this.isActive(BlockFall.class, event.getBlock().getWorld())) {
        return;
    }
    BlockState state = event.getBlock().getState();
    if (state.getType().hasGravity() || state.getType() == DRAGON_EGG) {
        if (event.getBlock().getRelative(DOWN).getType() == AIR) {
            Location loc = state.getLocation();
            BlockFall action = this.set(BlockFall.class, state, null);
            ActionBlock cause = this.plannedFall.remove(loc);
            if (cause instanceof ActionPlayerBlock) {
                action.cause = this.reference((ActionPlayerBlock) cause);
            }
            action.setNewBlock(AIR);
            this.logAction(action);
            Block onTop = state.getBlock().getRelative(UP);
            if (onTop.getType().hasGravity() || onTop.getType() == DRAGON_EGG) {
                this.preplanBlockFall(new BlockPreFallEvent(onTop.getLocation(), cause));
            }
        }
    }
}
Also used : BlockState(org.bukkit.block.BlockState) ActionPlayerBlock(org.cubeengine.module.log.action.block.player.ActionPlayerBlock) Block(org.bukkit.block.Block) ActionPlayerBlock(org.cubeengine.module.log.action.block.player.ActionPlayerBlock) Location(org.spongepowered.api.world.Location) EventHandler(org.bukkit.event.EventHandler)

Aggregations

Location (org.spongepowered.api.world.Location)166 World (org.spongepowered.api.world.World)96 Listener (org.spongepowered.api.event.Listener)44 Player (org.spongepowered.api.entity.living.player.Player)40 Vector3d (com.flowpowered.math.vector.Vector3d)38 BlockSnapshot (org.spongepowered.api.block.BlockSnapshot)32 Vector3i (com.flowpowered.math.vector.Vector3i)31 Optional (java.util.Optional)28 Entity (org.spongepowered.api.entity.Entity)27 BlockType (org.spongepowered.api.block.BlockType)24 BlockState (org.spongepowered.api.block.BlockState)23 ItemStack (org.spongepowered.api.item.inventory.ItemStack)23 Direction (org.spongepowered.api.util.Direction)21 ArrayList (java.util.ArrayList)20 Keys (org.spongepowered.api.data.key.Keys)20 List (java.util.List)19 Text (org.spongepowered.api.text.Text)19 BlockPos (net.minecraft.util.math.BlockPos)18 Sponge (org.spongepowered.api.Sponge)15 Map (java.util.Map)14