欢迎光临散文网 会员登陆 & 注册

我的世界1.19.2fabric自定义工具

2023-06-22 08:39 作者:三极客  | 我要投稿

先上个wiki链接 fabricmc.net/wiki/tutorial:tools

其实大多数的按照wiki就行了

先创建材料类

并实现父类方法

材料的父类方法重写

然后写这一个工具类

工具类

注册

public static final Item LightningRod1 = register("lightning_rod_material",(Item) new LightningRod(LightningRodMaterial.LIGHTNING_ROD_MATERIAL,new Item.Settings().group(ITEM_GROUP).maxDamage(LightningRodMaterial.LIGHTNING_ROD_MATERIAL.getDurability())));

这里的register是我自行写了个方法,ITEM_GROUP是我自定义的物品组可以用ItemGroup.FOOD代替,注意这里的注册方法与wiki的不同

wiki的方法

然后放置纹理,配置文件就行了

然后在继承ModInitializer类的主类中注册

但是你会发现这个工具在LightningRodMaterial写的getAttackDamage中的攻击伤害没效果

并且也么有耐久,还有耐久变成负数的情况

耐久负数

在LightningRod中覆写postHit攻击函数

就是public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) {

}

然后写以下内容(吐槽,为什么这个b编辑器没有代码块功能)

@Override
   public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) {
       //造成伤害,是target被攻击者受到的伤害         target.damage(DamageSource.GENERIC,lightningRod.getAttackDamage());
       ItemStack itemStack = attacker.getStackInHand(attacker.getActiveHand()); // 创建用户手头ItemStack的一个新的ItemStack实例
//        itemStack.setDamage(itemStack.getDamage()-1);
       PlayerEntity playerEntity = attacker.getEntityWorld().getPlayerByUuid(attacker.getUuid());//通过uuid获取玩家
       if (itemStack.isDamageable()&&!playerEntity.isCreative()){//是否有耐久,是否为创造
           playerEntity.getItemCooldownManager().set(this,5);//设置攻击冷却
           itemStack.setDamage(itemStack.getDamage()+1);//设置耐久
           if (itemStack.getDamage()>=itemStack.getMaxDamage()){如果当前损失耐久大于最大耐久
               itemStack.decrement(1);//去除这个物品
           }
       }
       return true;
   }

整体样子

由于PlayerEntity是LivingEntity的子类,不能强转,要获取子类方法只能另寻出路

就是PlayerEntity playerEntity= attacker.getEntityWorld().getPlayerByUuid(attacker.getUuid());//通过uuid获取玩家

由此可以设置他的物品冷却时间playerEntity.getItemCooldownManager().set(this,100);

在攻击的时候召唤闪电

World world = attacker.getWorld();
LightningEntity lightningEntity = new LightningEntity(EntityType.LIGHTNING_BOLT,world);
lightningEntity.setPosition(target.getPos());
world.spawnEntity(lightningEntity);

成功



我的世界1.19.2fabric自定义工具的评论 (共 条)

分享到微博请遵守国家法律