zkm00323
本帖最后由 zkm00323 于 2017-1-18 23:02 编辑

玩mc最初始的成就就是按E打开背包然后往下一直延伸分支

但其实他的功能不仅仅如此
就如同拔刀剑,利用成就画面让你清楚知道要如何制造下一把刀
呢么我们是不是也可以用他来做技能树,天赋树呢?
我目前还没找到给玩家添加额外属性的方法
呢获取玩家是否达成某种成就也算是给玩家增加了一个Boolean属性

呢我们就开始着手吧!

在ModAchivenent里面写↓
public class ModAchivenent {
        public static void init(){
                Achivenent();
                Page();
        }
        
        public static void Page(){
        }
        
        public static void Achivenent(){
        }
}



然后我们需要穿件一些成就物件
public class ModAchivenent {
public static Achievement achivementicebullets,achivementicefog,achivementicethorns,achivementiceblock,achivementblizzard;        
public static Achievement iceSkillslist[] = {achivementicebullets,achivementicefog,achivementicethorns,achivementiceblock,achivementblizzard};

        
        public static void init(){
                Achivenent();
                Page();
        }
        
        public static void Page(){
        }
        
        public static void Achivenent(){
        }
}



Achivenent()里写
iceSkillslist[0] = new Achievement("achivement.icebullets", "icebullets", 0, 0, new ItemStack(ModItems.itemiceicon,1,0), (Achievement)null).initIndependentStat().registerStat();

"achivement.icebullets":外部名在lang文件里使用
"icebullets":注解里写的是unlocalizedname,目前不太清楚用以
0,0:成就画面的X,Y坐标
new ItemStack(ModItems.itemiceicon,1,0):显示的itemsatack图标
      ModItems.itemiceicon:物品
      1:物品堆个数
      0:子类物品meta
这里也可以用item,和block作为参数
我之所以用itemstack因为要获取多态物品的子物品只能用这个呼叫方式得出
直接用item获得子类item我目前还没找到方法
(Achievement)null:无前提成就
initIndependentStat():设定为独立成就
registerStat():注册成就

接着写第二句
  iceSkillslist[1] = new Achievement("achivement.icefog", "icefog", 0, 0, new ItemStack(ModItems.itemiceicon,1,1), iceSkillslist[0]).registerStat();


iceSkillslist[0]:前提成就
这句不需要写initIndependentStat()因为她依附于上一句icebullets成就


我们把剩下的都写完
                iceSkillslist[2] = new Achievement("achivement.icethorns", "icethorns", 2, 0, new ItemStack(ModItems.itemiceicon,1,2), iceSkillslist[1]).registerStat();
                iceSkillslist[3] = new Achievement("achivement.iceblock", "iceblock", 4, 0, new ItemStack(ModItems.itemiceicon,1,3), iceSkillslist[2]).registerStat();
                iceSkillslist[4] = new Achievement("achivement.blizzard", "blizzard", 6, 0, new ItemStack(ModItems.itemiceicon,1,4), iceSkillslist[3]).
setSpecial().registerStat();

setSpecial():设置此成就为特殊成就
然后我们在Page()里写上
                AchievementPage.registerAchievementPage(new AchievementPage("Soul of Ashes", iceSkillslist));

这句话意思是注册一个新的成就页面,包含成就为 iceSkillslist阵列内的所有Achievement

最后我们到Main里呼叫这里的init方法;
        @EventHandler
        public void preInit(FMLPreInitializationEvent event){
                ModItems.init();
                ModAchivenent.init();
                proxy.init();
        }



为了给你们演示一下获得成就的代码
我们回到ItemIceicon里写一个onItemRightClick方法
        @Override
        public ActionResult<ItemStack> onItemRightClick(World world, EntityPlayer player, EnumHand hand) {
            ItemStack item = player.getHeldItemMainhand();
            player.addStat(ModAchivenent.iceSkillslist[item.getMetadata()]);
                return super.onItemRightClick(world, player, hand);
        }



第一句老方法获取玩家手里的物品堆
player.addStat(成就):玩家获得成就





好我们进入游戏



嘿嘿对其实色调确定了以后就很容易画了,剩下的4个总共也就画了半小时

其实我虽然创建了lang文件夹,但是一直忽略了他都存在
下一章我们就把这个小问题给解决一下
顺便造一个物品栏
再顺便写一个合成公式
再再顺便写一个冶炼公式
再顺便.....
源代码 src_教程8.rar (22.76 KB, 下载次数: 20)







2021.12 数据,可能有更多内容玩mc最初始的成就就是按E打开背包然后往下一直延伸分支

但其实他的功能不仅仅如此
就如同拔刀剑,利用成就画面让你清楚知道要如何制造下一把刀
呢么我们是不是也可以用他来做技能树,天赋树呢?
我目前还没找到给玩家添加额外属性的方法
呢获取玩家是否达成某种成就也算是给玩家增加了一个Boolean属性


呢我们就开始着手吧!



在ModAchivenent里面写↓
public class ModAchivenent {
  public static void init(){
    Achivenent();
    Page();
  }
 
  public static void Page(){
  }
 
  public static void Achivenent(){
  }
}



然后我们需要穿件一些成就物件
public class ModAchivenent {
public static Achievement achivementicebullets,achivementicefog,achivementicethorns,achivementiceblock,achivementblizzard; 
public static Achievement iceSkillslist[] = {achivementicebullets,achivementicefog,achivementicethorns,achivementiceblock,achivementblizzard};


 
  public static void init(){
    Achivenent();
    Page();
  }
 
  public static void Page(){
  }
 
  public static void Achivenent(){
  }
}



Achivenent()里写
iceSkillslist[0] = new Achievement(&quot;achivement.icebullets&quot;, &quot;icebullets&quot;, 0, 0, new ItemStack(ModItems.itemiceicon,1,0), (Achievement)null).initIndependentStat().registerStat();


&quot;achivement.icebullets&quot;:外部名在lang文件里使用
&quot;icebullets&quot;:注解里写的是unlocalizedname,目前不太清楚用以
0,0:成就画面的X,Y坐标
new ItemStack(ModItems.itemiceicon,1,0):显示的itemsatack图标
   ModItems.itemiceicon:物品
   1:物品堆个数
   0:子类物品meta
这里也可以用item,和block作为参数
我之所以用itemstack因为要获取多态物品的子物品只能用这个呼叫方式得出
直接用item获得子类item我目前还没找到方法
(Achievement)null:无前提成就
initIndependentStat():设定为独立成就
registerStat():注册成就


接着写第二句
iceSkillslist[1] = new Achievement(&quot;achivement.icefog&quot;, &quot;icefog&quot;, 0, 0, new ItemStack(ModItems.itemiceicon,1,1), iceSkillslist[0]).registerStat();


iceSkillslist[0]:前提成就
这句不需要写initIndependentStat()因为她依附于上一句icebullets成就


我们把剩下的都写完
    iceSkillslist[2] = new Achievement(&quot;achivement.icethorns&quot;, &quot;icethorns&quot;, 2, 0, new ItemStack(ModItems.itemiceicon,1,2), iceSkillslist[1]).registerStat();
    iceSkillslist[3] = new Achievement(&quot;achivement.iceblock&quot;, &quot;iceblock&quot;, 4, 0, new ItemStack(ModItems.itemiceicon,1,3), iceSkillslist[2]).registerStat();
    iceSkillslist[4] = new Achievement(&quot;achivement.blizzard&quot;, &quot;blizzard&quot;, 6, 0, new ItemStack(ModItems.itemiceicon,1,4), iceSkillslist[3]).
setSpecial().registerStat();

setSpecial():设置此成就为特殊成就
然后我们在Page()里写上
  AchievementPage.registerAchievementPage(new AchievementPage(&quot;Soul of Ashes&quot;, iceSkillslist));


这句话意思是注册一个新的成就页面,包含成就为 iceSkillslist阵列内的所有Achievement


最后我们到Main里呼叫这里的init方法;
  @EventHandler
  public void preInit(FMLPreInitializationEvent event){
    ModItems.init();
    ModAchivenent.init();
    proxy.init();
  }



为了给你们演示一下获得成就的代码
我们回到ItemIceicon里写一个onItemRightClick方法
  @Override
  public ActionResult&lt;ItemStack&gt; onItemRightClick(World world, EntityPlayer player, EnumHand hand) {
  ItemStack item = player.getHeldItemMainhand();
   player.addStat(ModAchivenent.iceSkillslist[item.getMetadata()]);
    return super.onItemRightClick(world, player, hand);
  }



第一句老方法获取玩家手里的物品堆
player.addStat(成就):玩家获得成就


好我们进入游戏




嘿嘿对其实色调确定了以后就很容易画了,剩下的4个总共也就画了半小时


其实我虽然创建了lang文件夹,但是一直忽略了他都存在
下一章我们就把这个小问题给解决一下
顺便造一个物品栏
再顺便写一个合成公式
再再顺便写一个冶炼公式
再顺便.....
源代码




1123591586
挖坑狂魔2333

豆焰
厉害!6666

第一页 上一页 下一页 最后一页