本帖最后由 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>"}
终于打完了,累死了,睡了