개발자로/MinecraftMod

Minecraft Forge Add Custom Block

ReasonyB 2023. 7. 4. 20:02

블럭 이름이 CBLighter라면

필요한 파일

  • blockstates의 CBLighter.json
  • models/block의 CBLighter.json
  • models/item의 CBLighter.json(선택사항)
  • textures/block의 CBLighter.png(선택사항)
  • CBLighter.java (선택사항)

필요한 과정

  1. 등록(DeferredRegister 활용)
public static final DeferredRegister<Block> blocks = DeferredRegister.create(ForgeRegistries.BLOCKS, "<MODID>");
public static final RegistryObject<Block> CBLIGTHER = blocks.register("CB_Lighter", () -> new Block(BlockBehaviour.Properties.of(어쩌구).저쩌구()));

-> CBLighter.java가 있다면 new Block(...)을 new CBLighter(...)로 변경

  1. 만약 추가한 블럭이 BlockEntity라면
  • 추가 파일
    • CBLighterBlockEntity.java, BlockEntity 클래스 확장
    • CBLighterBlockRenderer.java,
    • CBLighter.java, EntityBlock을 implements
  • 과정
    1. CBLighter.java에 newBlockEntity(...)를 오버라이드 -> 여기에 CBLighterBlockEntity 클래스 인스턴스 제작
    2. CBLighter.java에 getTicker(...)를 오버라이드 -> 여기에 CBLighterBlockEntity의 tick함수 불러오기
    3. CBLighterBlockEntity.java의 constructor에서 super(blocks.CBLIGHTER.get(), ...); 호출
    4. CBLighterBlockEntity 등록
      public static final DeferredRegister<BlockEntityType<?>> blockentitytype = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, "<MODID>");
      public static final RegistryObject<BlockEntityType<CBLighterBlockEntity>> CBLIGHTER = blockentitytype.register("CB_Lighter", () -> BlockEntityType.Builder.of(CBLighterBlockEntity::new, blocks.CB_Lighter.get()).build(null));
    5. CBLighterBlcokRenderer.java => 아직 모르겠음.

기타 유의 사항

위의 blocks라던지, blockentitytype이라던지 DeferredRegister 형태의 레지스트리는 모드의 constructor에서 이벤트 버스를 찾아서 이를 등록해야한다.

IEventBus modbus = FMLJavaModLoadingContext.get().getModEventBus();
blocks.register(modbus);
blockentitytype.register(modbus);