【易语言】我的世界自定义脚本生成器
## 前言我是一个生存菜鸡,大多数时候我都会开和平模式下进行游戏,因为我无法承受 *失败*和 *潜在的危险* 给我带来的巨大压迫感。
在和平模式下的某些情况下我都会产生这种感觉,前几年不玩 `Minecraft` 很久也是这个原因,一直以来我幻想着游戏官方能出现一种模式能够改变这种局面,但是后来我发现我的这种认知是幼稚不切实际的,最近的一年里我渐渐的发现了我在游戏中的情绪与现实生活中的生活有着隐隐的关联,我尝试着在游戏中克服和控制这种情绪的出现,我尝试着在人多的地方玩游戏,在吵闹的地方玩游戏,虽然有一点效果,但效果并不是很好。~~看来并不是单纯的因为独自一人冒险而产生的恐惧~~
## 简述
前段时间一个偶然的机会我在 `CurseForge` 上看到了一个 `Mod` 名为 `TinyMobFarm` 这个 `Mod` 的出现简直让我感到非常的惊喜,它的出现完全改变了我的现状,当我进一步了解这个 `Mod` 时遗憾的发现它并不支持我当前的游戏版本号 `1.16.1` ,不过我依然没有放弃,在经过几经周折的资料查询中发现了一个解决方法:
> username: anonymous0shigeru
>
> you can edit the "mods.toml" for 1.16.1
>
> Procedure:
>
> 1. Open Jar file using any Zip Archiver (I use the freeware, WinRAR)
>
> 2. enter "META-INF" folder
>
> 3. open "mods.toml" using any text editor (I use Microsoft Notepad)
>
> 4. change loaderVersion into desired version
>
> 31 = 1.15.x
> 32 = 1.16.1
>
> I hope this helped!
我尝试着测试了我的版本发现这个问题已经成功被解决了,我非常的高兴。
事实上完全脱离困难度的玩法是不切实际的,前段时间的几次尝试我都失败了,因为某些材料必须来源于困难度的怪物掉落,关于经验值这一点也是从开困难度的情况下获取最快的渠道之一,当然也可以从采矿和冶炼矿物甚至是烤熟食物中获得,但那点经验真的是少的可怜。我渐渐的萌生了一种想法,能不能完全依靠 `Mod` 在和平模式下实现这种设想呢~~(我知道一直在和平模式下玩游戏是一种逃避的行为,但目前情况这对于自己来说算是一个过渡的缓和期吧,至少我已经知道问题所在了)~~,下面的 `Mod` 列表完全可以实现我的设想。
```text
F:\game\Minecraft\HMCL\.minecraft\mods>tree /F
卷 娱乐盘 的文件夹 PATH 列表
卷序列号为 6401-C3FD
F:.
appliedenergistics2-8.0.0.jar
industrial-foregoing-1.16.1-3.0.5-7e692e4.jar
titanium-1.16.1-3.0.4.jar
[万物皆可获得经验] getexpforeverything-1.14-1.16.jar
[你在看什么] Hwyla-forge-1.10.10-B77_1.16.1.jar
[像素地图] forgemod_VoxelMap-1.10.7_for_1.16.1.jar
[创世神] worldedit-forge-mc1.16.1-7.2.0-beta-02.jar
[前置] collective-1.16.1-1.35.jar
[前置] ForgeEndertech-1.16.1-7.0.1.0-build.0008.jar
[加速火把] torcherino-11.0.2+1.16.1.jar
[合成表配方] jei-1.16.1-7.0.1.9.jar
[合成辅助] CraftingTweaks_1.16.1-12.0.4.jar
[大型矿床] AdLods-1.16.1-4.0.0.0-build.0007.jar
[幸运块] Chance-Globe-1.16.1.jar
[幸运方块] luckyblock-1.16.1-1.jar
[怪物战利品] TinyMobFarm-1.16.2-1.1.1.jar
[拾起村民] Easy-Villager-1.16.1.jar
[无限交易] infinitetrading_1.16-1.1.jar
[无限岩浆] InstantLava_Forge1.16.1-1.2.1.jar
[更多的箱子] ironchest-1.16.1-11.0.4.jar
[极简血量显示] Neat+1.7-23.jar
[物品分拣] inventorysorter-1.16.1-18.0.0.jar
[矿井优化] BetterMineshaftsForge-1.16.1-1.3.jar
[矿工优势] MinersAdvantage-1.16.1-1.7.0.36.jar
[经验矿石] ExpOreMod-1.16.1-1.0.jar
[自定义合成配方] CraftTweaker-1.16.1-7.0.0.24.jar
[自定义配方依赖] JEITweaker-1.16.1-1.0.1.2.jar
[营火无怪] nhacampfire_1.16-2.3.jar
[迷你钓鱼场] fishtraps-0.1.0.jar
```
虽然目前还不能完美的实现,但是已经满足我的基本要求,那就是更多的合成配方,`Crafting++ Mod` 开发者所提供的更多配方可以在脱离难度的情况下得到一些特殊的配方,在 `CraftTweaker Mod` 开发者所提供的简化 `Mod` 开发时间的前提下所提供的脚本语言 `ZenScript` 可以很容易的实现自定义配方列表。之前在玩 `1.14.4` 版本的时候还有 `GUI`,现在我的这个版本并没有界面,所以只能手动去写代码,自定义几个配方还是很容易的,如果想完整实现我的设想就需要大量的重复性操作来解决这种问题。
```text
// 龙蛋: 黑曜石围绕着鸡蛋, 最坚硬的蛋
craftingTable.addShapeless("StringOD_LongDan", <item:minecraft:dragon_egg> * 1, [<item:minecraft:obsidian>, <item:minecraft:obsidian>, <item:minecraft:obsidian>, <item:minecraft:obsidian>, <item:minecraft:egg>, <item:minecraft:obsidian>, <item:minecraft:obsidian>, <item:minecraft:obsidian>, <item:minecraft:obsidian>]);
// 刷怪箱: 铁栅栏围绕着箱子, 网格一样的箱子
craftingTable.addShapeless("StringOD_ShuaGuaiXiang", <item:minecraft:spawner> * 1, [<item:minecraft:iron_bars>, <item:minecraft:iron_bars>, <item:minecraft:iron_bars>, <item:minecraft:iron_bars>, <item:minecraft:chest>, <item:minecraft:iron_bars>, <item:minecraft:iron_bars>, <item:minecraft:iron_bars>, <item:minecraft:iron_bars>]);
// 烈焰粉: 被岩浆桶围起来的木棍
craftingTable.addShapeless("StringOD_LieYanFen", <item:minecraft:blaze_powder> * 9, [<item:minecraft:lava_bucket>, <item:minecraft:lava_bucket>, <item:minecraft:lava_bucket>, <item:minecraft:lava_bucket>, <item:minecraft:stick>, <item:minecraft:lava_bucket>, <item:minecraft:lava_bucket>, <item:minecraft:lava_bucket>, <item:minecraft:lava_bucket>]);
// 牛蛋: 被生牛肉围绕起来的鸡蛋
craftingTable.addShapeless("StringOD_NiuDan", <item:minecraft:cow_spawn_egg> * 1, [<item:minecraft:beef>, <item:minecraft:beef>, <item:minecraft:beef>, <item:minecraft:beef>, <item:minecraft:egg>, <item:minecraft:beef>, <item:minecraft:beef>, <item:minecraft:beef>, <item:minecraft:beef>]);
// 史莱姆蛋: 被粘液球围绕起来的鸡蛋
craftingTable.addShapeless("StringOD_ShiLaiMuDan", <item:minecraft:slime_spawn_egg> * 1, [<item:minecraft:slime_ball>, <item:minecraft:slime_ball>, <item:minecraft:slime_ball>, <item:minecraft:slime_ball>, <item:minecraft:egg>, <item:minecraft:slime_ball>, <item:minecraft:slime_ball>, <item:minecraft:slime_ball>, <item:minecraft:slime_ball>]);
// 恶魂之泪: 牛奶桶里面有很多类似的液体, 工作台九宫格中的任意位置
craftingTable.addShapeless("StringOD_EHunZhiLei", <item:minecraft:ghast_tear> * 9, [<item:minecraft:milk_bucket>]);
// 末影人蛋: 末影珍珠围绕着鸡蛋
craftingTable.addShapeless("StringOD_MoYingRenDan", <item:minecraft:enderman_spawn_egg> * 1, [<item:minecraft:ender_pearl>, <item:minecraft:ender_pearl>, <item:minecraft:ender_pearl>, <item:minecraft:ender_pearl>, <item:minecraft:egg>, <item:minecraft:ender_pearl>, <item:minecraft:ender_pearl>, <item:minecraft:ender_pearl>, <item:minecraft:ender_pearl>]);
```
可以看的出来代码整体没有多大变化,唯一不同的就在于 物品ID 名称 `item:minecraft:iron_block`,我打算重写 `Minecraft` 中工作台的配方表(在困难度下需要从怪物掉落中获得的物品,所谓不可合成物品),当这个设想被完美的解决的时候我可以尝试着改变熔炉的配方甚至添加和修改更多的配方表,以此简化难度达到我所设想的程度。
仅仅几个配方就需要十几分钟,不敢想象 `Minecraft` 中有几十甚至几百种的物品,如果要完成当初所设想的那样修改所有的自定义配方那可能需要花费更长的时间,这真是太可怕了。说实话想到这我整个人都傻了。
为了解决这种问题,我昨天晚上打算用程序来解决这种问题,虽然 `Mod` 开发者并没有对高版本提供 `GUI` 界面,但是我可以自己开发,这样还能解决 `Mod` 不同版本所带来的兼容性困扰。
!(https://pic.downk.cc/item/5fbfcd4615e77190842989e8.png)
## 运行截图
![](https://pic.downk.cc/item/5fe5c4f93ffa7d37b3b26aac.png)
![](https://pic.downk.cc/item/5fc8c9a6394ac523785585cc.png)
保存的脚本文件名称默认设置为了 `AutoSpawnZScript.zs` 这样测试起来比较容易,我的整体思路是全部的测试数据都使用真实的数据,每个操作步骤都完全还原整套流程,先把整体框架搭出来然后在后续的版本升级中添加新的功能和配方列表。
```text
依赖Mod:
[自定义合成配方] CraftTweaker-1.16.1-7.0.0.24.jar
[自定义配方依赖] JEITweaker-1.16.1-1.0.1.2.jar
```
## 功能
### 20201126 AutoSpawnZScript v0.1
* 添加 模拟工作台配方合成方式
* 添加 在难度模式下部分常用配方列表
* 添加 配方ID支持图片显示和中文名称
* 自定义配方英文名称
* 添加 代码生成日志显示
* 添加 脚本生成
### 20201128 AutoSpawnZScript v0.2
* 添加 合成数量
* 添加 清空文本
* 添加 帮助信息
### 20201128 AutoSpawnZScript v0.3
* 添加 物品所属配方列表
* 添加 配方列表所属方块
* 修复 多行代码生成到文件只有一行的问题
* 添加了更多的资源列表
### 20201129 AutoSpawnZScript - v0.4
* 修改了多条配方写到文件不换行的问题
* 添加 自定义配方小故事
### 20201129 AutoSpawnZScript - v 0.5
* 添加 脚本信息
`DeBug` 了一下午才发现原来是 `ZenScript` 不支持中文导致的报错异常,一直以为是我哪里写的有问题,我单独的测试了包含有中文注释的脚本发现游戏不能正确加载,只有英文注释才可以被正确识别,事实上我根本看不懂英文,这玩意加了和没加意义不大鸭,但是怎么能让这些时间白白浪费呢,我要给它转换成拼音.
![](https://pic.downk.cc/item/5fc36095d590d4788abe9141.png)
### 20201203 AutoSpawnZScript - v0.8
* 添加 特殊的有序合成配方
* 添加 57个新的配方
* 删除 特殊包含空的配方表
移除了对包含空的配方表的支持,当我查阅了大量的资料后确定了一件事,`ZenScript` 不能包含空的配方,这将会出现一个巨大的问题,就是类似盔甲和靴子那样的装备将不在会被很好的支持,甚至我认为所谓的 [官方文档](https://crafttweaker.readthedocs.io/zh_CN/latest/Vanilla/CTGUI/) 完全是错误的,除了工作台的合成配方这不包含新的添加配方其他的指令均无意义,其他相关资料均是基于 `MT` 的指令,我测试了 `1.12.2, 1.14.4, 1.16.1` 均无法使用文档中所描述的操作.
`1.14.4- 5.0.1.1.133 - 5.0.1.1.187` 均无法正常测试.官方文档给出的指令 `CTGUI` 在插件中都是不存在的指令.
```text
拉怪绳, , lasso
木制怪物农场, , wood_farm
绿宝石怪物农场, , emerald_farm
末地石怪物农场, , ultimate_farm
黄金怪物农场, , gold_farm
地狱岩怪物农场, , inferno_farm
石头怪物农场, , stone_farm
铁锭怪物农场, , iron_farm
钻石怪物农场, , diamond_farm
铁锭, , iron_ingot
金锭, , golden_ingot
钻石, , diamond
石英石, , quartz
皮革, , leather
钻石马铠, , diamond_horse_armor
黄金马铠, , golden_horse_armor
铁马铠, , iron_horse_armor
皮革马铠, , leather_horse_armor
钻石头盔, , diamond_helmet
钻石胸甲, , diamond_chestplate
钻石裤腿, , diamond_leggings
钻石靴子, , diamond_boots
钻石剑, , diamond_sword
钻石斧, , diamond_axe
钻石镐, , diamond_pickaxe
钻石锹, , diamond_shovel
黄金头盔, , golden_helmet
黄金胸甲, , golden_chestplate
黄金裤腿, , golden_leggings
黄金靴子, , golden_shoots
黄金剑, , golden_sword
黄金斧, , golden_axe
黄金镐, , golden_pickaxe
黄金锹, , golden_shovel
皮革头盔, , leather_helmet
皮革胸甲, , leather_chesplate
皮革裤腿, , leather_leggings
皮革靴子, , leather_boots
铁轨, , rail
激活铁轨, , activator_rail
探测铁轨, , detector_rail
充能铁轨, , powered_rail
红色染料, , red_dye
地狱庞, , nether_wart
小麦种子, , wheat_seeds
蜘蛛眼, , spider_eye
末影之眼, , ender_eye
绿色染料, , green_dye
粘液块, , slime_block
草方块, , grass_block
胡萝卜, , carrot
不死图腾, , totem_of_undying
潜影壳, , shulker_shell
紫颂果, , chorus_fruit
爆裂紫颂果, , popped_chorus_fruit
龙息, , dragon_breath
三叉戟, , trident
```
为此我想出了一个解决方法,就是用已有物品中代替这种空的存在,必须得用很常见且很容易获得的物品,为此我选定了"泥土".
![包含空的都将被泥土填充](https://pic.downk.cc/item/5fc8f6e7394ac52378756ea4.png)
关于无序合成我打算根据接受输入从而给定的合成配方表的大小,比如2*2的,或者1*1的,类似原木的分解方式.然后根据选择的大小来生成不同的长度.
### 20201207 AutoSpawnZScript - v0.9
* 添加了18种新的配方
```text
马鞍 <item:minecraft:saddle>
兔子皮 <item:minecraft:rabbit_hide>
腐肉 <item:minecraft:rotten_flesh>
河豚 <item:minecraft:pufferfish>
岩浆块 <item:minecraft:magma_block>
书架 <item:minecraft:bookshelf>
热带鱼 <item:minecraft:tropical_fish>
生鳕鱼 <item:minecraft:cod>
生鲑鱼 <item:minecraft:salmon>
幸运方块 <item:lucky:lucky_block>
鞘翅 <item:minecraft:elytra>
鸡毛 <item:minecraft:feather>
燧石 <item:minecraft:flint>
蜂蜜瓶 <item:minecraft:honey_bottle>
蜂蜜块 <item:minecraft:honey_block>
蜂蜜蛋 <item:minecraft:bee_spawn_egg>
蜂巢 <item:minecraft:bee_nest>
书 <item:minecraft:book>
```
### 20201216 AutoSpawnZScript - v1.0
* 预设了 11 个资源文件未同步到程序中
* 添加了 12 种无序配方合成模板
* 添加了使用说明和依赖环境说明其他一些说明
事实上当前版本已经实现了所有预设功能,剩下的对无序配方做了一些细节优化.
### 20201225 AutoSpawnZScript - v1.0 吾爱专版52pojie
* 添加了8个配方
* 移除了违规信息
## 部分代码
生成脚本文件
```text
.版本 2
.局部变量 层级目录, 文本型
.局部变量 脚本文件名, 文本型
.局部变量 文件号, 整数型
.局部变量 计数器, 整数型
输入框 (“请输入当前配方文件名”, “信息”, , 脚本文件名, 1, _启动窗口)
层级目录 = 编辑框11.内容 + “\scripts\” + 脚本文件名 + “.zs”
' 创建脚本文件
写到文件 (层级目录, 到字节集 (“”))
' 打开文件
文件号 = 打开文件 (层级目录, , )
' 写出文本 (文件号, 代码集) 写出配方代码, 脚本信息
.计次循环首 (取数组成员数 (代码集), 计数器)
写出文本 (文件号, 到文本 (代码集 [计数器]))
.计次循环尾 ()
```
生成配方代码
```text
生成代码 = 物品所属块ID + “.addShapeless(” + #引号 + 配方名称 + #引号 + “, ” + “<item:” + 物品所属ID + 编辑框10.内容 + “>” + “ * ” + 编辑框13.内容 + “,” + “[” + “<item:” + 物品所属ID + 编辑框1.内容 + “>,” + “<item:” + 物品所属ID + 编辑框2.内容 + “>,” + “<item:” + 物品所属ID + 编辑框3.内容 + “>,” + “<item:” + 物品所属ID + 编辑框6.内容 + “>,” + “<item:” + 物品所属ID + 编辑框5.内容 + “>,” + “<item:” + 物品所属ID + 编辑框4.内容 + “>,” + “<item:” + 物品所属ID + 编辑框9.内容 + “>,” + “<item:” + 物品所属ID + 编辑框8.内容 + “>,” + “<item:” + 物品所属ID + 编辑框7.内容 + “>]);”
```
其他都是一些很简单的逻辑代码,这里就不放出来了.
## 使用说明
**程序没有做容错处理,你需要谨慎的输入来避免错误的出现.**
* 箭头左侧的九宫格为合成所需材料,右侧是想要合成的物品
* 配方小故事和配方名称可以为空
* 数量为空时默认为1
* 游戏原所属物品必须选中物品所属ID中的 `minecraft:`,配方所属块也必须选择为 `craftingTable`
* 目前配方所属块中的 `furnace` 无法使用
* 物品所属块ID中的 `tinymobfarm` 所支持的物品为 `xxx_farm`
* 在首次使用时必须选中一次 选项 - 有序配方表,否则生成的代码为空
* 生成的脚本文件中不支持中文
* `.minecraft文件夹路径` 这里必须选择你的游戏目录,确保当前目录 `scripts` 目录存在.参考示例:
* 正确的输入 `F:\game\Minecraft\HMCL\.minecraft`
* 错误的输入 `F:\game\Minecraft\HMCL\.minecraft\scripts`
* 菜单栏中的选项下的 **无序配方表,熔炉配方表 和 主题** 目前还没有实现功能,所以点了也没用
选中右侧列表框中的项目然后在左侧的九宫格中按下回车表示快速输入当前选择项,按下空格来使用泥土代表空项.
当前程序所支持的配方正好又100个,如果你想添加程序中不存在的配方你可以手动在九宫格中输入物品ID,当然不排除有很多独立 mod 它们的 **物品所属ID** 和 **配方所属块** 在程序中无法添加,这种情况下你可以用文本编辑器来批量替换这些默认已有的关键字一样可以解决问题.
## 下载
本文所涉及的解压缩和链接访问密码一律为 `52pojie.com`
[源码](https://stringod.lanzouj.com/iX1BQjpkefi)
(https://stringod.lanzouj.com/iLA4ljpjpeh)
[示例脚本](https://stringod.lanzouj.com/iry8gjpjnwd)
[配合使用的mod](https://stringod.lanzouj.com/iCa93jpjnvc)
[整合包](https://stringod.lanzouj.com/ivjqpjpjnij)
好长啊,没怎么看懂,不过还是支持楼主 等我放假一定好好看:lol 我看了好几遍,才看懂这是干啥的 我看了好几遍,也没看懂这是干嘛的 厉害啊{:1_919:},看懂了,用处其实很大
页:
[1]