如题,我创建了一个类,继承了EntityAnimal, 并使用
复制代码
来定义生物属性,但奇怪的是,一旦定义了属性生物进游戏就无法生成,目前测试中只有Mob类才能正常生成。
- @Override
- protected void applyEntityAttributes()
- {
- super.applyEntityAttributes();
- this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(50);
- this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.5);
- this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(0);
- this.getEntityAttribute(SharedMonsterAttributes.KNOCKBACK_RESISTANCE).setBaseValue(10);
- this.getEntityAttribute(SharedMonsterAttributes.ARMOR).setBaseValue(5);
- }
来定义生物属性,但奇怪的是,一旦定义了属性生物进游戏就无法生成,目前测试中只有Mob类才能正常生成。
本帖最后由 道家深湖 于 2021-9-18 10:26 编辑
无法生成一般是因为报错了,贴出你控制台的报错或者自己先根据输出调试一下。
这个报错是不崩溃的,因为内部catch了
就你贴出的代码里,有问题的应该是这句。
你有没有看过,EntityAnimal是否有ATTACK_DAMAGE这条属性,你就直接setBaseValue了?不是每个实体都有这条属性,这也是怪物和其他生物的一大区别。你要手动注册一个这属性,才能设置数值。
你不是在定义属性,你是在给属性赋值,而赋值的前提是这个属性在这个实体上定义(注册)了。
无法生成一般是因为报错了,贴出你控制台的报错或者自己先根据输出调试一下。
这个报错是不崩溃的,因为内部catch了
就你贴出的代码里,有问题的应该是这句。
this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(0);
你有没有看过,EntityAnimal是否有ATTACK_DAMAGE这条属性,你就直接setBaseValue了?不是每个实体都有这条属性,这也是怪物和其他生物的一大区别。你要手动注册一个这属性,才能设置数值。
你不是在定义属性,你是在给属性赋值,而赋值的前提是这个属性在这个实体上定义(注册)了。