Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将MaxHealth设置为自定义EntitySkeleton?_Java_Entity_Minecraft_Bukkit - Fatal编程技术网

Java 如何将MaxHealth设置为自定义EntitySkeleton?

Java 如何将MaxHealth设置为自定义EntitySkeleton?,java,entity,minecraft,bukkit,Java,Entity,Minecraft,Bukkit,我想创建一个自定义骨架,它有一个名称、更多的健康状况并包含其他自定义项。 我可以添加一个名称和setHealth(),但我不能setMaxHealth(),而且设置道具和护甲也不起作用 感谢您的帮助,以下是我的代码: Player p = (Player) sender; WorldServer world = ((CraftWorld)p.getWorld()).getHandle(); Location loc = p.getLocation(); if (args.length >

我想创建一个自定义骨架,它有一个名称、更多的健康状况并包含其他自定义项。 我可以添加一个名称和
setHealth()
,但我不能
setMaxHealth()
,而且设置道具和护甲也不起作用

感谢您的帮助,以下是我的代码:

Player p = (Player) sender;
WorldServer world = ((CraftWorld)p.getWorld()).getHandle();
Location loc = p.getLocation();

if (args.length > 0) {
            if (args[0].equalsIgnoreCase("define")) {
                //get worldedit selection
                if (getWorldEdit().getSelection(p) == null) {
                    p.sendMessage(title + "Please select a region with WorldEdit");
                    return false;
                }
                s = getWorldEdit().getSelection(p);
                Location min = s.getMinimumPoint();
                Location max = s.getMaximumPoint();

                //boss mob creation
                EntitySkeleton boss = new EntitySkeleton(world);
                boss.setHealth(400);
                boss.setCustomName("§4§lDAFT BOSS");
                boss.setCustomNameVisible(true);

                ItemStack weapon = new ItemStack(Material.DIAMOND_SWORD);
                weapon.setDurability((short) 0);
                weapon.addEnchantment(Enchantment.DAMAGE_ALL, 5);
                weapon.addUnsafeEnchantment(Enchantment.KNOCKBACK, 2);



                boss.setLocation(max);
                world.addEntity(boss);


            }

这可以使用可归属的接口获得,如来自插口的线程中所述


例如:

对于1.9及以上版本:

Entity boss;
Attributable bossAttributable = (Attributable) boss;
AttributeInstance ai = bossAttributable.getAttribute(Attribute.GENERIC_MAX_HEALTH);
ai.setValue(400.0);
对于1.8.8及以下版本,必须采用另一种方式:

Entity boss;
Damageable bossDamageable = (Damageable) boss;
bossDamageable.setMaxHealth(400.0);

1.8.8版本中不存在可归因。我也不知道什么是可损坏的:(你可能需要相应地设置实体的健康状况,否则你会得到一个20健康度的骨架,最大健康度为400,但没有治愈它给了我这个“内部错误”在服务器控制台中:由以下原因引起:java.lang.ClassCastException:net.minecraft.server.v1_8_R1.EntitySkeleton无法在me.sensonic.dcboss.Main.onCommand处转换为org.bukkit.entity.Damageable at me.sensonic.dcboss.Main.onCommand(Main.java:77)~[?:?]在org.bukkit.command.command.PluginCommand.execute(PluginCommand.java:44)~[spiget.jar:git-spiget-c767f-33d5de3]Bukkit中没有EntitySkeleton这样的东西。你可能正在使用CraftBukkit作为你的主库,你不应该这样做!使用带有
EntityType.Skeleton的普通实体,而不是普通的Bukkit实现如果可能的话,你不应该使用NMS(我认为这里就是这种情况)。