Привет. Ниже были мои темы связанные с Тайлэнетити, вон еще парень спросил про инвентари.
В общем вопросы и найденные ссылки, советы других приводят к этому уроку: Форум
Начал разбирать. По началу все понятно но возникли вопросы следующие.
В мейн класее для регистрации/создания для мода блока используется:
Вопрос в том, что я использовал что в уроках, что в своих пробах другой способ:
Если обратить внимание разница в:
public void preInit
public void preLoad
Есть ли разница между ними, что то влияющее не напимание мода или то как будет мод запускаться? Замудренно спросил да?=D
Крч, вообще в чем разница между инитом и прелоадом? Спрашиваю что бы понимать когда и что из них мне использовать. А то представьте, использовал всегда прелоад, а тут парень блок создает через преИнит.
======================
Второй вопрос связан уже с блоком который автор создает BlockFabrication
В классе блока я не нахожу регистрацию блока. Напомню что свои блоки в конце класса я регистрирую
А вот код автора, я не вижу что бы он регистрировал блок, во внимание тайл энетити и прочую работу с гуи и пр не берем в счет пока что, до этого еще мне предстоит дойти.
Соотвественно блок не появляется совсем если сделать как делает автор.
Мне пришлось дописать регистрацию блока в его классе, и указать прочие мелочи типа чем ломается, звуки и пр. Только после этого блок заработал.
Дайте подсказки, почему так, может что то происходит с блоком и он регистрируется позже где либо, или фишка в том что используя public void preInit он автоматически регистрируется...?
Так же заметил что он так же использует public void init
Вот весь код мейна:
Надеюсь вы сможете объяснить почему у него все работает а у меня по его примеру даже блок в креативной вкладке не появился. Где он его регистрирует не пойму?
В общем вопросы и найденные ссылки, советы других приводят к этому уроку: Форум
Начал разбирать. По началу все понятно но возникли вопросы следующие.
В мейн класее для регистрации/создания для мода блока используется:
Код:
public static Block block_fabrication;
@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event) {
block_fabrication = new BlockFabrication();
Вопрос в том, что я использовал что в уроках, что в своих пробах другой способ:
Java:
public static Block testblock;
@EventHandler
public void preLoad(FMLPreInitializationEvent event)
{
testblock = new TestBlock();
Если обратить внимание разница в:
public void preInit
public void preLoad
Есть ли разница между ними, что то влияющее не напимание мода или то как будет мод запускаться? Замудренно спросил да?=D
Крч, вообще в чем разница между инитом и прелоадом? Спрашиваю что бы понимать когда и что из них мне использовать. А то представьте, использовал всегда прелоад, а тут парень блок создает через преИнит.
======================
Второй вопрос связан уже с блоком который автор создает BlockFabrication
В классе блока я не нахожу регистрацию блока. Напомню что свои блоки в конце класса я регистрирую
Java:
GameRegistry.registerBlock(this, name); //Регистрируем блок. this, name можно убрать в зависимости от того как я общаюсь с мейном. Можно оставить скобки пустыми, ну я думаю вы и так знаете когда и что с ними делать.
А вот код автора, я не вижу что бы он регистрировал блок, во внимание тайл энетити и прочую работу с гуи и пр не берем в счет пока что, до этого еще мне предстоит дойти.
Java:
package timaxa007.fabrication.lesson3c;
import net.minecraft.block.Block;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class BlockFabrication extends Block implements ITileEntityProvider {
public BlockFabrication() {
super(Material.iron);
this.setBlockName("block_fabrication");
this.setBlockTextureName("fabrication:fabrication");
this.setCreativeTab(CreativeTabs.tabBlock);
}
@Override
public TileEntity createNewTileEntity(World world, int metadata) {
return new TileEntityFabrication();
}
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack itemStack) {
if (itemStack.hasDisplayName())
((TileEntityFabrication)world.getTileEntity(x, y, z)).setInventoryName(itemStack.getDisplayName());
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
if (!world.isRemote && world.getTileEntity(x, y, z) instanceof TileEntityFabrication)
player.openGui(Fabrication.instance, 0, world, x, y, z);
return true;
}
}
Соотвественно блок не появляется совсем если сделать как делает автор.
Мне пришлось дописать регистрацию блока в его классе, и указать прочие мелочи типа чем ломается, звуки и пр. Только после этого блок заработал.
Дайте подсказки, почему так, может что то происходит с блоком и он регистрируется позже где либо, или фишка в том что используя public void preInit он автоматически регистрируется...?
Так же заметил что он так же использует public void init
Вот весь код мейна:
Java:
package timaxa007.fabrication.lesson0;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.block.Block;
@Mod(modid = Fabrication.MODID, name = Fabrication.NAME, version = Fabrication.VERSION)
public final class Fabrication {
public static final String
MODID = "fabrication0",
NAME = "Fabrication0",
VERSION = "0.0";
@Mod.Instance(MODID) public static Fabrication instance;
public static Block block_fabrication;
@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event) {
block_fabrication = new BlockFabrication();
GameRegistry.registerBlock(block_fabrication, "block_fabrication0");
GameRegistry.registerTileEntity(TileEntityFabrication.class, "TileEntityFabrication0");
}
@Mod.EventHandler
public void init(FMLInitializationEvent event) {
NetworkRegistry.INSTANCE.registerGuiHandler(instance, new HandlerGui());
}
}
Надеюсь вы сможете объяснить почему у него все работает а у меня по его примеру даже блок в креативной вкладке не появился. Где он его регистрирует не пойму?