오늘은 광물 추가 및 월드젠을 해봅시다~_~
먼저 bellcraft.blocks 패키지에 BlockOre 클래스를 맹글어줍니다.
앞으로 왠만한 임포트는 직접 해주세요.
빨간 밑줄 쳐진곳 마우스 갖다대면 임포트 추천나오는데, 거기서 나열된 클래스중에 마인크래프트 관련 클래스를 임포트해주시면됩니다.
public class BlockOre extends Block {
@SideOnly(Side.CLIENT) // 클라이언트에서만 작동
private IIcon icon;
private final String customUnlocalizedName;
public BlockOre(String arg1)
{
super(Material.rock); // 돌 재질의 블럭으로 설정
customUnlocalizedName = arg1; // 블럭 이름 받아옴
setHardness(4.0F); // 아이템 강도
setStepSound(Block.soundTypeAnvil); // 설치 및 그 위를 달렸을때 나는소리 설정
setBlockName("ore" + customUnlocalizedName); // 블럭 이름 설정
setCreativeTab(BellCraft.tab); // 크리에이티브탭 지정
}
@Override
public String getUnlocalizedName()
{
return BellCraft.MODID + ".ore" + customUnlocalizedName; // 다들 아시는 아이템 이름 설정 메소드
}
@Override
public void registerBlockIcons(IIconRegister register)
{
icon = register.registerIcon(BellCraft.MODID + ":ore" + customUnlocalizedName); // 블럭 아이콘 지정 ore[이름].png 형식
}
@Override
@SideOnly(Side.CLIENT) // 클라에서만 작동함
public IIcon getIcon(int side, int meta)
{
return icon;
}
}
설명은 주석 참고
그리고 블럭들을 관리해주는 클래스를 추가해줍니다.
bellcraft.blocks 패키지에 Blocks 클래스
public class Blocks {
public static Block oreRandom;
public static void registerBlocks()
{
oreRandom = new BlockOre("Random");
GameRegistry.registerBlock(oreRandom, "oreRandom");
}
}
Items 클래스와 매우 비슷한 구성.
저런식으로 아이템을 등록시켜주시면 됩니다.
그다음 bellcraft.core 패키지에 BellCraft 클래스안에 PreInitialize 메소드에 다음과같은 명령줄을 추가해줍니다.
Blocks.registerBlocks(); //블럭 등록
언어파일은 수정하실 줄 아시죠??
마크실행하셔서 아이템에 마우스 대보시면 이상하게 나오는 글자=바꿀글자
형식으로 하시면 됩니다.
알아두세요!
BellCraft.oreRandom.name=랜덤 광물
이런식으로 하시면 됩니다.
텍스쳐는 assets.bellcraft.textures.blocks 에 oreRandom.png로 광물의 한 면의 텍스쳐만 저장해주시면 됩니다.
어짜피 광물은 대부분 모든면이 다 똑같은 블럭인데 힘들게 6면 다 만드실 필요는 없지요.
(광물 외에 다른 의미있는? 블록을 만들기 위해 6면 텍스쳐를 지정해야하는 개발은 다음에 강좌하겠습니다.)
그 다음 광물 자동생성을 위해 광질시 만날 수 있게 해야죠!
bellcraft.world 패키지에 OreGeneration 클래스를 만들어줍니다.
public class OreGeneration implements IWorldGenerator {
@Override
public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider)
{
switch(world.provider.dimensionId) // 디멘션 ID 받아옴
{
case -1: // 지옥
break;
case 0: // 오버월드
generateOverworld(world, random, chunkX * 16, chunkZ * 16); // 광물 생성
break;
case 1: // 엔더드래곤
break;
}
}
private void generateOverworld(World world, Random random, int x, int z)
{
for (int i = 0; i < 2; i++) // i 최대값은 광물 젠 확률
{
int chunkX = x + random.nextInt(16); // 광물옆에 똑같은 광물이 붙어있을 확률 x축
int chunkZ = z + random.nextInt(16); // 위와 마찬가지 z축
int chunkY = random.nextInt(150); // 광물 젠 높이 (Y 150 미만 무작위 자연수)
new WorldGenMinable(Blocks.oreRandom, 50).generate(world, random, chunkX, chunkY, chunkZ);
}
}
}
주석 있으니 (..)
그 다음 모드 시작시 오어 제네레이션이 시작되도록 이벤트를 만들었으니 등록시켜줍니다.
bellcraft.core 패키지에 BellCraft 클래스의 Initialize 메소드에 다음 명령줄을 추가시켜줍니다.
GameRegistry.registerWorldGenerator(new OreGeneration(), 1); // 광물 제네레이션 이벤트 등록
음 잘 젠 되네요.
확률은 괜찮은걸지도.
다음엔 저 랜덤광물을 캐면 바로 랜덤주괴로 뿅! 하고 나오도록 해보겠습니다. (레드스톤처럼)
그 다음 랜덤주괴를 조합해서 랜덤상자를 만드는것도 추가해보도록 합시다.
'Game Dev > MineCraft - Mod' 카테고리의 다른 글
| 빌드 최적화 / 빌드시 한글주석 때문에 별 외계어가 뜰때 (2) | 2014.12.01 |
|---|---|
| 플레이어 로그인 이벤트 발생시 채팅띄우기 및 채팅 번역 (0) | 2014.12.01 |
| 랜덤박스 티어별로 생성 및 랜덤아이템교환기능 추가하기 (0) | 2014.12.01 |
| 특정한 기능을 하지 않는 아이템(주괴 등) 추가 및 오어딕셔너리 등록 및 아이템 설명 추가하기! (0) | 2014.11.30 |
| 서버 명령어 추가하기 (0) | 2014.11.30 |
댓글