本帖最后由 Plants-Stars 于 2021-3-18 23:06 编辑 
1.自定义维度:有没有办法搞一个自定义维度,地形要的是自定义世界的浮岛类型,并且每种生物群系都存在,名称为sky(就是说用execute in sky进入)
2.自定义成就:比方说进入上一个维度,就可以触发这个成就,要求是隐藏成就,边框为挑战,名称为sky,简介为oh,背景为石英块,有子成就为ok,触发条件是捡起带nbt为{ts:true},名称和简介随意(我自己改)
3.用谓词检测问题:比如用谓词检测我背包里有无甘蔗,我末影箱里是否有甘蔗,有没有办法用谓词检测月亮的圆缺(谓词不行的话其他的也可以),还有个应该比较简单的问题,虽然很老套,但我也不会,就是检测玩家背包里是否至少存在72颗绿宝石,最好用谓词,还有,怎么检测玩家背包或末影箱的指定位置是否有指定物品,比如甘蔗
4./属性指令:有没有办法用属性指令更改自己的属性,比如我的damage分数为6,我想把我的攻击伤害基础点数来自于damage记分板
5.资源包问题:custommodeldata标签怎么正常应用于弓和钓鱼竿,/playsound指令怎么播放资源包里的音乐(就是不间断的长音乐,音乐文件的格式应该是啥,应该放到哪个目录,有没有限制)
6.战利品表:也没有办法覆盖mc原版的钓鱼战利品表,让他能钓上来自定义物品,最好直接是生物;能不能让指定生物,比如tag为to的僵尸执行指定的战利品表(最好能覆盖他原有本身而不影响普通僵尸的)
ps:我把我压箱底的问题都拿出来了,希望有大佬解答qwq
嗯 这个问题好高深啊 
 本帖最后由 Chelover_C60 于 2021-3-19 12:53 编辑 
1.
自定义维度 - Minecraft Wiki
<datapack>/data/minecraft/dimension/sky.json
复制代码这里设置维度类型为主世界,生成器类型为noise(这里区分于超平坦与调试世界)。地形生成器里的噪声设置里,默认的floating_island即可满足要求,无需自定义。生物群系方面使用默认填充即可。两个种子任意填即可,只会影响生成的地形与生物群系的分布。
2.
进度/JSON格式 - Minecraft Wiki
<datapack>/data/minecraft/advancements/sky.json
复制代码感觉不需要怎么解释
进度页的背景由根进度控制。background后指定资源包目录下的一张图片,从textures开始,需要命名空间(命名空间为minecraft时可省略)
触发器使用change_dimension,检测当玩家前往sky维度时触发。
<datapack>/data/minecraft/advancements/oh.json
复制代码后面的进度指定parents为sky,此时该进度即成为sky的子进度。
trigger使用inventory_change,并匹配玩家背包内物品nbt。需要注意的是,nbt中,数据出现true/false时,会自动转化成1b/0b,因此最好也写成这类形式(不过印象中似乎写true/false也行?不过懒得试了)
3.
战利品表谓词 - Minecraft Wiki
Player.dat格式 - Minecraft Wiki
谓词并没有直接匹配玩家背包的判定,因此这里的策略是通过entity_properties来匹配玩家nbt。
检测背包
复制代码
code代码吞转义好烦啊
检测末影箱
复制代码检测圆缺做不到,这里提供一种记分板的思路
首先,建立一个dummy记分板(此处假定记分板id为scb,下同)
借助time query获取游戏时间,然后对7取余,得到的数即可用来判断当天月相。
执行一次(设置常量)
复制代码需要检测时执行
复制代码之后检测day的分数即可用于判断月相。
检测多余一个物品,谓词做不到。这里还是用记分板。
复制代码检测特定栏位的话,在以上谓词的基础上添加Slot即可。对末影箱来说,从第一行第一个到最后一行最后一个依次是0b~26b,玩家背包编号见此处。比如,检测玩家副手拿甘蔗的谓词
复制代码
4.
除穷举外,无解。/attribute无法做到动态修改玩家属性。
不过还有另一种做法,将分数值储存至一个装备的属性中,然后再通过潜影盒或/item(1.17)转移至玩家身上。缺点是需要固定占用玩家的一个装备栏。
5.
新建资源包,建立assets/minecraft/models/carrot_on_a_stick.json覆盖掉原版胡萝卜钓竿模型,然后写入
复制代码需要做的是在overrides内添加东西。有时候为了方便,也会把overrides中的每一个对象单独写一行。
在predicate中指定custom_model_data为1,并引用另一个模型。模型的路径从model后开始写。
多数情况下被custommodeldata引用的模型是一个仅拥有一个贴图的模型,因此可以直接指定父模型为item/handheld,然后指定layer0为指定贴图的路径。
复制代码模型引用好后,在游戏中获得对应cmd的胡萝卜钓竿,即可应用特定材质。
这里有一份比较详细的教程,可以参考一下
添加音乐的话,首先需要音乐是ogg格式,放入assets/<namespace>/sounds路径中,然后在资源包中建立assets/<namespace>/sounds.json,编写该文件夹指定音效id、类型,以及所需的音乐(路径从sounds之后开始写,无后缀,有命名空间,若为minecraft则可忽略)。
Sounds.json - Minecraft Wiki
这里我找了一份教程
个人最近瞎写的如何做一个音效资源包的教程
6.
覆盖钓鱼战利品表只需建立文件<datapack>/data/minecraft/loot_tables/gameplay/fishing.json并进行编写即可。
直接是生物。。。你是想钓生物吗?emmmm或许给一个物品特殊的nbt,检测到这个特殊的物品就原地生成生物,然后data modufy Motion再kill物品?
指定生物执行战利品表很容易,修改生物的DeathLootTable这个nbt为指定路径的战利品表即可。一般为了方便会直接在生成时即添加。不过既然楼主要求,那就
复制代码
终于打完了,累死了,睡了
1.
自定义维度 - Minecraft Wiki
<datapack>/data/minecraft/dimension/sky.json
- {
 
-     "type": "overworld",
 
-     "generator": {
 
-         "type": "noise",
 
-         "seed": 0,
 
-         "settings": "minecraft:floating_islands",
 
-         "biome_source": {
 
-             "type": "vanilla_layered",
 
-             "seed": 0
 
-         }
 
-     }
 
- }
2.
进度/JSON格式 - Minecraft Wiki
<datapack>/data/minecraft/advancements/sky.json
- {
 
-     "display": {
 
-         "icon": {
 
-             "item": "minecraft:stone"
 
-         },
 
-         "title": "sky",
 
-         "description": "oh",
 
-         "frame": "challenge",
 
-         "hidden": true,
 
-         "background": "minecraft:textures/block/quartz_block_top.png"
 
-     },
 
-     "criteria": {
 
-         "sky": {
 
-             "trigger": "changed_dimension",
 
-             "conditions": {
 
-                 "to": "minecraft:sky"
 
-             }
 
-         }
 
-     }
 
- }
进度页的背景由根进度控制。background后指定资源包目录下的一张图片,从textures开始,需要命名空间(命名空间为minecraft时可省略)
触发器使用change_dimension,检测当玩家前往sky维度时触发。
<datapack>/data/minecraft/advancements/oh.json
- {
 
-     "display": {
 
-         "icon": {
 
-             "item": "minecraft:stone"
 
-         },
 
-         "title": "ok",
 
-         "description": ""
 
-     },
 
-     "parent": "minecraft:sky",
 
-     "criteria": {
 
-         "item": {
 
-             "trigger": "inventory_changed",
 
-             "conditions": {
 
-                 "items": [
 
-                     {
 
-                         "nbt": "{ts: 1b}"
 
-                     }
 
-                 ]
 
-             }
 
-         }
 
-     }
 
- }
trigger使用inventory_change,并匹配玩家背包内物品nbt。需要注意的是,nbt中,数据出现true/false时,会自动转化成1b/0b,因此最好也写成这类形式(不过印象中似乎写true/false也行?不过懒得试了)
3.
战利品表谓词 - Minecraft Wiki
Player.dat格式 - Minecraft Wiki
谓词并没有直接匹配玩家背包的判定,因此这里的策略是通过entity_properties来匹配玩家nbt。
检测背包
- {
 
-     "condition": "entity_properties",
 
-     "entity": "this",
 
-     "predicate": {
 
-         "nbt": "{Inventory:[{id:\"minecraft:sugar_cane\"}]}"
 
-     }
 
- }
检测末影箱
- {
 
-     "condition": "entity_properties",
 
-     "entity": "this",
 
-     "predicate": {
 
-         "nbt": "{EnderItems:[{id:\"minecraft:sugar_cane\"}]}"
 
-     }
 
- }
首先,建立一个dummy记分板(此处假定记分板id为scb,下同)
借助time query获取游戏时间,然后对7取余,得到的数即可用来判断当天月相。
执行一次(设置常量)
- scoreboard players set 7 scb 7
- execute store result score day scb run time query day
 
- scoreboard players operation day scb %= 7 scb
检测多余一个物品,谓词做不到。这里还是用记分板。
- execute as @a store result score @s scb run clear @s emerald 0
 
- execute as @a if score @s scb matches 72.. run say 我有72个绿宝石
- {
 
-     "condition": "entity_properties",
 
-     "entity": "this",
 
-     "predicate": {
 
-         "nbt": "{Inventory:[{id:"minecraft:sugar_cane",Slot:-106b}]}"
 
-     }
 
- }
4.
除穷举外,无解。/attribute无法做到动态修改玩家属性。
不过还有另一种做法,将分数值储存至一个装备的属性中,然后再通过潜影盒或/item(1.17)转移至玩家身上。缺点是需要固定占用玩家的一个装备栏。
5.
新建资源包,建立assets/minecraft/models/carrot_on_a_stick.json覆盖掉原版胡萝卜钓竿模型,然后写入
- {
 
-     "parent": "item/handheld_rod",
 
-     "textures": {
 
-         "layer0": "item/carrot_on_a_stick"
 
-     },
 
-     "overrides": [
 
-         {
 
-             "predicate": {
 
-                 "custom_model_data": 1
 
-             },
 
-             "model": "<另一个模型>"
 
-         }
 
-     ]
 
- }
在predicate中指定custom_model_data为1,并引用另一个模型。模型的路径从model后开始写。
多数情况下被custommodeldata引用的模型是一个仅拥有一个贴图的模型,因此可以直接指定父模型为item/handheld,然后指定layer0为指定贴图的路径。
- {
 
-     "parent": "item/handheld_rod",
 
-     "textures": {
 
-         "layer0": "<namespace>:<path>"
 
-     }
 
- }
这里有一份比较详细的教程,可以参考一下
添加音乐的话,首先需要音乐是ogg格式,放入assets/<namespace>/sounds路径中,然后在资源包中建立assets/<namespace>/sounds.json,编写该文件夹指定音效id、类型,以及所需的音乐(路径从sounds之后开始写,无后缀,有命名空间,若为minecraft则可忽略)。
Sounds.json - Minecraft Wiki
这里我找了一份教程
个人最近瞎写的如何做一个音效资源包的教程
6.
覆盖钓鱼战利品表只需建立文件<datapack>/data/minecraft/loot_tables/gameplay/fishing.json并进行编写即可。
直接是生物。。。你是想钓生物吗?emmmm或许给一个物品特殊的nbt,检测到这个特殊的物品就原地生成生物,然后data modufy Motion再kill物品?
指定生物执行战利品表很容易,修改生物的DeathLootTable这个nbt为指定路径的战利品表即可。一般为了方便会直接在生成时即添加。不过既然楼主要求,那就
- /execute as @e[type=zombie,tag=to] run data merge entity @s {DeathLootTable:"<namespace>:<path>"}
终于打完了,累死了,睡了
 本帖最后由 Plants-Stars 于 2021-3-19 19:24 编辑 
大佬我还想问一下,就是,自定义维度能不能设置不生成建筑,生成自带的结构方块存储的结构,然后wiki:"https://wiki.biligame.com/mc/%E8%87%AA%E5%AE%9A%E4%B9%89%E7%BB%B4%E5%BA%A6",维度类型,应该怎么设置;那个成就我看原版进度界面一个标签和标题,获取时另一个标签和标题,请问自定义的能做到吗;那个是弓和钓鱼竿,不是胡萝卜钓竿,用cutommodeldata只能显示弓和钓鱼竿的第一阶段的材质,拉弓或者抛出后就还是游戏原材质了(或者是大佬已经讲了,我没听懂 bushi)
Chelover_C60 发表于 2021-3-19 02:15
1.
自定义维度 - Minecraft Wiki
/data/minecraft/dimension/sky.json
大佬我还想问一下,就是,自定义维度能不能设置不生成建筑,生成自带的结构方块存储的结构,然后wiki:"https://wiki.biligame.com/mc/%E8%87%AA%E5%AE%9A%E4%B9%89%E7%BB%B4%E5%BA%A6",维度类型,应该怎么设置;那个成就我看原版进度界面一个标签和标题,获取时另一个标签和标题,请问自定义的能做到吗;那个是弓和钓鱼竿,不是胡萝卜钓竿,用cutommodeldata只能显示弓和钓鱼竿的第一阶段的材质,拉弓或者抛出后就还是游戏原材质了(或者是大佬已经讲了,我没听懂 bushi)
Plants-Stars 发表于 2021-3-19 18:47
大佬我还想问一下,就是,自定义维度能不能设置不生成建筑,生成自带的结构方块存储的结构,然后wiki:"ht ...
我翻了下level.dat,建筑生成的规则是全存档通用的,可能没法搞每个维度使用不同的建筑生成规则。
可能有一种方法,在一个单独的数据包中使用空的结构替换掉游戏原本的结构,当玩家进入自定义维度时开启这个数据包,并在玩家离开后禁用掉,这样可能可以解决这个问题。不过这样也会导致数据包不再兼容多人游戏。
或者也可以直接用自定义的结构替换游戏原本的结构
这个教程讲述了一些在原版中添加自定义建筑的一些方法,可供参考
https://zhangshenxing.gitee.io/v ... 0%E7%BB%93%E6%9E%84
一般情况下默认的四个维度类型(overworld、overworld_caves、the_nether、the_end)足够用,直接在dimension里调用即可
如果不够的话,可以在data/<namespace>/dimension_type目录下建立json文件,并依照对应格式编写即可。
自定义维度 - Minecraft Wiki
弓和钓竿的问题,是我看错了,不好意思()
我翻了下原版弓和钓竿的模型文件,弓在拉动时会随时间依次调用 bow_pulling_0、bow_pulling_1、bow_pulling_2 这三个模型。钓竿抛出后会调用 fishing_rod_cast 这个模型,因此我个人推测,如果在这三个模型上也应用上custommodeldata,或许能解决这个问题
Chelover_C60 发表于 2021-3-19 19:34
我翻了下level.dat,建筑生成的规则是全存档通用的,可能没法搞每个维度使用不同的建筑生成规则。
可能有 ...
行吧,大佬,我试试;那个成就我看原版进度界面一个标签和标题,获取时另一个标签和标题,请问自定义的能做到吗,不能做到就算了(比如末地,进度界面是“末地”,“还是开始了?”,获取的时候是“结束了?”,“进入末地传送门”)
 本帖最后由 Chelover_C60 于 2021-3-19 20:40 编辑 
实际上这是两个进度
进度“结束了”是主世界的一个进度,达成条件为进入末地
进度“还是开始了”是末地的根进度,达成条件也是进入末地
进度json中有两项是可以控制进度在达成时是否在右上角及聊天栏展示,将其中一个进度的这几项设置为不展示即可。
复制代码
Plants-Stars 发表于 2021-3-19 20:03
行吧,大佬,我试试;那个成就我看原版进度界面一个标签和标题,获取时另一个标签和标题,请问自定义的能 ...
实际上这是两个进度
进度“结束了”是主世界的一个进度,达成条件为进入末地
进度“还是开始了”是末地的根进度,达成条件也是进入末地
进度json中有两项是可以控制进度在达成时是否在右上角及聊天栏展示,将其中一个进度的这几项设置为不展示即可。
- {
 
-     "display": {
 
-         ...
 
-         "show_toast": false,
 
-         "announce_to_chat": false,
 
-     }
 
- }