提问者:小点点

检测特定块何时中断[Spigot插件]


我想做一个Spigot插件,让你使用一个命令,如/铜,你把坐标到块,它召唤装甲站,使它看起来像块,这就是我已经走了多远:

public class OreCommands implements CommandExecutor {
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {

        Player player = (Player) sender;
        if (cmd.getName().equalsIgnoreCase("copper")) {
                int x = Integer.parseInt(args[0]);
                int ypre = Integer.parseInt(args[1]);
                int z = Integer.parseInt(args[2]);
                int y = ypre+1;
                double upy = y-1.75;
                double midy = y-2.25;
                double downy = y-2.8;
                double frontx = x+1;
                double backx = x-0.03125;
                double frontz = z+1;
                double backz = z-0.03125;
                    // up
                    if (player.getWorld().getBlockAt(x, y, z).getType() == Material.AIR || player.getWorld().getBlockAt(x, y, z).getType() == Material.CAVE_AIR) {
                        Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "summon armor_stand " + x + " " + upy + " " + z + " {NoGravity:1b,Invisible:1b,NoBasePlate:1b,ArmorItems:[{},{},{},{id:\"minecraft:player_head\",Count:1b,tag:{SkullOwner:{Id:[I;420211400,-1836693680,-1895208571,1476527556],Properties:{textures:[{Value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWM5Zjg5ZWUzNzE3ZTQ2OWMwY2QzNmMwM2MwZmQ2OWVjYjNiYTFkOWFiNTJhMmEwMWExMThiOGExYTc1NjcwYiJ9fX0=\"}]}}}}]}");
                    }
                    // down
                    if (player.getWorld().getBlockAt(x, y-2, z).getType() == Material.AIR || player.getWorld().getBlockAt(x, y, z).getType() == Material.CAVE_AIR) {
                        Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "summon armor_stand " + x + " " + downy + " " + z + " {NoGravity:1b,Invisible:1b,NoBasePlate:1b,ArmorItems:[{},{},{},{id:\"minecraft:player_head\",Count:1b,tag:{SkullOwner:{Id:[I;420211400,-1836693680,-1895208571,1476527556],Properties:{textures:[{Value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWM5Zjg5ZWUzNzE3ZTQ2OWMwY2QzNmMwM2MwZmQ2OWVjYjNiYTFkOWFiNTJhMmEwMWExMThiOGExYTc1NjcwYiJ9fX0=\"}]}}}}]}");
                    }
                    // north
                    if (player.getWorld().getBlockAt(x, y-1, z-1).getType() == Material.AIR || player.getWorld().getBlockAt(x, y, z).getType() == Material.CAVE_AIR) {
                        Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "summon armor_stand " + x + " " + midy + " " + backz + " {NoGravity:1b,Invisible:1b,NoBasePlate:1b,ArmorItems:[{},{},{},{id:\"minecraft:player_head\",Count:1b,tag:{SkullOwner:{Id:[I;420211400,-1836693680,-1895208571,1476527556],Properties:{textures:[{Value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWM5Zjg5ZWUzNzE3ZTQ2OWMwY2QzNmMwM2MwZmQ2OWVjYjNiYTFkOWFiNTJhMmEwMWExMThiOGExYTc1NjcwYiJ9fX0=\"}]}}}}]}");
                    }
                    // east
                    if (player.getWorld().getBlockAt(x+1, y-1, z).getType() == Material.AIR || player.getWorld().getBlockAt(x, y, z).getType() == Material.CAVE_AIR) {
                        Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "summon armor_stand " + frontx + " " + midy + " " + z + " {NoGravity:1b,Invisible:1b,NoBasePlate:1b,ArmorItems:[{},{},{},{id:\"minecraft:player_head\",Count:1b,tag:{SkullOwner:{Id:[I;420211400,-1836693680,-1895208571,1476527556],Properties:{textures:[{Value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWM5Zjg5ZWUzNzE3ZTQ2OWMwY2QzNmMwM2MwZmQ2OWVjYjNiYTFkOWFiNTJhMmEwMWExMThiOGExYTc1NjcwYiJ9fX0=\"}]}}}}]}");
                    }
                    // west
                    if (player.getWorld().getBlockAt(x-1, y-1, z).getType() == Material.AIR || player.getWorld().getBlockAt(x, y, z).getType() == Material.CAVE_AIR) {
                        Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "summon armor_stand " + backx + " " + midy + " " + z + " {NoGravity:1b,Invisible:1b,NoBasePlate:1b,ArmorItems:[{},{},{},{id:\"minecraft:player_head\",Count:1b,tag:{SkullOwner:{Id:[I;420211400,-1836693680,-1895208571,1476527556],Properties:{textures:[{Value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWM5Zjg5ZWUzNzE3ZTQ2OWMwY2QzNmMwM2MwZmQ2OWVjYjNiYTFkOWFiNTJhMmEwMWExMThiOGExYTc1NjcwYiJ9fX0=\"}]}}}}]}");
                    }
                    // south
                    if (player.getWorld().getBlockAt(x, y-1, z+1).getType() == Material.AIR || player.getWorld().getBlockAt(x, y, z).getType() == Material.CAVE_AIR) {
                        Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "summon armor_stand " + x + " " + midy + " " + frontz + " {NoGravity:1b,Invisible:1b,NoBasePlate:1b,ArmorItems:[{},{},{},{id:\"minecraft:player_head\",Count:1b,tag:{SkullOwner:{Id:[I;420211400,-1836693680,-1895208571,1476527556],Properties:{textures:[{Value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWM5Zjg5ZWUzNzE3ZTQ2OWMwY2QzNmMwM2MwZmQ2OWVjYjNiYTFkOWFiNTJhMmEwMWExMThiOGExYTc1NjcwYiJ9fX0=\"}]}}}}]}");
                    }
        }
        return true;
    }
}

我试图检测当这个块打破和运行一些代码,如召唤一个项目,杀死盔甲站等我尝试使用BlockBreak事件,但它只让你做的事情,如取消下降项目和打破,我想得到打破块的人和它的坐标,但事件没有功能。谢谢。


共1个答案

匿名用户

您应该使用world. spawnEntity(Site,EntityType以编程方式生成军械库。这将返回军械库实体,以便您可以进一步配置它。

ArmorStand armorstand = (ArmorStand) player.getWorld().spawnEntity(
                new Location(player.getWorld(), x, y, z), EntityType.ARMOR_STAND);
armorstand.setGravity(false);
armorstand.setInvisible(true);
armorstand.setBasePlate(false);
armorstand.getEquipment().setHelmet(headItemStack);

您可以在某个地方保留对军械库的引用以及它属于哪个块。要获得ItemStack头部,请查看此处。

在BlockBreak上,您只需检查您存储的任何军械架实体是否属于该块并删除它们。要生成该项目,请使用world. dropItemNature(位置,ItemStack)。它将召唤一个具有随机偏移量的项目。