mc工业2吧 关注:30,659贴子:939,447
  • 9回复贴,共1

【CS2】听说你们在纠结custom stuff的GUI和事件

只看楼主收藏回复

本来打算在BBS更新的,但是在BBS需要全部重新讲一遍,不如这里挑一部分讲一下好了
哦,前排感谢Achang提供的熔炉例子(虽然是自己扒的)
感谢作者提供的cubex2-custom-stuff-2-documentation


IP属地:北京1楼2017-06-09 08:07回复
    由于看本贴的都是有一定基础的,因此我直接跳过简单的部分
    讲些核心的东西
    首先我们打开cubex2-custom-stuff-2-documentation(如果不会使用的欢迎看我的BBS教程)
    (虽然BBS教程这方面写了跟没写一样)
    打开找到block/hasTileEntity.html
    里面如图片所示。

    如果方块添加了这个代码,那样它就会拥有一个容器属性
    也就是可以被管道连接——通俗来说
    现在我已经写好了一个例子如下
    /*Grower*/
    name = "Grower";
    material = "rock";
    stepSound = "stone";
    creativeTab = "AngelProjectF";
    hardness[0] = 5;
    resistance[0] = 5;
    toolClass[0] = "pickaxe";
    drop[0] = "Mixer:Grower";
    harvestLevel[0] = 1;
    textureFileXP[0] = "Growerside.png";
    textureFileXN[0] = "Growerside.png";
    textureFileYP[0] = "Growertop.png";
    textureFileYN[0] = "Growerside.png";
    textureFileZP[0] = "Growerside.png";
    textureFileZN[0] = "Growerside.png";
    addToCreative[0] = true;
    information[0] = "用于灰烬的生产,可以在周围的输出箱内输出木屑"
    hasTileEntity[0] = true;//我是个容器
    tileEntity[0] = "GrowerR";//我是哪个容器
    onActivated[0] = "player.openGui('GrowerGUI', position);result = true;";//当对这个方块右键时候的事件,打开GUI界面
    当然光有容器是没有什么用的,它就好像许多没有GUI只有内容的机器一样
    我们需要给他一个GUI界面
    如图声明一个GUI

    打开guis.html你会看到许多关于GUI的属性定义

    具体属性的作用我想大家都懂,这里我就不赘述
    这里强调一下,容器属性和GUI两者是不可或缺的,如果少了一个,那样他就是一个废GUI或者是废容器了
    你能想象到一个没有内容的熔炉么????
    除非你是为了做一个右键打开的游戏介绍(我做过,不用试了,可以的)
    这里我放上我的画师(材质画师)为我提供的GUI界面,以及我GUI界面的代码
    name = "GrowerGUI";
    guiFile = "GrowerGUI.png";
    inputY = 35;
    fuelY = 56;
    fuelX = 83;
    burnDestX =83;
    burnDestY =17;

    还记得我们上文定义了一个GrowerR作为容器类别么
    我们需要添加这个容器的属性
    打开tileEntities.html
    因为我们需要做的是一个近熔炉,所以我们可以设置关于熔炉(Furnace)相关的属性
    以下是我的例子
    /*Grower */
    name = "GrowerR";
    ticksToSmelt = 320;
    usedRecipeLists = "GrowerRecipe";
    usedFuelLists = "GrowerFuel";//调用该熔炉燃料和配方
    onItemSmelted = "mod.loadScript('Growers.js');";//燃烧完成触发事件,这个是我设想的核心
    事件我们一会再谈,最后我们讲一下导入
    //grower
    mod.addBlock("Grower.js", "normal");
    mod.addTileEntity("GrowerR.js", "furnace");
    mod.addGui("GrowerGUI.js", "furnace");
    mod.addSmeltingRecipeFor("GrowerRecipe","Forestry:ash", "minecraft:log");
    mod.addSmeltingRecipeFor("GrowerRecipe","Forestry:ash", "minecraft:log:1");
    mod.addSmeltingRecipeFor("GrowerRecipe","Forestry:ash", "minecraft:log:2");
    mod.addSmeltingRecipeFor("GrowerRecipe","Forestry:ash", "minecraft:log:3");
    mod.addFuelFor("GrowerFuel","minecraft:dirt",600);
    mod.addFuelFor("GrowerFuel","Forestry:soil",4800);
    应该不用解释了
    如果想研究的dalao随便研究。如果能在弄懂的时候记得我的名字就更好了
    对了,欢迎捧场我的图文直播和教程
    楼下讲一下事件的研究方法


    IP属地:北京2楼2017-06-09 08:10
    回复
      关于事件,我们首先还要从cubex2-custom-stuff-2-documentation出发
      在javadoc中我们可以找到CS2可以引用的一些动作(非触发)
      当然这些东西是不能直接作为代码引用的,往往前面要加上world.或者是player.
      这里我讲一下我的方法
      首先你需要一个cs3,在cs3中查看script的相关代码即可
      是通用的,我试了,当然CS3作者将这些相关代码直接写在了MOD里面
      你也可以通过拆MOD 的方式看一看这些script的代码,省了你打开MC的功夫

      嗯,就是这样。然后值得一提,如果你要编写script 的话你需要学一些JS技巧
      这里我给刚才楼上方块的事件,给大家参考
      var x = position.x;
      var y = position.y;
      var z = position.z;
      a = Math.floor(Math.random()*8);//随机数
      if(a>1){ //如果随机数大于1
      if(world.getBlockName(x, y+1, z) == "Mixer:OutputOSC"){ //如果周围方块为OSC
      world.addToContainer(x, y+1, z, "Mixer:WoodChips",1,0); //在容器中放入一个木屑
      }
      if(world.getBlockName(x-1, y, z) == "Mixer:OutputOSC"){
      world.addToContainer(x-1, y, z, "Mixer:WoodChips",1,0);
      }
      if(world.getBlockName(x+1, y, z) == "Mixer:OutputOSC"){
      world.addToContainer(x+1, y, z, "Mixer:WoodChips",1,0);
      }
      if(world.getBlockName(x, y, z-1) == "Mixer:OutputOSC"){
      world.addToContainer(x, y, z-1, "Mixer:WoodChips",1,0);
      }
      if(world.getBlockName(x, y, z+1) == "Mixer:OutputOSC"){
      world.addToContainer(x, y, z+1, "Mixer:WoodChips",1,0);
      }
      }
      顺便一说,如果大家需要箱子的例子的话可以跟我说一声
      我会尽快更新的(当然我是放月假的,所以按月更新)


      IP属地:北京3楼2017-06-09 08:17
      回复
        前排给dalao递java


        IP属地:日本4楼2017-06-09 08:19
        回复
          前排的后排把给dalao的java,给抢走,喝掉


          5楼2017-06-09 08:22
          回复
            前排给dalao递Java


            IP属地:广东来自Android客户端6楼2017-06-09 08:25
            回复
              好像忘了实装效果图和例子下载地址了
              例子里面还有一些譬如流体箱子之类的,还有一个锤钢的例子,我一并发上来

              (图文直播图片)如果周围有OSC(输出设备)会产生木屑
              例子下载
              http://pan.baidu.com/s/1eSy2QFg
              //由于例子都是添加在我自己做的创造模式物品栏里面,如果查看你需要改一下物品栏名称


              IP属地:北京7楼2017-06-09 08:35
              回复
                哦,看来我可以不用开坑了,正好给了我个偷懒的机会


                IP属地:湖北来自Android客户端8楼2017-06-09 08:51
                收起回复
                  哦下一个


                  IP属地:山东来自Android客户端9楼2017-06-09 12:43
                  回复