늘솜보름
정품인증자
JIMIN2457 69b92cf6d9194ba7a57a668b093cb822
이해도 | 1.12 |
---|---|
게임버전 (JE) | 스피곳 |
스크립트 버전 | 중급자(필요한 애드온을 찾아서 만들 수 있어요) |
스크립트 애드온 | 2.5.3 |
set {_testA} to amount of {_testB} in inventory of player
{_testB}에서 인식된 아이템의 개수를 파악해서 {_testA}에 저장하는 구문입니다.
정상적으로 잘 작동합니다. 근데 하나 문제가 있습니다.
'돌' 같은 아이템 입니다.
인벤토리에 돌만 있으면 상관이 없는데 돌 1개, 화강암 1개가 있으면 같은 ID로 인식해서 2개로 됩니다.
이런 경우에 돌만 인식하고 싶으면 어떻게 해야할까요?
스크립터브혼
2021.07.16가장 확실한 방법은 Namespaced Key를 확인하는 것입니다.
돌은 'minecraft:stone', 화강암은 'minecraft:granite' 입니다.
스크립트에서 아이템의 Namespaced Key를 받는 익스프레션은 [Raw Name] 익스프레션 입니다.
반환 타입은 text 입니다.
> send minecraft name of {_item} to player
늘솜보름
2021.07.16답변 감사합니다. 둘다 stone라고 뜨는거 보고 확신드는게 1.12.2 버전이여서 그런거 같아요.
https://minecraftitemids.com/item/granite 여기 사이트에서 확인해보니까
Legacy Item ID (1.12.2 and Below) minecraft:stone 라고 적혀있네요.
1.12.2 이하 버전에서는 아이템 아이디가 똑같네요.
스크립터브혼
2021.07.161.12 이하 버전에서 사용했던 id of %item%, data of %item%으로 해보세요.
id는 같아도 data가 다르게 나올 수 있습니다.
늘솜보름
2021.07.17와... 대박! 정말 감사합니다 ㅠㅠㅠㅠ 엄청난 힌트네요!!
id of 는 [WARNING] Items do not have numeric ids on Minecraft 1.13 or newer. This script will not work on those versions!
이렇게 뜨는걸로 봐서 역시 버전문제가 맞는거 같고,
data of 는 해당 아이템의 data 값을 잘 가져오더라구요.
set {_amount} to 0
loop all items in player's inventory:
-if loop-item is {_test}:
--if data of loop-item is data of {_test}:
---add item amount of loop-item to {_amount}
send "%{_amount}%" to player
그래서 이렇게 하니까 제가 원했던 그대로 작동하네요!