오늘은 광물 추가 및 월드젠을 해봅시다~_~
먼저 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 |
댓글