地图建造记录001丨Minecraft JE 竞技地图更新日志2021.03-2021.05

本文是记录自己建地图的过程 用于帮助自己整理思路 也可能可以帮到正在学习的玩家
技术不足 仅供参考(简称乱写的)
封面欺诈 放的是我的上一代地图
咕还是不咕,这是一个问题。

2021-03-10
版本1.15.2 (2021.03.20改为1.16.4)
新建世界
超平坦预设选“虚空”

新建数据包(datapack)文件夹,规划函数文件夹内文件分类
新建用于重新加载游戏时设定计分板和队伍的函数文件
写设定计分板和队伍的函数是由于以前网易总是吃计分板而不得已养成的习惯(悲)

写入设定世界出生点、难度、游戏规则的指令(之后还需写入重置计分板、队伍等)
做法参考
setworldspawn(设置世界出生点)
difficulty(设置游戏难度)
gamerule

时间设置与节日大厅有关,所以先不写入

2021-03-13
写设定函数的子文件
先写一些规划中一定会用到的计分板
做法参考
scoreboard objectives add <objective> <criteria> <displayName>
function(在为方便而拆分函数文件后写入函数以嵌套)

规划中,击杀数和死亡数是只统计PVP的,要做成在PVP时才加分数,所以图中先用dummy类型
写重置判定是否拥有头衔的计分板

还未确定要加入什么头饰,所以判定是否拥有头饰的计分板先不写
玩家颗粒效果没有专门写判定是否有用的计分板是因为颗粒效果解锁是用VIP等级(而头饰头衔有时和抽奖有关),所以颗粒只需要有判断VIP等级的计分板就可以了
上图中的particle、title等计分板是用于判断玩家已经选择的装扮,和是否拥有无关
你们可能发现了其中的不合理之处:为什么判断是否拥有某物的这种只需要储存0和1两种状态的情况要用计分板,而不是tag?2019年的时候我发现网易租赁服导入地图,玩家的tag数据会消失。于是之后遇到这种情况就都使用计分板了(不排除现在网易修好了这个问题的情况)。
写设置玩家数据的函数
做法参考
scoreboard players set

设置玩家数据是这次PVP地图(5代)首次加入的设定,用于保存贡献值、议员头衔、榜首头衔等手动设定的数据,防止其丢失
写重置队伍
做法参考
team

扁平化后不需要用NBTExplorer改前后缀了,不需要每次丢计分板都改team,就很棒
做法参考
scoreboard players set
scoreboard objectives setdisplay sidebar

颜色队伍写侧边栏会用到
想到之后还有用在游戏结束之后重置的函数,所以把reset文件夹改名load_reset区分
写load文件 在地图加载时触发指定函数

感觉公告计分板显示名称有点不太好看,于是从“- 公 告 -”改为“公 告”


2021-03-20
网易更1.16了,转进1.16.4

2021-03-21
写显示PVP职业介绍的函数
做法参考
tag(用于选中目标便于下文选择器书写)
execute as与execute positioned as(用于配合playsound播放音效 可用execute at代替)
playsound
tellraw

修改了上一代PVP地图的写法,把原先跟在物品名称后面的详细信息改为鼠标悬浮显示
此处show_item包含的物品结构中,Count:1b不可缺少,否则会被视为无效(MC_himcd提供指导意见)

提案将绿色文本改为白色,议员 MC_himcd 与 岁月灬陌 反对,提案未通过
写经典模式职业神射手的职业介绍函数
在设定游戏规则的函数中加入gamerule disableRaids true以禁止袭击

2021-03-27
随便建了下大厅
做法参考(使用WorldEdit插件 详见https://mineplugin.org/WorldEdit)
//hcyl <方块样式> <半径> [高度](用于生成空心圆)
//copy
//rotate <y角度>
//paste
//setbiome <目标>
//setbiome -p <目标>(用于微调生物群系)
time set <时间值:整数>
locatebiome <生物群系ID>(用于开另外世界寻找生物群系作为参考)


2021-03-27
建大厅三环


2021-04-03
建大厅二三环间四块生物群系

议员冷酷如冰0发现专栏日期2021写成了2020(离谱)

2021-04-04
建大厅二三环间剩下四块生物群系


2021-04-05
建大厅三环和三四环间阶梯

2021-04-10
建大厅剩余三个三四环间阶梯
建大厅三四环间玄武岩三角洲与部分诡异森林
做法参考(使用WorldEdit插件 详见https://mineplugin.org/WorldEdit)
//schematic(用于跨存档复制 便于修改选区内建筑)
//copy
//rotate <y角度>
//set
//replace
//paste -a(黏贴时忽略空气方块 用于在复制外圈生物群系的情况下不破坏内圈生物群系)
//paste -s(黏贴后再次选中 方便再次//schematic save)


2021-04-11
建完三四环间诡异森林

2021-04-17
建三四环间末地(不含生物群系修改)


2021-04-19
建三四环间生物群系绯红森林

修改三四环间末地的生物群系


2021-04-20
建四环

2021-05-01
收到 编号2403千羽 QQ捐款¥10.00

2021-05-03
建大厅四环五环间地面 材质未定先用羊毛后替换
编号2403千羽 与 MyEddie 参与

铺地板用了偷懒的方法
做法参考
execute as @a[tag=1] at @s if entity @s[y=17,distance=1] if block ~ ~-1 ~ minecraft:air run setblock ~ ~-1 ~ minecraft:white_wool
“as”用于改变命令执行者、“tag=1”用于限制仅指定玩家生效、“if entity @s[y=17,distance=1]”用于判断玩家所在高度、“if block ~ ~-1 ~ minecraft:air”用于检测指定玩家的指定相对位置是否为空气
(实际操作中我写了9条命令达到一次替换周围一圈地面的效果,即为修改if block后与setblock后相对坐标)

修复队伍重置函数子函数执行命令路径错误的漏洞

2021-05-05
建查看分数排行/查看个人分数区域建筑
做法参考
/give @s minecraft:debug_stick
/setblock ~ ~ ~ minecraft:stone_button[face=floor]

使用调试棒修改了部分方块(左键改变所要修改的方块数据值,右键修改所选数据值)

2021-05-10
扩张议员范围以求得到建筑建议(原12人现18人) 但是实际好像完全没有用处
初步建选择PVP职业狂战士区域建筑
做法参考
/summon minecraft:armor_stand ~ ~ ~ {Invulnerable:true,ShowArms:true,Pose:{RightArm:[0f,0f,0f]},NoGravity:true}(生成用于做出摆放物品效果的盔甲架)
/data merge entity @e[limit=1,sort=nearest,type=minecraft:armor_stand] {Pose:{RightArm:[0f,0f,0f]}}(修改盔甲架姿势)
/execute as @e[limit=1,sort=nearest,type=minecraft:armor_stand] at @s run tp @s ~ ~ ~(微调盔甲架位置)
/data merge entity @e[limit=1,sort=nearest,type=minecraft:armor_stand] {Invisible:true,DisabledSlots:16191,Marker:true}(结束修改 隐藏盔甲架 禁止物品交互 缩小碰撞体积)
/data merge entity @e[limit=1,sort=nearest,type=minecraft:painting] {Invulnerable:true}(设定画无法破坏)
/data merge block ~ ~-1 ~ {Lock:"key"} (锁箱子、熔炉等)


初步规划循环函数

循环重置花盆 用于玩家取走花盆内植物的情况


2021-05-14
在狂战士选择区域增加药水装饰


2021-05-15
在狂战士选择区域增加药水装饰
将主循环函数写入tick文件

将重置花盆命令移动至main>repeat>set_data>main
将侧边栏计分板由sidebarSwitch改为sidebar
删除了load_reset/main中重置情况list计分板显示命令
在load_reset/main中加入设置侧边栏修改分数命令

在load_reset/main中加入创建与村民交互检测计分板命令(未用于修改计分板)

将hall/sidebar路径名称改为hall/retrieval
冷酷如冰0 修改选择职业狂战士区域 Runwill(我) 参与


写侧边栏切换命令

检测侧边栏切换触发与重置村民交互计数





写有关疾跑时退出计分板查看的命令



取消了原右键讲台查看自己分数的计划
生成查看计分板区域浮空字
做法参考
/summon minecraft:armor_stand ~ ~2 ~ {CustomName:'[{"text":"","color":""}]',CustomNameVisible:true,Invulnerable:true,Invisible:true,DisabledSlots:16191,Marker:true,NoGravity:true}
冷酷如冰0 建选择经典职业对战模式 Runwill(我) 修改

冷酷如冰0 建选择职业神射手区域 Runwill(我)参与



2021-05-16
增加选择经典职业对战模式区域周围的草、树叶
在load_reset/objectives/main中加入创建药水效果判定计分板命令

写重置加入游戏玩家命令

写循环给予玩家药水效果命令

将给予药水效果与重置加入游戏写入循环


2021-05-22
将选择经典PVP模式区域旗帜下磨制黑石改为黑曜石
增加选择职业区域的草
将effect移至repeat/testfor目录下
修复重置玩家时重置退出游戏记录分数导致无法区分未加入过游戏玩家的漏洞

添加虚弱作为大厅药水效果

冷酷如冰0 开始建造经典PVP模式等待区域
MC_himcd 提供了内网映射方法(uTools内网穿透插件)
编号2403千羽 提供了显示离线皮肤模组
得到了1.16.4forge服务端与客户端(链接见下方)
Minecraft我的世界1.16.4Forge服务端整合 作者: 肆零肆E

2021-05-23
添加饱和作为大厅药水效果

将重置游戏时设定doDaylightCycle为false改为true
重置游戏时生成储存标签用盔甲架

写加入经典对战模式函数



增加经典对战模式加入区域浮空字

增加加入经典对战等待后文本显示

修改加入游戏显示文本与播放音效选择器(规划joinedStatus为负数表示在游戏中 不接受加入游戏音效与文本)

增加群员大厅道具羽毛(手持+40%速度 下图第13行 选择器错误 未判断是否为群员 2021.05.29更新中修复)
分离回到大厅函数(节省语句)


写退出经典对战等待函数

将退出经典对战等待函数写入循环(因建筑未完成暂未设置触发方式)

2021-05-26
更改players/choose_mode为players/enter_waiting_hall
更改players/exit_waithall改为players/exit_waiting_hall
更改对应函数名称
在加入经典对战模式中增加检测人数足够则触发开始游戏倒计时命令

新建mode/start_game_countdown路径

2021-05-29
修复了给予群员大厅道具选择器错误的漏洞

写开始经典对战开始游戏倒计时

修改增加检测人数足够则触发开始游戏倒计时命令

将所有使用operationNumber的命令改为使用matches(hall/retrieval、players/enter_waiting_hall)
删除了创建operationNumber计分板的命令
写经典对战开始游戏倒计时



冷酷如冰0 Runwill(我) 继续建造经典对战等待区域 binyuanqishi 参与

初步写经典对战开始游戏倒计时结束命令
修改进入经典对战等待区域传送坐标
写经典对战人数不足停止倒计时命令并加入循环


2021-05-30
建造经典对战选择地图区域

2021-05-31
添加选择职业区域的屏障
添加经典对战选择地图区域的草径


本篇完达到专栏100图片上限了- -;
特别鸣谢
指令顾问
MC_himcdMC_himcd
technomuto
参与建筑
冷酷如冰0冷酷如冰0
分享映射软件
MC_himcdMC_himcd