【问题标题】:Breaking Custom Block打破自定义块
【发布时间】:2015-02-20 04:52:56
【问题描述】:

我正在尝试破坏我在键入命令“/customblock”时收到的自定义块

@EventHandler
public void onBlockBreak(BlockBreakEvent broke){




    Player player = broke.getPlayer();
    PlayerInventory inventory = broke.getPlayer().getInventory();
    World world = player.getWorld();
    Material block = broke.getBlock().getType();


    if(block.equals(CustomBlock)){

        player.sendMessage("Test");

    }

忽略 World 和 PlayerInventory 等其他变量

所以...我收到了正确的块,但是当我打破它时...不要做任何事情

【问题讨论】:

  • “CustomBlock”不是可以比较相等性的对象。

标签: java eclipse plugins minecraft bukkit


【解决方案1】:

CustomBlock 是什么?它是变量还是类? 两件事:

  1. Block 只是一个位置,不能序列化,或者检查它是否等于另一个块。
  2. block.equals() 是原生的 Object's 方法,不会被 bukkit 覆盖。它只会检查一个对象是否等于另一个对象。

检查一个块的最佳方法是您的“自定义块”,即简单地记录每个自定义块的位置,并检查该块是否位于这些位置之一。例如:

public List<Location> customBlocks = new ArrayList<Location>();

//... in the block place event add the block's location to the list

@EventHandler
public void onBlockBreak(BlockBreakEvent broke){

    Player player = broke.getPlayer();
    PlayerInventory inventory = broke.getPlayer().getInventory();
    World world = player.getWorld();
    Material block = broke.getBlock().getType();


    if(customBlocks.contains(block.getLocation())){
        //custom block
        block.setType(Material.AIR); //destroy the block
    }

}

【讨论】:

    猜你喜欢
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多