diff --git a/data/allrecipes/functions/load.mcfunction b/data/allrecipes/functions/load.mcfunction new file mode 100644 index 0000000..ff11835 --- /dev/null +++ b/data/allrecipes/functions/load.mcfunction @@ -0,0 +1,5 @@ +# Runs periodically so newly joined players receive recipes, +# but each player is granted recipes only once to avoid packet spam. +schedule function allrecipes:load 10s replace +execute as @a[tag=!allrecipes_given] run recipe give @s * +tag @a[tag=!allrecipes_given] add allrecipes_given diff --git a/data/armorstand/functions/tick.mcfunction b/data/armorstand/functions/tick.mcfunction new file mode 100644 index 0000000..6dd9480 --- /dev/null +++ b/data/armorstand/functions/tick.mcfunction @@ -0,0 +1,5 @@ +execute as @a at @s run tag @e[type=minecraft:armor_stand,distance=..4,tag=!zombiiattack_armorstand] add zombiiattack_armorstand + +execute as @e[type=minecraft:armor_stand,tag=zombiiattack_armorstand,tag=!zombiiattack_armorstand_arm] run data merge entity @s {ShowArms:1b} + +execute as @e[type=minecraft:armor_stand,tag=zombiiattack_armorstand,tag=!zombiiattack_armorstand_arm] run tag @s add zombiiattack_armorstand_arm \ No newline at end of file diff --git a/data/gamerules/functions/load.mcfunction b/data/gamerules/functions/load.mcfunction new file mode 100644 index 0000000..28aabe3 --- /dev/null +++ b/data/gamerules/functions/load.mcfunction @@ -0,0 +1 @@ +gamerule playersSleepingPercentage 1 \ No newline at end of file diff --git a/data/guardvillagers/loot_tables/entities/armor_sets/armor.json b/data/guardvillagers/loot_tables/entities/armor_sets/armor.json new file mode 100644 index 0000000..54403e8 --- /dev/null +++ b/data/guardvillagers/loot_tables/entities/armor_sets/armor.json @@ -0,0 +1,65 @@ +{ + "type": "guardvillagers:slot", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "lrarmor:defender_helmet" + } + ], + "functions": [ + { + "function": "guardvillagers:slot", + "slot": "head" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "lrarmor:defender_chestplate" + } + ], + "functions": [ + { + "function": "guardvillagers:slot", + "slot": "chest" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "lrarmor:defender_leggings" + } + ], + "functions": [ + { + "function": "guardvillagers:slot", + "slot": "legs" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "lrarmor:defender_boots" + } + ], + "functions": [ + { + "function": "guardvillagers:slot", + "slot": "feet" + } + ] + } + ] +} \ No newline at end of file diff --git a/data/homingloot/functions/emerald.mcfunction b/data/homingloot/functions/emerald.mcfunction new file mode 100644 index 0000000..8d495dd --- /dev/null +++ b/data/homingloot/functions/emerald.mcfunction @@ -0,0 +1,14 @@ +scoreboard players add @s homingloot_count 1 + +execute if score @s homingloot_count matches 20 run data remove entity @s Motion +execute if score @s homingloot_count matches 20 run data modify entity @s NoGravity set value 1b + +execute if score @s homingloot_count matches 20.. run particle dust_color_transition 0.000 1.000 0.000 1 0.031 0.451 1.000 ~ ~ ~ 0 0 0 1 0 force @a[distance=..96] + +execute if score @s homingloot_count matches 20.. at @s run tp @s ^ ^ ^0.25 facing entity @p[gamemode=!spectator,distance=..96] feet +execute if score @s homingloot_count matches 20.. at @s run tp @s ^ ^ ^0.25 facing entity @p[gamemode=!spectator,distance=..96] feet + +execute if score @s homingloot_count matches 30.. run particle dust_color_transition 0.000 1.000 0.000 1 1.000 1.000 1.000 ~ ~ ~ 0 0 0 1 0 force @a[distance=..96] + +execute if score @s homingloot_count matches 30.. at @s run tp @s ^ ^ ^0.30 facing entity @p[gamemode=!spectator,distance=..96] feet +execute if score @s homingloot_count matches 30.. at @s run tp @s ^ ^ ^0.30 facing entity @p[gamemode=!spectator,distance=..96] feet \ No newline at end of file diff --git a/data/homingloot/functions/load.mcfunction b/data/homingloot/functions/load.mcfunction new file mode 100644 index 0000000..c2d3eb6 --- /dev/null +++ b/data/homingloot/functions/load.mcfunction @@ -0,0 +1 @@ +scoreboard objectives add homingloot_count dummy \ No newline at end of file diff --git a/data/homingloot/functions/orb.mcfunction b/data/homingloot/functions/orb.mcfunction new file mode 100644 index 0000000..cfc7cec --- /dev/null +++ b/data/homingloot/functions/orb.mcfunction @@ -0,0 +1,14 @@ +scoreboard players add @s homingloot_count 1 + +execute if score @s homingloot_count matches 20 run data remove entity @s Motion +execute if score @s homingloot_count matches 20 run data modify entity @s NoGravity set value 1b + +execute if score @s homingloot_count matches 20.. run particle dust_color_transition 0.969 1.000 0.000 1 0.031 0.451 1.000 ~ ~ ~ 0 0 0 1 0 force @a[distance=..96] + +execute if score @s homingloot_count matches 20.. at @s run tp @s ^ ^ ^.3 facing entity @p[gamemode=!spectator,distance=..96] feet +execute if score @s homingloot_count matches 20.. at @s run tp @s ^ ^ ^.3 facing entity @p[gamemode=!spectator,distance=..96] feet + +execute if score @s homingloot_count matches 30.. run particle dust_color_transition 0.969 1.000 0.000 1 0.031 0.451 1.000 ~ ~ ~ 0 0 0 1 0 force @a[distance=..96] + +execute if score @s homingloot_count matches 30.. at @s run tp @s ^ ^ ^.3 facing entity @p[gamemode=!spectator,distance=..96] feet +execute if score @s homingloot_count matches 30.. at @s run tp @s ^ ^ ^.3 facing entity @p[gamemode=!spectator,distance=..96] feet \ No newline at end of file diff --git a/data/homingloot/functions/tick.mcfunction b/data/homingloot/functions/tick.mcfunction new file mode 100644 index 0000000..6810dde --- /dev/null +++ b/data/homingloot/functions/tick.mcfunction @@ -0,0 +1,2 @@ +execute as @e[type=minecraft:experience_orb] at @s run function homingloot:orb +execute in zombiiattack:protect_villagers as @e[type=minecraft:item,nbt={Item:{id:"minecraft:emerald"}}] at @s if predicate homingloot:allowed_dimension run function homingloot:emerald \ No newline at end of file diff --git a/data/homingloot/predicates/allowed_dimension.json b/data/homingloot/predicates/allowed_dimension.json new file mode 100644 index 0000000..7ffca29 --- /dev/null +++ b/data/homingloot/predicates/allowed_dimension.json @@ -0,0 +1,6 @@ +{ + "condition": "minecraft:location_check", + "predicate": { + "dimension": "zombiiattack:protect_villagers" + } +} \ No newline at end of file diff --git a/data/info/functions/load.mcfunction b/data/info/functions/load.mcfunction new file mode 100644 index 0000000..06470b6 --- /dev/null +++ b/data/info/functions/load.mcfunction @@ -0,0 +1,5 @@ +say §9============================================ +say §d§lKLoningSpoon §7presents: +say §a§lZombii§b§lAttack §7- §c§lGames §7§lof §e§lThe Apocalypse +say §3§lDatapacks §8§lversion: §6§l2026.06.20.1914 +say §9============================================ \ No newline at end of file diff --git a/data/lobby/functions/tick.mcfunction b/data/lobby/functions/tick.mcfunction new file mode 100644 index 0000000..a67d109 --- /dev/null +++ b/data/lobby/functions/tick.mcfunction @@ -0,0 +1,15 @@ +# Lobby effects +# Logic: +# - Effect lobby diberikan hanya 1x saat player masuk lobby. +# - Durasi dibuat sangat panjang supaya icon effect tidak refresh/berkedip terus. +# - Saat player keluar lobby, effect lobby dibersihkan 1x lalu tag dihapus. + +# Player baru masuk lobby: beri semua effect lobby sekali saja. +execute as @a[tag=!lobby_effects] at @s if predicate lobby:allowed_dimension run effect give @s minecraft:saturation infinite 2 true +execute as @a[tag=!lobby_effects] at @s if predicate lobby:allowed_dimension run effect give @a minecraft:instant_health infinite 2 true +execute as @a[tag=!lobby_effects] at @s if predicate lobby:allowed_dimension run tag @s add lobby_effects + +# Saat player sudah bukan di lobby, bersihkan effect lobby sekali lalu hapus tag. +execute as @a[tag=lobby_effects] at @s unless predicate lobby:allowed_dimension run effect clear @s minecraft:saturation +execute as @a[tag=lobby_effects] at @s unless predicate lobby:allowed_dimension run effect clear @s minecraft:instant_health +execute as @a[tag=lobby_effects] at @s unless predicate lobby:allowed_dimension run tag @s remove lobby_effects diff --git a/data/lobby/predicates/allowed_dimension.json b/data/lobby/predicates/allowed_dimension.json new file mode 100644 index 0000000..c90d202 --- /dev/null +++ b/data/lobby/predicates/allowed_dimension.json @@ -0,0 +1,6 @@ +{ + "condition": "minecraft:location_check", + "predicate": { + "dimension": "zombiiattack:lobby" + } +} \ No newline at end of file diff --git a/data/minecraft/tags/functions/load.json b/data/minecraft/tags/functions/load.json new file mode 100644 index 0000000..c80b442 --- /dev/null +++ b/data/minecraft/tags/functions/load.json @@ -0,0 +1,12 @@ +{ + "values": [ + "homingloot:load", + "info:load", + "xaerominimap:load", + "allrecipes:load", + "gamerules:load", + "mobcaptains:load", + "protect_villagers:load", + "nof3:load" + ] +} \ No newline at end of file diff --git a/data/minecraft/tags/functions/tick.json b/data/minecraft/tags/functions/tick.json new file mode 100644 index 0000000..b773eb3 --- /dev/null +++ b/data/minecraft/tags/functions/tick.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "homingloot:tick", + "trashslot:tick", + "lobby:tick", + "armorstand:tick", + "protect_villagers:tick" + ] +} \ No newline at end of file diff --git a/data/mobcaptains/functions/load.mcfunction b/data/mobcaptains/functions/load.mcfunction new file mode 100644 index 0000000..dae0e63 --- /dev/null +++ b/data/mobcaptains/functions/load.mcfunction @@ -0,0 +1,3 @@ +scoreboard players set .notify_on_spawn ps-mob.config 0 +scoreboard players set .notify_with_sound ps-mob.config 0 +scoreboard players set .beam_on_spawn ps-mob.config 0 \ No newline at end of file diff --git a/data/nof3/functions/load.mcfunction b/data/nof3/functions/load.mcfunction new file mode 100644 index 0000000..b1f7732 --- /dev/null +++ b/data/nof3/functions/load.mcfunction @@ -0,0 +1 @@ +gamerule reducedDebugInfo true \ No newline at end of file diff --git a/data/protect_villagers/functions/arena/reset.mcfunction b/data/protect_villagers/functions/arena/reset.mcfunction new file mode 100644 index 0000000..c965758 --- /dev/null +++ b/data/protect_villagers/functions/arena/reset.mcfunction @@ -0,0 +1,19 @@ +scoreboard players set #arena arena_reset_lock 1 + +# Karena function ini dipanggil "as @a at @s if predicate protect_villagers:allowed_dimension", +# command clone di bawah ini berjalan di dimensi zombiiattack:protect_villagers tanpa perlu "execute in". + +# sign +clone 62 72 300 64 94 344 62 72 -22 replace + +# arena war +clone -1 62 306 60 74 338 -1 62 -16 replace + +execute as @a at @s if predicate protect_villagers:allowed_dimension run title @s times 10 70 20 +execute as @a at @s if predicate protect_villagers:allowed_dimension run title @s title {"text":"Resetting...","color":"aqua","bold":true} +execute as @a at @s if predicate protect_villagers:allowed_dimension run title @s subtitle [{"text":"Arena ","color":"yellow","bold":true},{"text":"Protect Villagers ","color":"green","bold":true},{"text":"telah di reset.","color":"gray"}] + +# Volume dan pitch dibuat lebih jelas untuk seluruh player di dimensi Protect Villagers. +execute as @a at @s if predicate protect_villagers:allowed_dimension run playsound minecraft:block.beacon.activate player @s ~ ~ ~ 2.0 1.0 +execute as @a at @s if predicate protect_villagers:allowed_dimension run playsound minecraft:block.conduit.activate player @s ~ ~ ~ 1.5 1.2 +execute as @a at @s if predicate protect_villagers:allowed_dimension run playsound minecraft:block.end_portal_frame.fill player @s ~ ~ ~ 1.2 0.8 diff --git a/data/protect_villagers/functions/entities/count.mcfunction b/data/protect_villagers/functions/entities/count.mcfunction new file mode 100644 index 0000000..0550524 --- /dev/null +++ b/data/protect_villagers/functions/entities/count.mcfunction @@ -0,0 +1,10 @@ +scoreboard players set #villager pv_villagers 0 +scoreboard players set #guard pv_guards 0 +scoreboard players set #alive pv_alive 0 + +execute store result score #villager pv_villagers run execute if entity @e[type=minecraft:villager,x=-1,y=64,z=-9,dx=2,dy=2,dz=18] + +execute store result score #guard pv_guards run execute if entity @e[type=guardvillagers:guard,x=-1,y=64,z=-9,dx=2,dy=2,dz=18] + +scoreboard players operation #alive pv_alive = #villager pv_villagers +scoreboard players operation #alive pv_alive += #guard pv_guards \ No newline at end of file diff --git a/data/protect_villagers/functions/entities/spawn/check_payment.mcfunction b/data/protect_villagers/functions/entities/spawn/check_payment.mcfunction new file mode 100644 index 0000000..f622357 --- /dev/null +++ b/data/protect_villagers/functions/entities/spawn/check_payment.mcfunction @@ -0,0 +1,6 @@ +execute store result score @s pv_emeralds run clear @s minecraft:emerald 0 + +execute if score @s pv_emeralds matches ..49 run tellraw @s [{"text":"Emerald tidak cukup. Butuh ","color":"red"},{"text":"50 Emerald","color":"green","bold":true},{"text":" untuk spawn Villager.","color":"red"}] +execute if score @s pv_emeralds matches ..49 run playsound minecraft:block.note_block.bass player @s ~ ~ ~ 0.8 0.8 + +execute if score @s pv_emeralds matches 50.. run function protect_villagers:entities/spawn/try_slots diff --git a/data/protect_villagers/functions/entities/spawn/request.mcfunction b/data/protect_villagers/functions/entities/spawn/request.mcfunction new file mode 100644 index 0000000..42fbc91 --- /dev/null +++ b/data/protect_villagers/functions/entities/spawn/request.mcfunction @@ -0,0 +1,6 @@ +scoreboard players set #button pv_button_lock 1 + +execute if score @s pv_spawn_cd matches 1.. run tellraw @s {"text":"Villager spawn masih cooldown. Tunggu sebentar...","color":"red"} +execute if score @s pv_spawn_cd matches 1.. run playsound minecraft:block.note_block.bass player @s ~ ~ ~ 0.8 0.7 + +execute unless score @s pv_spawn_cd matches 1.. run function protect_villagers:entities/spawn/check_payment diff --git a/data/protect_villagers/functions/entities/spawn/slot_1.mcfunction b/data/protect_villagers/functions/entities/spawn/slot_1.mcfunction new file mode 100644 index 0000000..dff0487 --- /dev/null +++ b/data/protect_villagers/functions/entities/spawn/slot_1.mcfunction @@ -0,0 +1,4 @@ +summon minecraft:villager 0 65 -8 +scoreboard players set #spawn pv_spawn_done 1 +particle minecraft:happy_villager 0 66 -8 0.4 0.6 0.4 0.02 20 force +playsound minecraft:entity.villager.yes player @a[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] 0 65 -8 1.0 1.0 diff --git a/data/protect_villagers/functions/entities/spawn/slot_2.mcfunction b/data/protect_villagers/functions/entities/spawn/slot_2.mcfunction new file mode 100644 index 0000000..7d92798 --- /dev/null +++ b/data/protect_villagers/functions/entities/spawn/slot_2.mcfunction @@ -0,0 +1,4 @@ +summon minecraft:villager 0 65 -6 +scoreboard players set #spawn pv_spawn_done 1 +particle minecraft:happy_villager 0 66 -6 0.4 0.6 0.4 0.02 20 force +playsound minecraft:entity.villager.yes player @a[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] 0 65 -6 1.0 1.0 diff --git a/data/protect_villagers/functions/entities/spawn/slot_3.mcfunction b/data/protect_villagers/functions/entities/spawn/slot_3.mcfunction new file mode 100644 index 0000000..634fd6c --- /dev/null +++ b/data/protect_villagers/functions/entities/spawn/slot_3.mcfunction @@ -0,0 +1,4 @@ +summon minecraft:villager 0 65 -4 +scoreboard players set #spawn pv_spawn_done 1 +particle minecraft:happy_villager 0 66 -4 0.4 0.6 0.4 0.02 20 force +playsound minecraft:entity.villager.yes player @a[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] 0 65 -4 1.0 1.0 diff --git a/data/protect_villagers/functions/entities/spawn/slot_4.mcfunction b/data/protect_villagers/functions/entities/spawn/slot_4.mcfunction new file mode 100644 index 0000000..7209269 --- /dev/null +++ b/data/protect_villagers/functions/entities/spawn/slot_4.mcfunction @@ -0,0 +1,4 @@ +summon minecraft:villager 0 65 -2 +scoreboard players set #spawn pv_spawn_done 1 +particle minecraft:happy_villager 0 66 -2 0.4 0.6 0.4 0.02 20 force +playsound minecraft:entity.villager.yes player @a[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] 0 65 -2 1.0 1.0 diff --git a/data/protect_villagers/functions/entities/spawn/slot_5.mcfunction b/data/protect_villagers/functions/entities/spawn/slot_5.mcfunction new file mode 100644 index 0000000..ca21b95 --- /dev/null +++ b/data/protect_villagers/functions/entities/spawn/slot_5.mcfunction @@ -0,0 +1,4 @@ +summon minecraft:villager 0 65 0 +scoreboard players set #spawn pv_spawn_done 1 +particle minecraft:happy_villager 0 66 0 0.4 0.6 0.4 0.02 20 force +playsound minecraft:entity.villager.yes player @a[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] 0 65 0 1.0 1.0 diff --git a/data/protect_villagers/functions/entities/spawn/slot_6.mcfunction b/data/protect_villagers/functions/entities/spawn/slot_6.mcfunction new file mode 100644 index 0000000..2c51c66 --- /dev/null +++ b/data/protect_villagers/functions/entities/spawn/slot_6.mcfunction @@ -0,0 +1,4 @@ +summon minecraft:villager 0 65 2 +scoreboard players set #spawn pv_spawn_done 1 +particle minecraft:happy_villager 0 66 2 0.4 0.6 0.4 0.02 20 force +playsound minecraft:entity.villager.yes player @a[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] 0 65 2 1.0 1.0 diff --git a/data/protect_villagers/functions/entities/spawn/slot_7.mcfunction b/data/protect_villagers/functions/entities/spawn/slot_7.mcfunction new file mode 100644 index 0000000..03502a9 --- /dev/null +++ b/data/protect_villagers/functions/entities/spawn/slot_7.mcfunction @@ -0,0 +1,4 @@ +summon minecraft:villager 0 65 4 +scoreboard players set #spawn pv_spawn_done 1 +particle minecraft:happy_villager 0 66 4 0.4 0.6 0.4 0.02 20 force +playsound minecraft:entity.villager.yes player @a[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] 0 65 4 1.0 1.0 diff --git a/data/protect_villagers/functions/entities/spawn/slot_8.mcfunction b/data/protect_villagers/functions/entities/spawn/slot_8.mcfunction new file mode 100644 index 0000000..ac9326d --- /dev/null +++ b/data/protect_villagers/functions/entities/spawn/slot_8.mcfunction @@ -0,0 +1,4 @@ +summon minecraft:villager 0 65 6 +scoreboard players set #spawn pv_spawn_done 1 +particle minecraft:happy_villager 0 66 6 0.4 0.6 0.4 0.02 20 force +playsound minecraft:entity.villager.yes player @a[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] 0 65 6 1.0 1.0 diff --git a/data/protect_villagers/functions/entities/spawn/slot_9.mcfunction b/data/protect_villagers/functions/entities/spawn/slot_9.mcfunction new file mode 100644 index 0000000..dd23fde --- /dev/null +++ b/data/protect_villagers/functions/entities/spawn/slot_9.mcfunction @@ -0,0 +1,4 @@ +summon minecraft:villager 0 65 8 +scoreboard players set #spawn pv_spawn_done 1 +particle minecraft:happy_villager 0 66 8 0.4 0.6 0.4 0.02 20 force +playsound minecraft:entity.villager.yes player @a[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] 0 65 8 1.0 1.0 diff --git a/data/protect_villagers/functions/entities/spawn/try_slots.mcfunction b/data/protect_villagers/functions/entities/spawn/try_slots.mcfunction new file mode 100644 index 0000000..eaa2d75 --- /dev/null +++ b/data/protect_villagers/functions/entities/spawn/try_slots.mcfunction @@ -0,0 +1,17 @@ +scoreboard players set #spawn pv_spawn_done 0 + +execute if score #spawn pv_spawn_done matches 0 positioned 0 65 -8 unless entity @e[type=minecraft:villager,distance=..0.8] unless entity @e[type=guardvillagers:guard,distance=..0.8] run function protect_villagers:entities/spawn/slot_1 +execute if score #spawn pv_spawn_done matches 0 positioned 0 65 -6 unless entity @e[type=minecraft:villager,distance=..0.8] unless entity @e[type=guardvillagers:guard,distance=..0.8] run function protect_villagers:entities/spawn/slot_2 +execute if score #spawn pv_spawn_done matches 0 positioned 0 65 -4 unless entity @e[type=minecraft:villager,distance=..0.8] unless entity @e[type=guardvillagers:guard,distance=..0.8] run function protect_villagers:entities/spawn/slot_3 +execute if score #spawn pv_spawn_done matches 0 positioned 0 65 -2 unless entity @e[type=minecraft:villager,distance=..0.8] unless entity @e[type=guardvillagers:guard,distance=..0.8] run function protect_villagers:entities/spawn/slot_4 +execute if score #spawn pv_spawn_done matches 0 positioned 0 65 0 unless entity @e[type=minecraft:villager,distance=..0.8] unless entity @e[type=guardvillagers:guard,distance=..0.8] run function protect_villagers:entities/spawn/slot_5 +execute if score #spawn pv_spawn_done matches 0 positioned 0 65 2 unless entity @e[type=minecraft:villager,distance=..0.8] unless entity @e[type=guardvillagers:guard,distance=..0.8] run function protect_villagers:entities/spawn/slot_6 +execute if score #spawn pv_spawn_done matches 0 positioned 0 65 4 unless entity @e[type=minecraft:villager,distance=..0.8] unless entity @e[type=guardvillagers:guard,distance=..0.8] run function protect_villagers:entities/spawn/slot_7 +execute if score #spawn pv_spawn_done matches 0 positioned 0 65 6 unless entity @e[type=minecraft:villager,distance=..0.8] unless entity @e[type=guardvillagers:guard,distance=..0.8] run function protect_villagers:entities/spawn/slot_8 +execute if score #spawn pv_spawn_done matches 0 positioned 0 65 8 unless entity @e[type=minecraft:villager,distance=..0.8] unless entity @e[type=guardvillagers:guard,distance=..0.8] run function protect_villagers:entities/spawn/slot_9 + +execute if score #spawn pv_spawn_done matches 0 run tellraw @s {"text":"Semua slot Villager sudah terisi.","color":"yellow"} +execute if score #spawn pv_spawn_done matches 1 run clear @s minecraft:emerald 50 +execute if score #spawn pv_spawn_done matches 1 run scoreboard players set @s pv_spawn_cd 300 +execute if score #spawn pv_spawn_done matches 1 run tellraw @s [{"text":"Villager baru berhasil dipanggil. ","color":"green"},{"text":"-50 Emerald","color":"yellow"}] +execute if score #spawn pv_spawn_done matches 1 run playsound minecraft:entity.villager.celebrate player @s ~ ~ ~ 1.2 1.0 \ No newline at end of file diff --git a/data/protect_villagers/functions/game/check_result.mcfunction b/data/protect_villagers/functions/game/check_result.mcfunction new file mode 100644 index 0000000..38e8b7f --- /dev/null +++ b/data/protect_villagers/functions/game/check_result.mcfunction @@ -0,0 +1,31 @@ +scoreboard players set #result pv_result_lock 1 + +function protect_villagers:entities/count + +# Pakai player di arena sebagai anchor supaya fireworks terjadwal tetap muncul di dimensi protect_villagers. +tag @a remove pv_firework_anchor +execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run tag @s add pv_firework_anchor + +execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run title @s times 20 140 60 + +execute if score #alive pv_alive matches 9.. run execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run title @s title {"text":"Perfect Victory!","color":"aqua","bold":true} +execute if score #alive pv_alive matches 9.. run execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run title @s subtitle [{"text":"Every villager survived. ","color":"white"},{"text":"Legendary defense!","color":"gold","bold":true}] + +execute if score #alive pv_alive matches 7..8 run execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run title @s title {"text":"Victory!","color":"green","bold":true} +execute if score #alive pv_alive matches 7..8 run execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run title @s subtitle [{"text":"The village stands. ","color":"yellow"},{"text":"Your defense held!","color":"green","bold":true}] + +execute if score #alive pv_alive matches 5..6 run execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run title @s title {"text":"Survived!","color":"yellow","bold":true} +execute if score #alive pv_alive matches 5..6 run execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run title @s subtitle [{"text":"Barely alive... ","color":"gold"},{"text":"but the village endures.","color":"gray"}] + +execute if score #alive pv_alive matches ..4 run execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run title @s title {"text":"Defeat!","color":"red","bold":true} +execute if score #alive pv_alive matches ..4 run execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run title @s subtitle [{"text":"Too many villagers have fallen.","color":"dark_red"}] + +execute if score #alive pv_alive matches 9.. run execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run give @s minecraft:diamond 3 +execute if score #alive pv_alive matches 7..8 run execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run give @s minecraft:emerald 8 +execute if score #alive pv_alive matches 5..6 run execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run give @s minecraft:emerald 4 +execute if score #alive pv_alive matches ..4 run execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run give @s minecraft:bread 3 + +execute if score #alive pv_alive matches 9.. run function protect_villagers:game/fireworks_perfect +execute if score #alive pv_alive matches 7..8 run function protect_villagers:game/fireworks_victory +execute if score #alive pv_alive matches 5..6 run function protect_villagers:game/fireworks_survived +execute if score #alive pv_alive matches ..4 run playsound minecraft:entity.wither.death player @a[tag=pv_firework_anchor] ~ ~ ~ 0.8 0.7 diff --git a/data/protect_villagers/functions/game/fireworks_clear_anchor.mcfunction b/data/protect_villagers/functions/game/fireworks_clear_anchor.mcfunction new file mode 100644 index 0000000..9a269b1 --- /dev/null +++ b/data/protect_villagers/functions/game/fireworks_clear_anchor.mcfunction @@ -0,0 +1 @@ +tag @a remove pv_firework_anchor diff --git a/data/protect_villagers/functions/game/fireworks_perfect.mcfunction b/data/protect_villagers/functions/game/fireworks_perfect.mcfunction new file mode 100644 index 0000000..044abe9 --- /dev/null +++ b/data/protect_villagers/functions/game/fireworks_perfect.mcfunction @@ -0,0 +1,4 @@ +function protect_villagers:game/fireworks_perfect_1 +schedule function protect_villagers:game/fireworks_perfect_2 20t +schedule function protect_villagers:game/fireworks_perfect_3 40t +schedule function protect_villagers:game/fireworks_clear_anchor 80t diff --git a/data/protect_villagers/functions/game/fireworks_perfect_1.mcfunction b/data/protect_villagers/functions/game/fireworks_perfect_1.mcfunction new file mode 100644 index 0000000..f2354e4 --- /dev/null +++ b/data/protect_villagers/functions/game/fireworks_perfect_1.mcfunction @@ -0,0 +1,5 @@ +playsound minecraft:entity.firework_rocket.launch player @a[tag=pv_firework_anchor] ~ ~ ~ 1.2 1.0 +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 15 70 0 {LifeTime:35,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:3b,Explosions:[{Type:4b,Colors:[I;15790320,16766720,11743532],FadeColors:[I;16777215],Flicker:1b,Trail:1b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 10 70 5 {LifeTime:40,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:3b,Explosions:[{Type:1b,Colors:[I;14602026,15435844,16776960],FadeColors:[I;15790320],Flicker:1b,Trail:1b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 20 70 -5 {LifeTime:45,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:3b,Explosions:[{Type:2b,Colors:[I;4312372,8073150,11743532],FadeColors:[I;16777215],Flicker:1b,Trail:1b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 15 70 8 {LifeTime:50,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:3b,Explosions:[{Type:4b,Colors:[I;16777215,16766720,14602026],FadeColors:[I;15435844],Flicker:1b,Trail:1b}]}}}} diff --git a/data/protect_villagers/functions/game/fireworks_perfect_2.mcfunction b/data/protect_villagers/functions/game/fireworks_perfect_2.mcfunction new file mode 100644 index 0000000..e461835 --- /dev/null +++ b/data/protect_villagers/functions/game/fireworks_perfect_2.mcfunction @@ -0,0 +1,5 @@ +playsound minecraft:entity.firework_rocket.launch player @a[tag=pv_firework_anchor] ~ ~ ~ 1.2 1.0 +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 5 70 0 {LifeTime:35,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:3b,Explosions:[{Type:1b,Colors:[I;16777215,11743532,4312372],FadeColors:[I;16766720],Flicker:1b,Trail:1b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 25 70 0 {LifeTime:40,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:3b,Explosions:[{Type:4b,Colors:[I;15790320,8073150,16766720],FadeColors:[I;16777215],Flicker:1b,Trail:1b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 15 70 -10 {LifeTime:45,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:4b,Explosions:[{Type:2b,Colors:[I;14602026,15435844,16776960],FadeColors:[I;15790320],Flicker:1b,Trail:1b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 15 73 10 {LifeTime:55,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:4b,Explosions:[{Type:4b,Colors:[I;16766720,11743532,16777215],FadeColors:[I;4312372],Flicker:1b,Trail:1b}]}}}} diff --git a/data/protect_villagers/functions/game/fireworks_perfect_3.mcfunction b/data/protect_villagers/functions/game/fireworks_perfect_3.mcfunction new file mode 100644 index 0000000..3609515 --- /dev/null +++ b/data/protect_villagers/functions/game/fireworks_perfect_3.mcfunction @@ -0,0 +1,5 @@ +playsound minecraft:entity.firework_rocket.launch player @a[tag=pv_firework_anchor] ~ ~ ~ 1.2 1.0 +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 8 71 -7 {LifeTime:45,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:4b,Explosions:[{Type:4b,Colors:[I;15790320,16777215,16766720],FadeColors:[I;11743532],Flicker:1b,Trail:1b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 22 71 7 {LifeTime:50,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:4b,Explosions:[{Type:4b,Colors:[I;11743532,4312372,8073150],FadeColors:[I;16777215],Flicker:1b,Trail:1b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 15 72 0 {LifeTime:60,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:4b,Explosions:[{Type:2b,Colors:[I;14602026,15435844,16776960,16777215],FadeColors:[I;16766720],Flicker:1b,Trail:1b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 15 75 0 {LifeTime:70,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:4b,Explosions:[{Type:4b,Colors:[I;16777215,16766720,15790320],FadeColors:[I;14602026],Flicker:1b,Trail:1b}]}}}} diff --git a/data/protect_villagers/functions/game/fireworks_survived.mcfunction b/data/protect_villagers/functions/game/fireworks_survived.mcfunction new file mode 100644 index 0000000..d7db56a --- /dev/null +++ b/data/protect_villagers/functions/game/fireworks_survived.mcfunction @@ -0,0 +1,4 @@ +function protect_villagers:game/fireworks_survived_1 +schedule function protect_villagers:game/fireworks_survived_2 20t +schedule function protect_villagers:game/fireworks_survived_3 40t +schedule function protect_villagers:game/fireworks_clear_anchor 80t diff --git a/data/protect_villagers/functions/game/fireworks_survived_1.mcfunction b/data/protect_villagers/functions/game/fireworks_survived_1.mcfunction new file mode 100644 index 0000000..0e02da8 --- /dev/null +++ b/data/protect_villagers/functions/game/fireworks_survived_1.mcfunction @@ -0,0 +1,4 @@ +playsound minecraft:entity.firework_rocket.launch player @a[tag=pv_firework_anchor] ~ ~ ~ 0.9 0.8 +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 15 70 0 {LifeTime:35,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:1b,Explosions:[{Type:0b,Colors:[I;16755200,16766720,14602026],FadeColors:[I;16776960],Flicker:0b,Trail:1b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 12 70 4 {LifeTime:40,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:1b,Explosions:[{Type:1b,Colors:[I;11743532,15435844,16755200],FadeColors:[I;14602026],Flicker:0b,Trail:1b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 18 70 -4 {LifeTime:40,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:1b,Explosions:[{Type:0b,Colors:[I;14602026,16766720],FadeColors:[I;11743532],Flicker:0b,Trail:0b}]}}}} diff --git a/data/protect_villagers/functions/game/fireworks_survived_2.mcfunction b/data/protect_villagers/functions/game/fireworks_survived_2.mcfunction new file mode 100644 index 0000000..082518b --- /dev/null +++ b/data/protect_villagers/functions/game/fireworks_survived_2.mcfunction @@ -0,0 +1,4 @@ +playsound minecraft:entity.firework_rocket.launch player @a[tag=pv_firework_anchor] ~ ~ ~ 0.9 0.8 +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 10 70 -5 {LifeTime:35,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:1b,Explosions:[{Type:0b,Colors:[I;16755200,14602026,11743532],FadeColors:[I;16766720],Flicker:0b,Trail:1b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 20 70 5 {LifeTime:40,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:2b,Explosions:[{Type:1b,Colors:[I;15435844,16755200,16766720],FadeColors:[I;14602026],Flicker:0b,Trail:1b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 15 72 0 {LifeTime:45,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:2b,Explosions:[{Type:0b,Colors:[I;11743532,14602026,16755200],FadeColors:[I;16776960],Flicker:0b,Trail:1b}]}}}} diff --git a/data/protect_villagers/functions/game/fireworks_survived_3.mcfunction b/data/protect_villagers/functions/game/fireworks_survived_3.mcfunction new file mode 100644 index 0000000..3eeb4e6 --- /dev/null +++ b/data/protect_villagers/functions/game/fireworks_survived_3.mcfunction @@ -0,0 +1,4 @@ +playsound minecraft:entity.firework_rocket.launch player @a[tag=pv_firework_anchor] ~ ~ ~ 0.9 0.8 +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 15 72 0 {LifeTime:45,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:2b,Explosions:[{Type:1b,Colors:[I;16755200,16766720,14602026],FadeColors:[I;11743532],Flicker:0b,Trail:1b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 8 71 0 {LifeTime:50,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:2b,Explosions:[{Type:0b,Colors:[I;15435844,11743532],FadeColors:[I;16755200],Flicker:0b,Trail:0b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 22 71 0 {LifeTime:50,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:2b,Explosions:[{Type:0b,Colors:[I;14602026,16766720],FadeColors:[I;11743532],Flicker:0b,Trail:0b}]}}}} diff --git a/data/protect_villagers/functions/game/fireworks_victory.mcfunction b/data/protect_villagers/functions/game/fireworks_victory.mcfunction new file mode 100644 index 0000000..05fda58 --- /dev/null +++ b/data/protect_villagers/functions/game/fireworks_victory.mcfunction @@ -0,0 +1,4 @@ +function protect_villagers:game/fireworks_victory_1 +schedule function protect_villagers:game/fireworks_victory_2 20t +schedule function protect_villagers:game/fireworks_victory_3 40t +schedule function protect_villagers:game/fireworks_clear_anchor 80t diff --git a/data/protect_villagers/functions/game/fireworks_victory_1.mcfunction b/data/protect_villagers/functions/game/fireworks_victory_1.mcfunction new file mode 100644 index 0000000..4e1b153 --- /dev/null +++ b/data/protect_villagers/functions/game/fireworks_victory_1.mcfunction @@ -0,0 +1,4 @@ +playsound minecraft:entity.firework_rocket.launch player @a[tag=pv_firework_anchor] ~ ~ ~ 1.2 1.0 +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 15 70 0 {LifeTime:35,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:2b,Explosions:[{Type:1b,Colors:[I;3887386,4312372,8073150],FadeColors:[I;11250603],Flicker:1b,Trail:1b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 10 70 5 {LifeTime:40,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:2b,Explosions:[{Type:2b,Colors:[I;2437522,2651799,4312372],FadeColors:[I;3887386],Flicker:1b,Trail:1b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 20 70 -5 {LifeTime:45,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:2b,Explosions:[{Type:4b,Colors:[I;4312372,3887386,11743532],FadeColors:[I;15790320],Flicker:1b,Trail:1b}]}}}} diff --git a/data/protect_villagers/functions/game/fireworks_victory_2.mcfunction b/data/protect_villagers/functions/game/fireworks_victory_2.mcfunction new file mode 100644 index 0000000..2659c4a --- /dev/null +++ b/data/protect_villagers/functions/game/fireworks_victory_2.mcfunction @@ -0,0 +1,4 @@ +playsound minecraft:entity.firework_rocket.launch player @a[tag=pv_firework_anchor] ~ ~ ~ 1.2 1.0 +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 7 70 -4 {LifeTime:35,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:2b,Explosions:[{Type:1b,Colors:[I;3887386,2437522,2651799],FadeColors:[I;4312372],Flicker:1b,Trail:1b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 23 70 4 {LifeTime:40,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:3b,Explosions:[{Type:2b,Colors:[I;4312372,8073150,11250603],FadeColors:[I;15790320],Flicker:1b,Trail:1b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 15 72 8 {LifeTime:45,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:3b,Explosions:[{Type:4b,Colors:[I;3887386,4312372,11743532],FadeColors:[I;8073150],Flicker:1b,Trail:1b}]}}}} diff --git a/data/protect_villagers/functions/game/fireworks_victory_3.mcfunction b/data/protect_villagers/functions/game/fireworks_victory_3.mcfunction new file mode 100644 index 0000000..985894b --- /dev/null +++ b/data/protect_villagers/functions/game/fireworks_victory_3.mcfunction @@ -0,0 +1,4 @@ +playsound minecraft:entity.firework_rocket.launch player @a[tag=pv_firework_anchor] ~ ~ ~ 1.2 1.0 +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 15 72 0 {LifeTime:45,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:3b,Explosions:[{Type:4b,Colors:[I;3887386,4312372,8073150,15790320],FadeColors:[I;11250603],Flicker:1b,Trail:1b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 10 72 -8 {LifeTime:50,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:3b,Explosions:[{Type:1b,Colors:[I;2437522,2651799,3887386],FadeColors:[I;4312372],Flicker:1b,Trail:1b}]}}}} +execute as @a[tag=pv_firework_anchor,limit=1] at @s if predicate protect_villagers:allowed_dimension run summon minecraft:firework_rocket 20 72 8 {LifeTime:50,FireworksItem:{id:"minecraft:firework_rocket",Count:1b,tag:{Fireworks:{Flight:3b,Explosions:[{Type:2b,Colors:[I;4312372,11743532,8073150],FadeColors:[I;15790320],Flicker:1b,Trail:1b}]}}}} diff --git a/data/protect_villagers/functions/game/villager_lost.mcfunction b/data/protect_villagers/functions/game/villager_lost.mcfunction new file mode 100644 index 0000000..9e4f837 --- /dev/null +++ b/data/protect_villagers/functions/game/villager_lost.mcfunction @@ -0,0 +1,8 @@ +execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run title @s times 10 60 20 + +execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run title @s title {"text":"A Soul Has Fallen","color":"dark_red","bold":true} + +execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run title @s subtitle [{"text":"The village grows weaker... ","color":"gray"},{"text":"Protect the survivors!","color":"red","bold":true}] + +execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run playsound minecraft:entity.wither.spawn player @s ~ ~ ~ 0.8 1.6 +execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run playsound minecraft:entity.villager.death player @s ~ ~ ~ 1.0 0.7 diff --git a/data/protect_villagers/functions/load.mcfunction b/data/protect_villagers/functions/load.mcfunction new file mode 100644 index 0000000..c6d9fb7 --- /dev/null +++ b/data/protect_villagers/functions/load.mcfunction @@ -0,0 +1,43 @@ +scoreboard objectives add daytime dummy +scoreboard objectives add arena_reset_lock dummy + +# Pastikan lock punya nilai awal supaya kondisi "matches 0" bisa lolos. +scoreboard players set #arena arena_reset_lock 0 + +scoreboard objectives add pv_villagers dummy +scoreboard objectives add pv_guards dummy +scoreboard objectives add pv_alive dummy +scoreboard objectives add pv_result_lock dummy + +scoreboard players set #result pv_result_lock 0 + + +scoreboard objectives add pv_prev_alive dummy +scoreboard objectives add pv_death_lock dummy + +scoreboard players set #prev_alive pv_prev_alive 9 +scoreboard players set #death pv_death_lock 0 + +# Villager spawn button system +scoreboard objectives add pv_spawn_cd dummy +scoreboard objectives add pv_spawn_done dummy +scoreboard objectives add pv_emeralds dummy +scoreboard objectives add pv_button_lock dummy + +scoreboard players set #spawn pv_spawn_done 0 +scoreboard players set #button pv_button_lock 0 + +scoreboard objectives add pv_sidebar_villagers dummy +scoreboard objectives add pv_sidebar_guards dummy + +# Protect Villagers wave visual system +scoreboard objectives add pv_wave_lock dummy +scoreboard objectives add pv_wave_countdown dummy +scoreboard objectives add pv_wave_bar dummy +scoreboard players set #wave pv_wave_lock 0 +scoreboard players set #countdown pv_wave_countdown 0 +scoreboard players set #bar pv_wave_bar 0 +bossbar add protect_villagers:wave {"text":"Protect Villagers Wave","color":"gold","bold":true} +bossbar set protect_villagers:wave color red +bossbar set protect_villagers:wave style progress +bossbar set protect_villagers:wave visible false diff --git a/data/protect_villagers/functions/tick.mcfunction b/data/protect_villagers/functions/tick.mcfunction new file mode 100644 index 0000000..8a15580 --- /dev/null +++ b/data/protect_villagers/functions/tick.mcfunction @@ -0,0 +1,53 @@ +# Minecraft time: +# 06:00 = 0 +# 06:30 = 500 +# 07:00 = 1000 +# 08:00 = 2000 + +execute store result score #time daytime run time query daytime + +# Sistem visual wave: title, countdown, dan bossbar. +function protect_villagers:wave/tick + +# Hitung villager dan guard villager. +execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run function protect_villagers:entities/count + +# Kurangi cooldown spawn villager untuk player. +scoreboard players remove @a[scores={pv_spawn_cd=1..}] pv_spawn_cd 1 + +# Button spawn villager di -10 68 0. +# Hanya 1 player terdekat dari button yang diproses per sekali tekan. +execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] if block -10 68 0 minecraft:stone_button[powered=true] if score #button pv_button_lock matches 0 positioned -10 68 0 as @p[distance=..8] run function protect_villagers:entities/spawn/request + +# Buka lock button lagi setelah tombol tidak powered. +execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] unless block -10 68 0 minecraft:stone_button[powered=true] run scoreboard players set #button pv_button_lock 0 + +# Deteksi jika ada villager/guard yang mati. +execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] if score #alive pv_alive < #prev_alive pv_prev_alive run function protect_villagers:game/villager_lost + +# Simpan jumlah hidup terbaru. +scoreboard players operation #prev_alive pv_prev_alive = #alive pv_alive + +# Hitung emerald player setiap tick +execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] store result score @s pv_emeralds run clear @s minecraft:emerald 0 + +execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run scoreboard players operation @s pv_sidebar_villagers = #villager pv_villagers + +execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run scoreboard players operation @s pv_sidebar_guards = #guard pv_guards + +# Tampilkan actionbar hanya untuk player di arena. +# execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run title @s actionbar [{"text":"Villager: ","color":"yellow"},{"score":{"name":"#villager","objective":"pv_villagers"},"color":"white"},{"text":" | ","color":"gray"},{"text":"Guard Villagers: ","color":"green"},{"score":{"name":"#guard","objective":"pv_guards"},"color":"white"}] + +# Cek hasil game jam 06:30. +execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] if score #time daytime matches 500..510 if score #result pv_result_lock matches 0 run function protect_villagers:game/check_result + +# Reset arena jam 07:00. +execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] if score #time daytime matches 1000..1010 if score #arena arena_reset_lock matches 0 run function protect_villagers:arena/reset + +# Buka lock hasil game setelah lewat jendela 06:30. +execute if score #time daytime matches 511..23999 run scoreboard players set #result pv_result_lock 0 +execute if score #time daytime matches 0..499 run scoreboard players set #result pv_result_lock 0 + +# Buka lock reset arena setelah lewat jendela 07:00. +execute if score #time daytime matches 1011..23999 run scoreboard players set #arena arena_reset_lock 0 +execute if score #time daytime matches 0..999 run scoreboard players set #arena arena_reset_lock 0 \ No newline at end of file diff --git a/data/protect_villagers/functions/wave/countdown/start.mcfunction b/data/protect_villagers/functions/wave/countdown/start.mcfunction new file mode 100644 index 0000000..01b6cd8 --- /dev/null +++ b/data/protect_villagers/functions/wave/countdown/start.mcfunction @@ -0,0 +1,6 @@ +scoreboard players set #countdown pv_wave_countdown 180 +scoreboard players set #wave pv_wave_lock -1 +title @a[tag=pv_wave_viewer] times 0 20 0 +title @a[tag=pv_wave_viewer] subtitle {"text":"Monster mulai spawn pukul 19:20. Bersiap!","color":"gold"} +title @a[tag=pv_wave_viewer] title {"text":"Night Incoming","color":"red","bold":true} +playsound minecraft:block.bell.use master @a[tag=pv_wave_viewer] -10 68 0 1 0.7 diff --git a/data/protect_villagers/functions/wave/countdown/tick.mcfunction b/data/protect_villagers/functions/wave/countdown/tick.mcfunction new file mode 100644 index 0000000..a1d607e --- /dev/null +++ b/data/protect_villagers/functions/wave/countdown/tick.mcfunction @@ -0,0 +1,37 @@ +execute if score #countdown pv_wave_countdown matches 180 run title @a[tag=pv_wave_viewer] times 0 20 0 +execute if score #countdown pv_wave_countdown matches 180 run title @a[tag=pv_wave_viewer] subtitle {"text":"Siapkan villager dan guard villagers!","color":"yellow"} +execute if score #countdown pv_wave_countdown matches 180 run title @a[tag=pv_wave_viewer] title {"text":"9","color":"gold","bold":true} +execute if score #countdown pv_wave_countdown matches 180 run playsound minecraft:block.note_block.pling master @a[tag=pv_wave_viewer] -10 68 0 1 1 +execute if score #countdown pv_wave_countdown matches 160 run title @a[tag=pv_wave_viewer] times 0 20 0 +execute if score #countdown pv_wave_countdown matches 160 run title @a[tag=pv_wave_viewer] subtitle {"text":"Siapkan villager dan guard villagers!","color":"yellow"} +execute if score #countdown pv_wave_countdown matches 160 run title @a[tag=pv_wave_viewer] title {"text":"8","color":"gold","bold":true} +execute if score #countdown pv_wave_countdown matches 160 run playsound minecraft:block.note_block.pling master @a[tag=pv_wave_viewer] -10 68 0 1 1 +execute if score #countdown pv_wave_countdown matches 140 run title @a[tag=pv_wave_viewer] times 0 20 0 +execute if score #countdown pv_wave_countdown matches 140 run title @a[tag=pv_wave_viewer] subtitle {"text":"Siapkan villager dan guard villagers!","color":"yellow"} +execute if score #countdown pv_wave_countdown matches 140 run title @a[tag=pv_wave_viewer] title {"text":"7","color":"gold","bold":true} +execute if score #countdown pv_wave_countdown matches 140 run playsound minecraft:block.note_block.pling master @a[tag=pv_wave_viewer] -10 68 0 1 1 +execute if score #countdown pv_wave_countdown matches 120 run title @a[tag=pv_wave_viewer] times 0 20 0 +execute if score #countdown pv_wave_countdown matches 120 run title @a[tag=pv_wave_viewer] subtitle {"text":"Siapkan villager dan guard villagers!","color":"yellow"} +execute if score #countdown pv_wave_countdown matches 120 run title @a[tag=pv_wave_viewer] title {"text":"6","color":"gold","bold":true} +execute if score #countdown pv_wave_countdown matches 120 run playsound minecraft:block.note_block.pling master @a[tag=pv_wave_viewer] -10 68 0 1 1 +execute if score #countdown pv_wave_countdown matches 100 run title @a[tag=pv_wave_viewer] times 0 20 0 +execute if score #countdown pv_wave_countdown matches 100 run title @a[tag=pv_wave_viewer] subtitle {"text":"Siapkan villager dan guard villagers!","color":"yellow"} +execute if score #countdown pv_wave_countdown matches 100 run title @a[tag=pv_wave_viewer] title {"text":"5","color":"gold","bold":true} +execute if score #countdown pv_wave_countdown matches 100 run playsound minecraft:block.note_block.pling master @a[tag=pv_wave_viewer] -10 68 0 1 1 +execute if score #countdown pv_wave_countdown matches 80 run title @a[tag=pv_wave_viewer] times 0 20 0 +execute if score #countdown pv_wave_countdown matches 80 run title @a[tag=pv_wave_viewer] subtitle {"text":"Siapkan villager dan guard villagers!","color":"yellow"} +execute if score #countdown pv_wave_countdown matches 80 run title @a[tag=pv_wave_viewer] title {"text":"4","color":"gold","bold":true} +execute if score #countdown pv_wave_countdown matches 80 run playsound minecraft:block.note_block.pling master @a[tag=pv_wave_viewer] -10 68 0 1 1 +execute if score #countdown pv_wave_countdown matches 60 run title @a[tag=pv_wave_viewer] times 0 20 0 +execute if score #countdown pv_wave_countdown matches 60 run title @a[tag=pv_wave_viewer] subtitle {"text":"Siapkan villager dan guard villagers!","color":"yellow"} +execute if score #countdown pv_wave_countdown matches 60 run title @a[tag=pv_wave_viewer] title {"text":"3","color":"red","bold":true} +execute if score #countdown pv_wave_countdown matches 60 run playsound minecraft:block.note_block.pling master @a[tag=pv_wave_viewer] -10 68 0 1 1 +execute if score #countdown pv_wave_countdown matches 40 run title @a[tag=pv_wave_viewer] times 0 20 0 +execute if score #countdown pv_wave_countdown matches 40 run title @a[tag=pv_wave_viewer] subtitle {"text":"Siapkan villager dan guard villagers!","color":"yellow"} +execute if score #countdown pv_wave_countdown matches 40 run title @a[tag=pv_wave_viewer] title {"text":"2","color":"red","bold":true} +execute if score #countdown pv_wave_countdown matches 40 run playsound minecraft:block.note_block.pling master @a[tag=pv_wave_viewer] -10 68 0 1 1 +execute if score #countdown pv_wave_countdown matches 20 run title @a[tag=pv_wave_viewer] times 0 20 0 +execute if score #countdown pv_wave_countdown matches 20 run title @a[tag=pv_wave_viewer] subtitle {"text":"Siapkan villager dan guard villagers!","color":"yellow"} +execute if score #countdown pv_wave_countdown matches 20 run title @a[tag=pv_wave_viewer] title {"text":"1","color":"red","bold":true} +execute if score #countdown pv_wave_countdown matches 20 run playsound minecraft:block.note_block.pling master @a[tag=pv_wave_viewer] -10 68 0 1 1 +scoreboard players remove #countdown pv_wave_countdown 1 diff --git a/data/protect_villagers/functions/wave/progress/wave_1.mcfunction b/data/protect_villagers/functions/wave/progress/wave_1.mcfunction new file mode 100644 index 0000000..18d7ff0 --- /dev/null +++ b/data/protect_villagers/functions/wave/progress/wave_1.mcfunction @@ -0,0 +1,6 @@ +bossbar set protect_villagers:wave visible true +scoreboard players operation #bar pv_wave_bar = #time daytime +scoreboard players remove #bar pv_wave_bar 14000 +execute if score #bar pv_wave_bar matches ..0 run scoreboard players set #bar pv_wave_bar 0 +execute if score #bar pv_wave_bar matches 3500.. run scoreboard players set #bar pv_wave_bar 3500 +execute store result bossbar protect_villagers:wave value run scoreboard players get #bar pv_wave_bar diff --git a/data/protect_villagers/functions/wave/progress/wave_2.mcfunction b/data/protect_villagers/functions/wave/progress/wave_2.mcfunction new file mode 100644 index 0000000..7ce2b0e --- /dev/null +++ b/data/protect_villagers/functions/wave/progress/wave_2.mcfunction @@ -0,0 +1,6 @@ +bossbar set protect_villagers:wave visible true +scoreboard players operation #bar pv_wave_bar = #time daytime +scoreboard players remove #bar pv_wave_bar 18000 +execute if score #bar pv_wave_bar matches ..0 run scoreboard players set #bar pv_wave_bar 0 +execute if score #bar pv_wave_bar matches 3667.. run scoreboard players set #bar pv_wave_bar 3667 +execute store result bossbar protect_villagers:wave value run scoreboard players get #bar pv_wave_bar diff --git a/data/protect_villagers/functions/wave/progress/wave_3.mcfunction b/data/protect_villagers/functions/wave/progress/wave_3.mcfunction new file mode 100644 index 0000000..ae276fa --- /dev/null +++ b/data/protect_villagers/functions/wave/progress/wave_3.mcfunction @@ -0,0 +1,6 @@ +bossbar set protect_villagers:wave visible true +scoreboard players operation #bar pv_wave_bar = #time daytime +scoreboard players remove #bar pv_wave_bar 22000 +execute if score #bar pv_wave_bar matches ..0 run scoreboard players set #bar pv_wave_bar 0 +execute if score #bar pv_wave_bar matches 833.. run scoreboard players set #bar pv_wave_bar 833 +execute store result bossbar protect_villagers:wave value run scoreboard players get #bar pv_wave_bar diff --git a/data/protect_villagers/functions/wave/progress/wave_4.mcfunction b/data/protect_villagers/functions/wave/progress/wave_4.mcfunction new file mode 100644 index 0000000..173bc11 --- /dev/null +++ b/data/protect_villagers/functions/wave/progress/wave_4.mcfunction @@ -0,0 +1,6 @@ +bossbar set protect_villagers:wave visible true +scoreboard players operation #bar pv_wave_bar = #time daytime +scoreboard players remove #bar pv_wave_bar 23000 +execute if score #bar pv_wave_bar matches ..0 run scoreboard players set #bar pv_wave_bar 0 +execute if score #bar pv_wave_bar matches 917.. run scoreboard players set #bar pv_wave_bar 917 +execute store result bossbar protect_villagers:wave value run scoreboard players get #bar pv_wave_bar diff --git a/data/protect_villagers/functions/wave/start/wave_1.mcfunction b/data/protect_villagers/functions/wave/start/wave_1.mcfunction new file mode 100644 index 0000000..b179e6c --- /dev/null +++ b/data/protect_villagers/functions/wave/start/wave_1.mcfunction @@ -0,0 +1,11 @@ +scoreboard players set #wave pv_wave_lock 1 +title @a[tag=pv_wave_viewer] times 10 50 10 +title @a[tag=pv_wave_viewer] subtitle {"text":"First Howl","color":"red","bold":true} +title @a[tag=pv_wave_viewer] title {"text":"Wave 1","color":"gold","bold":true} +playsound minecraft:entity.ender_dragon.growl master @a[tag=pv_wave_viewer] -10 68 0 0.7 1 +bossbar set protect_villagers:wave name {"text":"Wave 1 - First Howl","color":"red","bold":true} +bossbar set protect_villagers:wave max 3500 +bossbar set protect_villagers:wave value 0 +bossbar set protect_villagers:wave color red +bossbar set protect_villagers:wave visible true +bossbar set protect_villagers:wave players @a[tag=pv_wave_viewer] diff --git a/data/protect_villagers/functions/wave/start/wave_2.mcfunction b/data/protect_villagers/functions/wave/start/wave_2.mcfunction new file mode 100644 index 0000000..9e30ac5 --- /dev/null +++ b/data/protect_villagers/functions/wave/start/wave_2.mcfunction @@ -0,0 +1,11 @@ +scoreboard players set #wave pv_wave_lock 2 +title @a[tag=pv_wave_viewer] times 10 50 10 +title @a[tag=pv_wave_viewer] subtitle {"text":"Midnight Siege","color":"purple","bold":true} +title @a[tag=pv_wave_viewer] title {"text":"Wave 2","color":"gold","bold":true} +playsound minecraft:entity.ender_dragon.growl master @a[tag=pv_wave_viewer] -10 68 0 0.7 1 +bossbar set protect_villagers:wave name {"text":"Wave 2 - Midnight Siege","color":"purple","bold":true} +bossbar set protect_villagers:wave max 3667 +bossbar set protect_villagers:wave value 0 +bossbar set protect_villagers:wave color purple +bossbar set protect_villagers:wave visible true +bossbar set protect_villagers:wave players @a[tag=pv_wave_viewer] diff --git a/data/protect_villagers/functions/wave/start/wave_3.mcfunction b/data/protect_villagers/functions/wave/start/wave_3.mcfunction new file mode 100644 index 0000000..8242c62 --- /dev/null +++ b/data/protect_villagers/functions/wave/start/wave_3.mcfunction @@ -0,0 +1,11 @@ +scoreboard players set #wave pv_wave_lock 3 +title @a[tag=pv_wave_viewer] times 10 50 10 +title @a[tag=pv_wave_viewer] subtitle {"text":"Dead Hour","color":"blue","bold":true} +title @a[tag=pv_wave_viewer] title {"text":"Wave 3","color":"gold","bold":true} +playsound minecraft:entity.ender_dragon.growl master @a[tag=pv_wave_viewer] -10 68 0 0.7 1 +bossbar set protect_villagers:wave name {"text":"Wave 3 - Dead Hour","color":"blue","bold":true} +bossbar set protect_villagers:wave max 833 +bossbar set protect_villagers:wave value 0 +bossbar set protect_villagers:wave color purple +bossbar set protect_villagers:wave visible true +bossbar set protect_villagers:wave players @a[tag=pv_wave_viewer] diff --git a/data/protect_villagers/functions/wave/start/wave_4.mcfunction b/data/protect_villagers/functions/wave/start/wave_4.mcfunction new file mode 100644 index 0000000..522ab5d --- /dev/null +++ b/data/protect_villagers/functions/wave/start/wave_4.mcfunction @@ -0,0 +1,11 @@ +scoreboard players set #wave pv_wave_lock 4 +title @a[tag=pv_wave_viewer] times 10 50 10 +title @a[tag=pv_wave_viewer] subtitle {"text":"Dawn Breaker","color":"yellow","bold":true} +title @a[tag=pv_wave_viewer] title {"text":"Wave 4","color":"gold","bold":true} +playsound minecraft:entity.ender_dragon.growl master @a[tag=pv_wave_viewer] -10 68 0 0.7 1 +bossbar set protect_villagers:wave name {"text":"Wave 4 - Dawn Breaker","color":"yellow","bold":true} +bossbar set protect_villagers:wave max 917 +bossbar set protect_villagers:wave value 0 +bossbar set protect_villagers:wave color yellow +bossbar set protect_villagers:wave visible true +bossbar set protect_villagers:wave players @a[tag=pv_wave_viewer] diff --git a/data/protect_villagers/functions/wave/tick.mcfunction b/data/protect_villagers/functions/wave/tick.mcfunction new file mode 100644 index 0000000..71e5200 --- /dev/null +++ b/data/protect_villagers/functions/wave/tick.mcfunction @@ -0,0 +1,33 @@ +# Tandai player yang sedang berada di arena Protect Villagers. +# Ini lebih aman untuk custom dimension, karena pengecekan area dilakukan dari posisi player sendiri. +tag @a remove pv_wave_viewer +execute as @a at @s if predicate protect_villagers:allowed_dimension if entity @s[x=-39,y=57,z=-27,dx=108,dy=42,dz=54] run tag @s add pv_wave_viewer + +# Update target player bossbar hanya untuk player di arena. +bossbar set protect_villagers:wave players @a[tag=pv_wave_viewer] + +# Countdown persiapan 9 detik sebelum monster mulai spawn sekitar 19:20. +execute if score #time daytime matches 13153..13333 if score #countdown pv_wave_countdown matches 0 if score #wave pv_wave_lock matches 0 run function protect_villagers:wave/countdown/start +execute if score #countdown pv_wave_countdown matches 1.. run function protect_villagers:wave/countdown/tick + +# Trigger title wave. Jika server /reload atau player masuk saat wave sudah berjalan, sistem tetap recover. +execute if score #time daytime matches 14000..17500 unless score #wave pv_wave_lock matches 1 run function protect_villagers:wave/start/wave_1 +execute if score #time daytime matches 18000..21667 unless score #wave pv_wave_lock matches 2 run function protect_villagers:wave/start/wave_2 +execute if score #time daytime matches 22000..22833 unless score #wave pv_wave_lock matches 3 run function protect_villagers:wave/start/wave_3 +execute if score #time daytime matches 23000..23917 unless score #wave pv_wave_lock matches 4 run function protect_villagers:wave/start/wave_4 + +# Progress bossbar aktif sesuai rentang wave. +execute if score #time daytime matches 14000..17500 run function protect_villagers:wave/progress/wave_1 +execute if score #time daytime matches 18000..21667 run function protect_villagers:wave/progress/wave_2 +execute if score #time daytime matches 22000..22833 run function protect_villagers:wave/progress/wave_3 +execute if score #time daytime matches 23000..23917 run function protect_villagers:wave/progress/wave_4 + +# Sembunyikan bossbar ketika sedang jeda antar wave. +execute if score #time daytime matches 17501..17999 run bossbar set protect_villagers:wave visible false +execute if score #time daytime matches 21668..21999 run bossbar set protect_villagers:wave visible false +execute if score #time daytime matches 22834..22999 run bossbar set protect_villagers:wave visible false +execute if score #time daytime matches 23918..23999 run bossbar set protect_villagers:wave visible false +execute if score #time daytime matches 0..13999 run bossbar set protect_villagers:wave visible false + +# Reset harian sebelum malam berikutnya. +execute if score #time daytime matches 12000..13000 if score #wave pv_wave_lock matches 4 run scoreboard players set #wave pv_wave_lock 0 diff --git a/data/protect_villagers/predicates/allowed_dimension.json b/data/protect_villagers/predicates/allowed_dimension.json new file mode 100644 index 0000000..7ffca29 --- /dev/null +++ b/data/protect_villagers/predicates/allowed_dimension.json @@ -0,0 +1,6 @@ +{ + "condition": "minecraft:location_check", + "predicate": { + "dimension": "zombiiattack:protect_villagers" + } +} \ No newline at end of file diff --git a/data/trashslot/functions/move_slot_26_to_empty.mcfunction b/data/trashslot/functions/move_slot_26_to_empty.mcfunction new file mode 100644 index 0000000..110e94f --- /dev/null +++ b/data/trashslot/functions/move_slot_26_to_empty.mcfunction @@ -0,0 +1,109 @@ +# Cari slot kosong pertama, lalu salin item dari inventory.26 ke slot tersebut. +# Patch: ts_moved hanya dipasang jika command item replace benar-benar sukses, +# bukan sekadar karena slot target terdeteksi berisi item. Ini mencegah false-positive +# yang membuat actionbar muncul tetapi item asli kemudian hilang. +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:9b}] store success score @s trashslot_success run item replace entity @s inventory.0 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:10b}] store success score @s trashslot_success run item replace entity @s inventory.1 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:11b}] store success score @s trashslot_success run item replace entity @s inventory.2 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:12b}] store success score @s trashslot_success run item replace entity @s inventory.3 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:13b}] store success score @s trashslot_success run item replace entity @s inventory.4 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:14b}] store success score @s trashslot_success run item replace entity @s inventory.5 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:15b}] store success score @s trashslot_success run item replace entity @s inventory.6 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:16b}] store success score @s trashslot_success run item replace entity @s inventory.7 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:17b}] store success score @s trashslot_success run item replace entity @s inventory.8 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:18b}] store success score @s trashslot_success run item replace entity @s inventory.9 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:19b}] store success score @s trashslot_success run item replace entity @s inventory.10 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:20b}] store success score @s trashslot_success run item replace entity @s inventory.11 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:21b}] store success score @s trashslot_success run item replace entity @s inventory.12 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:22b}] store success score @s trashslot_success run item replace entity @s inventory.13 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:23b}] store success score @s trashslot_success run item replace entity @s inventory.14 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:24b}] store success score @s trashslot_success run item replace entity @s inventory.15 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:25b}] store success score @s trashslot_success run item replace entity @s inventory.16 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:26b}] store success score @s trashslot_success run item replace entity @s inventory.17 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:27b}] store success score @s trashslot_success run item replace entity @s inventory.18 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:28b}] store success score @s trashslot_success run item replace entity @s inventory.19 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:29b}] store success score @s trashslot_success run item replace entity @s inventory.20 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:30b}] store success score @s trashslot_success run item replace entity @s inventory.21 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:31b}] store success score @s trashslot_success run item replace entity @s inventory.22 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:32b}] store success score @s trashslot_success run item replace entity @s inventory.23 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:33b}] store success score @s trashslot_success run item replace entity @s inventory.24 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:34b}] store success score @s trashslot_success run item replace entity @s inventory.25 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:0b}] store success score @s trashslot_success run item replace entity @s hotbar.0 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:1b}] store success score @s trashslot_success run item replace entity @s hotbar.1 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:2b}] store success score @s trashslot_success run item replace entity @s hotbar.2 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:3b}] store success score @s trashslot_success run item replace entity @s hotbar.3 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:4b}] store success score @s trashslot_success run item replace entity @s hotbar.4 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:5b}] store success score @s trashslot_success run item replace entity @s hotbar.5 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:6b}] store success score @s trashslot_success run item replace entity @s hotbar.6 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:7b}] store success score @s trashslot_success run item replace entity @s hotbar.7 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 +execute unless entity @s[tag=ts_moved] unless data entity @s Inventory[{Slot:8b}] store success score @s trashslot_success run item replace entity @s hotbar.8 from entity @s inventory.26 +execute unless entity @s[tag=ts_moved] if score @s trashslot_success matches 1.. run tag @s add ts_moved +scoreboard players set @s[tag=!ts_moved] trashslot_success 0 diff --git a/data/trashslot/functions/save_slot_26.mcfunction b/data/trashslot/functions/save_slot_26.mcfunction new file mode 100644 index 0000000..11941f8 --- /dev/null +++ b/data/trashslot/functions/save_slot_26.mcfunction @@ -0,0 +1,20 @@ +# Simpan jumlah item sebelum slot 26 dikosongkan. +execute store result score @s trashslot_count run data get entity @s Inventory[{Slot:35b}].Count + +# Flag internal agar item hanya dipindahkan satu kali. +scoreboard players set @s trashslot_success 0 +tag @s remove ts_moved +tag @s remove ts_slot26_protected + +# Coba pindahkan item dari slot 26 ke slot kosong pertama. +function trashslot:move_slot_26_to_empty + +# Beri pesan jika berhasil. Nama item ditampilkan sebagai item id agar selalu muncul, termasuk item tanpa custom name. +execute if entity @s[tag=ts_moved] run title @s actionbar [{"score":{"name":"@s","objective":"trashslot_count"}},{"text":" "},{"nbt":"Inventory[{Slot:35b}].id","entity":"@s"},{"text":" telah dipindahkan.","color":"green"}] + +# Kosongkan slot 26 setelah item berhasil disalin ke slot kosong. +execute if entity @s[tag=ts_moved] run item replace entity @s inventory.26 with air + +# Kalau inventory penuh, jangan timpa item. Trash Slot akan aktif setelah player mengosongkan/memindahkan slot 26. +execute unless entity @s[tag=ts_moved] run tag @s add ts_slot26_protected +execute unless entity @s[tag=ts_moved] run title @s actionbar {"text":"Trash Slot belum aktif: inventory penuh, item di slot 26 tidak dipindahkan.","color":"red"} diff --git a/data/trashslot/functions/tick.mcfunction b/data/trashslot/functions/tick.mcfunction new file mode 100644 index 0000000..cc2f1fa --- /dev/null +++ b/data/trashslot/functions/tick.mcfunction @@ -0,0 +1,41 @@ +# Objective untuk menampilkan jumlah item yang dipindahkan dari slot 26. +# Aman walaupun dijalankan berulang; jika objective sudah ada, command ini hanya gagal diam-diam. +scoreboard objectives add trashslot_count dummy +scoreboard objectives add trashslot_success dummy + +# Tandai player yang sedang berada di mode bebas. +# Tag ini dipakai untuk mendeteksi transisi dari creative/spectator ke survival/adventure. +tag @a[gamemode=creative] add ts_free_mode +tag @a[gamemode=spectator] add ts_free_mode +tag @a[gamemode=creative] remove ts_transition_checked +tag @a[gamemode=spectator] remove ts_transition_checked +tag @a[gamemode=creative] remove ts_slot26_protected +tag @a[gamemode=spectator] remove ts_slot26_protected + +# Hapus hanya icon Trash Slot saat player masuk creative/spectator. +# Jangan pakai item replace inventory.26 with air tanpa kondisi, karena itu akan +# menghapus item apa pun yang ditaruh player di slot 26 setiap tick. +clear @a[gamemode=creative] minecraft:barrier{CustomModelData:87274} 1 +clear @a[gamemode=spectator] minecraft:barrier{CustomModelData:87274} 1 + +# Bersihkan item trash lama dari player survival/adventure. +clear @a[gamemode=!creative,gamemode=!spectator] minecraft:barrier{CustomModelData:87274} + +# Saat baru pindah dari creative/spectator ke survival/adventure, selamatkan item asli di slot 26 satu kali saja. +# NBT Slot 35b = command slot inventory.26. +execute as @a[gamemode=!creative,gamemode=!spectator,tag=ts_free_mode,tag=!ts_transition_checked] at @s if predicate trashslot:allowed_dimension if data entity @s Inventory[{Slot:35b}] unless data entity @s Inventory[{Slot:35b,id:"minecraft:barrier",tag:{CustomModelData:87274}}] run function trashslot:save_slot_26 +tag @a[gamemode=!creative,gamemode=!spectator,tag=ts_free_mode,tag=!ts_transition_checked] add ts_transition_checked +tag @a[gamemode=!creative,gamemode=!spectator,tag=ts_free_mode,tag=ts_transition_checked] remove ts_free_mode + +# Jika player survival/adventure memang membuang item ke slot 26 saat Trash Slot aktif, hapus diam-diam. +# Ini tidak menampilkan actionbar, dan tidak menjalankan fungsi pemindahan item. +execute as @a[gamemode=!creative,gamemode=!spectator,tag=!ts_slot26_protected] at @s if predicate trashslot:allowed_dimension if data entity @s Inventory[{Slot:35b}] unless data entity @s Inventory[{Slot:35b,id:"minecraft:barrier",tag:{CustomModelData:87274}}] run item replace entity @s inventory.26 with air + +# Jika sebelumnya slot 26 dilindungi karena inventory penuh, lepaskan proteksi setelah slot 26 kosong. +execute as @a[gamemode=!creative,gamemode=!spectator,tag=ts_slot26_protected] unless data entity @s Inventory[{Slot:35b}] run tag @s remove ts_slot26_protected + +# Pasang trash slot hanya kalau slot 26 kosong, supaya item asli tidak tertimpa. +execute as @a[gamemode=!creative,gamemode=!spectator] at @s if predicate trashslot:allowed_dimension unless data entity @s Inventory[{Slot:35b}] run item replace entity @s inventory.26 with minecraft:barrier{CustomModelData:87274,HideFlags:32,display:{Name:'{"text":"Trash Slot","color":"dark_red","italic":false}',Lore:['{"text":"ZombiiAttack","color":"gray","italic":true}']}} + +# Hancurkan item trash yang terlempar ke world jika berupa item icon Trash Slot. +kill @e[type=item,nbt={Item:{tag:{display:{Name:'{"extra":[{"italic":false,"color":"dark_red","text":"Trash Slot"}],"text":""}'}}}}] diff --git a/data/trashslot/predicates/allowed_dimension.json b/data/trashslot/predicates/allowed_dimension.json new file mode 100644 index 0000000..4a73e4e --- /dev/null +++ b/data/trashslot/predicates/allowed_dimension.json @@ -0,0 +1,47 @@ +{ + "condition": "minecraft:any_of", + "terms": [ + { + "condition": "minecraft:location_check", + "predicate": { + "dimension": "minecraft:overworld" + } + }, + { + "condition": "minecraft:location_check", + "predicate": { + "dimension": "minecraft:the_nether" + } + }, + { + "condition": "minecraft:location_check", + "predicate": { + "dimension": "minecraft:the_end" + } + }, + { + "condition": "minecraft:location_check", + "predicate": { + "dimension": "zombiiattack:csgo" + } + }, + { + "condition": "minecraft:location_check", + "predicate": { + "dimension": "zombiiattack:protect_villagers" + } + }, + { + "condition": "minecraft:location_check", + "predicate": { + "dimension": "zombiiattack:saving_ryan" + } + }, + { + "condition": "minecraft:location_check", + "predicate": { + "dimension": "zombiiattack:the_labyrinth" + } + } + ] +} \ No newline at end of file diff --git a/data/xaerominimap/functions/load.mcfunction b/data/xaerominimap/functions/load.mcfunction new file mode 100644 index 0000000..59e7f4c --- /dev/null +++ b/data/xaerominimap/functions/load.mcfunction @@ -0,0 +1,8 @@ +schedule function xaerominimap:load 20t replace + +# Bypass: player dengan tag xaero_bypass selalu boleh memakai minimap di semua dimensi. +execute as @a[tag=xaero_bypass] run effect clear @s xaerominimap:no_minimap + +# Non-bypass: minimap hanya boleh aktif di dimensi yang masuk predicate allowed_dimension. +execute as @a[tag=!xaero_bypass] at @s if predicate xaerominimap:allowed_dimension run effect clear @s xaerominimap:no_minimap +execute as @a[tag=!xaero_bypass] at @s unless predicate xaerominimap:allowed_dimension run effect give @s xaerominimap:no_minimap 3 0 true \ No newline at end of file diff --git a/data/xaerominimap/predicates/allowed_dimension.json b/data/xaerominimap/predicates/allowed_dimension.json new file mode 100644 index 0000000..f93b14d --- /dev/null +++ b/data/xaerominimap/predicates/allowed_dimension.json @@ -0,0 +1,35 @@ +{ + "condition": "minecraft:any_of", + "terms": [ + { + "condition": "minecraft:location_check", + "predicate": { + "dimension": "minecraft:overworld" + } + }, + { + "condition": "minecraft:location_check", + "predicate": { + "dimension": "minecraft:the_nether" + } + }, + { + "condition": "minecraft:location_check", + "predicate": { + "dimension": "minecraft:the_end" + } + }, + { + "condition": "minecraft:location_check", + "predicate": { + "dimension": "zombiiattack:csgo" + } + }, + { + "condition": "minecraft:location_check", + "predicate": { + "dimension": "zombiiattack:saving_ryan" + } + } + ] +} \ No newline at end of file diff --git a/data/zombiiattack/dimension/creative.json b/data/zombiiattack/dimension/creative.json new file mode 100644 index 0000000..237f6ed --- /dev/null +++ b/data/zombiiattack/dimension/creative.json @@ -0,0 +1,11 @@ +{ + "type": "zombiiattack:creative", + "generator": { + "type": "minecraft:noise", + "settings": "minecraft:overworld", + "biome_source": { + "type": "minecraft:multi_noise", + "preset": "minecraft:overworld" + } + } +} \ No newline at end of file diff --git a/data/zombiiattack/dimension/csgo.json b/data/zombiiattack/dimension/csgo.json new file mode 100644 index 0000000..93e7847 --- /dev/null +++ b/data/zombiiattack/dimension/csgo.json @@ -0,0 +1,13 @@ +{ + "type": "zombiiattack:arena", + "generator": { + "type": "minecraft:flat", + "settings": { + "biome": "minecraft:plains", + "features": false, + "lakes": false, + "layers": [], + "structure_overrides": [] + } + } +} \ No newline at end of file diff --git a/data/zombiiattack/dimension/lobby.json b/data/zombiiattack/dimension/lobby.json new file mode 100644 index 0000000..5106cc7 --- /dev/null +++ b/data/zombiiattack/dimension/lobby.json @@ -0,0 +1,18 @@ +{ + "type": "zombiiattack:lobby", + "generator": { + "type": "minecraft:flat", + "settings": { + "biome": "minecraft:plains", + "features": false, + "lakes": false, + "structure_overrides": [], + "layers": [ + { + "block": "minecraft:air", + "height": 1 + } + ] + } + } +} \ No newline at end of file diff --git a/data/zombiiattack/dimension/protect_villagers.json b/data/zombiiattack/dimension/protect_villagers.json new file mode 100644 index 0000000..93e7847 --- /dev/null +++ b/data/zombiiattack/dimension/protect_villagers.json @@ -0,0 +1,13 @@ +{ + "type": "zombiiattack:arena", + "generator": { + "type": "minecraft:flat", + "settings": { + "biome": "minecraft:plains", + "features": false, + "lakes": false, + "layers": [], + "structure_overrides": [] + } + } +} \ No newline at end of file diff --git a/data/zombiiattack/dimension/saving_ryan.json b/data/zombiiattack/dimension/saving_ryan.json new file mode 100644 index 0000000..93e7847 --- /dev/null +++ b/data/zombiiattack/dimension/saving_ryan.json @@ -0,0 +1,13 @@ +{ + "type": "zombiiattack:arena", + "generator": { + "type": "minecraft:flat", + "settings": { + "biome": "minecraft:plains", + "features": false, + "lakes": false, + "layers": [], + "structure_overrides": [] + } + } +} \ No newline at end of file diff --git a/data/zombiiattack/dimension/the_labyrinth.json b/data/zombiiattack/dimension/the_labyrinth.json new file mode 100644 index 0000000..93e7847 --- /dev/null +++ b/data/zombiiattack/dimension/the_labyrinth.json @@ -0,0 +1,13 @@ +{ + "type": "zombiiattack:arena", + "generator": { + "type": "minecraft:flat", + "settings": { + "biome": "minecraft:plains", + "features": false, + "lakes": false, + "layers": [], + "structure_overrides": [] + } + } +} \ No newline at end of file diff --git a/data/zombiiattack/dimension_type/arena.json b/data/zombiiattack/dimension_type/arena.json new file mode 100644 index 0000000..8343617 --- /dev/null +++ b/data/zombiiattack/dimension_type/arena.json @@ -0,0 +1,25 @@ +{ + "ultrawarm": false, + "natural": true, + "coordinate_scale": 1.0, + "piglin_safe": false, + "respawn_anchor_works": false, + "bed_works": true, + "has_raids": true, + "has_skylight": true, + "has_ceiling": false, + "ambient_light": 0.0, + "logical_height": 384, + "infiniburn": "#minecraft:infiniburn_overworld", + "effects": "minecraft:overworld", + "min_y": -64, + "height": 384, + "monster_spawn_light_level": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 0, + "max_inclusive": 7 + } + }, + "monster_spawn_block_light_limit": 0 +} \ No newline at end of file diff --git a/data/zombiiattack/dimension_type/creative.json b/data/zombiiattack/dimension_type/creative.json new file mode 100644 index 0000000..6df7ed8 --- /dev/null +++ b/data/zombiiattack/dimension_type/creative.json @@ -0,0 +1,25 @@ +{ + "ultrawarm": false, + "natural": true, + "coordinate_scale": 1.0, + "has_skylight": true, + "has_ceiling": false, + "ambient_light": 0.0, + "piglin_safe": false, + "bed_works": true, + "respawn_anchor_works": false, + "has_raids": true, + "logical_height": 384, + "min_y": -64, + "height": 384, + "infiniburn": "#minecraft:infiniburn_overworld", + "effects": "minecraft:overworld", + "monster_spawn_light_level": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 0, + "max_inclusive": 7 + } + }, + "monster_spawn_block_light_limit": 0 +} \ No newline at end of file diff --git a/data/zombiiattack/dimension_type/lobby.json b/data/zombiiattack/dimension_type/lobby.json new file mode 100644 index 0000000..b890c5a --- /dev/null +++ b/data/zombiiattack/dimension_type/lobby.json @@ -0,0 +1,26 @@ +{ + "ultrawarm": false, + "natural": false, + "coordinate_scale": 1.0, + "has_skylight": true, + "has_ceiling": false, + "ambient_light": 0.0, + "fixed_time": 6000, + "piglin_safe": true, + "bed_works": false, + "respawn_anchor_works": false, + "has_raids": false, + "logical_height": 384, + "min_y": -64, + "height": 384, + "infiniburn": "#minecraft:infiniburn_overworld", + "effects": "minecraft:overworld", + "monster_spawn_light_level": { + "type": "minecraft:uniform", + "value": { + "min_inclusive": 0, + "max_inclusive": 0 + } + }, + "monster_spawn_block_light_limit": 0 +} \ No newline at end of file diff --git a/pack.mcmeta b/pack.mcmeta new file mode 100644 index 0000000..7a069d4 --- /dev/null +++ b/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "pack_format": 15, + "description": "KLoningSpoon presents: ZombiiAttack" + } +} \ No newline at end of file diff --git a/pack.png b/pack.png new file mode 100644 index 0000000..cd4fe05 Binary files /dev/null and b/pack.png differ