本帖最后由 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)

但其实他的功能不仅仅如此
就如同拔刀剑,利用成就画面让你清楚知道要如何制造下一把刀
呢么我们是不是也可以用他来做技能树,天赋树呢?
我目前还没找到给玩家添加额外属性的方法
呢获取玩家是否达成某种成就也算是给玩家增加了一个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文件夹,但是一直忽略了他都存在
下一章我们就把这个小问题给解决一下
顺便造一个物品栏
再顺便写一个合成公式
再再顺便写一个冶炼公式
再顺便.....
源代码
玩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文件夹,但是一直忽略了他都存在
下一章我们就把这个小问题给解决一下
顺便造一个物品栏
再顺便写一个合成公式
再再顺便写一个冶炼公式
再顺便.....
源代码
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("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文件夹,但是一直忽略了他都存在
下一章我们就把这个小问题给解决一下
顺便造一个物品栏
再顺便写一个合成公式
再再顺便写一个冶炼公式
再顺便.....
源代码
挖坑狂魔2333
厉害!6666