├── NOTICE ├── suso.mod_warn ├── data │ ├── minecraft │ │ └── tags │ │ │ └── function │ │ │ ├── load.json │ │ │ ├── tick.json │ │ │ └── mw │ │ │ ├── commands.json │ │ │ ├── fabric.json │ │ │ ├── forge.json │ │ │ ├── help.json │ │ │ ├── lunar.json │ │ │ ├── misspack.json │ │ │ ├── optifine.json │ │ │ ├── spigot.json │ │ │ ├── version.json │ │ │ ├── essential.json │ │ │ └── extrapack.json │ └── suso.mw │ │ └── function │ │ ├── reset_reload.mcfunction │ │ ├── count_help.mcfunction │ │ ├── internal │ │ └── count_help.mcfunction │ │ ├── count_packs.mcfunction │ │ ├── get_version.mcfunction │ │ ├── detect │ │ ├── optifine │ │ │ ├── pt2.mcfunction │ │ │ └── do.mcfunction │ │ ├── essential │ │ │ ├── pt2.mcfunction │ │ │ └── do.mcfunction │ │ ├── version │ │ │ ├── try.mcfunction │ │ │ └── do.mcfunction │ │ ├── misspack.mcfunction │ │ ├── extrapack.mcfunction │ │ ├── help.mcfunction │ │ ├── commands │ │ │ ├── pt2.mcfunction │ │ │ └── do.mcfunction │ │ ├── version.mcfunction │ │ ├── lunar.mcfunction │ │ ├── fabric.mcfunction │ │ ├── forge.mcfunction │ │ ├── spigot.mcfunction │ │ └── do.mcfunction │ │ ├── warn │ │ ├── version.mcfunction │ │ ├── commands.mcfunction │ │ ├── fabric.mcfunction │ │ ├── forge.mcfunction │ │ ├── lunar.mcfunction │ │ ├── spigot.mcfunction │ │ ├── optifine.mcfunction │ │ ├── essential.mcfunction │ │ ├── help.mcfunction │ │ ├── misspack.mcfunction │ │ ├── title.mcfunction │ │ ├── extrapack.mcfunction │ │ └── do.mcfunction │ │ ├── main.mcfunction │ │ └── load.mcfunction └── pack.mcmeta ├── README.md └── LICENSE /NOTICE: -------------------------------------------------------------------------------- 1 | Mod Warnings library datapack by Suso 2 | -------------------------------------------------------------------------------- /suso.mod_warn/data/minecraft/tags/function/load.json: -------------------------------------------------------------------------------- 1 | {"values":["suso.mw:load"],"replace":false} -------------------------------------------------------------------------------- /suso.mod_warn/data/minecraft/tags/function/tick.json: -------------------------------------------------------------------------------- 1 | {"values":["suso.mw:main"],"replace":false} -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/reset_reload.mcfunction: -------------------------------------------------------------------------------- 1 | scoreboard players set #reload suso.mw 0 -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/count_help.mcfunction: -------------------------------------------------------------------------------- 1 | schedule function suso.mw:internal/count_help 1t -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/internal/count_help.mcfunction: -------------------------------------------------------------------------------- 1 | execute store result score $help_ct suso.mw run help -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/count_packs.mcfunction: -------------------------------------------------------------------------------- 1 | execute store result score $pack_ct suso.mw run datapack list -------------------------------------------------------------------------------- /suso.mod_warn/data/minecraft/tags/function/mw/commands.json: -------------------------------------------------------------------------------- 1 | { 2 | "values":[ 3 | 4 | ], 5 | "replace":false 6 | } -------------------------------------------------------------------------------- /suso.mod_warn/data/minecraft/tags/function/mw/fabric.json: -------------------------------------------------------------------------------- 1 | { 2 | "values":[ 3 | 4 | ], 5 | "replace":false 6 | } -------------------------------------------------------------------------------- /suso.mod_warn/data/minecraft/tags/function/mw/forge.json: -------------------------------------------------------------------------------- 1 | { 2 | "values":[ 3 | 4 | ], 5 | "replace":false 6 | } -------------------------------------------------------------------------------- /suso.mod_warn/data/minecraft/tags/function/mw/help.json: -------------------------------------------------------------------------------- 1 | { 2 | "values":[ 3 | 4 | ], 5 | "replace":false 6 | } -------------------------------------------------------------------------------- /suso.mod_warn/data/minecraft/tags/function/mw/lunar.json: -------------------------------------------------------------------------------- 1 | { 2 | "values":[ 3 | 4 | ], 5 | "replace":false 6 | } -------------------------------------------------------------------------------- /suso.mod_warn/data/minecraft/tags/function/mw/misspack.json: -------------------------------------------------------------------------------- 1 | { 2 | "values":[ 3 | 4 | ], 5 | "replace":false 6 | } -------------------------------------------------------------------------------- /suso.mod_warn/data/minecraft/tags/function/mw/optifine.json: -------------------------------------------------------------------------------- 1 | { 2 | "values":[ 3 | 4 | ], 5 | "replace":false 6 | } -------------------------------------------------------------------------------- /suso.mod_warn/data/minecraft/tags/function/mw/spigot.json: -------------------------------------------------------------------------------- 1 | { 2 | "values":[ 3 | 4 | ], 5 | "replace":false 6 | } -------------------------------------------------------------------------------- /suso.mod_warn/data/minecraft/tags/function/mw/version.json: -------------------------------------------------------------------------------- 1 | { 2 | "values":[ 3 | 4 | ], 5 | "replace":false 6 | } -------------------------------------------------------------------------------- /suso.mod_warn/data/minecraft/tags/function/mw/essential.json: -------------------------------------------------------------------------------- 1 | { 2 | "values":[ 3 | 4 | ], 5 | "replace":false 6 | } -------------------------------------------------------------------------------- /suso.mod_warn/data/minecraft/tags/function/mw/extrapack.json: -------------------------------------------------------------------------------- 1 | { 2 | "values":[ 3 | 4 | ], 5 | "replace":false 6 | } -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/get_version.mcfunction: -------------------------------------------------------------------------------- 1 | execute store result score $valid_version suso.mw run data get entity @s DataVersion -------------------------------------------------------------------------------- /suso.mod_warn/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "pack_format": 48, 4 | "description": "§bSuso's utility datapack to set up warnings for players using mods: §3§nhttps://github.com/5uso/Mod-Warnings" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/detect/optifine/pt2.mcfunction: -------------------------------------------------------------------------------- 1 | data modify entity @s CustomName set value '{"translate":"of.key.zoom"}' 2 | execute if entity @s[name=!"of.key.zoom"] run scoreboard players set $optifine suso.mw 1 3 | kill @s 4 | -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/detect/essential/pt2.mcfunction: -------------------------------------------------------------------------------- 1 | data modify entity @s CustomName set value '{"translate":"notification.title.friends"}' 2 | execute if entity @s[name=!"notification.title.friends"] run scoreboard players set $essential suso.mw 1 3 | kill @s 4 | -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/detect/version/try.mcfunction: -------------------------------------------------------------------------------- 1 | scoreboard players set #got_version suso.mw 0 2 | execute as @a[limit=1] run function suso.mw:detect/version/do 3 | execute if score #got_version suso.mw matches 0 run schedule function suso.mw:detect/version/try 1t 4 | -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/detect/misspack.mcfunction: -------------------------------------------------------------------------------- 1 | execute if score #curr_packs suso.mw < $pack_ct suso.mw run scoreboard players set $misspack suso.mw 1 2 | 3 | execute if score $misspack suso.mw matches 1.. run function #mw/misspack 4 | execute if score $misspack suso.mw matches 1.. if score $d_misspack suso.mw matches 1 run scoreboard players add $current suso.mw.count 1 -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/detect/extrapack.mcfunction: -------------------------------------------------------------------------------- 1 | execute if score #curr_packs suso.mw > $pack_ct suso.mw run scoreboard players set $extrapack suso.mw 1 2 | 3 | execute if score $extrapack suso.mw matches 1.. run function #mw/extrapack 4 | execute if score $extrapack suso.mw matches 1.. if score $d_extrapack suso.mw matches 1 run scoreboard players add $current suso.mw.count 1 -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/detect/optifine/do.mcfunction: -------------------------------------------------------------------------------- 1 | execute positioned 29999999 100 27115050 summon area_effect_cloud run function suso.mw:detect/optifine/pt2 2 | 3 | execute if score $optifine suso.mw matches 1.. run function #mw/optifine 4 | execute if score $optifine suso.mw matches 1.. if score $d_optifine suso.mw matches 1 run scoreboard players add $current suso.mw.count 1 -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/warn/version.mcfunction: -------------------------------------------------------------------------------- 1 | tellraw @s [{"text":"[!] ","color":"dark_red","bold":true},{"text":"Warning! ","color":"red","bold":true},{"text":"Unintended Minecraft version.\n\nPlease check the map's intended version and switch to it on a fresh save.","color":"red","bold":false}] 2 | 3 | execute if score $warn_title suso.mw matches 1 run function suso.mw:warn/title -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/detect/essential/do.mcfunction: -------------------------------------------------------------------------------- 1 | execute positioned 29999999 100 27115050 summon area_effect_cloud run function suso.mw:detect/essential/pt2 2 | 3 | execute if score $essential suso.mw matches 1.. run function #mw/essential 4 | execute if score $essential suso.mw matches 1.. if score $d_essential suso.mw matches 1 run scoreboard players add $current suso.mw.count 1 -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/detect/help.mcfunction: -------------------------------------------------------------------------------- 1 | execute store result score #temp suso.mw run help 2 | execute unless score #temp suso.mw = $help_ct suso.mw run scoreboard players set $help suso.mw 1 3 | 4 | execute if score $help suso.mw matches 1.. run function #mw/help 5 | execute if score $help suso.mw matches 1.. if score $d_help suso.mw matches 1 run scoreboard players add $current suso.mw.count 1 -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/warn/commands.mcfunction: -------------------------------------------------------------------------------- 1 | tellraw @s [{"text":"[!] ","color":"dark_red","bold":true},{"text":"Warning! ","color":"red","bold":true},{"text":"Command blocks are not enabled.\n\nThis map requires command blocks to work. Make sure to enable then on server.properties.","color":"red","bold":false}] 2 | 3 | execute if score $warn_title suso.mw matches 1 run function suso.mw:warn/title -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/main.mcfunction: -------------------------------------------------------------------------------- 1 | execute as @a run scoreboard players operation @s suso.mw.walk += @s suso.mw.run 2 | execute as @a if score $current suso.mw.count matches 1.. unless score @s suso.mw.count >= $current suso.mw.count if score @s suso.mw.walk matches 1.. at @s run function suso.mw:warn/do 3 | 4 | scoreboard players set @a suso.mw.walk 0 5 | scoreboard players set @a suso.mw.run 0 6 | -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/detect/commands/pt2.mcfunction: -------------------------------------------------------------------------------- 1 | execute if score $commands suso.mw matches 1.. run function #mw/commands 2 | execute if score $commands suso.mw matches 1.. if score $d_commands suso.mw matches 1 run scoreboard players add $current suso.mw.count 1 3 | 4 | execute if score #cmd_out suso.mw matches 1 run gamerule commandBlockOutput true 5 | scoreboard players set #commands_pending suso.mw 0 6 | -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/detect/version.mcfunction: -------------------------------------------------------------------------------- 1 | execute store result score #temp suso.mw run data get entity @p DataVersion 2 | execute unless score #temp suso.mw = $valid_version suso.mw run scoreboard players set $version suso.mw 1 3 | 4 | execute if score $version suso.mw matches 1.. run function #mw/version 5 | execute if score $version suso.mw matches 1.. if score $d_version suso.mw matches 1 run function suso.mw:warn/version -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/load.mcfunction: -------------------------------------------------------------------------------- 1 | scoreboard objectives add suso.mw dummy 2 | scoreboard objectives add suso.mw.walk minecraft.custom:minecraft.walk_one_cm 3 | scoreboard objectives add suso.mw.run minecraft.custom:minecraft.sprint_one_cm 4 | scoreboard objectives add suso.mw.count dummy 5 | 6 | forceload add 29999999 27115050 7 | 8 | execute unless score #reload suso.mw matches 1.. run schedule function suso.mw:detect/do 1s -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/warn/fabric.mcfunction: -------------------------------------------------------------------------------- 1 | tellraw @s [{"text":"[!] ","color":"dark_red","bold":true},{"text":"Warning! ","color":"red","bold":true},{"text":"Fabric API was detected.\n\nThis map isn't intended to be played with mods, as they may break important mechanics. Please switch to a vanilla installation.","color":"red","bold":false}] 2 | 3 | execute if score $warn_title suso.mw matches 1 run function suso.mw:warn/title -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/warn/forge.mcfunction: -------------------------------------------------------------------------------- 1 | tellraw @s [{"text":"[!] ","color":"dark_red","bold":true},{"text":"Warning! ","color":"red","bold":true},{"text":"Forge loader was detected.\n\nThis map isn't intended to be played with mods, as they may break important mechanics. Please switch to a vanilla installation.","color":"red","bold":false}] 2 | 3 | execute if score $warn_title suso.mw matches 1 run function suso.mw:warn/title -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/warn/lunar.mcfunction: -------------------------------------------------------------------------------- 1 | tellraw @s [{"text":"[!] ","color":"dark_red","bold":true},{"text":"Warning! ","color":"red","bold":true},{"text":"Lunar Client was detected.\n\nThis map isn't intended to be played with mods, as they may break important mechanics. Please switch to the vanilla launcher.","color":"red","bold":false}] 2 | 3 | execute if score $warn_title suso.mw matches 1 run function suso.mw:warn/title -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/warn/spigot.mcfunction: -------------------------------------------------------------------------------- 1 | tellraw @s [{"text":"[!] ","color":"dark_red","bold":true},{"text":"Warning! ","color":"red","bold":true},{"text":"Spigot was detected.\n\nThis map isn't intended to be played with plugins, as they may break important mechanics. Please switch to a vanilla installation.","color":"red","bold":false}] 2 | 3 | execute if score $warn_title suso.mw matches 1 run function suso.mw:warn/title -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/detect/lunar.mcfunction: -------------------------------------------------------------------------------- 1 | execute store success score $lunar suso.mw run datapack disable lunar 2 | execute unless score $lunar suso.mw matches 1.. store success score $lunar suso.mw run datapack enable lunar 3 | 4 | execute if score $lunar suso.mw matches 1.. run function #mw/lunar 5 | execute if score $lunar suso.mw matches 1.. if score $d_lunar suso.mw matches 1 run scoreboard players add $current suso.mw.count 1 -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/warn/optifine.mcfunction: -------------------------------------------------------------------------------- 1 | tellraw @s [{"text":"[!] ","color":"dark_red","bold":true},{"text":"Warning! ","color":"red","bold":true},{"text":"Optifine was detected.\n\nThis map is not intended to be played with optifine, as it may break important mechanics. Please switch to a vanilla installation.","color":"red","bold":false}] 2 | 3 | execute if score $warn_title suso.mw matches 1 run function suso.mw:warn/title -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/warn/essential.mcfunction: -------------------------------------------------------------------------------- 1 | tellraw @s [{"text":"[!] ","color":"dark_red","bold":true},{"text":"Warning! ","color":"red","bold":true},{"text":"Essential Mod was detected.\n\nThis map isn't intended to be played through Essential, as it may break important mechanics. Please switch to a vanilla installation.","color":"red","bold":false}] 2 | 3 | execute if score $warn_title suso.mw matches 1 run function suso.mw:warn/title -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/detect/fabric.mcfunction: -------------------------------------------------------------------------------- 1 | execute store success score $fabric suso.mw run datapack disable fabric 2 | execute unless score $fabric suso.mw matches 1.. store success score $fabric suso.mw run datapack enable fabric 3 | 4 | execute if score $fabric suso.mw matches 1.. run function #mw/fabric 5 | execute if score $fabric suso.mw matches 1.. if score $d_fabric suso.mw matches 1 run scoreboard players add $current suso.mw.count 1 -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/detect/forge.mcfunction: -------------------------------------------------------------------------------- 1 | execute store success score $forge suso.mw run datapack disable "mod:forge" 2 | execute unless score $forge suso.mw matches 1.. store success score $forge suso.mw run datapack enable "mod:forge" 3 | 4 | execute if score $forge suso.mw matches 1.. run function #mw/forge 5 | execute if score $forge suso.mw matches 1.. if score $d_forge suso.mw matches 1 run scoreboard players add $current suso.mw.count 1 -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/warn/help.mcfunction: -------------------------------------------------------------------------------- 1 | tellraw @s [{"text":"[!] ","color":"dark_red","bold":true},{"text":"Warning! ","color":"red","bold":true},{"text":"External commands found.\n\nThis indicates the presence of mods, which may break core mechanics of the map. Consider switching to a vanilla installation and loading a fresh save.","color":"red","bold":false}] 2 | 3 | execute if score $warn_title suso.mw matches 1 run function suso.mw:warn/title -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/warn/misspack.mcfunction: -------------------------------------------------------------------------------- 1 | tellraw @s [{"text":"[!] ","color":"dark_red","bold":true},{"text":"Warning! ","color":"red","bold":true},{"text":"Datapacks missing.\n\nAll datapacks included with the map are required for it to work. Something may have gone wrong while downloading/installing. Please reinstall the map.","color":"red","bold":false}] 2 | 3 | execute if score $warn_title suso.mw matches 1 run function suso.mw:warn/title -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/warn/title.mcfunction: -------------------------------------------------------------------------------- 1 | title @s times 5 40 10 2 | title @s subtitle [{"text":"⚠ ","color":"dark_red"},{"text":"Warning","color":"red"},{"text":" ⚠"}] 3 | title @s title "" 4 | 5 | execute at @s run playsound minecraft:entity.cat.death master @s ~ ~ ~ 1 1 1 6 | execute at @s run playsound minecraft:block.note_block.pling master @s ~ ~ ~ 1 .5 1 7 | execute at @s run playsound minecraft:block.note_block.pling master @s ~ ~ ~ 1 .61 1 -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/detect/spigot.mcfunction: -------------------------------------------------------------------------------- 1 | execute store success score $spigot suso.mw run datapack disable "file/bukkit" 2 | execute unless score $spigot suso.mw matches 1.. store success score $spigot suso.mw run datapack enable "file/bukkit" 3 | 4 | execute if score $spigot suso.mw matches 1.. run function #mw/spigot 5 | execute if score $spigot suso.mw matches 1.. if score $d_spigot suso.mw matches 1 run scoreboard players add $current suso.mw.count 1 -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/warn/extrapack.mcfunction: -------------------------------------------------------------------------------- 1 | tellraw @s [{"text":"[!] ","color":"dark_red","bold":true},{"text":"Warning! ","color":"red","bold":true},{"text":"External datapacks were detected.\n\nThis map isn't intended to be played with any datapacks that are not included, as they may break important mechanics. Please remove any external datapack.","color":"red","bold":false}] 2 | 3 | execute if score $warn_title suso.mw matches 1 run function suso.mw:warn/title -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/detect/commands/do.mcfunction: -------------------------------------------------------------------------------- 1 | execute store result score #cmd_out suso.mw run gamerule commandBlockOutput 2 | gamerule commandBlockOutput false 3 | 4 | scoreboard players set #commands_pending suso.mw 1 5 | scoreboard players set $commands suso.mw 1 6 | 7 | setblock 29999984 0 27115040 minecraft:air 8 | setblock 29999984 0 27115040 minecraft:command_block{Command:"scoreboard players set $commands suso.mw 0",auto:true} 9 | schedule function suso.mw:detect/commands/pt2 10s -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/detect/version/do.mcfunction: -------------------------------------------------------------------------------- 1 | execute store result score #temp suso.mw run data get entity @s DataVersion 2 | execute unless score #temp suso.mw = $valid_version suso.mw run scoreboard players set $version suso.mw 1 3 | 4 | execute if score $version suso.mw matches 1.. run function #mw/version 5 | execute if score $version suso.mw matches 1.. if score $d_version suso.mw matches 1 run scoreboard players add $current suso.mw.count 1 6 | scoreboard players set #got_version suso.mw 1 7 | -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/warn/do.mcfunction: -------------------------------------------------------------------------------- 1 | execute if score $spigot suso.mw matches 1.. if score $d_spigot suso.mw matches 1 run function suso.mw:warn/spigot 2 | execute if score $forge suso.mw matches 1.. if score $d_forge suso.mw matches 1 run function suso.mw:warn/forge 3 | execute if score $fabric suso.mw matches 1.. if score $d_fabric suso.mw matches 1 run function suso.mw:warn/fabric 4 | execute if score $optifine suso.mw matches 1.. if score $d_optifine suso.mw matches 1 run function suso.mw:warn/optifine 5 | execute unless score #commands_pending suso.mw matches 1 if score $commands suso.mw matches 1.. if score $d_commands suso.mw matches 1 run function suso.mw:warn/commands 6 | execute if score $version suso.mw matches 1.. if score $d_version suso.mw matches 1 run function suso.mw:warn/version 7 | execute if score $help suso.mw matches 1.. if score $d_help suso.mw matches 1 run function suso.mw:warn/help 8 | execute if score $extrapack suso.mw matches 1.. if score $d_extrapack suso.mw matches 1 run function suso.mw:warn/extrapack 9 | execute if score $misspack suso.mw matches 1.. if score $d_misspack suso.mw matches 1 run function suso.mw:warn/misspack 10 | execute if score $lunar suso.mw matches 1.. if score $d_lunar suso.mw matches 1 run function suso.mw:warn/lunar 11 | execute if score $essential suso.mw matches 1.. if score $d_essential suso.mw matches 1 run function suso.mw:warn/essential 12 | 13 | scoreboard players operation @s suso.mw.count = $current suso.mw.count 14 | -------------------------------------------------------------------------------- /suso.mod_warn/data/suso.mw/function/detect/do.mcfunction: -------------------------------------------------------------------------------- 1 | scoreboard players set $spigot suso.mw 0 2 | scoreboard players set $forge suso.mw 0 3 | scoreboard players set $fabric suso.mw 0 4 | scoreboard players set $optifine suso.mw 0 5 | scoreboard players set $commands suso.mw 0 6 | scoreboard players set $misspack suso.mw 0 7 | scoreboard players set $extrapack suso.mw 0 8 | scoreboard players set $version suso.mw 0 9 | scoreboard players set $help suso.mw 0 10 | scoreboard players set $lunar suso.mw 0 11 | scoreboard players set $essential suso.mw 0 12 | 13 | execute if score $d_spigot suso.mw matches 1.. run function suso.mw:detect/spigot 14 | execute if score $d_forge suso.mw matches 1.. run function suso.mw:detect/forge 15 | execute if score $d_fabric suso.mw matches 1.. run function suso.mw:detect/fabric 16 | execute if score $d_optifine suso.mw matches 1.. run function suso.mw:detect/optifine/do 17 | execute if score $d_commands suso.mw matches 1.. run function suso.mw:detect/commands/do 18 | execute if score $d_version suso.mw matches 1.. run function suso.mw:detect/version/try 19 | execute if score $d_help suso.mw matches 1.. run function suso.mw:detect/help 20 | execute if score $d_lunar suso.mw matches 1.. run function suso.mw:detect/lunar 21 | execute if score $d_essential suso.mw matches 1.. run function suso.mw:detect/essential/do 22 | 23 | execute store result score #curr_packs suso.mw run datapack list 24 | scoreboard players operation #curr_packs suso.mw -= $spigot suso.mw 25 | scoreboard players operation #curr_packs suso.mw -= $forge suso.mw 26 | scoreboard players operation #curr_packs suso.mw -= $fabric suso.mw 27 | scoreboard players operation #curr_packs suso.mw -= $lunar suso.mw 28 | execute if score $d_misspack suso.mw matches 1.. run function suso.mw:detect/misspack 29 | execute if score $d_extrapack suso.mw matches 1.. run function suso.mw:detect/extrapack 30 | 31 | scoreboard players operation #reload suso.mw = $spigot suso.mw 32 | scoreboard players operation #reload suso.mw += $forge suso.mw 33 | scoreboard players operation #reload suso.mw += $fabric suso.mw 34 | scoreboard players operation #reload suso.mw += $lunar suso.mw 35 | schedule function suso.mw:reset_reload 2t 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Mod-Warnings 2 | A Minecraft datapack that allows to configure warnings in case certain mods / settings are detected. 3 | 4 | Designed for use in maps. 5 | 6 | Can detect Spigot, Forge, Fabric API, Optifine, Lunar Client, Essential Mod, having commandblocks off, external datapacks, missing datapacks, and wrong Minecraft versions. 7 | 8 | Allows to easily configure custom warnings. 9 | 10 | Supports 1.21, confirmed to work all the way back to 1.16.5 as long as you rename the function folder to follow the old structure. 11 | 12 | ## How to use 13 | Detection runs 1 second after every reload. It can also be run with `function suso.mw:detect/do` (this may cause a datapack reload). The warnings are buffered for each player individually until they move to ensure they are able to see them. 14 | 15 | Configuration is done independently for each detectable element. The names used to refer to them are: 16 | - `spigot`: Spigot server 17 | - `forge`: Forge mod loader 18 | - `fabric`: Fabric API (used by most fabric mods) 19 | - `optifine`: Optifine 20 | - `lunar`: Lunar Client 21 | - `essential`: Essential Mod 22 | - `commands`: Commandblocks are disabled 23 | - `misspack`: Found less datapacks than expected 24 | - `extrapack`: Found more datapacks than expected 25 | - `version`: Unintended Minecraft version 26 | - `help`: External commands 27 | 28 | In order to turn on detection for a certain element, do `scoreboard players set $d_[name] suso.mw 1`. When this element is detected, score `$[name] suso.mw` will be set to 1 and a warning will be displayed. If you which to turn off the default warning while keeping detection on, you can instead `scoreboard players set $d_[name] suso.mw 2`. 29 | 30 | Detecting element `[name]` will also trigger the function tag `#mw/[name]`. These function tags are by default empty and can be found in the `minecraft` namespace of the pack. 31 | 32 | ### Default warnings 33 | Display a tellraw in chat for every player, briefly informing them about the issue found. 34 | 35 | If score `$warn_title suso.mw` is set to 1, a title and playsound will also trigger. By default this is off, but it may be worth enabling so the warnings are harder to miss. 36 | 37 | ### Datapack count 38 | `misspack` and `extrapack` detect the number of datapacks (both enabled and disabled) that are currently in the world. 39 | 40 | To store the intended datapack count, `function suso.mw:count_packs` should be run before packaging the map. 41 | 42 | When detecting for either of these two cases, it's recommended to to also enable detection for `spigot`, `forge`, and `fabric`; as they affect datapack count. If you don't want to warn players about these, you should set `$d_spigot suso.mw`, `$d_forge suso.mw`, and `$d_fabric suso.mw` to 2. 43 | 44 | ### Minecraft version 45 | Minecraft version is detected via the DataVersion tag found in player entities. 46 | 47 | To store the intended DataVersion, `function suso.mw:get_version` should be run before packaging the map. 48 | 49 | ### External commands 50 | External commands are detected by counting the output of `/help`. 51 | 52 | To store the intended amount of commands, `function suso.mw:count_help` should be run before packaging the map. 53 | 54 | ## Crediting 55 | This library is licensed under the [Apache License 2.0](https://github.com/5uso/Mod-Warnings/blob/main/LICENSE). When using it as part of your own projects, you must: 56 | 57 | - Include [crediting for the library](https://github.com/5uso/Mod-Warnings/blob/main/NOTICE) in a way visible to players. This probably fits best into the credits section of your map/datapack in-game, but in case that's impossible it may be done within a text file or documentation distributed with the project. 58 | - Include a copy of the [license](https://github.com/5uso/Mod-Warnings/blob/main/LICENSE). 59 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright 2024 Suso 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | --------------------------------------------------------------------------------