本帖最后由 无尽の咸羊 于 2023-1-21 19:42 编辑



如何赋予玩家本模组配方?(即工作台合成书)
下载请见附件(无source那一份)
题外话

(合成页面/ps:直接搬了工作台材质)
没有点击确定的情况下关闭GUI会扔出配方中物品,
点击后会直接吞掉物品,所以请记得备份物品。
(在预览模式下不能触碰任何物品,关闭GUI不会弹出物品)
存档范围指令讲解:
Tips:如果你忘记了key,见存档目录\data\RecipesSaveData.dat
全局范围指令讲解:
除了canEdit以外,和存档范围互不干涉
Tips:如果你忘记了key,见游戏根目录\AddRecipesInGame\recipeData.dat
如何赋予玩家本模组配方?(即工作台合成书)
不出意料应该不会再进行大的更新,太废时间了
如果有Bug,请留言反馈(第一次发布恐怕难免(?))
面向开发者的介绍-
下载
更新日志(真的有必要吗)
有什么好的建议请留言,有疑惑的也可留言,有bug务必留言
饼(未来目标)
标题格式中,中英文名称之间应用「——」相连,已强制修改
优秀的作品 往往使用最简单的叙事方式。
期待更多版本·
期待更多版本·
不知是否可以应用到服务器呢?
本帖最后由 无尽の咸羊 于 2022-10-29 23:44 编辑
没有修改原版机制,应当支持所有模组端
存档范围在多世界同时起效(单存档内多世界)
全局范围是跨存档起效
但是不能跨服,也即是对于群组服应当不能很好起效
当然,你可以复制数据文件来达到跨服的效果
但是数据的读取需要重启。
存档范围的数据保存在"存档/data/RecipesSaveData.dat"
全局范围的数据保存在".minecraft/mods/AddRecipesInGame/recipeData.dat"
guo3206835376 发表于 2022-8-27 13:47
不知是否可以应用到服务器呢?
没有修改原版机制,应当支持所有模组端
存档范围在多世界同时起效(单存档内多世界)
全局范围是跨存档起效
但是不能跨服,也即是对于群组服应当不能很好起效
当然,你可以复制数据文件来达到跨服的效果
但是数据的读取需要重启。
存档范围的数据保存在"存档/data/RecipesSaveData.dat"
全局范围的数据保存在".minecraft/mods/AddRecipesInGame/recipeData.dat"
不一定要监听RegistryEvent.Register<IRecipe>来获取配方的注册表,那是个可以随时获取的常量net.minecraftforge.fml.common.registry.ForgeRegistries.RECIPES
注册表可以用unfreeze()解冻而不用反射
宽相等在原版就有实现,一个是村民交易用的到的net.minecraft.nbt.NBTUtil.areNBTEquals(stack2.getTagCompound(), stack1.getTagCompound(), false)
最后的这个参数写false就跟你的宽相等差不多,倘若要求一个附魔耐久Ⅲ的物品,那附魔火焰附加Ⅱ+耐久Ⅲ的物品就无法匹配上
而最后一个参数写true的话,对于列表类型的nbt就更宽松些,如果stack2的lore里有一行是aaa,那么stack1的lore是bbb,aaa,ccc也能匹配上,如果stack2有海之眷顾0(只写附魔id而不写附魔等级),那么stack1有海之眷顾Ⅲ+饵钓Ⅲ也能匹配上
crt用的大概也是这种“更宽一点的宽相等”
注册表可以用unfreeze()解冻而不用反射
宽相等在原版就有实现,一个是村民交易用的到的net.minecraft.nbt.NBTUtil.areNBTEquals(stack2.getTagCompound(), stack1.getTagCompound(), false)
最后的这个参数写false就跟你的宽相等差不多,倘若要求一个附魔耐久Ⅲ的物品,那附魔火焰附加Ⅱ+耐久Ⅲ的物品就无法匹配上
而最后一个参数写true的话,对于列表类型的nbt就更宽松些,如果stack2的lore里有一行是aaa,那么stack1的lore是bbb,aaa,ccc也能匹配上,如果stack2有海之眷顾0(只写附魔id而不写附魔等级),那么stack1有海之眷顾Ⅲ+饵钓Ⅲ也能匹配上
crt用的大概也是这种“更宽一点的宽相等”
加一个小反馈
不知道是我独有的还是特有的
当用全局时
在linux服务器中生成的是 .\AddRecipesInGame 这个文件夹
然后问题就来了
在linux中 .*** 会默认隐藏 打开\的目录需要\\才可以
比如想打开这个目录 就要 cd .\\AddRecipesInGame
建议想修改的话 直接在客户端修改完成后 完全移动到目录下
然后手动修改文件名 在前面加 .\ 就会自动隐藏并且可用
(要吐了要吐了 搞了半天这个莫名其妙的问题
不知道是我独有的还是特有的
当用全局时
在linux服务器中生成的是 .\AddRecipesInGame 这个文件夹
然后问题就来了
在linux中 .*** 会默认隐藏 打开\的目录需要\\才可以
比如想打开这个目录 就要 cd .\\AddRecipesInGame
建议想修改的话 直接在客户端修改完成后 完全移动到目录下
然后手动修改文件名 在前面加 .\ 就会自动隐藏并且可用
(要吐了要吐了 搞了半天这个莫名其妙的问题