zoukankan      html  css  js  c++  java
  • 【Forge】Minecraft 1.7.10 Mod开发研究

    然后该给背包添加功能了,背包的功能说起来很简单,无非就是右键打开一个和箱子长得差不多的窗口,然后把东西放进去保存起来。

    然后还有一些附加事项,比如不能把自己放进自己里面,最好也不允许把同类放进自己里面,那样容量就以次方倍的速度增加,一个背包里就能放无限个道具了。

    于是首先处理背包的右键事件。

    Item类自带一个方法,名字一看就懂,重写掉:

    @Override
    public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer entityPlayer) {
        return super.onItemRightClick(itemStack, world, entityPlayer);
    }

    返回值是被右键的物品栈。

    我回忆了一下,我好像没提物品栈这事来着。

    暂时理解成一摞东西就行了,就算只有一个物品也是一个物品栈,物品栈可以用物品创建,也可以用物品栈的方法取到物品。

    整个游戏过程中物品类只会创建一次,这个有点反直觉,并不是一个物品就是一个实例,一摞64个物品就是64个实例。

    方块自然也是一样的,一个区块边长16格,从天到地256格,要是有这么多个实例后果可想而知,是吧说你呢虚拟机。

    然后就要在这个方法里处理物品栏的打开和背包里物品的存储。

    为了不误导人,我就不提我当时走的弯路了。

    这个问题看起来简单,其实挺费劲的。

    先把右键点击事件填上吧。

    打开图形界面的接口在玩家类里:

    entityPlayer.openGui(NekoBags.instance, NekoBags.GUI_ID_KURONEKO, world,
      (int)entityPlayer.posX, (int)entityPlayer.posY, (int)entityPlayer.posZ);

    第一个参数是Mod的实例,在主类里加上一个变量:

    @Mod.Instance(Constants.MOD_ID)
    public static NekoBags instance;

    这个变量不需要初始化,加上注解之后Forge会处理。

    第二个参数是图形界面的ID,用于区分各个界面,比如箱子的界面,熔炉的界面,村民交易的界面什么的。

    放在之后建的GUI类里比较好,我这就直接放主类里了。

    ID随便给个值,别跟别人的重复了就行。

    第三个参数是世界,直接把方法里的参数拿下来就行。

    后面三个参数是位置,对我们来说实际上就是玩家的位置,转换一下类型传进去。

    当然光这样肯定是打不开什么界面的。

    而且后面才是最麻烦的地方,我折腾了两天翻了无数个网站才解决问题。

    歇会。

  • 相关阅读:
    win7 计划任务
    计算机英语翻译
    开机自启动win7计划任务
    vc++ 创建异性窗体(1)
    C++ TaskScheduler msdn杂志
    vc++创建异性窗体(2)
    Task Scheduler 参看——有关闭电源设置和添加目录设置参考
    CComPtr用法
    Builtin\administrators 与 Domain Admins 用户组的来历与区别
    CreatDC()和CreateIC()
  • 原文地址:https://www.cnblogs.com/chihane/p/4190756.html
Copyright © 2011-2022 走看看