在平常的生存里,总是遇到各种各样的怪物,那么今天,我们就要用我们的手、键盘和鼠标统统消灭他们!
首先建一个类:
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
来康康我们的剑扒:
真不戳,有范围秒杀+飞行+彻底清除的功能