现在,我们有了一把无敌的剑,但仅靠这些显然是不够的,我们还需要一套无敌的盔甲,具体要实现:无视伤害,全套时可以飞行
直接上代码
ItemDirtArmor.java:
package fenge.fmltutor.item;
import fenge.fmltutor.ExampleMod;
import fenge.fmltutor.creativetab.TabFMLTutor;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.MobEffects;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
//继承ItemArmor
public class ItemDirtArmor extends ItemArmor
{
public ItemDirtArmor(EntityEquipmentSlot equipmentSlot)
{
//设置盔甲属性
super(ItemRegistryHandler.DIRT_ARMOR_MATERIAL, 0, equipmentSlot);
this.setUnlocalizedName(ExampleMod.MODID + ".dirtArmor." + equipmentSlot.getName());
//设置UnlocalizedName
this.setRegistryName("dirt_armor_" + equipmentSlot.getName());
//设置RegistryName
this.setCreativeTab(TabFMLTutor.TAB_FMLTUTOR);
//设置所在物品栏
}
//没用的属性
public Boolean ZT = false;
//当盔甲被穿上时调用
@SideOnly(Side.CLIENT)
@Override
public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack){
if (player.inventory.armorItemInSlot(2).getItem()==ItemRegistryHandler.DIRT_CHESTPLATE &&
player.inventory.armorItemInSlot(2)!=null ||
player.inventory.armorItemInSlot(3).getItem()==ItemRegistryHandler.DIRT_HELMET &&
player.inventory.armorItemInSlot(3)!=null ||
player.inventory.armorItemInSlot(0).getItem()==ItemRegistryHandler.DIRT_BOOTS &&
player.inventory.armorItemInSlot(0)!=null ||
player.inventory.armorItemInSlot(1).getItem()==ItemRegistryHandler.DIRT_LEGGINGS &&
player.inventory.armorItemInSlot(1)!=null) {
//只要穿上其中的一件,就赋予急迫III,生命恢复三,并将血量设为满血
effectPlayer(player, MobEffects.HASTE,10,3);
effectPlayer(player, MobEffects.REGENERATION,10,3);
//TODO effectPlayer(player, PotionRegistryHandler.POTION_DIRT_PROTECTION,10,5);
player.setHealth(20.00F);
this.ZT=true;
}else
this.ZT=false;
if (player.inventory.armorItemInSlot(2).getItem()==ItemRegistryHandler.DIRT_CHESTPLATE &&
player.inventory.armorItemInSlot(2)!=null &&
player.inventory.armorItemInSlot(3).getItem()==ItemRegistryHandler.DIRT_HELMET &&
player.inventory.armorItemInSlot(3)!=null &&
player.inventory.armorItemInSlot(0).getItem()==ItemRegistryHandler.DIRT_BOOTS &&
player.inventory.armorItemInSlot(0)!=null &&
player.inventory.armorItemInSlot(1).getItem()==ItemRegistryHandler.DIRT_LEGGINGS &&
player.inventory.armorItemInSlot(1)!=null) {
player.capabilities.isFlying=true;
//如果全部穿上便赋予可以飞行的能力
} else if (!player.capabilities.isCreativeMode) {
//否则不可以飞(创造以外)
player.capabilities.isFlying=false;
}
super.onArmorTick(world,player,itemStack);
}
private void effectPlayer(EntityPlayer player, Potion effect,int duration,int amplifier){
//赋予药水效果的方法
if(player.getActivePotionEffect(effect)==null || player.getActivePotionEffect(effect).getDuration()<=1){
player.addPotionEffect(new PotionEffect(effect,duration,amplifier,false,true));
}
}
}
然后在ItemRegistryHandler中添加盔甲属性:
//参数分别是材质(枚举类名),盔甲名称前缀,耐久基数(鞋=基数*13,裤子=基数*15,衣服=基数*16,头盔=基数*11),防御点数{鞋子,裤子,衣服,头盔} ,穿上盔甲时发出的声音,盔甲韧性
public static final ItemArmor.ArmorMaterial DIRT_ARMOR_MATERIAL = EnumHelper.addArmorMaterial("DIRT",
ExampleMod.MODID+":dirt",1000000000,new int[] {3,8,6,3},9, SoundEvents.ITEM_ARMOR_EQUIP_DIAMOND
,2);
再在ItemRegistryHandler中添加盔甲:
public static final ItemDirtArmor DIRT_BOOTS = new ItemDirtArmor(EntityEquipmentSlot.FEET);
//鞋
public static final ItemDirtArmor DIRT_LEGGINGS = new ItemDirtArmor(EntityEquipmentSlot.LEGS);
//裤子
public static final ItemDirtArmor DIRT_CHESTPLATE = new ItemDirtArmor(EntityEquipmentSlot.CHEST);
//衣服
public static final ItemDirtArmor DIRT_HELMET = new ItemDirtArmor(EntityEquipmentSlot.HEAD);
//头盔
在ItemRegistryHandler中将他们注册:
@SubscribeEvent
public static void onRegistry(Register<Item> event)
{
IForgeRegistry<Item> registry= event.getRegistry();
//省略亿行代码(注册的有别的东西)
registry.register(DIRT_BOOTS);
registry.register(DIRT_LEGGINGS);
registry.register(DIRT_CHESTPLATE);
registry.register(DIRT_HELMET);
}
在ItemRegistryHandler中将他们的模型注册:
@SideOnly(Side.CLIENT)
private static void registerModel(Item item)
{
ModelResourceLocation modelResourceLocation = new ModelResourceLocation(item.getRegistryName(), "inventory");
ModelLoader.setCustomModelResourceLocation(item, 0, modelResourceLocation);
}
@SubscribeEvent
@SideOnly(Side.CLIENT)
public static void onModelRegistry(ModelRegistryEvent event)
{
registerModel(DIRT_CHESTPLATE);
registerModel(DIRT_BOOTS);
registerModel(DIRT_HELMET);
registerModel(DIRT_LEGGINGS);
}
添加模型(src\main\resources\assets\fmltutor\blockstates) :
#dirt_armor_chest,json
{
"forge_marker": 1,
"defaults": {
"model": "minecraft:builtin/generated",
"textures": { "layer0": "fmltutor:items/dirt_armor_chest" }
},
"variants": {
"inventory": [{ "transform": "forge:default-item" }]
}
}
#dirt_armor_feet.json
{
"forge_marker": 1,
"defaults": {
"model": "minecraft:builtin/generated",
"textures": { "layer0": "fmltutor:items/dirt_armor_feet" }
},
"variants": {
"inventory": [{ "transform": "forge:default-item" }]
}
}
#dirt_armor_head.json
{
"forge_marker": 1,
"defaults": {
"model": "minecraft:builtin/generated",
"textures": { "layer0": "fmltutor:items/dirt_armor_head" }
},
"variants": {
"inventory": [{ "transform": "forge:default-item" }]
}
}
#dirt_armor_legs.json
{
"forge_marker": 1,
"defaults": {
"model": "minecraft:builtin/generated",
"textures": { "layer0": "fmltutor:items/dirt_armor_legs" }
},
"variants": {
"inventory": [{ "transform": "forge:default-item" }]
}
}
添加图片(src\main\resources\assets\fmltutor\textures\items) :
#dirt_armor_head.png:
#dirt_armor_chest.png:
#dirt_armor_legs.png:
#dirt_armor_feet. png
添加语言(src\main\resources\assets\fmltutor\lang):
#zh_cn
item.fmltutor.dirtArmor.feet.name=俺滴靴子 item.fmltutor.dirtArmor.legs.name=俺滴护腿 item.fmltutor.dirtArmor.chest.name=俺滴胸甲 item.fmltutor.dirtArmor.head.name=俺滴头盔
#en_us
item.fmltutor.dirtArmor.feet.name=dirt boots item.fmltutor.dirtArmor.legs.name=dirt leggings item.fmltutor.dirtArmor.chest.name=dirt chestplate item.fmltutor.dirtArmor.head.name=dirt helmet
让我们康康效果:
俺滴盔甲