我的世界mod开发(5)做一把无敌的剑

在平常的生存里,总是遇到各种各样的怪物,那么今天,我们就要用我们的手、键盘和鼠标统统消灭他们!

首先建一个类:

package fenge.fmltutor.item;

import fenge.fmltutor.ExampleMod;
import fenge.fmltutor.creativetab.TabFMLTutor;
import fenge.fmltutor.entity.EntityDirtBallKing;
import fenge.fmltutor.event.EventHandler;
import fenge.fmltutor.potion.PotionRegistryHandler;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.ActionResult;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumHand;
import net.minecraft.world.World;

public class ItemDirtSword extends ItemSword {
    public ItemDirtSword(){
        super(ItemRegistryHandler.DIRT_TOOL_MATERLAL_);
        this.setUnlocalizedName(ExampleMod.MODID + ".dirtSword");
        this.setCreativeTab(TabFMLTutor.TAB_FMLTUTOR);
        this.setRegistryName("dirt_sword");

    }

    //功能1,“芜湖起飞”
    @Override
    public ActionResult<ItemStack> onItemRightClick(World p_77659_1_, EntityPlayer entityPlayer, EnumHand p_77659_3_) {
        effectPlayer(entityPlayer);

        if(entityPlayer.rotationPitch>30){
            EventHandler.lP4(entityPlayer);

        }
        else {
            EventHandler.lP2(entityPlayer);
        }


        ItemStack itemstack = entityPlayer.getHeldItem(p_77659_3_);
        return new ActionResult<>(EnumActionResult.SUCCESS, itemstack);
    }
    private void effectPlayer(EntityPlayer player){
      if(player.getActivePotionEffect(MobEffects.REGENERATION)==null || player.getActivePotionEffect(MobEffects.REGENERATION).getDuration()<=1){
            player.addPotionEffect(new PotionEffect(MobEffects.REGENERATION, 2, 5,false,true));

        }
        
    }
    //功能2,彻底清除被击中的怪物
    @Override
    public boolean onLeftClickEntity(ItemStack p_onLeftClickEntity_1_, EntityPlayer p_onLeftClickEntity_2_, Entity p_onLeftClickEntity_3_) {

        if(p_onLeftClickEntity_3_.getName().equals("loli")){

            p_onLeftClickEntity_3_.isDead=true;
        }
        if(!(p_onLeftClickEntity_3_ instanceof EntityPlayer)){
            p_onLeftClickEntity_3_.setDead();
          
            p_onLeftClickEntity_3_=null;
        }



        return super.onLeftClickEntity(p_onLeftClickEntity_1_, p_onLeftClickEntity_2_, p_onLeftClickEntity_3_);
    }
}

我们可以发现,有很多方法和变量都不存在,不要慌,现在就加入

在EventHandler中加入:

    public static void lP(Entity target){

        target.world.createExplosion(target,target.posX,target.posY,target.posZ,10L,true);

    }
    public static void lP3(Entity target){

        target.world.createExplosion(null,target.posX,target.posY+0.5,target.posZ,10L,false);

    }
    public static void lP4(Entity target){

        target.world.createExplosion(null,target.posX,target.posY+4,target.posZ,10L,false);

    }
    public static void lP2(Entity target){

        target.world.createExplosion(null,target.posX,target.posY,target.posZ,10L,false);

    }

再加入范围秒杀(在EventHandler里):

 //秒杀
    protected static void dead(EntityLiving entityLiving){
       //entityLiving.attackEntityFrom(new DamageSource("fenge"),entityLiving.getHealth());
        entityLiving.setHealth(0);
        entityLiving.world.removeEntity(entityLiving);
    }   
    public static void ms(List<Entity> entity,Entity entity_){//秒杀客户端生物
        for (int i = 0;i<entity.size();i++){
            Entity j=entity.get(i);
            //遍历主世界所有的生物
            if (j.posX>entity_.posX-100 &&j.posX<entity_.posX+100){
                if (j.posZ>entity_.posZ-100 &&j.posZ<entity_.posZ+100){
                    //如果生物在以玩家为中心100格以内
                    if (entity_ instanceof EntityPlayer) {
                        //如果使用技能者是玩家


                        ItemStack currentItem = ((EntityPlayer) entity_).inventory.getCurrentItem();
                        if (!(currentItem.getItem() instanceof ItemDirtSword)) {
                        //如果没手持此剑
                            dead((EntityLiving) j);
                            //让肖恩给你看病(秒杀)
                            if(j.world.isRemote)ss((EntityLivingBase) j, (EntityLivingBase) entity_);


                        }

                    }
                    if (j instanceof EntityPlayer) {

                        //如果生物是你的好基友(玩家)
                        ItemStack currentItem = ((EntityPlayer) entity_).inventory.getCurrentItem();
                        if (!(currentItem.getItem() instanceof ItemDirtSword)) {
                             //如果没手持此剑
                             dead((EntityLiving) j);
                             if(j.world.isRemote)ss((EntityLivingBase) j, (EntityLivingBase) entity_);
                             //肖恩:我觉的他已经死了(秒杀)
                             MinecraftServer jServer =j.getServer();
                             Entity jj=jServer.getEntityFromUuid(j.getUniqueID());
                             //4行没用的代码
                             if(!jj.world.isRemote){
                                 //jj.setDead();

                             }

                        }

                    }
                    if(!(j instanceof EntityPlayer)){
                        if(j instanceof EntityLiving){
                        //如果不是玩家
                            dead((EntityLiving) j);
                            //肖恩:拿来把你!(秒杀)
                            if(j.world.isRemote)ss((EntityLivingBase) j, (EntityLivingBase) entity_);






                        }

                    }

                }
            }
        }
    }
    //秒杀服务端生物
    public static void ss(EntityLivingBase j,EntityLivingBase entity_){


        if (Minecraft.getMinecraft().getIntegratedServer() != null) {
                        ms(Minecraft.getMinecraft().getIntegratedServer().getWorld(entity_.world.provider.getDimension()).getLoadedEntityList(), entity_);
            //将服务端秒杀一遍
            String message = "BEY BEY,"+j.getName()+"!";
            TextComponentString text = new TextComponentString(message);
            //来自玩家的嘲讽
            entity_.sendMessage(text);
        }









    }
    //当左键空气时

    @SubscribeEvent
    public static void onLeftClickEmpty(PlayerInteractEvent.LeftClickEmpty event){

        Entity entity_=event.getEntity();
        List<Entity> entity=entity_.world.getLoadedEntityList();
        ItemStack currentItem = ((EntityPlayer) entity_).inventory.getCurrentItem();
        if (DIRT_SWORD.equals(currentItem.getItem())) {
            ms(entity,entity_);


        }
   

    }
    

再在ItemRegistryHandler添加此剑的属性:

//这几个参数依次代表:材料(这个是枚举类的名称,全部大写)、挖掘等级(钻石镐是3)、耐久、挖特定方块的速度(倍数)、附魔能力
public static final Item.ToolMaterial DIRT_TOOL_MATERLAL_ = EnumHelper.addToolMaterial("DIRT",1000000000,100000000,100000000F,
            2147483647,5);

添加此剑(在ItemRegistryHandler里):

public static final ItemDirtSword DIRT_SWORD = new ItemDirtSword();

注册(在ItemRegistryHandler里):

@SubscribeEvent
public static void onRegistry(Register<Item> event)
{
IForgeRegistry<Item> registry= event.getRegistry();
registry.register(DIRT_SWORD);
//此处省略亿行代码(注册的有别的东西,这个方法可以注册此模组的所有物品)
}

注册模型(在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_SWORD);
//此处省略亿行代码(注册的有别的东西,这个方法可以注册此模组的所有物品的模型)
}

添加模型(在src\main\resources\assets\fmltutor\blockstates\)

dirt_sword.json:

{
  "forge_marker": 1,
  "defaults": {
    "model": "minecraft:builtin/generated",
    "textures": { "layer0": "fmltutor:items/dirt_sword" }
  },
  "variants": {
    "inventory": [{ "transform": "forge:default-tool" }]
  }
}

添加图片(src\main\resources\assets\fmltutor\textures\items\dirt_sword.png):

 16*16或32*32的图片(我画的不怎么帅)

接下来在语言文件中添加物品名:
src\main\resources\assets\fmltutor\lang\zh_cn.lang:

item.fmltutor.dirtSword.name=俺滴剑

src\main\resources\assets\fmltutor\lang\en_us.lang:

item.fmltutor.dirtSword.name=My sword

 来康康我们的剑扒:
 

真不戳,有范围秒杀+飞行+彻底清除的功能

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值