산삼을 먹으면 생명력 강화 효과를 얻게 만들고 싶음! 어떻게 만들지?


산삼(토끼발로 지정함)의 사용(used)을 감지하는 스코어보드를 하나 만든 후에 그게 올라가면 효과를 주면 되겠지!


/scoreboard objectives add sansaam used:minecraft.rabbit_foot


execute as @a if score @s sansaam matches 1.. run effect give @s minecraft:health_boost infinite 0 true




근데 이제 여기서 산삼을 먹을 때마다 생명력 강화 효과가 1씩 증가하게 만들고 싶음! 어떻게 만들지?


execute as @a if score @s sansaam matches 1.. run effect give @s minecraft:health_boost infinite 0 true


execute as @a if score @s sansaam matches 2.. run effect give @s minecraft:health_boost infinite 1 true


execute as @a if score @s sansaam matches 3.. run effect give @s minecraft:health_boost infinite 2 true


...

...

...


이런 식으로 하나하나 지정해줘야 되냐?


어쩌면 저장소와 함수를 활용해서 좀 더 쉽게 만들 수 있진 않을까?



// 저장소 초기화(플레이어가 직접 입력)


/data merge storage custom:sansaam {value: -1}


// 매 틱 실행되는 메인 함수


execute as @a if score @s sansaam matches 1.. run function custom:sansaam


// custom:sansaam 함수


execute store result score #temp scores run data get storage custom:sansaam value

scoreboard players add #temp scores 1

execute store result storage custom:sansaam value int 1 run scoreboard players get #temp scores

scoreboard players set #temp scores 0

function custom:sansaam2 with storage custom:sansaam

scoreboard players set @a sansaam 0


// custom:sansaam2 함수


$effect give @a health_boost infinite $(value) true



산삼을 먹은 걸 감지하면, 저장소 custom:sansaam에 있는 값을 +1하고 그 값만큼 생명력 강화 효과를 부여하는 매커니즘임. 마크 효과는 수치가 값+1로 적용되기 때문에 초기화를 -1로 해줘야 정상작동함.





비슷한 방식으로 장비했을 때 효과를 주는 장비(ex: 힘2를 주는 검, 재생1을 주는 흉갑, 신속3를 주는 레깅스 등등)의 경우에도 사용자 지정 데이터로 값을 주어서 좀 더 편하고 최적화되게, 그리고 새로 장비를 만들 때마다 하나하나 지정할 필요 없게 만들 수 있음.

다만 그 경우에는 커스텀 인챈트를 만들 줄 안다면 그 편이 훨씬 편해서, 굳이 쓸 일은 없을 거임.


그리고 여담으로 산삼은 영어로 wild ginseng이라 하노. 그냥 ginseng은 인삼이래.

(sansaam이 아니었다니)