수색…


소개

Forge를 사용하여 단순하고 장식적인 블록을 만드는 것은 야심 찬 모더가 배워야 할 첫 번째 작업 중 하나입니다. 그 방법은 다양한 버전의 Minecraft에서 변경되었으며 실수를 저지르기 쉬운 숫자 때문에 1.7.10의 "보통"난이도 일 가능성이 큽니다.

비고

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

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

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

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

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

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

블록 클래스

먼저 블록을 나타내는 클래스가 필요합니다.

public class CustomBlock extends Block {

    public CustomBlock () {
        super(Material.ROCK);
        setHardness(1.0f);
        setHarvestLevel("pickaxe", 0);
        setResistance(1.0f);
        setCreativeTab(CreativeTabs.DECORATIONS);
        this.setSoundType(SoundType.STONE);
    }
}

심지어 여기에는 몇 가지 수정이 가능합니다 : 재료 (피스톤에 의해 눌려 질 수 있는지, 손으로 파손될 수 있는지와 같은 일부 속성을 제어 함), 경도 (파손 소요 시간), 수확 수준 (적절한 공구 및 공구 재질 :이 경우 목조 곡괭이), 저항 (폭발), 창의적 메뉴에 표시되는 탭 및 단계별 사운드가 포함됩니다.

이것은 멋진 기능 블록이 있어야 할 곳이지만, 지금은 우리가 멋진 것처럼 보이는 블록을 만들고 있습니다. 그래서 끝났습니다.

블록 모델 JSON

다음으로 우리는 Minecraft에게 우리 블록이 보이기를 원하는 것을 말할 필요가 있습니다.

{
    "parent": "block/cube_all",
    "textures": {
        "all": "example:blocks/decorative"
    }
}

블록을 등록한 후에는 그 작업이 모두 필요합니다. 유일한 중요한 것은 파일 이름이 블록을 등록하는 데 사용되는 레지스트리 이름과 일치 모두 소문자로해야한다는 것입니다 (1.11+ 파일 이름은 소문자해야합니다, 그냥 대소 문자를 구분된다 이전).

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

여기서 블록 모델은 block / cube_all의 부모를 사용합니다. 즉, 제공된 모든 텍스처가 모든면에서 사용됩니다. 다음과 같은 다른 기본 모델도 있습니다.

  • 블록 / 큐브 (6 개의면 모두 독립적으로 할당 됨)
  • block / cube_bottom_top (측면과 독립적 인 상단 및 하단면)
  • 블록 / 방향성 (방향성 블록, 예 :로)
  • 블록 / 십자가 (꽃, 키가 큰 풀)
  • 블록 / 자르기 (밀, 당근)

각 모델은 이름 ID (예 : "all" 또는 "top" )로 사용하는 텍스처를 지정합니다. 불확실한 경우 부모 모델을보고 그 이름이 무엇인지 확인하십시오. 잘못 지정된 텍스처는 오류가 없는 누락 된 텍스처 문제를 일으킬 수 있습니다.

전체 사용자 정의 모델을 작성하거나 사용자 정의 상위 모델을 작성할 수도 있습니다. 그러나 지금은 충분할 것입니다.

텍스처를 만드는 것을 잊지 말고 decorative.png 이라는 이름을 지정하고 (JSON 파일이 지정한대로) src\main\resources\assets\example\textures\blocks\

차단 등록

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

Block myBlock = new CustomBlock();
string registryname = "my_block";
block.setRegistryName(registryname);
block.setUnlocalizedName(block.getRegistryName().toString());
GameRegistry.register(block);

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

오, 당신도 너무 목록에 존재할 수있는 항목 버전을 원하십니까? 1.7.10으로 따로 작성되어 이렇게 작성되었습니다.

ItemBlock ib = new ItemBlock(block);
ib.setRegistryName(registryname);
GameRegistry.register(ib);

우리는 ItemBlock의 레지스트리 이름을 우리 블록과 같은 문자열로 설정했다. 이것은 블록을 그들의 ItemBlock 카운터 파트로 그리고 그 반대로 만드는 방법입니다.

그러나 기다려라, 그 이상이있다!

블록에 항목 양식 이 있지만 해당 항목에 아직 모델이나 텍스처가 없습니다! 모델은 블록에 대해서는 자동으로 등록되지만 항목에는 자동으로 등록되지 않습니다. 이 메시지 는 클라이언트 프록시에서만 호출 할 수 있으며 변종이있는 블록 (울 또는 잎)은 포함하지 않습니다.

ModelLoader.setCustomModelResourceLocation(
    ib , 0, new ModelResourceLocation(ib.getRegistryName(),"normal"));

일반적으로 Forge로 Item Model JSON이 필요하지 않으며 바닐라는 블록 모델을 대신 사용합니다. 그러나 항상 그런 것은 아닙니다. Item 모델 JSON이 필요한 경우 블록 JSON에 부모 클래스를 추가하고 src\main\resources\assets\example\models\item\ 에 블록의 레지스트리 이름과 동일한 파일 이름으로 저장합니다.

{
    "parent": "example:block/my_block"
}


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