Топливо для печи#
В печи можно использовать в качестве топлива различные предметы, чтобы добавить свой предмет, необходимо воспользоваться двумя способами.
- С помощью
IFuelHandler - С помощью
FuelBurnTimeEvent
Таблица времени горения#
Подсказка
Все значения указаны в тиках! 20 тиков = 1 сек.
| Название топлива | Время горения |
|---|---|
| Палка(Items.stick) | 100 |
| Саженец(Blocks.sapling) | 100 |
| Деревянная плита(Blocks.wooden_slab) | 150 |
| Деревянные инструменты | 200 |
| Блоки материала WOOD | 300 |
| Уголь(Items.coal) | 1600 |
| Стержень ифрита(Items.blaze_rod) | 2400 |
| Угольный блок(Blocks.coal_block) | 16_000 |
| Ведро лавы(Items.lava_bucket) | 20_000 |
IFuelHandler#
Интерфейс IFuelHandler предназначен для отслеживания обработки входящего стэка и
возврата времени горения в зависимости от условия.
Создадим класс FuelHandler, куда добавим проверку на такие предметы: удочка, кровать и миска, для которых мы зададим
время горения
package ru.mcmodding.tutorial.common.handler;
import cpw.mods.fml.common.IFuelHandler;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
public class FuelHandler implements IFuelHandler {
@Override
public int getBurnTime(ItemStack fuelStack) {
// Проверяем входящий стэк на null, чтобы не получить исключение NullPointerException
if (fuelStack == null) {
return 0;
}
final Item fuelItem = fuelStack.getItem();
// Если предмет топлива - удочка, то время горения будет 350 тиков
if (fuelItem == Items.fishing_rod) {
return 350;
}
// Если предмет топлива - кровать, то время горения будет 1100 тиков
else if (fuelItem == Items.bed) {
return 1100;
}
// Если предмет топлива - миска, то время горения будет 900 тиков
else if (fuelItem == Items.bowl) {
return 900;
}
return 0;
}
}
Необходимо зарегистрировать нашу реализацию IFuelHandler, для этого необходимо
вызвать метод GameRegistry#registerFuelHandler(IFuelHandler) в CommonProxy#preInit.
public class CommonProxy {
public void preInit(FMLInitializationEvent event) {
GameRegistry.registerFuelHandler(new FuelHandler());
}
}
Запускаем игру и пробуем сжечь удочку, кровать и миску.
FuelBurnTimeEvent#
Внимание!
Данная глава рассчитана на разработчиков, прочитавших раздел "События"!
Аналогично IFuelHandler вы можете воспользоваться событием FuelBurnTimeEvent. Данный способ отличается от первого
тем, что в случае IFuelHandler нельзя заменить Minecraft топливо. Во всех остальных случаях MinecraftForge рекомендует
использовать IFuelHandler.
Зададим новое значение для угля, вместо 1600 тиков, уголь будет иметь 2600 тиков времени горения.
package ru.mcmodding.tutorial.common.handler;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraftforge.event.FuelBurnTimeEvent;
public class ForgeEventListener {
@SubscribeEvent
public void onFuelBurnTime(FuelBurnTimeEvent event) {
if (event.fuel == null) return;
final Item fuelItem = event.fuel.getItem();
if (fuelItem == Items.coal) {
event.burnTime = 2600;
}
}
}
Запускаем игру и проверяем как долго теперь горит уголь. Для сравнения вы можете взять древесный уголь.