- 192
- 2
- 9
Всем доброго времени суток!
Не могу понять в чем дело... Хотел покрасить текстуру и покрасил, работает!
Но теперь нужно чуточку усложнить и покрасить конкретный слой в этой текстуре, а как это сделать, не соображаю
Полез смотреть броник и яйца, но в обоих случаях так и не понял, где прячется логика окраса конкретного слоя.
Скопипастил код с ваниллки, у меня красятся сразу все слои. Куда копать?)
P.S. Пытался сделать универсальный класс для создания предмета с сабайди или без, так что не ужасайтесь
Не могу понять в чем дело... Хотел покрасить текстуру и покрасил, работает!
Но теперь нужно чуточку усложнить и покрасить конкретный слой в этой текстуре, а как это сделать, не соображаю
Полез смотреть броник и яйца, но в обоих случаях так и не понял, где прячется логика окраса конкретного слоя.
Скопипастил код с ваниллки, у меня красятся сразу все слои. Куда копать?)
P.S. Пытался сделать универсальный класс для создания предмета с сабайди или без, так что не ужасайтесь
ItemBase:
package mod.test.item;
import java.util.List;
import mod.test.Vars;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemDye;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
public class ItemBase extends Item {
@SideOnly(Side.CLIENT)
private IIcon[] icons;
private int[] colors;
private String[] names;
public ItemBase(String[] names, int stack, int[] colors) {
this.setUnlocalizedName(names[0]);
this.setTextureName(Vars.MODID + ":" + names[0]);
this.setMaxStackSize(stack);
this.setCreativeTab(Vars.TAB);
this.colors = colors;
this.names = names;
if (names.length > 1 || colors.length > 0) this.setHasSubtypes(true);
}
public ItemBase(String name, int stack, int[] colors) {
this(new String[] { name }, stack, colors);
}
public ItemBase(String name) {
this(new String[] { name }, 1, new int[] {});
}
public ItemBase(String[] names) {
this(names, 1, new int[] {});
}
public ItemBase(String name, int[] colors) {
this(new String[] { name }, 1, colors);
}
public ItemBase(String[] names, int[] colors) {
this(names, 1, colors);
}
public ItemBase(String name, int stack) {
this(new String[] { name }, stack, new int[] {});
}
public ItemBase(String[] names, int stack) {
this(names, stack, new int[] {});
}
@Override
public String getUnlocalizedName(ItemStack stack) {
return "item." + (names.length < stack.getItemDamage() ? names[0] : names[0] + "_" + names[stack.getItemDamage()+1]);
}
@SideOnly(Side.CLIENT)
public boolean requiresMultipleRenderPasses() {
return true;
}
@SideOnly(Side.CLIENT)
public IIcon getIconFromDamageForRenderPass(int meta, int rPass) {
return rPass > 0 ? super.getIconFromDamageForRenderPass(meta, rPass) : icons[1];
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister reg) {
super.registerIcons(reg);
icons = new IIcon[colors.length > 0 ? 2 : names.length];
if (colors.length > 0) {
icons[0] = reg.registerIcon(Vars.MODID + ":" + names[0]);
icons[1] = reg.registerIcon(Vars.MODID + ":" + names[0] + "_overlay");
return;
}
for (int i = 1; i < names.length; i++)
icons[i-1] = reg.registerIcon(Vars.MODID + ":" + names[0] + "_" + names[i]);
}
@Override
@SideOnly(Side.CLIENT)
public int getColorFromItemStack(ItemStack stack, int renderPass) {
return colors.length == 0 ? 0xFFFFFF : colors[stack.getItemDamage()];
}
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs tab, List items) {
if (colors.length == 0 && names.length < 2) return;
for (int dmg = 0, size = colors.length == 0 ? names.length-1 : colors.length; dmg < size; dmg++)
items.add(new ItemStack(item, 1, dmg));
}
}