我想做一个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
事件,但它只让你做的事情,如取消下降项目和打破,我想得到打破块的人和它的坐标,但事件没有功能。谢谢。
您应该使用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)
。它将召唤一个具有随机偏移量的项目。