从〇开始的编程逻辑 | 您所在的位置:网站首页 › 我的世界1165合成表mod › 从〇开始的编程逻辑 |
这是啥 是一个CrT教程,也是一个编程入门教程。 这个教程中,我们将会完成一些十分cool的事情! 你只需要会添加、删除合成表就行了,最好能够借助其它教程看懂各种模组机器的合成表操作。 另外,最好学会在游戏里使用/ct syntax和/ct hand。 读完这篇教程,你仍然应该频繁地访问docs.blamejared.com,这篇教程也会让你学会如何阅读wiki(待类型章节写完)。 变量 排列组合大师 似乎用木棍和圆石可以组合出很多东西呢……但是一遍一遍打似乎很折磨。即使复制粘贴也很糟糕。 var cs=;var st=;recipes.addShaped(,[ [cs,cs,cs], [null,st,null], [null,st,null]]);recipes.addShaped(,[ [cs,cs,null], [cs,st,null], [null,st,null]]);变~ 变量自然是可以变的: var mat=;var st=;recipes.addShaped(,[ [mat,mat,mat], [null,st,null], [null,st,null]]);mat=;recipes.addShaped(,[ [mat,mat,mat], [null,st,null], [null,st,null]]);看起来好像没什么用……但是实际上,变量可以是数字,有七十二变。现在我们做的似乎都是静态的东西,似乎不需要会变的家伙。但是这个程序马上就可以动起来了(?) 常量 好吧,上文的正确写法有点吃内存。我们理应把var cs改成val cs。不过如果你写了val mat=xxx; 后面就不能再让mat=一个新的东西了,因为val说明mat是不会变化的常量。 但是这也是杯水车薪 循环、数组 数字循环 高斯的小学数学老师 众所周知,1+2+3+...+100=5050。 但是高斯的“小学数学老师”似乎并不知道这一点。 那么我们来描述一下高斯的小学数学老师的计算方法吧: var sum=0;for i in 1 to 101{ sum=sum+i;}print(sum); //输出到crafttweaker.logsum:和,数字的和。 zenscript里,i in a to b(a和b都是整数)时,i会依次取a, a+1, a+2, ... , b-1,但不会取b 热力膨胀的齿轮 热力膨胀有很多齿轮,拥有十分愚蠢的合成表,比如为什么银齿轮不能用来暴击吸血鬼?所以我们 一定要删掉 这些合成表。 你需要知道: .definition.makeStack(i)就是这个物品下metadata为i的家伙。 比如说.definition.makeStack(258)就是银齿轮,也可以表示成 但是如果i是一个变量,你不能直接写。 经过观察,热力齿轮的id都是thermalfoundation:material,metadata分为几串: 22~27,256~264,288~295 那么我们写3个循环就好: for i in 22 to 28{ recipes.remove(.definition.makeStack(i));}for i in 256 to 265{ recipes.remove(.definition.makeStack(i));}for i in 288 to 296{ recipes.remove(.definition.makeStack(i));}数组 什么是数组?大概就是一串同类型的东西吧。比如说无序合成表的输入就是IIngredient的数组。 构建一个空数组,类型为xxx,使得它里面什么都没有:var a=[] as xxx[]; 构建一个有a,b,c的数组,类型为xx: var s=[a,b,c] as xxx[]; 访问数组里的元素:s[0],在上文里就是a。 注:数组的下标从0开始。 在数组的末尾追加新的元素:s+=d; 80个粒 为什么是80个粒?因为这是一种手动刷矿物的方法。用极限工作台合成铁块能够增产很合理吧!?呐?空位必须在中间! 但是如果不想要代码里出现80个呢?即使是val Fe_n=然后出现80个Fe_n,也不能接受! 不过呢,极限工作台的输入是IIngredient[][],一个二维数组。换句话说,是一个数组,里面的每一项都是一个IIngredient[]。 val n= as IIngredient;val a=[n,n,n,n,n,n,n,n,n] as IIngredient[];val b=[n,n,n,n,null,n,n,n,n] as IIngredient[];mods.avaritia.ExtremeCrafting.addShaped("Iron Duplication",,[a,a,a,a,b,a,a,a,a]);看起来还行?我们换种写法,这次和之前的循环一起写。 val t=[] as IIngredient[][];for i in 0 to 9{ t+=[] as IIngredient[]; for j in 0 to 9{ t[i]+=; }}t[4][4]=null;mods.avaritia.ExtremeCrafting.addShaped("Iron Duplication",,t);懂? 斑斓花是16色羊毛 如果没有花药台怎么合成斑斓花比较合理呢?在符文祭坛聚合16个不同颜色的羊毛!别问符文祭坛哪来。 var wools = [] as crafttweaker.item.IIngredient[];for i in 0 to 16{ wools+=.definition.makeStack(i);}mods.botania.RuneAltar.addRecipe(.withTag({type: "spectrolus"}),wools,2000);列表:别人家的数组 数组有的时候不是我们搞出来的,而是别人给我们的。 比如说一个物品item的所有矿辞并在一起就是一个类似于数组的玩意,用item.ores得到。 列表和数组的区别在于,列表的内部结构比较复杂。故此我们不能像数组一样用[i]访问。不过我们可以用 for 穷举列表里的每一个元素! 让熔炉不会烧粉! 首先,furnace.all返回所有的熔炉合成表。其次,i作为一个熔炉合成表,i.input表示它的输入原料,i.output表示输出原料。然后,我们会检查输入物品是否有“xxxdustyyy”的矿物词典。方法是使用上文说的item.ores。最后,一个字符串st,st.toLowerCase().contains("dust")表示: 把st所有大写字母换成小写之后,有"dust"这连续的4个字母 for i in furnace.all{ //can can need 合成表 for j in i.input.ores{ //can can need 矿辞 if(j.name.toLowerCase().contains("dust")){ //你是!你是! furnace.remove(i.output,i.input); //送你离开 break; //下一个 } }}冶炼炉的流体污染 1.12.2的EnderIO有一个合金,叫做铁合金,十分的离谱。大概是往合金炉里放置了乱七八糟的东西就会变成这玩意。有的人时常思考一个问题,冶炼炉里面这么多流体就不会混起来吗?再加上如果有的人把那种生物质流体塞进冶炼炉,是不是也会污染呢…… 于是这里弄了几个离谱规则,当然比例是调整过的: 普通金属+特殊金属=铁合金 普通金属+水/岩浆=熔融石头 有机类流体+水/岩浆=水/岩浆 有机类流体+普通金属=熔融泥土 代码如下,...表省略: var Basic= [] as crafttweaker.liquid.ILiquidStack[]; var MetalA= [] as crafttweaker.liquid.ILiquidStack[]; var MetalB= [] as crafttweaker.liquid.ILiquidStack[]; var Bio= [] as crafttweaker.liquid.ILiquidStack[]; Basic+=; Basic+=; MetalB+=; MetalB+=; MetalA+=; MetalA+=; MetalA+=; MetalA+=; MetalA+=; MetalA+=; //... Bio+=; Bio+=; Bio+=; //... for i in MetalA { for j in MetalB { mods.tconstruct.Alloy.addRecipe(*7,[i*5,j*2]); } } for i in Basic { for j in MetalA { mods.tconstruct.Alloy.addRecipe(*13,[i*9,j*4]); } for j in MetalB { mods.tconstruct.Alloy.addRecipe(*13,[i*9,j*4]); } mods.tconstruct.Alloy.addRecipe(*13,[i*9,*4]); for j in Bio{ mods.tconstruct.Alloy.addRecipe(i*2,[i*1,j*1]); } } for i in Bio { for j in MetalA { mods.tconstruct.Alloy.addRecipe(*13,[i*11,j*2]); } for j in MetalB { mods.tconstruct.Alloy.addRecipe(*13,[i*11,j*2]); } mods.tconstruct.Alloy.addRecipe(*13,[i*11,*2]); }AE2的UU物质! 这个想法可能比较极端,甚至比较谔谔:为什么一个物流模组要这么多合成表?应该让圆石+赛特斯石英+福鲁伊克斯水晶就可以合成绝大部分东西!不过要进行一些避雷和捡漏。 逻辑: 穷举AE2的所有物品,带有一个从0开始的计数器c 如果是要保留原合成表的物品的那就continue;(直接再次循环,这一次循环不要了) c=c+1 把c写成八位三进制,每一位对应3*3合成表里的一个槽,右下角的槽恒定放fluix用来锁科技。 如果是0就是圆石,如果是1就是certus,如果是2就是fluix。 代码: import crafttweaker.mods.IMod;import crafttweaker.mods.ILoadedMods;val ae2=loadedMods["appliedenergistics2"] as IMod;var c=0 as int;val m0 = [,,] as crafttweaker.item.IIngredient[];print(ae2.id);for i in ae2.items{ print(c); if(i.definition.id.contains("facade")){ continue;} if(i.definition.id.contains("material")){ continue;} if(i.definition.id.contains("seed")){ continue;} //... if(i.ores.length |
CopyRight 2018-2019 实验室设备网 版权所有 |