org.bukkit.event.block.BlockBreakEvent#setExpToDrop ( )源码实例Demo

下面列出了org.bukkit.event.block.BlockBreakEvent#setExpToDrop ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: UhcCore   文件: BlockListener.java
private void handleBlockLoot(BlockBreakEvent event){
	Material material = event.getBlock().getType();
	if(blockLoots.containsKey(material)){
		BlockLootConfiguration lootConfig = blockLoots.get(material);
		Location loc = event.getBlock().getLocation().add(.5,.5,.5);
		event.getBlock().setType(Material.AIR);
		event.setExpToDrop(lootConfig.getAddXp());
		loc.getWorld().dropItem(loc, lootConfig.getLoot().clone());
		UhcItems.spawnExtraXp(loc,lootConfig.getAddXp());
	}
}
 
源代码2 项目: UHC   文件: NerfQuartzXPModule.java
@EventHandler(ignoreCancelled = true)
public void on(BlockBreakEvent event) {
    if (!isEnabled() || event.getBlock().getType() != Material.QUARTZ_ORE) return;

    final int count;
    if (higher == lower) {
        count = higher;
    } else {
        count = RANDOM.nextInt(higher - lower + 1) + lower;
    }

    event.setExpToDrop(count);
}
 
源代码3 项目: Slimefun4   文件: PickaxeOfContainment.java
@Override
public BlockBreakHandler getItemHandler() {
    return new BlockBreakHandler() {

        @Override
        public boolean isPrivate() {
            return false;
        }

        @Override
        public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List<ItemStack> drops) {
            if (isItem(item)) {
                if (!Slimefun.hasUnlocked(e.getPlayer(), PickaxeOfContainment.this, true)) {
                    return true;
                }

                Block b = e.getBlock();

                if (b.getType() != Material.SPAWNER) {
                    return true;
                }

                ItemStack spawner = breakSpawner(b);
                b.getLocation().getWorld().dropItemNaturally(b.getLocation(), spawner);

                e.setExpToDrop(0);
                e.setDropItems(false);
                return true;
            }
            else {
                if (e.getBlock().getType() == Material.SPAWNER) e.setDropItems(false);
                return false;
            }
        }
    };
}
 
源代码4 项目: MineTinker   文件: DataHandler.java
public static boolean playerBreakBlock(@NotNull Player player, Block block, @NotNull ItemStack itemStack) {
    //Trigger BlockBreakEvent
    BlockBreakEvent breakEvent = new BlockBreakEvent(block, player);
    ItemMeta meta = itemStack.getItemMeta();
    if (meta != null && !meta.hasEnchant(Enchantment.SILK_TOUCH)) breakEvent.setExpToDrop(calculateExp(block.getType()));
    Bukkit.getPluginManager().callEvent(breakEvent);

    //Check if Event got cancelled and if not destroy the block and check if the player can successfully break the blocks (incl. drops)
    //Block#breakNaturally(ItemStack itemStack) can not be used as it drops Items itself (without Event and we don't want that)
    if (!breakEvent.isCancelled()) {
        //Get all drops to drop
        Collection<ItemStack> items = block.getDrops(itemStack);

        //Set Block to Material.AIR (effectively breaks the Block)
        block.setType(Material.AIR);
        //TODO: Play Sound?

        //Check if items need to be dropped
        if (breakEvent.isDropItems()) {
            List<Item> itemEntities = items.stream()
                    .map(entry -> player.getWorld().dropItemNaturally(block.getLocation(), entry)) //World#spawnEntity() does not work for Items
                    .collect(Collectors.toList());

            //Trigger BlockDropItemEvent (internally also used for Directing)
            BlockDropItemEvent event = new BlockDropItemEvent(block, block.getState(), player, new ArrayList<>(itemEntities));
            Bukkit.getPluginManager().callEvent(event);

            //check if Event got cancelled
            if (!event.isCancelled()) {
                //Remove all drops that should be dropped
                itemEntities.removeIf(element -> event.getItems().contains(element));
            }
            itemEntities.forEach(Item::remove);
        }

        //Check if Exp needs to be dropped
        if (breakEvent.getExpToDrop() > 0) {
            //Spawn Experience Orb
            ExperienceOrb orb = (ExperienceOrb) player.getWorld().spawnEntity(block.getLocation(), EntityType.EXPERIENCE_ORB);
            orb.setExperience(breakEvent.getExpToDrop());
        }

        return true;
    }

    return false;
}