개인 자료란 (JE)

  서버 커뮤니티

Profile APSODE 대표칭호 없음
Profile

이해도 플러그인 


net.minecraft.server.v1_16_R3.ItemStack NMS_TARGET_ITEM = CraftItemStack.asNMSCopy(TARGET_ITEM);
net.minecraft.server.v1_16_R3.Item NMS_TARGET_ITEM_DATA = NMS_TARGET_ITEM.getItem();

Multimap<AttributeBase, net.minecraft.server.v1_16_R3.AttributeModifier> N = NMS_TARGET_ITEM_DATA.getAttributesForSlot(EnumItemSlot.MAINHAND);

구글링 하다보니 NMS의 ItemStack에서 getItem()메소드를 이용해서 AttributeModifier를 가져오는 방법이 있던데 제가 봤던 방법은 NMS  v1_12_R1에서 Multimap<String, AttributeModifier>이었는데 NMS 1_16_v3에서는 Multimap<AttributeBase, AttributeModifier>이더라구요.

v1_12_R1에서는 String타입으로 Attribute의 키값으로 이용해서 가져오면 된다고 봤는데 v1_16_R3 AttributeBase는 어떻게 사용해야하는지 모르겠네요.



혹시 전달이 잘 안됬을까봐 제가 봤던 코드 링크도 남깁니다.

https://www.spigotmc.org/threads/how-to-get-attack-damage-attributemodifier-from-an-itemstack-as-displayed-on-items-in-game.284455/


5개의 댓글

0reo
2022.08.06

.getName() 메소드만 없애면 될거같아요 안되시면 다시 말씀주세요 클래스파일 뜯어서 확인해볼게요

0reo
2022.08.06
net.minecraft.server.v1_16_R3.ItemStack craftItemStack = CraftItemStack.asNMSCopy(new org.bukkit.inventory.ItemStack(Material.GOLDEN_AXE));
net.minecraft.server.v1_16_R3.Item craftItem = craftItemStack.getItem();
Multimap<net.minecraft.server.v1_16_R3.AttributeBase, net.minecraft.server.v1_16_R3.AttributeModifier> map = craftItem.a(EnumItemSlot.MAINHAND);
Collection<net.minecraft.server.v1_16_R3.AttributeModifier> attributeModifiers = map.get(net.minecraft.server.v1_16_R3.GenericAttributes.ATTACK_DAMAGE);
APSODE
2022.08.06
@0reo

진짜진짜 존나 감사합니다 ㅠㅠㅠㅠㅠ

덕분에 며칠째 막혀있던 부분 구현할수 있을것 같아요 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

 

근데 nms는 직접 IDE에서 디컴파일된 코드 보면서 역할을 유추할수밖에 없는건가요..?

0reo
2022.08.06
@APSODE

님이 원하시는 부분을 찾으시려면 그거를 하셔야죠...?

일단 이거 맞으면 다행이구 spigot-1.16.5.jar 압축푸신다음에 net.minecraft.server.~ 들어가셔서 찾으신담에 뜯어보시면 어느 정도 유추는 되실거에요

APSODE
2022.08.06
@0reo

그렇군요 알려주셔서 감사해요!