Вернулся, перепрочитал, что-то понял, что-то не понял, запутался.
Rey838, так вот собственно этот MyClass и есть EventsHandler. Этот код есть и у меня, из учебника. Что регистрировать - понятно (шину). Где регистрировать - понятно (в preInit в CommonProxy). Что сделать, чтобы не регистрировать - тоже понятно (твой ответ).
И со структурой тоже, вроде, разобрался. В игре по-прежнему N одинаковых item'ов, их unlocalizedName общий. И я предполагаю, что ошибка в том, что методы
getByMeta
из
enum StaffTypes
из
class ItemStaff
,
getSubItems
из
class ItemStaff
,
registerStaffs(ModelRegistryEvent e)
из
EventsHandler
нигде не используются.
Вопрос: что должно вызывать эти методы?
На всякий случай EventsHandler и класс item'а:
@Mod.EventBusSubscriber(modid = Witch.MODID)
public class EventsHandler {
@SubscribeEvent
public static void registerStaffs(ModelRegistryEvent e){
final Item stuff = ItemsRegister.itemsMap.get("staff");
for (ItemStaff.StaffTypes type : ItemStaff.StaffTypes.values()) {
ModelLoader.setCustomModelResourceLocation(stuff, type.ordinal(), new ModelResourceLocation(stuff.getRegistryName() + "_", "inventory"));
}
}
}
public class ItemStaff extends Item {
public static final String name = "staff";
public ItemStaff(){
this.setRegistryName(name);
this.setUnlocalizedName(name);
this.setCreativeTab(Witch.CTAB);
this.setMaxStackSize(1);
this.setHasSubtypes(true);
}
public enum StaffTypes {
//от нуля
oak, spruce, birch, jungle, acacia, darkoak;
//получение типа по метадате
public static StaffTypes getByMeta(int meta) {
for (StaffTypes type : values()) {
if (type.ordinal() == meta) return type;
}
return null;
}
}
@Override
public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items) {
if (tab == Witch.CTAB){
for (StaffTypes type : StaffTypes.values()){
items.add(new ItemStack(this, 1, type.ordinal()));
}
}
}
}