diff --git a/gm4_calling_bell/beet.yaml b/gm4_calling_bell/beet.yaml index 534525d5ad..5c2c74bdd5 100644 --- a/gm4_calling_bell/beet.yaml +++ b/gm4_calling_bell/beet.yaml @@ -8,12 +8,13 @@ data_pack: pipeline: - gm4.plugins.extend.module +require: + - bolt + meta: gm4: versioning: - schedule_loops: - - tick - - day_clock + schedule_loops: [] model_data: - item: emerald reference: gui/advancement/calling_bell @@ -32,5 +33,7 @@ meta: credits: Creator: - TheEpyonProject + Updated By: + - runcows Icon Design: - Hozz diff --git a/gm4_calling_bell/data/gm4_calling_bell/advancement/ring_bell.json b/gm4_calling_bell/data/gm4_calling_bell/advancement/ring_bell.json new file mode 100644 index 0000000000..29dc583ab1 --- /dev/null +++ b/gm4_calling_bell/data/gm4_calling_bell/advancement/ring_bell.json @@ -0,0 +1,24 @@ +{ + "criteria": { + "ringbell": { + "trigger": "minecraft:any_block_use", + "conditions": { + "location": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "items": "minecraft:emerald" + } + }, + { + "condition": "minecraft:block_state_property", + "block": "minecraft:bell" + } + ] + } + } + }, + "rewards": { + "function": "gm4_calling_bell:on_bell_interact" + } +} diff --git a/gm4_calling_bell/data/gm4_calling_bell/function/bell/ray/loop.mcfunction b/gm4_calling_bell/data/gm4_calling_bell/function/bell/ray/loop.mcfunction deleted file mode 100644 index f01b95d14c..0000000000 --- a/gm4_calling_bell/data/gm4_calling_bell/function/bell/ray/loop.mcfunction +++ /dev/null @@ -1,14 +0,0 @@ -# ray cast to find bell -# @s = player right clicking bell with emerald -# at @s anchored eyes positioned ^ ^ ^ -# run from gm4_calling_bell:bell/ray/setup and recursive call - -# removes 1 from raycast -scoreboard players remove $ray gm4_calling_bell 1 - -# tests for bell -execute if block ~ ~ ~ bell align xyz positioned ~0.5 ~1 ~0.5 if predicate gm4_calling_bell:trader_hitbox_no_collision run function gm4_calling_bell:trader/summon -execute if block ~ ~ ~ bell align xyz positioned ~0.5 ~1 ~0.5 unless predicate gm4_calling_bell:trader_hitbox_no_collision run playsound entity.wandering_trader.no neutral @a[distance=..16] ~ ~ ~ 1 1 0.6 - -# runs the loop again -execute unless block ~ ~ ~ bell if score $ray gm4_calling_bell matches 1.. positioned ^ ^ ^0.1 run function gm4_calling_bell:bell/ray/loop diff --git a/gm4_calling_bell/data/gm4_calling_bell/function/bell/ray/setup.mcfunction b/gm4_calling_bell/data/gm4_calling_bell/function/bell/ray/setup.mcfunction deleted file mode 100644 index a703ad2cd7..0000000000 --- a/gm4_calling_bell/data/gm4_calling_bell/function/bell/ray/setup.mcfunction +++ /dev/null @@ -1,7 +0,0 @@ -# ray cast setup to find bell -# @s = player right clicking bell with emerald -# run from gm4_calling_bell:emerald_check - -scoreboard players set $ray gm4_calling_bell 50 - -execute at @s anchored eyes positioned ^ ^ ^ run function gm4_calling_bell:bell/ray/loop diff --git a/gm4_calling_bell/data/gm4_calling_bell/function/day_clock.mcfunction b/gm4_calling_bell/data/gm4_calling_bell/function/day_clock.mcfunction deleted file mode 100644 index 4238778bdd..0000000000 --- a/gm4_calling_bell/data/gm4_calling_bell/function/day_clock.mcfunction +++ /dev/null @@ -1,4 +0,0 @@ - -# check day, daily -execute store result score $day gm4_calling_bell run time query day -schedule function gm4_calling_bell:day_clock 20s diff --git a/gm4_calling_bell/data/gm4_calling_bell/function/emerald_check.mcfunction b/gm4_calling_bell/data/gm4_calling_bell/function/emerald_check.mcfunction deleted file mode 100644 index cda62bac13..0000000000 --- a/gm4_calling_bell/data/gm4_calling_bell/function/emerald_check.mcfunction +++ /dev/null @@ -1,7 +0,0 @@ -# check if player is off cooldown and holding an emerald -# @s = player right clicking bell -# run from gm4_calling_bell:tick - -execute unless score @s gm4_calling_bell >= $day gm4_calling_bell if items entity @s weapon.mainhand minecraft:emerald run function gm4_calling_bell:bell/ray/setup -execute if score @s gm4_calling_bell >= $day gm4_calling_bell if items entity @s weapon.mainhand minecraft:emerald at @s run playsound entity.wandering_trader.no neutral @a[distance=..16] ~ ~ ~ 1 1 0.6 -scoreboard players reset @s gm4_calling_bell_rung diff --git a/gm4_calling_bell/data/gm4_calling_bell/function/init.mcfunction b/gm4_calling_bell/data/gm4_calling_bell/function/init.mcfunction index dce6cc5574..63fbaa7f13 100644 --- a/gm4_calling_bell/data/gm4_calling_bell/function/init.mcfunction +++ b/gm4_calling_bell/data/gm4_calling_bell/function/init.mcfunction @@ -1,11 +1,7 @@ scoreboard objectives add gm4_calling_bell dummy -scoreboard objectives add gm4_calling_bell_rung minecraft.custom:minecraft.bell_ring execute unless score calling_bell gm4_modules matches 1 run data modify storage gm4:log queue append value {type:"install",module:"Calling Bell"} execute unless score calling_bell gm4_earliest_version < calling_bell gm4_modules run scoreboard players operation calling_bell gm4_earliest_version = calling_bell gm4_modules scoreboard players set calling_bell gm4_modules 1 -schedule function gm4_calling_bell:tick 1t -schedule function gm4_calling_bell:day_clock 10t - #$moduleUpdateList diff --git a/gm4_calling_bell/data/gm4_calling_bell/function/on_bell_interact.mcfunction b/gm4_calling_bell/data/gm4_calling_bell/function/on_bell_interact.mcfunction new file mode 100644 index 0000000000..aac291bb3c --- /dev/null +++ b/gm4_calling_bell/data/gm4_calling_bell/function/on_bell_interact.mcfunction @@ -0,0 +1,13 @@ +# @s = player who used an emerald on a bell +# at @s +# run from advancement: ring_bell + +advancement revoke @s only gm4_calling_bell:ring_bell + +# TODO: remove raw and bolt require later +# fail if player already used today +raw execute store result score $day gm4_calling_bell run time query day repetition +execute if score @s gm4_calling_bell = $day gm4_calling_bell run return run playsound entity.wandering_trader.no neutral @a[distance=..16] ~ ~ ~ 1 1 0.6 + +execute store result score $ray gm4_calling_bell run attribute @s minecraft:block_interaction_range get 10 +execute anchored eyes positioned ^ ^ ^ run function gm4_calling_bell:raycast diff --git a/gm4_calling_bell/data/gm4_calling_bell/function/raycast.mcfunction b/gm4_calling_bell/data/gm4_calling_bell/function/raycast.mcfunction new file mode 100644 index 0000000000..f3d5970cc7 --- /dev/null +++ b/gm4_calling_bell/data/gm4_calling_bell/function/raycast.mcfunction @@ -0,0 +1,9 @@ +# @s = player right clicking bell with emerald +# at @s anchored eyes marched forward over and over +# run from gm4_calling_bell:on_bell_interact and self + +scoreboard players remove $ray gm4_calling_bell 1 + +execute if block ~ ~ ~ bell align xyz positioned ~0.5 ~1 ~0.5 run return run function gm4_calling_bell:summon_trader + +execute if score $ray gm4_calling_bell matches 1.. positioned ^ ^ ^0.1 run function gm4_calling_bell:raycast diff --git a/gm4_calling_bell/data/gm4_calling_bell/function/trader/summon.mcfunction b/gm4_calling_bell/data/gm4_calling_bell/function/summon_trader.mcfunction similarity index 59% rename from gm4_calling_bell/data/gm4_calling_bell/function/trader/summon.mcfunction rename to gm4_calling_bell/data/gm4_calling_bell/function/summon_trader.mcfunction index 932da06e72..d6e07f0a88 100644 --- a/gm4_calling_bell/data/gm4_calling_bell/function/trader/summon.mcfunction +++ b/gm4_calling_bell/data/gm4_calling_bell/function/summon_trader.mcfunction @@ -1,13 +1,16 @@ -# summon a wandering trader for the player +# summon a wandering trader if valid placement # @s = player right clicking bell with emerald -# above bell -# run from gm4_calling_bell:bell/ray/loop +# at block above bell +# run from raycast + +# check for valid spawn placement, otherwise return +execute unless predicate gm4_calling_bell:trader_hitbox_no_collision run return run playsound entity.wandering_trader.no neutral @a[distance=..16] ~ ~ ~ 1 1 0.6 # summon trader summon wandering_trader ~ ~ ~ {Tags:["gm4_calling_bell_trader"],DespawnDelay:24000} -particle happy_villager ~ ~0.5 ~ 0.3 0.3 0.3 1 5 playsound entity.wandering_trader.reappeared neutral @a[distance=..16] ~ ~ ~ 1 1 0.6 -particle minecraft:large_smoke ~ ~1 ~ 0.25 0.5 0.25 0 10 +particle happy_villager ~ ~0.5 ~ 0.3 0.3 0.3 1 5 +particle large_smoke ~ ~1 ~ 0.25 0.5 0.25 0 10 # consume emerald item modify entity @s[gamemode=!creative] weapon.mainhand gm4_calling_bell:minus_one diff --git a/gm4_calling_bell/data/gm4_calling_bell/function/tick.mcfunction b/gm4_calling_bell/data/gm4_calling_bell/function/tick.mcfunction deleted file mode 100644 index 9c481e12b1..0000000000 --- a/gm4_calling_bell/data/gm4_calling_bell/function/tick.mcfunction +++ /dev/null @@ -1,4 +0,0 @@ - -execute as @a[scores={gm4_calling_bell_rung=1..}] run function gm4_calling_bell:emerald_check - -schedule function gm4_calling_bell:tick 1t diff --git a/gm4_calling_bell/data/gm4_calling_bell/test/call.mcfunction b/gm4_calling_bell/data/gm4_calling_bell/test/call.mcfunction index 742ffaea75..f5ace31c80 100644 --- a/gm4_calling_bell/data/gm4_calling_bell/test/call.mcfunction +++ b/gm4_calling_bell/data/gm4_calling_bell/test/call.mcfunction @@ -6,6 +6,8 @@ setblock ~1 ~1 ~1 bell execute at @s run tp @s ~ ~ ~ facing ~ ~-1 ~1 give @s emerald dummy @s use block ~1.4 ~1.25 ~1.5 north +# any_block_use isnt triggering for dummy @s use block +advancement grant @s only gm4_calling_bell:ring_bell await entity @e[type=wandering_trader,distance=..4] diff --git a/gm4_calling_bell/data/gm4_calling_bell/test/call_blocked.mcfunction b/gm4_calling_bell/data/gm4_calling_bell/test/call_blocked.mcfunction index 82b3619ce3..9bc404c37f 100644 --- a/gm4_calling_bell/data/gm4_calling_bell/test/call_blocked.mcfunction +++ b/gm4_calling_bell/data/gm4_calling_bell/test/call_blocked.mcfunction @@ -6,6 +6,8 @@ setblock ~1 ~3 ~1 stone execute at @s run tp @s ~ ~ ~ facing ~ ~-1 ~1 give @s emerald dummy @s use block ~1.4 ~1.25 ~1.5 north +# any_block_use isnt triggering for dummy @s use block +advancement grant @s only gm4_calling_bell:ring_bell await delay 1s