내 Minecraft 블록 보호 플러그인을 Bukkit에서 Sponge로 이식하므로 SpongeForge에서 개조 기능을 추가 할 수 있습니다. Bukkit은 머티리얼 enum을 사용하여 게임에서 유효한 모든 블록 유형을 식별합니다. 내 모든 보호는이 같은 config.yml 파일에 지정된 : 열거와 어떻게 기존 정적 상수를 열거 형에 래핑 할 수 있습니까?
CHEST:
Price: 0.75
InteractMember: R
...
이는 config 파일에서 키 이름, CHEST을하고, (Bukkit.getMaterial와 실제 열거 값을 얻기 위해 매우 쉬웠다 문자열 이름). 불행히도 Sponge는 코드에서 어디서나 enum을 사용하지 않기 때문에 블록 유형 목록은 static final int 상수를 포함하고있는 클래스이며 이름을 통해 반복하거나 검색 할 수 없습니다. 나는 반사를 시도했다. ..
HashMap<String,Integer> blockTypes = new HashMap<String,Integer>();
for(Field field, BlockTypes.class.getFields())
blockMap.put(field.getName(), field.getInt(null));
그러나 단지 상수를위한 int 값을 얻을 수있다.
public enum Blocks {
ACACIA_FENCE(BlockTypes.ACACIA_FENCE),
ACACIA_STEPS(BlockTypes.ACACIA_STEPS),
...
YELLOW_FLOWER(BlockTypes.YELLOW_FLOWER);
private final BlockTypes type;
Blocks(BlockTypes type) {
this.type = type;
}
public BlockTypes getType() { return type; }
public static BlockTypes getByName(String name) {
// retrieve enum by name
}
}
난 정말이 일을 붙어 또는 AM이 다른있다 : 나는 자신이 코드에서 사용하고, 나는 정적 상수에 대한 내 자신의 열거 래퍼를하지 않고 그렇게 할 수있는 방법을 찾을 수없는 상수가 필요합니다 나는 실종 됐어?
위대한 답변, 감사합니다! BlockType과 BlockTypes 클래스 사이의 관계를 알지 못했습니다. 나는 또한 CatalogType 인터페이스가 어떻게 작동했는지 알지 못했다. 아직도 스폰지를 처음 접했을 때 배울 점이 많습니다. 나는이 카탈로그를 만드는 방법이 enum을 사용하는 것보다 훨씬 융통성이 있다는 것을 알고있다. 그리고 예 반사 코드는 매우 가난했습니다. 나는 그것을 함께 던져서 일할 무언가를 얻으 려합니다. –