我的世界1.19.2fabric自定義工具
先上個(gè)wiki鏈接 fabricmc.net/wiki/tutorial:tools
其實(shí)大多數(shù)的按照wiki就行了

并實(shí)現(xiàn)父類(lèi)方法

然后寫(xiě)這一個(gè)工具類(lèi)

注冊(cè)
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是我自行寫(xiě)了個(gè)方法,ITEM_GROUP是我自定義的物品組可以用ItemGroup.FOOD代替,注意這里的注冊(cè)方法與wiki的不同


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


但是你會(huì)發(fā)現(xiàn)這個(gè)工具在LightningRodMaterial寫(xiě)的getAttackDamage中的攻擊傷害沒(méi)效果
并且也么有耐久,還有耐久變成負(fù)數(shù)的情況

在LightningRod中覆寫(xiě)postHit攻擊函數(shù)
就是public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) {
}
然后寫(xiě)以下內(nèi)容(吐槽,為什么這個(gè)b編輯器沒(méi)有代碼塊功能)
@Override
? ?public boolean postHit(ItemStack stack, LivingEntity target, LivingEntity attacker) {
? ? ? ?//造成傷害,是target被攻擊者受到的傷害? ? ? ???target.damage(DamageSource.GENERIC,lightningRod.getAttackDamage());
? ? ? ?ItemStack itemStack = attacker.getStackInHand(attacker.getActiveHand()); // 創(chuàng)建用戶(hù)手頭ItemStack的一個(gè)新的ItemStack實(shí)例
// ? ? ? ?itemStack.setDamage(itemStack.getDamage()-1);
? ? ? ?PlayerEntity playerEntity = attacker.getEntityWorld().getPlayerByUuid(attacker.getUuid());//通過(guò)uuid獲取玩家
? ? ? ?if (itemStack.isDamageable()&&!playerEntity.isCreative()){//是否有耐久,是否為創(chuàng)造
? ? ? ? ? ?playerEntity.getItemCooldownManager().set(this,5);//設(shè)置攻擊冷卻
? ? ? ? ? ?itemStack.setDamage(itemStack.getDamage()+1);//設(shè)置耐久
? ? ? ? ? ?if (itemStack.getDamage()>=itemStack.getMaxDamage()){如果當(dāng)前損失耐久大于最大耐久
? ? ? ? ? ? ? ?itemStack.decrement(1);//去除這個(gè)物品
? ? ? ? ? ?}
? ? ? ?}
? ? ? ?return true;
? ?}

由于PlayerEntity是LivingEntity的子類(lèi),不能強(qiáng)轉(zhuǎn),要獲取子類(lèi)方法只能另尋出路
就是PlayerEntity playerEntity=?attacker.getEntityWorld().getPlayerByUuid(attacker.getUuid());//通過(guò)uuid獲取玩家
由此可以設(shè)置他的物品冷卻時(shí)間playerEntity.getItemCooldownManager().set(this,100);
在攻擊的時(shí)候召喚閃電
World world = attacker.getWorld();
LightningEntity lightningEntity = new LightningEntity(EntityType.LIGHTNING_BOLT,world);
lightningEntity.setPosition(target.getPos());
world.spawnEntity(lightningEntity);

我的世界1.19.2fabric自定義工具的評(píng)論 (共 條)
