- 192
- 2
- 9
Всем привет. Недавно я создавал подобную тему, но просил закрыть её для более детального поиска проблем.
Как понятно из заголовка темы, я создаю свой блок и делаю из него топливо. При обычном тесте в клиенте из среды всё работает хорошо, но стоит перезайти в мир, как уже установленные печи начинают багаться именно с моим топливом.
Описание бага. Есть 3 моих блока(блок1, блок2, блок3). Если все 3 блока положить в 3 разных печи и начать плавить руду, то всё в порядке. Выходим из мира и заходим снова, печи с блоками 1 и 2 не плавят, нет прогресса плавки и горения, но анимация на самих блоках печи, что печи работают, есть. Печь с блоком 3 при этом то ли визуально, то ли на самом деле сбрасывает огромную часть топлива(не всегда, но часто), хотя случиться это должно было через ~150 часов в силу кол-ва указанных тиков. Печь при этом и далее работает как надо, если исключить описанный нюанс. Багаться может в рандомном порядке и баги могут отличаться.
Причина бага. Думал, дело в синхронизации, но совсем убрал всякие прокси и зарегистрировал всё в главном классе - не помогло. Пришла в голову мысль поиграться со значениями длительности горения в getBurnTime(). В итоге, если заменить все мои значения на 200 тиков, то блоки работают исправно. Я устанавливаю значения примерно пропорциональные горению ванильного блока угля * 9 * уровень блока для своих блоков. Так блок1 горит 129600 тиков, блок2 1166400 тиков, блок3 10497600 тиков и эти значения приводят к багу.
Не откажусь от советов, подсказок и ресурсов по данному вопросу, так как знаний и опыта буквально нет. Не брался за моддинг несколько лет, а ранее далеко не зашел.
Как понятно из заголовка темы, я создаю свой блок и делаю из него топливо. При обычном тесте в клиенте из среды всё работает хорошо, но стоит перезайти в мир, как уже установленные печи начинают багаться именно с моим топливом.
Описание бага. Есть 3 моих блока(блок1, блок2, блок3). Если все 3 блока положить в 3 разных печи и начать плавить руду, то всё в порядке. Выходим из мира и заходим снова, печи с блоками 1 и 2 не плавят, нет прогресса плавки и горения, но анимация на самих блоках печи, что печи работают, есть. Печь с блоком 3 при этом то ли визуально, то ли на самом деле сбрасывает огромную часть топлива(не всегда, но часто), хотя случиться это должно было через ~150 часов в силу кол-ва указанных тиков. Печь при этом и далее работает как надо, если исключить описанный нюанс. Багаться может в рандомном порядке и баги могут отличаться.
Причина бага. Думал, дело в синхронизации, но совсем убрал всякие прокси и зарегистрировал всё в главном классе - не помогло. Пришла в голову мысль поиграться со значениями длительности горения в getBurnTime(). В итоге, если заменить все мои значения на 200 тиков, то блоки работают исправно. Я устанавливаю значения примерно пропорциональные горению ванильного блока угля * 9 * уровень блока для своих блоков. Так блок1 горит 129600 тиков, блок2 1166400 тиков, блок3 10497600 тиков и эти значения приводят к багу.
Не откажусь от советов, подсказок и ресурсов по данному вопросу, так как знаний и опыта буквально нет. Не брался за моддинг несколько лет, а ранее далеко не зашел.
Main.java:
@Mod (modid = ModInfo.MODID, name = ModInfo.NAME, version = ModInfo.VERSION)
public class Main {
@EventHandler
public void pre(FMLPreInitializationEvent e) {
RegisterBlocks.init();
RegisterBlocks.register();
RegisterRecipes.register();
}
@EventHandler
public void init(FMLInitializationEvent e) {
GameRegistry.registerFuelHandler(new Fuels());
}
}
CompressedCoal.java:
public class CompressedCoal extends Block {
public CompressedCoal() {
super(Material.rock);
this.setBlockName("block_compressed_coal");
this.setHardness(5.0F);
this.setCreativeTab(CreativeTabs.tabBlock);
this.setResistance(5F);
this.setHarvestLevel("pickaxe",2);
this.setStepSound(soundTypePiston);
this.setBlockTextureName(ModInfo.MODID+":block_compressed_coal");
}
}
Fuels.java:
public class Fuels implements IFuelHandler {
@Override
public int getBurnTime(ItemStack fuel) {
if (fuel != null && fuel.getItem() == Item.getItemFromBlock((Block)RegisterBlocks.block_compressed_coal))
// return 144000;
return 200;
if (fuel != null && fuel.getItem() == Item.getItemFromBlock((Block)RegisterBlocks.block_double_compressed_coal))
// return 1296000;
return 200;
if (fuel != null && fuel.getItem() == Item.getItemFromBlock((Block)RegisterBlocks.block_triple_compressed_coal))
// return 11664000;
return 200;
return 0;
}
}
Вложения
Последнее редактирование: