Java 类org.bukkit.entity.minecart.HopperMinecart 实例源码

项目:AncientGates    文件:TeleportUtil.java   
public static void teleportVehicle() {
    final List<BungeeQueue> vehicleQueue = Plugin.bungeeCordVehicleInQueue;
    final Iterator<BungeeQueue> it = vehicleQueue.iterator();

    while (it.hasNext()) {
        final BungeeQueue queue = it.next();

        // Spawn incoming BungeeCord vehicle
        final Location destination = queue.getDestination();
        final World world = destination.getWorld();
        checkChunkLoad(destination.getBlock());

        Entity entity = null;
        String entityItemStack = null;

        // Parse passenger info
        if (queue.getQueueType() == BungeeQueueType.PASSENGER) {
            if (queue.getEntityType().isSpawnable()) {
                entity = world.spawnEntity(destination, queue.getEntityType());
                EntityUtil.setEntityTypeData(entity, queue.getEntityTypeData());
                entity.teleport(destination);
            }
            // Parse vehicle contents
        } else if (queue.getItemStack() != null) {
            entityItemStack = queue.getItemStack();
        }
        final Entity passenger = entity;

        // Create new velocity
        final Vector newVelocity = destination.getDirection();
        newVelocity.multiply(queue.getVelocity());

        if (passenger != null) {
            final Vehicle v = (Vehicle) world.spawnEntity(destination, queue.getVehicleType());
            Plugin.instance.getServer().getScheduler().scheduleSyncDelayedTask(Plugin.instance, new Runnable() {
                @Override
                public void run() {
                    v.setPassenger(passenger);
                    v.setVelocity(newVelocity);
                }
            }, 2);
        } else {
            final Vehicle mc = (Vehicle) world.spawnEntity(destination, queue.getVehicleType());
            if (mc instanceof StorageMinecart && entityItemStack != null) {
                final StorageMinecart smc = (StorageMinecart) mc;
                smc.getInventory().setContents(ItemStackUtil.stringToItemStack(entityItemStack));
            } else if (mc instanceof HopperMinecart && entityItemStack != null) {
                final HopperMinecart hmc = (HopperMinecart) mc;
                hmc.getInventory().setContents(ItemStackUtil.stringToItemStack(entityItemStack));
            }
            mc.setVelocity(newVelocity);
        }

        // Remove from queue
        it.remove();
    }
}
项目:CraftoPlugin    文件:InteractionListener.java   
@EventHandler
public void onItemMove(InventoryMoveItemEvent event) {
    try {
        // Check for nulls
        if (event.getSource() == null || event.getSource().getHolder() == null) { return; }
        if (event.getDestination() == null || event.getDestination().getHolder() == null) { return; }

        // Debug
        debug("onItemMove(%s, %s, %s)", event.getItem().getType(), event.getSource().getHolder(),
                event.getDestination().getHolder());

        // Check if destination is a hopper minecart. If it isn't, the transaction is always valid.
        if (!(event.getDestination().getHolder() instanceof HopperMinecart)) {
            debug("onItemMove() returning because destination is not a HopperMinecart");
            return;
        }

        final HopperMinecart hopper = (HopperMinecart) event.getDestination().getHolder();
        final InventoryHolder source = event.getSource().getHolder();

        if (isValidSource(source)) {
            final Location sourceLocation = event.getSource().getLocation();
            if (sourceLocation == null) {
                error("Failed to find location of source InventoryHolder: %s", source);
                return;
            }

            final BlockProtection sourceProt = this.module.getProtection(sourceLocation).orElse(null);
            if (sourceProt == null) { debug("onItemMove() returning because sourceProt is null"); return; }

            // Check if destination hopper is also protected
            final EntityProtection destProt = this.module.getProtection(hopper.getUniqueId()).orElse(null);
            if (destProt == null) {
                // HopperMinecart is not protected, so we don't know from whom the hopper is coming
                // from. Because the source is protected, we have to protect its content from being
                // taken by an unknown minecrat. Therefore, the event needs to be cancelled.
                debug("onItemMove() returning because destProt is null");
                event.setCancelled(true);
                return;
            }

            // The HopperMinecart is protected, so we can check if the owner of that is allowed to
            // take items from the protected source
            StoredPlayer hopperOwner = destProt.getOwner();

            if (!this.module.isAllowedToInteract(sourceProt, hopperOwner)) {
                // Seems like the owner of the HopperMinecart is not allowed to interact with the source
                debug("onItemMove() cancelling because hopperOwner can not access sourecProt");
                event.setCancelled(true);
                return;
            }

        }

    }
    catch (Exception e) { report("Failed to handle InventoryMoveItemEvent", e); }
}