前言
本数据包遵循 [GNU 宽通用公共许可证](https://www.gnu.org/licenses/lgpl-3.0.txt "前往此开源许可证页面") 授权。
本数据包为开发者提供了一些实用的功能(以及一些对话框),兼容所有版本的 Minecraft(除了无法安装数据包的版本)。
但由于数据包涉及的命令较多,较低版本可能无法使用所有功能。所有功能的适用版本将不会在下方说明。
请同时安装资源包以使用本地化内容(v3.2+)。否则,数据包语言将默认为 zh_cn。
本数据包的模组版本通过 Modrinth 打包,内容与数据包版本完全相同,但不一定是最新版本。请尽量使用数据包版本。
本数据包提供了一个 dfl:dfl_enable 函数,可以将此记分板中所有实体的分数设为 1,方便依赖此数据包的数据包或模组检测此数据包是否已加载。
示例:
# 在数据包加载时执行:
scoreboard objectives add dfl_scoreboard dummy
scoreboard players set dfl_enable dfl_scoreboard 0
# 如果未加载:
function dfl:dfl_enable
execute unless score dfl_enable dfl_scoreboard matches 1
# 如果已加载:
function dfl:dfl_enable
execute if score dfl_enable dfl_scoreboard matches 1
注意:部分功能在其用法后附有“前置功能”。这些功能必须在执行它们之前执行一次。
部分功能用法后跟有 {xx:"xx"}。这些功能是宏函数。使用时需要通过 {:""} 传递参数(用法中的参数是作者在开发过程中测试推荐的参数,或是作者用于测试的参数)。参数名(例如 num)在文本中表示为:{num}。参数格式可参考功能用法,特殊格式会加以说明。
如果遇到任何问题,请点击此处进行反馈。
功能说明
启动
此类别中的功能建议在数据包加载(重载)时执行。
禁用特殊伤害
功能用法:/function dfl:start/disablespecialdamage
- 摔落伤害;
- 火焰伤害;
- 冰冻伤害;
- 溺水伤害。
将重生点固定为 0 0
功能用法:/function dfl:start/setworldspawn
- 将世界重生点设置为 0 0 0;
- 将重生点半径设置为 0;
- 此时玩家将被固定重生在坐标 0 0 的最高方块上。
启用死亡排行榜
功能用法:/function dfl:start/show/enabledeathscoreboard
- 创建一个名为 death 的记分板项;
- 死亡次数将显示在屏幕右侧;
- 玩家死亡次数按从高到低排序;
- 注意:首次启用时死亡排行榜不会显示,需任意玩家死亡后才会显示。
显示玩家生命值
功能用法:/function dfl:start/show/displayhealthbelow_name
- 创建一个名为 health 的记分板项;
- 玩家的生命值将显示在玩家 ID 下方;
- 距离稍远时不会显示(仅显示玩家 ID);
- 注意:首次启用时生命值会显示为 0,需数值更新(如受伤)后才会显示。
显示玩家经验等级
功能用法:/function dfl:start/show/displaylevelin_tab
- 创建一个名为 level 的记分板项;
- 每位玩家的经验等级将显示在 Tab 栏(玩家列表栏)中;
- 注意:首次启用时经验等级会显示为 0,需数值更新(如升级)后才会显示。
显示玩家生命条
功能用法:/function dfl:start/show/displayhealthin_tab
- 创建一个名为 health 的记分板项;
- 每位玩家的生命条将显示在 Tab 栏(玩家列表栏)中。
- 效果如下:
![[DFL] 数据包功能支持库 (datapack function library)-图片 1](https://raw.githubusercontent.com/TouchController/E1epack/main/subprojects/datapack-function-library/README/Scoreboard_Display_List_Hearts.gif)
快速创建新队伍
功能用法:/function dfl:start/createteams {teamblue:"blue",teamred:"red",prefixblue:"blue",prefix_red:"red"}
- 创建两个名为 {teamblue} 和 {teamred} 的队伍;
- 颜色分别为蓝色和红色;
- 禁用同队玩家的友军伤害;
- 玩家只能与不同队的实体发生碰撞;
- 玩家名称前缀分别为 {prefixblue} 和 {prefixred}。
每刻
此类别中的功能建议每刻执行。
软封禁玩家
功能用法:/function dfl:tick/softbanplayer {title:"封禁原因",subtitle:"备注"}
- 注意:此功能的执行者必须是被封禁的玩家,可以使用
/execute命令; - 通过不断将玩家传送到 0 0 0、设置为冒险模式、持续给予玩家负面效果来实现软封禁;
- 必须每刻执行;
- 标题为 {title},副标题为 {subtitle};
- 示例:
/execute as @a[tag=ban] run function dfl:tick/softbanplayer {title:"封禁原因",subtitle:"备注"}。
效果如下:
![[DFL] 数据包功能支持库 (datapack function library)-图片 2](https://raw.githubusercontent.com/TouchController/E1epack/main/subprojects/datapack-function-library/README/tick.ban.png)
信标鞘翅起飞
功能用法:/function dfl:tick/beacon_fly
- 当信标下方有铁块、金块、绿宝石块、钻石块或下界合金块时,玩家将被向上传送(旁观者不会被传送);
- 高度依次为 20、40、60、80、100 格;
- 相同方块可叠加以增加高度(最高为 400 格,使用四个下界合金块)。若方块不同,则使用最靠近信标的方块。
一键负面效果
功能用法:/function dfl:tick/apply_debuffs
给予功能执行者以下负面效果:
- 缓慢
- 挖掘疲劳
- 反胃
- 黑暗
- 饥饿
- 虚弱
- 中毒
- 霉运
- 试炼灾兆
铁块电梯
功能用法:/function dfl:tick/ironblockelevator
- 当玩家站在上下两个铁块之间时,将其向上传送;
- 最大传送距离为 6 格,即两个铁块之间最大距离为 5 格;
- 不会传送旁观者;
- 会传送生物和非生物实体。
实体过多时清理
功能用法:/function dfl:tick/killexcessentities {num:"1000"}
- 当非玩家实体数量大于 {num} 时,清除所有非玩家实体;
- 不会清除带有 need 标签的实体;
- 带有 need 标签的实体不计入此处实体数量;
- 创建一个名为 dfl_scoreboard 的记分板项。
- 执行后会在聊天栏显示提示,效果如下:
![[DFL] 数据包功能支持库 (datapack function library)-图片 3](https://raw.githubusercontent.com/TouchController/E1epack/main/subprojects/datapack-function-library/README/tick.kill.png)
实体密度过高时清理
功能用法:/function dfl:tick/killbydensity {num:"50"}
前置功能:/function dfl:lib/getentitydensity
- 使所有实体在 10 格范围内的实体数量大于 {num} 时清除这些实体;
- 不会杀死玩家;
- 不会杀死村民;
- 不会杀死带有 need 标签的实体;
- 不会在聊天栏留下痕迹。
Minecraft 太难了
功能用法:/function dfl:tick/mith
- 启用死亡不掉落;
- 给予执行者夜视效果;
- 给予执行者发光效果;
- 移除执行者的黑暗效果。
显示实体数量
功能用法:/function dfl:tick/displayentitycount
前置功能:/function dfl:lib/getentitycount
- 在玩家的操作栏(快捷栏上方)显示实时实体数量。
- 效果如下:
![[DFL] 数据包功能支持库 (datapack function library)-图片 4](https://raw.githubusercontent.com/TouchController/E1epack/main/subprojects/datapack-function-library/README/tick.show_entity.png)
禁用玩家友军伤害和碰撞
功能用法:/function dfl:tick/disablefriendlyfire
- 添加一个名为 dfl 的队伍,并将所有玩家加入此队伍;
- 注意:由于同一实体无法加入多个队伍,若想使用玩家队伍功能,请勿启用此功能;
- 禁用队伍友军伤害;
- 禁用队伍内碰撞;
- 若未每刻运行此功能,请确保每次新玩家加入后运行一次此功能。
TNT 实体密度过高时清理
功能用法:/function dfl:tick/killtntby_density {num:"200"}
- 当 TNT 五格范围内的 TNT 实体数量大于 {num} 时,清除这些 TNT 实体;
- 创建一个名为 dfl_tntdensity 的记分板项。
无权限玩家自杀
功能用法:/function dfl:tick/trigger_suicide
- 创建一个名为 kill 的记分板项;
- 输入
/trigger kill即可自杀(此命令不需要任何权限)。
大范围替换方块
功能用法:/function dfl:tick/change_block {new:"glass",old:"stone",num:"30"}
- 在玩家周围 {num}3 *8 的范围内将 {old} 替换为 {new};
- 将游戏规则 commandModificationBlockLimit 更改为 2147483647。
始终白天 + 始终晴天
功能用法:/function dfl:tick/always_sunny
- 关闭昼夜循环;
- 关闭天气变化;
- 将时间设为白天;
- 将天气设为晴朗。
清除单个物品并执行命令
功能用法:/function dfl:tick/clearandexecute_single {name:"stone",run:"tp ~ 100 ~"}
- 清除所有玩家一个 {name} 并执行 {run};
- 注意:run 参数中的命令开头和结尾不应有额外空格,命令前不应有斜杠。
清除指定物品并多次执行命令
功能用法:/function dfl:tick/clearandexecute_multiple {name:"sand",run:"give @s anvil"}
- 清除功能执行者所有 {name} 并执行相应次数的 {run} (在同一刻内);
- 注意:run 参数中的命令开头和结尾不应有额外空格,命令前不应有斜杠。
保持拥有物品
功能用法:/function dfl:tick/maintainitemcount {name:"slime_block",num:"64"}
- 让命令执行者恰好拥有指定数量的物品。
自救平台
功能用法:/function dfl:tick/createrescueplatform
前置功能:/function dfl:lib/getgametime
- 创建一个名为 dflslimemarker_temp 的记分板项,用于存储史莱姆平台生成的时间;
- 在带有 dfl_slime 标签的玩家下方生成一个 3*3 的史莱姆平台并移除标签。史莱姆平台只能覆盖空气方块;
- 史莱姆平台位置的史莱姆块将在 `` 刻后被清除;
- slimetime 的 dflscoreboard 记分板项在未赋值时会被设为 200,即 10 秒;
- 平台生成时玩家位置 2 格范围内的史莱姆块掉落物会被清除。
物品转换为经验
功能用法:/function dfl:tick/thingstoxp {name:"tnt",xp:"1"}
- 将功能执行者身上的每个 {name} 转换为 {xp} 点经验值。
tpa
功能用法:/function dfl:tick/tpa
前置功能:/function dfl:lib/generateplayerid
- 创建名为 tpa 和 tpa_enable 的记分板项;
- 输入
/trigger tpa set即可传送到对应玩家; - 输入
/trigger tpa_enable即可允许其他玩家传送到自己,且不可撤销(若不执行此命令,则所有其他玩家均无法传送到此玩家)。若在此命令中使用 set 设置其他值,则无效(不会允许其他玩家传送到自己)。仍可通过 set 再次设为 1 以允许其他玩家传送到自己; - 若待传送玩家不存在或未允许其他玩家传送到自己,则会在对应玩家 id 可传送后传送到对应玩家。在此期间,tpa 对象仍可随意更改。
自动熔炼
功能用法:/function autosmelt:smelt {input:"rawiron",output:"iron_ingot"}
- 消耗 {input} 并给予功能执行者相应数量的 {output};
- 熔炼一个物品消耗 1 点经验值。若玩家没有经验,则不会熔炼物品;
- 若背包同时有三种支持的燃料,这些燃料将同时被消耗;
- 消耗一个煤炭块后,可同时熔炼 9 个物品,并扣除 9 点经验值。
计时器
此类别中的功能建议在一段时间后执行。(可使用 [/schedule](https://zh.minecraft.wiki/w/%E5%91%BD%E4%BB%A4/schedule "前往 wiki 查看此命令用法") 命令)
清理掉落物
功能用法:/function dfl:timer/clear_items
- 创建一个名为 dfl_scoreboard 的记分板项;
- 清除所有掉落物并通过
/tellraw输出清除的掉落物数量; - 不会清除带有 need 标签的掉落物。
- 效果如下:
![[DFL] 数据包功能支持库 (datapack function library)-图片 5](https://raw.githubusercontent.com/TouchController/E1epack/main/subprojects/datapack-function-library/README/redstone.kill_item.png)
显示实体数量信息
功能用法:/function dfl:timer/displayentityinfo
前置功能:
/function dfl:lib/getentitycount
/function dfl:lib/getitemcount
/function dfl:lib/nonplayerentities
此功能效果如下:
![[DFL] 数据包功能支持库 (datapack function library)-图片 6](https://raw.githubusercontent.com/TouchController/E1epack/main/subprojects/datapack-function-library/README/redstone.show_entity.png)
库
此类别中的功能单独执行时无效果或不适合归入以上类别。
强制死亡掉落
功能用法:/function dfl:lib/forcedeathdrops
- 关闭死亡不掉落。
- 杀死功能执行者。
- 开启死亡不掉落。
获取实体数量
功能用法:/function dfl:lib/getentitycount
- 创建一个名为 dfl_scoreboard 的记分板项;
- 将实体数量写入 entity 的 dfl_scoreboard 记分板项。
获取实体密度
功能用法:/function dfl:lib/getentitydensity
- 创建一个名为 dfl_density 的记分板项;
- 将所有实体 10 格范围内的实体数量写入此实体的记分板项。
获取掉落物数量
功能用法:/function dfl:lib/getitemcount
- 创建一个名为 dfl_scoreboard 的记分板项;
- 将掉落物数量写入 item 的 dfl_scoreboard 记分板项。
获取非玩家实体数量
功能用法:/function dfl:lib/nonplayerentities
- 创建一个名为 dfl_scoreboard 的记分板项;
- 将非玩家实体数量写入 otherentity 的 dflscoreboard 记分板项。
获取游戏天数
功能用法:/function dfl:lib/getgameday
- 创建一个名为 dfl_scoreboard 的记分板项;
- 将游戏天数写入 day 的 dfl_scoreboard 记分板项;
- 游戏天数 - 昼夜循环中已过去的天数,即昼夜循环时间除以 24000 取整数商的结果。
获取白天时间
功能用法:/function dfl:lib/getdaytime
- 创建一个名为 dfl_scoreboard 的记分板项;
- 将白天时间写入 daytime 的 dfl_scoreboard 记分板项;
- 白天时间 - 自该日日出以来已过去的游戏刻数,即昼夜循环时间除以 24000 取余数的结果。
用玻璃包围玩家
功能用法:/function dfl:lib/createglassbox
- 在命令执行者处生成一个 5*5 的空心玻璃立方