개발자로/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 (선택사항)
필요한 과정
- 등록(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(...)로 변경
- 만약 추가한 블럭이 BlockEntity라면
- 추가 파일
- CBLighterBlockEntity.java, BlockEntity 클래스 확장
- CBLighterBlockRenderer.java,
- CBLighter.java, EntityBlock을 implements
- 과정
- CBLighter.java에 newBlockEntity(...)를 오버라이드 -> 여기에 CBLighterBlockEntity 클래스 인스턴스 제작
- CBLighter.java에 getTicker(...)를 오버라이드 -> 여기에 CBLighterBlockEntity의 tick함수 불러오기
- CBLighterBlockEntity.java의 constructor에서 super(blocks.CBLIGHTER.get(), ...); 호출
- 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));
- CBLighterBlcokRenderer.java => 아직 모르겠음.
기타 유의 사항
위의 blocks라던지, blockentitytype이라던지 DeferredRegister 형태의 레지스트리는 모드의 constructor에서 이벤트 버스를 찾아서 이를 등록해야한다.
IEventBus modbus = FMLJavaModLoadingContext.get().getModEventBus();
blocks.register(modbus);
blockentitytype.register(modbus);