개인 자료란 (JE)

  서버 커뮤니티

Profile 엘라스키 대표칭호 없음
Profile

이해도 초보자 
게임버전 (JE) 1.16.5, 1.19.2 
게임버전 (BE) 관련없음 

기존 1.16.5 모드를 1.19.2로 포트할려고 하는데@deprecated 표시도 없이 일부 메소드가 제거가 되었네요.

관련 정보를 찾아보니 Capability 클래스가 리워크되어서 IStorage 인터페이스가 사라졌네요.

(https://github.com/MinecraftForge/MinecraftForge/pull/8116)


Class Capability에 있는 메소드 writeNBT, readNBT가 삭제되어 더 이상 활용이 불가능해졌습니다.

다른 메소드를 가져와서 해결해야 하는 건 확실해 보이는데 어디서 가져와야 할 지 모르겠습니다.


문제가 되는 코드(BasicCapabilityProviderSerializable.java)

package meldexun.better_diving.capability;

import net.minecraft.nbt.Tag; //import net.minecraft.nbt.INBT;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ICapabilitySerializable;
import net.minecraftforge.common.util.NonNullSupplier;

public class BasicCapabilityProviderSerializable<Cextends BasicCapabilityProvider<Cimplements ICapabilitySerializable<Tag> {
    public BasicCapabilityProviderSerializable(Capability<C> capability, NonNullSupplier<C> instanceSupplier) {
        super(capability, instanceSupplier);
    }
    @Override
    public Tag serializeNBT() {
        return this.capability.writeNBT(this.instance.orElse(null), null);
    }
    @Override
    public void deserializeNBT(Tag nbt) {
        this.capability.readNBT(this.instance.orElse(null)null, nbt);
    }
}



연관되어 있는 코드(BasicCapabilityProvider.java)

package meldexun.better_diving.capability;

import net.minecraft.core.Direction;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.common.util.NonNullSupplier;

public abstract class BasicCapabilityProvider<Cimplements ICapabilityProvider {
    public final Capability<C> capability;
    public final LazyOptional<C> instance;

    public BasicCapabilityProvider(Capability<C> capability, NonNullSupplier<C> instanceSupplier){
        this.capability = capability;
        this.instance = LazyOptional.of(instanceSupplier);
    }
    @Override
    public <TLazyOptional<T> getCapability(Capability<T> cap, Direction side) {
        return cap == this.capability ? this.instance.cast() : LazyOptional.empty();
    }
}

모드 전체 코드 출처

https://github.com/Meldexun/BetterDiving




6개의 댓글

코코냐
2023.07.13

deprecated 없이가 아니라, 1.17, 1.18에서 deprecated 되었을 가능성이 높습니다. 보통 대체제가 냐오면 같이 대체제 설명을 해주니, 그걸 찾아보는게 빠를겁니다.

엘라스키
2023.07.13
@코코냐

이미 다 확인한 내용입니다. 위에 참조 링크도 넣어놨는데, 좀 더 확인하고 답변 달아주시면 감사하겠습니다.

1.16.5 https://nekoyue.github.io/ForgeJavaDocs-NG/javadoc/1.16.5/net/minecraftforge/common/capabilities/Capability.html

1.17.1 https://nekoyue.github.io/ForgeJavaDocs-NG/javadoc/1.17.1/net/minecraftforge/common/capabilities/Capability.html

Capability 리워크 https://github.com/MinecraftForge/MinecraftForge/pull/8116

https://gist.github.com/50ap5ud5/beebcf056cbdd3c922cc8993689428f4#capabilities


일반적으로 @deprecated을 달고 다른 코드를 사용하도록 알려주는데 그냥 아예 다 사라져버려서 문제입니다.

코코냐
2023.07.14
@엘라스키

포지 자체가 문서가 개판이라 큰 도움이 되지 않을 가능성이 높습니다. 주변 커밋 다 확인해보셨냐요?

엘라스키
2023.07.14
@코코냐

네 확인해봤습니다.

1.16.5 에서 1.17.1로 넘어갈 때 제거되었다는 것만 알겠네요. Capability 클래스 자체는 그대로 있는데 IStorage가 삭제되었습니다.

IStorage 내부에 있는 writeNBT, readNBT도 같이 삭제되었습니다.

코코냐
2023.07.14
@엘라스키

Build: 1.17.1-37.0.74 - Fri Oct 01 05:54:38 GMT 2021

lexmanos:

Capability rework to get rid of @CapabilityInject and use CapabilityToken as the identifier, deprecated old system for removal in 1.18. (#8116)

 

변경사항 검색으로 5분도 채 되지 않아 관련 정보가 냐옵니다. 해당 PR 확인해보셨냐요?

엘라스키
2023.07.14
@코코냐

공식 깃허브 들어가서 찾았습니다.

https://github.com/MinecraftForge/MinecraftForge/issues/7622

리워크 되는건 알고 있었지만 IStorage 관련 내용은 변경사항에 안 나와있네요.

IStorage가 대체제 없이 제거되어서 기존 코드를 다시 활용하진 못하겠네요.

도움 주셔서 감사합니다.

뉴스 및 창작물
/files/thumbnails/761/908/003/262x150.crop.jpg?20241025153749

건축

서울 숭례문(崇禮門) 4

KHC

2024-10-25

2

/files/thumbnails/578/899/003/262x150.crop.jpg?20241010142350

건축

경주 월정교 1

KHC

2024-10-10

2

/files/thumbnails/219/899/003/262x150.crop.jpg?20241009200950

건축

송전탑+도시 2

dbasd12

2024-10-09

2

/files/thumbnails/246/898/003/262x150.crop.jpg?20241008102328

레드스톤

단다단 - 오토노케(オトノケ) | 마인크래프트 노트블럭 커버

노트블럭전문가

2024-10-08

1

/files/thumbnails/348/896/003/262x150.crop.jpg?20241006103035

디도스/봇테러등등을 낚는 방법 4

물귀신

2024-10-06

3