- 40
- 1
- 0
Добрый день. Пытаюсь сделать так, чтоб при убийстве моба с определённым шансом выпадал определённый предмет из моего мода.
При запуске майнкрафт вылетает, ругаясь на эту строку:
В чём проблема? Я так понял, что неправильно перевожу RegistryObject *_HAND в Item?
Класс загрузки предметов:
Класс обработки событий:
При запуске майнкрафт вылетает, ругаясь на эту строку:
Java:
new ItemStack(ItemsInit.SKELETON_HAND.get().getItem())
Класс загрузки предметов:
Java:
public class ItemsInit {
public static final DeferredRegister<Item> ITEMS =
DeferredRegister.create(ForgeRegistries.ITEMS, AnatomyMod.MOD_ID);
public static final RegistryObject<Item> ZOMBIE_HAND =
ITEMS.register("zombie_hand",
() -> new Item(new Item.Properties().group(ItemGroup.MATERIALS)));
public static final RegistryObject<Item> SKELETON_HAND =
ITEMS.register("skeleton_hand",
() -> new Item(new Item.Properties().group(ItemGroup.MATERIALS)));
}
Класс обработки событий:
Java:
@EventBusSubscriber(modid = AnatomyMod.MOD_ID, bus = Bus.FORGE)
public class AnatomyEvents {
static int chance = 25;
static ItemStack[] zombieDrops = new ItemStack[] {
new ItemStack(ItemsInit.ZOMBIE_HAND.get().getItem())
};
static ItemStack[] skeletonDrops = new ItemStack[] {
new ItemStack(ItemsInit.SKELETON_HAND.get().getItem())
};
@SubscribeEvent
public static void addDropItem(final LivingDropsEvent event) {
Entity entity = event.getEntity();
World world = entity.getEntityWorld();
if (!(world.getRandom().nextInt(100) < chance)) return;
ItemStack is;
boolean isZombie = entity instanceof ZombieEntity;
boolean isSkeleton = entity instanceof SkeletonEntity;
if (isZombie) {
// Пока что там один предмет
is = zombieDrops[world.getRandom().nextInt(zombieDrops.length)];
}
else if (isSkeleton) {
// Пока что там один предмет
is = skeletonDrops[world.getRandom().nextInt(zombieDrops.length)];
}
else {
return;
}
double x = entity.getPosX(), y = entity.getPosY(), z = entity.getPosZ();
event.getDrops().add(new ItemEntity(world, x, y, z, is));
}
}