[1.6.4][Forge]: Броня с метадатой... (слив кода)

timaxa007

Модератор
5,831
409
672
ArmorMasks
Код:
public class ArmorMasks extends ItemArmor {

@SideOnly(Side.CLIENT) private Icon[] iconArray;// Объявляем переменную с Array для наших иконок.

public static final String[] type_mask = new String[] {// типа переменная будет отвечать за количество масок и имена для масок и т.п.
"mini",
"max",
"bla",
"4",
"5",
"test"
};

public ArmorMasks(int id) {
super(id, PackFurniture.proxy.COSTUME, 0, 0);
setCreativeTab(PackFurniture.proxy.tabFurniturePack);
setTextureName("timaxa007:armor/mask");// объявляем не совсем текстуру, но в этом случаи да...
setUnlocalizedName("armor_masks");
}

public String getUnlocalizedName(ItemStack is){
if (is.getTagCompound() != null && is.getTagCompound().hasKey("TypeMask")) {// Если есть теги и среди них есть тег "TypeMask", то...
return super.getUnlocalizedName() + "." + type_mask[is.getTagCompound().getInteger("TypeMask")];// Будет именовать типа item.armor_masks.mini.name
} else {
return super.getUnlocalizedName();// если нету то будет именоваться item.armor_masks.name
}
}

public void addInformation(ItemStack is, EntityPlayer player, List list, boolean flag){
if (is.getTagCompound() != null && is.getTagCompound().hasKey("TypeMask")) {// Если есть теги и среди них есть тег "TypeMask", то...
// я вывожу информацию какая информация храниться в "TypeMask", иногда нужно иногда нет, но кому как.
list.add("TypeMask: " + is.getTagCompound().getInteger("TypeMask") + "/" + type_mask[is.getTagCompound().getInteger("TypeMask")]);
} else {
// можно и не писать тут else, но у меня такая привычка
}
}

@SideOnly(Side.CLIENT)
public void getSubItems(int id, CreativeTabs table, List list){
// Учитывая, что у нас нету как получить предмет другим способом как кроме креатива.
// Если будет нужен типа рецепта, то кроме кривого рецепта или более менее рецепта, только могу.
for (int j = 0; j < type_mask.length; ++j) {
list.add(addTag(j));// здесь мы вызываем свой метод который передаёт значение Integer в метод addTag.
}
//list.add(new ItemStack(id, 1, 0));// Это стандартно вызывается, иногда я его использую для проверки этой брони без тегов, но кому как.
}

private static ItemStack addTag(int par1) {//Наш метод
ItemStack is = new ItemStack(PackFurniture.proxy.armor_masks, 1, 0);// наш предмет (у меня так скажем через proxy, но у вас может быть по другому)
NBTTagCompound tag = new NBTTagCompound();// типа создаём новые теги, если конечно мы объявим...
tag.setInteger("TypeMask", par1);// создаём тег "TypeMask" с переменой Integer со значением par1...
is.setTagCompound(tag);// и новый объявленный(-ые) тег(-и) сохраняем в нашем ItemStack'е
return is;
}

public String getArmorTexture(ItemStack is, Entity entity, int slot, String type) {
if (is.getTagCompound() != null && is.getTagCompound().hasKey("TypeMask")) {// Если есть теги и среди них есть тег "TypeMask", то...
return "timaxa007:textures/armor/mask_" + type_mask[is.getTagCompound().getInteger("TypeMask")] + ".png";//типа имя файла mask_mini.png
} else {
return "timaxa007:textures/armor/mask.png";//Если нет, то будет mask.png (думаю и так было понятно)
}
}

@SideOnly(Side.CLIENT)
public boolean requiresMultipleRenderPasses() {return true;}//Типа чтобы не конфликтовала itemIcon с нашей iconArray.

public Icon getIcon(ItemStack is, int pass) {
if (is.getTagCompound() != null && is.getTagCompound().hasKey("TypeMask")) {// Если есть теги и среди них есть тег "TypeMask", то...
return iconArray[is.getTagCompound().getInteger("TypeMask")];//наша иконка
} else {
return itemIcon;// типа будет использовать стандартную объявленную иконку itemIcon, нужно особенно когда он используется для иконки креативной вкладке.
}
}

@SideOnly(Side.CLIENT)
public void registerIcons(IconRegister ir){//регистрируем наши иконки.
super.registerIcons(ir);
itemIcon = ir.registerIcon(getIconString());// Он и так стандартно так объявляется, но на всякий случай так делаем.
iconArray = new Icon[type_mask.length];// Даём понять количество объявленных иконок.
for (int i = 0; i < type_mask.length; ++i) {
iconArray[i] = ir.registerIcon(getIconString() + "_" + type_mask[i]);// и получается типа "timaxa007:armor/mask_mini"
}
}

}

Если комуто будет нужен хоть какой рецепт на создаение брони с тегом напишете, что типа вам нужен хоть какой рецепт.
Это код по проще с использованием Тегом(-ами). Я использую чуть по-сложнее, так как мне более удобное использование Array[][].
 
Сверху