본문 바로가기
Game Dev/MineCraft - Mod

랜덤박스 티어별로 생성 및 랜덤아이템교환기능 추가하기

by [방울] 2014. 12. 1.

 

 

 

 

 

일단 bellcraft.items 패키지에 ItemRandomBox 클래스로 가줍니다.

그 다음 다음과같이 코딩(...강좌인데 너무 성의없군)합니다.

 

package bellcraft.items;

import java.util.List;
import java.util.Random;

import bellcraft.core.BellCraft;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;

public class ItemRandomBox extends Item {
	private final String customUnlocalizedName;
	private final String customName;
	
	public ItemRandomBox(String arg1, String arg2)
	{
		super();
		setCreativeTab(BellCraft.tab); // 방울크래프트 탭에 아이템 추가
		setMaxStackSize(1); // 아이템을 한칸에 최대 한개씩 가질 수 있게한다.
		customUnlocalizedName = arg1; // 아이템명 받아옴
		customName = arg2; // 아이템 정보 받아옴
	}
	
	@Override
	public String getUnlocalizedName()
	{
		return BellCraft.MODID + ".item" + customUnlocalizedName; //아이템 고유이름 지정
	}
	
	@Override
	public String getUnlocalizedName(ItemStack item)
	{
		return BellCraft.MODID + ".item" + customUnlocalizedName; //아이템 고유이름 지정 
	}
	
	@Override
	public void registerIcons(IIconRegister register)
	{
		this.itemIcon = register.registerIcon(BellCraft.MODID + ":Item" + customUnlocalizedName); //아이템의 이미지 경로지정
	}
	
	@Override
	public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean par4)
	{
		list.add(EnumChatFormatting.AQUA + customName); // 아이템 정보 등록, 앞은 글씨 색
	}
	
	public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
	{
		par3EntityPlayer.inventory.setInventorySlotContents(par3EntityPlayer.inventory.currentItem, randomItem()); // 아이템 교환
				
		return super.onItemRightClick(par1ItemStack, par2World, par3EntityPlayer);
	}
	
	private ItemStack randomItem()
	{
		Random r = new Random();
		int i = r.nextInt(1000); // 0~999 까지의 랜덤 정수 생성
		
		if(i == 0)
		{
			return new ItemStack(net.minecraft.init.Items.diamond_pickaxe, 1);
		} else if (i < 100) {
			return new ItemStack(net.minecraft.init.Items.arrow, 32);		
		} else if (i < 200) {
			return new ItemStack(net.minecraft.init.Items.bed, 1);
		} else if (i < 300) {
			return new ItemStack(net.minecraft.init.Items.beef, 32);
		} else if (i < 400) {
			return new ItemStack(net.minecraft.init.Items.boat, 1);
		} else if (i < 500) {
			return new ItemStack(net.minecraft.init.Items.book, 32);
		} else if (i < 600) {
			return new ItemStack(net.minecraft.init.Items.bread, 32);
		} else if (i < 650) {
			return new ItemStack(net.minecraft.init.Items.bucket, 8);
		} else if (i < 700) {
			return new ItemStack(net.minecraft.init.Items.cake, 8);
		} else if (i < 800) {
			return new ItemStack(net.minecraft.init.Items.apple, 32);
		} else {
			return new ItemStack(net.minecraft.init.Items.baked_potato, 32);
		}
	}
}

 

 

저번 강좌에 클래스를 덕지덕지 생성하는게 아닌 효율적으로 아이템을 추가하는방법에 대해 알려드렸었죠?

그걸 이용해서 티어4까지 있는 랜덤박스를 구현하려합니다.

현재 아이템을 우클릭하면 랜덤확률로 아이템을 증정하게 코딩이 되어있으나, 수정이 필요한 상태입니다

티어별 희기템 증정확률 구현도 안되어있고, 효율적인 아이템리스트 추가도 안되어있습니다.

일단 임시로 해두었어요.

 

 

그 다음 bellcraft.items 패키지에 Items 클래스로 가줍니다.

그리고 다음소스를 추가해줍니다.

 

	public static Item RandomBoxTier1;
	public static Item RandomBoxTier2;
	public static Item RandomBoxTier3;
	public static Item RandomBoxTier4;


		RandomBoxTier1 = new ItemRandomBox("RandomBoxTier1", "당신은 1단계 아이템을 얻을 수 있습니다."); //"You can get a Tier 1 items.");
		RandomBoxTier2 = new ItemRandomBox("RandomBoxTier2", "당신은 2단계 아이템을 얻을 수 있습니다."); //"You can get a Tier 2 items.");
		RandomBoxTier3 = new ItemRandomBox("RandomBoxTier3", "당신은 3단계 아이템을 얻을 수 있습니다."); //"You can get a Tier 3 items.");
		RandomBoxTier4 = new ItemRandomBox("RandomBoxTier4", "당신은 4단계 아이템을 얻을 수 있습니다."); //"You can get a Tier 4 items.");

		GameRegistry.registerItem(RandomBoxTier1, "RandomBoxTier1");
		GameRegistry.registerItem(RandomBoxTier2, "RandomBoxTier2");
		GameRegistry.registerItem(RandomBoxTier3, "RandomBoxTier3");
		GameRegistry.registerItem(RandomBoxTier4, "RandomBoxTier4");

 

위 선언은 클래스 안에 해주시고, 아래 레지스트부분은 registerItems 메소드에 넣어주세요.

 

그 다음 언어설정을 해야죠?

BellCraft.itemRandomBoxTier1.name=랜덤 박스 1단계
BellCraft.itemRandomBoxTier2.name=랜덤 박스 2단계
BellCraft.itemRandomBoxTier3.name=랜덤 박스 3단계
BellCraft.itemRandomBoxTier4.name=랜덤 박스 4단계

이런식으로 하시면 됩니다.

 

텍스쳐는 기존위치에서 파일명만 ItemRandomBoxTier1.png ~ ItemRandomBoxTier4.png 까지 추가하시면 됩니다.

 

그러면 이렇게 됩니다.

 

밑에 파란색 Bell Craft는 웨일라 모드 적용시켜서 보이는거에요.

드디어 텍스쳐를 만들어서 적용시켰네요

64*64 텍스쳐!

텍스쳐는 포토샵에서 배경을 투명하게하신 후, 16*16 & 32*32 & 64*64 픽셀 사이즈로 직접 만드시면됩니다.

댓글