Hey, I'm trying to teach myself Forge, and I've been doing my best to follow Shadowfacts' tutorial and change what I need to to work in 1.12, but I'm running into some issues. I've followed the tutorial along to adding in Corn, but my items are either being given the wrong texture (eg. Copper Ingot with Corn texture), or no texture at all. This affects both Items and ItemBlocks, though Blocks always have the correct texture once placed in the environment. If I don't assign a renderer to my Items, then my ItemBlocks work just fine, so I think the problem lies there.
Here are the files I think are relevant, I can post whatever I need to if asked, though, or I can make a git. I'd also appreciate any advice on other tutorials worth looking into, especially those that have been updated for 1.12.
@Mod.EventBusSubscriber
public class ModItems {
public static List<Item> itemsToReg;
public static ItemBase ingotCopper;
public static ItemCornSeed cornSeed;
public static ItemBase corn;
public static void init() {
}
@SubscribeEvent
public static void registerItems(RegistryEvent.Register<Item> event) {
itemsToReg = new ArrayList<Item>();
ingotCopper = register(new ItemBase("ingot_copper").setCreativeTab(CreativeTabs.MATERIALS));
cornSeed = register(new ItemCornSeed());
corn = register(new ItemBase("corn").setCreativeTab(CreativeTabs.FOOD));
event.getRegistry().registerAll(itemsToReg.toArray(new Item[0]));
}
private static <T extends Item> T register(T item) {
itemsToReg.add(item);
if (item instanceof ItemModelProvider) {
((ItemModelProvider)item).registerItemModel(item);
}
return item;
}
}
public class ItemBase extends Item implements ItemModelProvider {
protected String name;
public ItemBase(String name) {
this.name = name;
setUnlocalizedName(name);
setRegistryName(name);
}
@Override
public void registerItemModel(Item item) {
TestMod.proxy.registerItemRenderer(item, 0, name);
}
@Override
public ItemBase setCreativeTab(CreativeTabs tab) {
super.setCreativeTab(tab);
return this;
}
}
public class ItemCornSeed extends ItemSeeds implements ItemModelProvider {
public ItemCornSeed() {
super(ModBlocks.cropCorn, Blocks.FARMLAND);
setUnlocalizedName("corn_seed");
setRegistryName("corn_seed");
}
@Override
public void registerItemModel(Item item) {
TestMod.proxy.registerItemRenderer(item, 0, "corn_seed");
}
}
public interface ItemModelProvider {
void registerItemModel(Item item);
}
@Mod.EventBusSubscriber
public class ModBlocks {
public static List<Block> blocksToReg;
public static List<Item> itemBlocksToReg;
public static BlockOre oreCopper;
public static BlockCropCorn cropCorn;
public static void init() {
}
@SubscribeEvent
public static void registerItems(RegistryEvent.Register<Item> event) {
event.getRegistry().registerAll(itemBlocksToReg.toArray(new Item[0]));
}
@SubscribeEvent
public static void registerBlocks(RegistryEvent.Register<Block> event) {
blocksToReg = new ArrayList<Block>();
itemBlocksToReg = new ArrayList<Item>();
oreCopper = register(new BlockOre("ore_copper").setCreativeTab(CreativeTabs.MISC));
cropCorn = register(new BlockCropCorn(), null);
event.getRegistry().registerAll(blocksToReg.toArray(new Block[0]));
}
private static <T extends Block> T register(T block, ItemBlock itemBlock) {
blocksToReg.add(block);
if (itemBlock != null) {
itemBlocksToReg.add(itemBlock);
}
if (block instanceof ItemModelProvider) {
((ItemModelProvider)block).registerItemModel(itemBlock);
}
return block;
}
private static <T extends Block> T register(T block) {
ItemBlock itemBlock = new ItemBlock(block);
itemBlock.setRegistryName(block.getRegistryName());
return register(block, itemBlock);
}
}