Свой предмет с временем горения

Свой предмет с временем горения

Нет прав для скачивания
Версия(и) Minecraft
1.7, 1.12
Привет.

Данный мини-ресурс дает возможность добавить свой предмет как вид топлива для печки или механизма, который использует TileEntityFurnace#getItemBurnTime.
Почти вся основная информация расписана в самом коде.
Как минимум нужно знать как зарегистрировать эвент/предмет/блок!

Начнем.

1.12.2

Для добавления времени топлива к предмету есть 3 разных варианта.
Разберем все 3. Но какой лучше - скорее всего 1-ый.

Вариант 1.
Переопределение метода getItemBurnTime у предмета.
Java:
    @Override
    public int getItemBurnTime(ItemStack itemStack) { // Переопределение времени горения.
        return 200; //200 - это кол-во тиков за 1 предмет. 400 - это 2 предмета, 600 - это 3 и так далее!
    }

Вариант 2.
Изменение через эвент получения времени горения.
Java:
    @SubscribeEvent
    public static void fuel(FurnaceFuelBurnTimeEvent e) { // Эвент получения времени горения.
        if (e.getItemStack().getItem() == TMRegistry.itemWithFuel) // Проверка на наш предмет.
            e.setBurnTime(200); // Установка времени горения. Отменять эвент не нужно, т.к. он сам это уже делает.
    }

Вариант 3.
Изменение через унаследования IFuelHandler.
В 1.12.2 данный метод считается Deprecated.
Для данного метода нужно создать класс, который будет наследован от IFuelHandler, так же его нужно регистрировать.
Класс:
Java:
public class FuelHandler implements IFuelHandler { // Унаследование от обработчика времени топлива.

    @Override
    public int getBurnTime(ItemStack fuel) { // Сюда передается сам предмет, который проверяется на горение.
        if (fuel.getItem() == TMRegistry.itemWithFuel) // Проверка на наш предмет.
            return 200; // Установка времени горения.
        return 0;
    }
}
И сама регистарция.
Она должна быть в инициализации мода. (FMLInitializationEvent)
Java:
GameRegistry.registerFuelHandler(new FuelHandler()); // Регистрация самого обработчика времени топлива.

Так же что бы удалить предмет как топливо можно использовать вариант 2.
Java:
    @SubscribeEvent
    public static void fuel(FurnaceFuelBurnTimeEvent e) { // Эвент получения времени горения.
        if (e.getItemStack().getItem() == Items.COAL) // Проверка на удаляемый предмет.
            e.setBurnTime(0); // Установка времени горения.
    }

Для проверки можно использовать JEI или же просто попробовать "запустить" печку.

Скрины:

1519662395840.png


1519662420823.png


Для добавление блоку время горения нужно заменить:
if (fuel.getItem() == TMRegistry.itemWithFuel)
На
if (fuel.getItem() == Item.getItemFromBlock(BLOCK))
В место BLOCK указать Ваш блок.
Если делать через вариант 1, то переопределять метод нужно у ItemBlock'а блока.

1.7.10

Для добавления времени топлива к предмету есть 2 разных варианта.
Разберем все 2.

Вариант 1.
Изменение через эвент получения времени горения.
Хоть в 1.7 этот метод считается Deprecated, но этот метод нормально работает, как и должен.
Java:
    @SubscribeEvent
    public void event(FuelBurnTimeEvent e) { // Сам эвент получения топлива.
        if (e.fuel.getItem() == Items.apple) { // Проверяем, что нужный нам предмет.
            e.burnTime = 200;  // Устанавливаем время горения.
            e.setResult(Result.ALLOW); // ОБЯЗАТЕЛЬНО изменяем результат эвента. Можно и DENY, главное что бы он был не DEFAUL.
        }
    }

Вариант 2.
Изменение через унаследования IFuelHandler.
Для данного метода нужно создать класс, который будет наследован от IFuelHandler, так же его нужно регистрировать.
Класс:
Java:
public class FuelHandler implements IFuelHandler { // Унаследование от обработчика времени топлива.

    @Override
    public int getBurnTime(ItemStack fuel) { // Сюда передается сам предмет, который проверяется на горение.
        if (fuel.getItem() == Items.apple) // Проверка на наш предмет.
            return 200; // Установка времени горения.
        return 0;
    }
}
И сама регистарция.
Она должна быть в инициализации мода. (FMLInitializationEvent)
Java:
GameRegistry.registerFuelHandler(new FuelHandler()); // Регистрация самого обработчика времени топлива.

Так же для удаления подходит вариант 1. (Вариант 2 работает только на добавление!)

Java:
    @SubscribeEvent
    public void event(FuelBurnTimeEvent e) { // Сам эвент получения топлива.
        if (e.fuel.getItem() == Items.coal) { // Проверяем, что нужный нам предмет.
            e.burnTime = 0; // Устанавливаем время горения.
            e.setResult(Result.ALLOW); // ОБЯЗАТЕЛЬНО изменяем результат эвента. Можно и DENY, главное что бы он был не DEFAUL.
        }
    }

На этом все. Спасибо за внимание.
Автор
ロロロ
Скачивания
2
Просмотры
1,871
Первый выпуск
Обновление
Оценка
4.86 звёзд 7 оценок

Другие ресурсы пользователя ロロロ

Последние рецензии

Сойдет для учебника на сайте. Забираем.
Полезный краткий гайд
Просто и понятно. Спасибо.
На 1.12 чуть по другому, хотелось бы и под новые версии, а так вполне хорошо
ロロロ
Ты рофлишь?
Мод на 1.12.2.
Все работает.
Новые версии? Хм.. Под 1.13 Forge еще нету!
Сверху