수색…


소개

Forge로 간단한 아이템을 만드는 것은 야심 찬 modder가 배워야 할 첫 번째 작업 중 하나입니다. 그 방법은 다양한 버전의 Minecraft에서 바뀌었고 실수를 저지르는 실수가 많았 기 때문에, 특히 적절하게 렌더링 할 때 "보통"난이도의 게시물 1.7.10에있었습니다.

비고

문제가 발생하여 사용자 정의 항목에 누락 된 텍스처 (검은 색 / 자주색) 또는 모델 (보유시 너무 큰 기본 큐브)이 있으면 로그를 확인하십시오. 당신이 올바르게 등록했다면, 이런 종류의 문제는 거의 항상 로그에 나타날 것입니다.

가장 먼저 나타나는 것은 "Exception loading model for variant..." 또는 유사하거나 올바르게로드되지 못한 블록 또는 항목을 알려주는 것입니다. at... 시작하는 12 줄 정도가 지나면 at... 다른 줄이 시작 Caused by...

이 "원인"행은 중요한 파일이며, 어떤 파일이 올바르게로드되지 않았으며 다음과 같은 몇 가지 오류 중 하나 일 수 있음을 알려줍니다.

  • 잘못된 JSON (JSON 파일이 유효하지 않고 오타가 있음)
  • 파일을 찾을 수 없음 (Minecraft가 찾고있는 파일의 이름이 올바르지 않거나 올바른 위치에 있지 않음)
  • 누락 된 변형 예외 (Blockstate JSON이 불완전 함)

실수 한 번으로 두 번 이상 실패 할 수도 있습니다! 어떤 항목이 문제인지 모르는 경우 작동하는 모든 블록과 항목을 주석으로 처리하고 오류 목록을 해당 블록 (또는 블록)까지 줄이십시오. 이 작업을 여러 번해야 할 수도 있습니다.

또한 믹싱 텍스처는 주어진 도메인 (mod ID)에 대해 누락 된 모든 리소스를 단순한 목록으로 다르게 표시합니다.

항목 클래스

이 부분은 Minecraft의 버전에 비해 많이 변경되지 않았지만 정확한 메소드 서명과 클래스 계층 구조에 약간의 변형이있었습니다. 기본 아이템 (스틱이나 잉곳과 같은 기능이없는 아이템 : 그 둘 모두 무조건 아이템입니다!)

public class CustomItem extends Item {

    public CustomItem () {
        super();
        this.setMaxDamage(0);
        this.setCreativeTab(CreativeTabs.MISC);
    }
}

블록과 달리이 시점에서는 커스터마이즈 할 공간이별로 없습니다. 우리가 할 수있는 일은 아이템이 손상을 입을 수 있는지 여부 (툴이 이것을 사용하는지)와 존재하는 크리에이티브 탭을 변경하는 것입니다. 아이템을 GameRegistry에 등록 할 때 처리 할 이름과 텍스처.

그러나 이것은 물품을 들고, 휴대하고, 떨어 뜨리거나, 만들거나, 빙빙 돌리거나, 다른 방법으로 사용하기 위해 필요한 모든 것입니다. Minecraft의 일부 항목 (예 : 스틱)에는 고유 한 클래스조차 없으며 단순히 new Item() 합니다. 여기에서 할 수 있지만 추가 기능이있는 항목에는 클래스가 필요합니다.

아이템 모델

블록과 마찬가지로 항목도 모델이 필요합니다.

{
    "parent": "item/generated",
    "textures": {
        "layer0": "example:items/basic"
    }
}

아이템을 등록한 후에는 그것이 작동하기 위해 필요한 모든 것입니다. 유일한 중요한 점은 파일 이름이 블록 등록에 사용 된 레지스트리 이름과 일치하며 모두 소문자이어야한다는 것입니다 (1.11 이상의 파일 이름은 대소 문자를 구분하기 전에 소문자 여야합니다).

"layer0"은 필요한 유일한 텍스처이고 다른 텍스처는 전혀 지정되지 않을 것입니다 (포션과 가죽 갑옷과 같은 일부 아이템에는 "레이어 1"이 있지만). 모든 이름은 블록과 달리 item/builtin ( item/builtin 의 내부 최상위 모체 모델)에 의해 정의됩니다.

모델 JSON 파일의 이름을 my_item.json ( my_item.json 레지스트리 이름과 일치)이라고 지정하고 src\main\resources\assets\example\models\item\ (여기서 example 은 기본 mod 클래스의 @Mod 주석).

또한 항목의 질감을 만들고 이름을 basic.png 하고 src\main\resources\assets\example\textures\items\

여기에있는 항목 모델은 / 생성 된 항목의 부모를 사용합니다. 즉, 제공되는 단일 질감이 (대부분의 비 블록 항목과 마찬가지로) 사용되며 기본 방향으로 플레이어의 손에 들려 있음을 의미합니다. 또한 다양한 디스플레이 방향을 지정하는 항목 / 핸드 헬드가 있습니다 (도구의 경우). 항목은 부모의 값보다 우선하는 자체 "표시"속성을 제공 할 수도 있지만 99.9 %의 사용에는 필요하지 않습니다.

상품 등록

아이템 등록은 메인 mod 클래스 나 preInit 동안 메인 mod 클래스에서 호출 된 ModItems 클래스 메쏘드에서 이루어집니다.

Item item = new CustomItem();
string registryname = "my_item";
item.setRegistryName(registryname);
item.setUnlocalizedName(item.getRegistryName().toString());
GameRegistry.register(item);

item.setUnlocalizedName(item.getRegistryName().toString()); 을 사용하는 중요한 이유가 있습니다 item.setUnlocalizedName(item.getRegistryName().toString()); 게다가! 모드의 언어 파일 충돌을 피하기 위해 항목의 현지화되지 않은 이름에 mod ID가 포함되도록합니다.

이제 항목에 모델이 필요합니다. 1.7.10에서는 작업이 어려워지고 Minecraft에로드 할 텍스처의 이름을 알려주고 항목 생성자에 지정할 수 있습니다.

final ModelResourceLocation fullModelLocation = new ModelResourceLocation(item.getRegistryName().toString(), "inventory");
ModelBakery.registerItemVariants(item, fullModelLocation);
ModelLoader.setCustomMeshDefinition(item, new ItemMeshDefinition()
    {
        public ModelResourceLocation getModelLocation(ItemStack stack)
        {
            return fullModelLocation;
        }
    });

이 섹션 참조 된 클래스가 전용 서버에 없기 때문에 클라이언트 측에만 위치 해야합니다 (예 : 클라이언트 프록시).

ModelLoader.setCustomModelResourceLocation(item, metadata, resourceLocation) 와 같은 변형을 가진 항목을 등록하는 것은 ModelLoader.setCustomModelResourceLocation(item, metadata, resourceLocation) 사용하여 다른 방법으로 수행해야합니다.이 방법을 사용하면 Blockstate 파일을 사용하여 변형을 지정할 수 있습니다 (대체 방법 보다 훨씬 선호됨). 우리의 항목은 변형을 사용하지 않으므로 완료되었습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow