- 23
- 1
У меня есть предмет с метадатой. И при регистрации рендера метадат нужно указывать ModelResourceLocation, состоящий из ResourceLocation и "inventory". С простыми предметами в первой части можно обойтись <item>.getRegistryName, но если такое проделать с метадатой, то либо у них будут тексутры одного и того же предмета, либо текстуры уже существующих предметов. Я пробовал туда указывать разные ResourseLocation, вроде
но если так делать, то он не находит модель. Принимается только registryName зарегистрированных предметов, если просто создать объект Предметом и не зарегать его, то модель не находится. мне нужно указать разные текстуры для разных метадат. Код:
new ResourceLocation("redcraft", "iron_rod")
но если так делать, то он не находит модель. Принимается только registryName зарегистрированных предметов, если просто создать объект Предметом и не зарегать его, то модель не находится. мне нужно указать разные текстуры для разных метадат. Код:
Java:
package ru.darknd.redcraft.items;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.text.translation.I18n;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import ru.darknd.redcraft.RedCraft;
public class rod extends Item {
public rod (String name){
this.setCreativeTab(RedCraft.redCraftTab);
this.setUnlocalizedName(name);
this.setRegistryName(name);
this.setHasSubtypes(true);
}
@SideOnly(Side.CLIENT)
public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items)
{
if (this.isInCreativeTab(tab))
{
for (int i = 0; i < 4; ++i)
{
items.add(new ItemStack(this, 1, i));
}
}
}
@SideOnly(Side.CLIENT)
public String getItemStackDisplayName(final ItemStack stack)
{
final String name;
switch(stack.getMetadata())
{
case 0: name = "iron_rod"; break;
case 1: name = "aluminium_rod"; break;
case 2: name = "tin_rod"; break;
case 3: name = "test_rod"; break;
default: name = "rod"; break;
}
//Возвращаем название предмета
return I18n.translateToLocal("item." + name + ".name");
}
}
Код:
package ru.darknd.redcraft;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.*;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.common.util.EnumHelper;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import ru.darknd.redcraft.basic.ArmorBase;
import ru.darknd.redcraft.basic.Food.FoodBase;
import ru.darknd.redcraft.basic.Item.ItemBase;
import ru.darknd.redcraft.basic.Tools.*;
import ru.darknd.redcraft.items.dense_coal;
import ru.darknd.redcraft.items.rod;
public class ItemsRegister {
public static Item rod = new rod("rod");
public static void register() {
setRegister(rod);
}
@SideOnly(Side.CLIENT)
public static void registerRender() {
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(rod, 0, new ModelResourceLocation(iron_rod.getRegistryName(), "inventory"));
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(rod, 1, new ModelResourceLocation(aluminium_rod.getRegistryName(), "inventory"));
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(rod, 2, new ModelResourceLocation(aluminium_hoe.getRegistryName(), "inventory"));
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(rod, 3, new ModelResourceLocation(tin_hoe.getRegistryName(), "inventory"));
}
private static void setRegister(Item item) {
ForgeRegistries.ITEMS.register(item);
}
@SideOnly(Side.CLIENT)
private static void setRender(Item item) {
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(item.getRegistryName(), "inventory"));
}
}