Créer un bloc type four (machine)
-
Faire un System.out.println(“quelque chose”) te permet de voir quelles parties du codes sont exécutées et à quel moment. Donc mets en là où tu penses que le code ne va peut être pas.
-
J’ai regarder et rien ne s’affiche , ca ne veut pas donner le résultats , je ne comprend pas

-
C’est le but du debug, maintenant remonte chaque fonction pour voir où çà bloque, c’est là que faire clique droit sur ta fonction puis “Open call hierarchy” est utile.
-
Jvais tout revérifier encore une fois avec le tuto pour voir si j’ai bien tout mis , ca sera plus simple je pense que de chercher dans toutes les classes.
-
Euhm, mon gui ne s’ouvre pas…?
-
@‘DiabolicaTrix’:
Euhm, mon gui ne s’ouvre pas…?
Sans ton code ça va être difficile de trouver où est l’erreur.
@xav, il faut pas répondre aux messages avec fond rouge/violet, ce sont des messages supprimés par le membre qui l’a posté (tu les voit car en tant que modo tu peux les restaurer).
-
Ah ouais, désolé xP.
GuiHandler:
package diabolicatrix.base.gui; import cpw.mods.fml.common.network.IGuiHandler; import diabolicatrix.base.container.ContainerTestChest; import diabolicatrix.base.tileentity.TileEntityBlockChest; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; public class GuiHandler implements IGuiHandler { @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity tile = world.getTileEntity(x, y, z); if(tile instanceof TileEntityBlockChest) { return new ContainerTestChest((TileEntityBlockChest)tile, player.inventory); } return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity tile = world.getTileEntity(x, y, z); if(tile instanceof TileEntityBlockChest) { return new GuiTestChest((TileEntityBlockChest)tile, player.inventory); } return null; } }Gui:
package diabolicatrix.base.gui; import org.lwjgl.opengl.GL11; import diabolicatrix.base.container.ContainerAlloyFurnace; import diabolicatrix.base.tileentity.TileEntityAlloyFurnace; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.util.ResourceLocation; public class GuiAlloyFurnace extends GuiContainer { private static final ResourceLocation texture = new ResourceLocation("t4:textures/gui/container/guialloyfurnace.png"); private TileEntityAlloyFurnace tileAlloyFurnace; private IInventory playerInv; public GuiAlloyFurnace(TileEntityAlloyFurnace tile, InventoryPlayer inventory) { super(new ContainerAlloyFurnace(tile, inventory)); this.tileAlloyFurnace = tile; this.playerInv = inventory; this.allowUserInput = false; this.ySize = 256; this.xSize = 256; } @Override protected void drawGuiContainerBackgroundLayer(float partialRenderTick, int x, int y) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(texture); int k = (this.width - this.xSize) / 2; int l = (this.height - this.ySize) / 2; this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize); this.drawTexturedModalRect(0, 0, 176, 14, 100 + 1, 16); } protected void drawGuiContainerForegroundLayer(int x, int y) { this.fontRendererObj.drawString(this.playerInv.hasCustomInventoryName() ? this.playerInv.getInventoryName() : I18n.format(this.playerInv.getInventoryName()), 10, this.ySize - 98, 4210752); } }Container:
package diabolicatrix.base.container; import diabolicatrix.base.SlotResult; import diabolicatrix.base.tileentity.TileEntityAlloyFurnace; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; public class ContainerAlloyFurnace extends Container { private TileEntityAlloyFurnace tileAlloyFurnace; public ContainerAlloyFurnace(TileEntityAlloyFurnace tile, InventoryPlayer inventory) { this.addSlotToContainer(new Slot(this.tileAlloyFurnace, 0, 49, 75)); this.addSlotToContainer(new Slot(this.tileAlloyFurnace, 1, 89, 75)); this.addSlotToContainer(new Slot(this.tileAlloyFurnace, 2, 129, 75)); this.addSlotToContainer(new SlotResult(this.tileAlloyFurnace, 3, 89, 135)); this.bindPlayerInventory(inventory); } @Override public boolean canInteractWith(EntityPlayer player) { return this.tileAlloyFurnace.isUseableByPlayer(player); } private void bindPlayerInventory(InventoryPlayer inventory) { int i; for (i = 0; i < 3; ++i) { for (int j = 0; j < 9; ++j) { this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 17 + j * 18, 171 + i * 18)); } } for (i = 0; i < 9; ++i) { this.addSlotToContainer(new Slot(inventory, i, 17 + i * 18, 229)); } } public ItemStack transferStackInSlot(EntityPlayer player, int quantity) { ItemStack itemstack = null; Slot slot = (Slot)this.inventorySlots.get(quantity); if (slot != null && slot.getHasStack()) { ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); if (quantity < this.tileAlloyFurnace.getSizeInventory()) { if (!this.mergeItemStack(itemstack1, this.tileAlloyFurnace.getSizeInventory(), this.inventorySlots.size(), true)) { return null; } } else if (!this.mergeItemStack(itemstack1, 0, this.tileAlloyFurnace.getSizeInventory(), false)) { return null; } if (itemstack1.stackSize == 0) { slot.putStack((ItemStack)null); } else { slot.onSlotChanged(); } } return itemstack; } public void onContainerClosed(EntityPlayer player) { super.onContainerClosed(player); this.tileAlloyFurnace.closeInventory(); } }Block:
package diabolicatrix.base.block; import java.util.List; import java.util.Random; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import diabolicatrix.base.tileentity.TileEntityAlloyFurnace; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.Packet; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChatComponentText; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockAlloyFurnace extends Block { private IIcon top, bottom, behind, front, right, left, fronto; public static String[] subBlock = new String[] { "block1", "block2"}; public IIcon[] iconArray = new IIcon[subBlock.length]; public BlockAlloyFurnace(Material material) { super(material); } @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iiconregister) { this.blockIcon = iiconregister.registerIcon("t4:furnace_top"); this.top = iiconregister.registerIcon("t4:furnace_top"); this.bottom = iiconregister.registerIcon("t4:furnace_top"); this.behind = iiconregister.registerIcon("t4:furnace_side"); this.front = iiconregister.registerIcon("t4:furnace_front"); this.fronto = iiconregister.registerIcon("t4:furnace_fronto"); this.left = iiconregister.registerIcon("t4:furnace_side"); this.right = iiconregister.registerIcon("t4:furnace_side"); } public int damageDropped(int metadata) { return metadata; } public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack) { TileEntity tile = world.getTileEntity(x, y, z); if(tile instanceof TileEntityAlloyFurnace){ int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3; ((TileEntityAlloyFurnace)tile).setDirection((byte)direction); } } @SideOnly(Side.CLIENT) public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { int metadata = world.getBlockMetadata(x, y, z); if (metadata == 1){ if (side == 0 || side == 1) { return this.bottom; } TileEntity tile = world.getTileEntity(x, y, z); if(tile instanceof TileEntityAlloyFurnace){ byte direction = ((TileEntityAlloyFurnace)tile).getDirection(); return side == 3 && direction == 0 ? this.fronto : (side == 4 && direction == 1 ? this.fronto : (side == 2 && direction == 2 ? this.fronto : (side == 5 && direction == 3 ? this.fronto : this.top))); } } else if (metadata == 0){ if (side == 0 || side == 1) { return this.bottom; } TileEntity tile = world.getTileEntity(x, y, z); if(tile instanceof TileEntityAlloyFurnace){ byte direction = ((TileEntityAlloyFurnace)tile).getDirection(); return side == 3 && direction == 0 ? this.front : (side == 4 && direction == 1 ? this.front : (side == 2 && direction == 2 ? this.front : (side == 5 && direction == 3 ? this.front : this.top))); } } return this.getIcon(side, world.getBlockMetadata(x, y, z)); } @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int metadata) { if (metadata == 1) { if (side == 0) { return this.bottom; } else if (side == 1) { return this.top; } else if (side == 2) { return this.behind; } else if (side == 3) { return this.fronto; } else if (side == 4) { return this.left; } else if (side == 5) { return this.right; } } else { if (side == 0) { return this.bottom; } else if (side == 1) { return this.top; } else if (side == 2) { return this.behind; } else if (side == 3) { return this.front; } else if (side == 4) { return this.left; } else if (side == 5) { return this.right; } } return this.blockIcon; } @Override public boolean hasTileEntity(int metadata) { return true; } @Override public TileEntity createTileEntity(World world, int metadata) { return new TileEntityAlloyFurnace(); } public void breakBlock(World world, int x, int y, int z, Block block, int metadata) { TileEntity tileentity = world.getTileEntity(x, y, z); if (tileentity instanceof IInventory) { IInventory inv = (IInventory)tileentity; for (int i1 = 0; i1 < inv.getSizeInventory(); ++i1) { ItemStack itemstack = inv.getStackInSlot(i1); if (itemstack != null) { float f = world.rand.nextFloat() * 0.8F + 0.1F; float f1 = world.rand.nextFloat() * 0.8F + 0.1F; EntityItem entityitem; for (float f2 = world.rand.nextFloat() * 0.8F + 0.1F; itemstack.stackSize > 0; world.spawnEntityInWorld(entityitem)) { int j1 = world.rand.nextInt(21) + 10; if (j1 > itemstack.stackSize) { j1 = itemstack.stackSize; } itemstack.stackSize -= j1; entityitem = new EntityItem(world, (double)((float)x + f), (double)((float)y + f1), (double)((float)z + f2), new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); float f3 = 0.05F; entityitem.motionX = (double)((float)world.rand.nextGaussian() * f3); entityitem.motionY = (double)((float)world.rand.nextGaussian() * f3 + 0.2F); entityitem.motionZ = (double)((float)world.rand.nextGaussian() * f3); if (itemstack.hasTagCompound()) { entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy()); } } } } world.func_147453_f(x, y, z, block); } super.breakBlock(world, x, y, z, block, metadata); } }SlotResult:
package diabolicatrix.base; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; public class SlotResult extends Slot { public SlotResult(IInventory inventory, int id, int x, int y) { super(inventory, id, x, y); } @Override public boolean isItemValid(ItemStack stack) { return false; } public ItemStack decrStackSize(int amount) { return super.decrStackSize(amount); } public void onPickupFromSlot(EntityPlayer player, ItemStack stack) { super.onCrafting(stack); super.onPickupFromSlot(player, stack); } }Recipes:
package diabolicatrix.base.recipes; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import diabolicatrix.base.Base; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; public class BlockAlloyFurnaceRecipes { private static final BlockAlloyFurnaceRecipes smeltingBase = new BlockAlloyFurnaceRecipes(); private Map smeltingList = new HashMap(); public BlockAlloyFurnaceRecipes() { this.addRecipe(Items.apple, Items.apple, Items.arrow, new ItemStack(Blocks.diamond_block)); } public void addRecipe(ItemStack stack1, ItemStack stack2, ItemStack stack3, ItemStack stack4) { ItemStack[] stackList = new ItemStack[]{stack1, stack2, stack3}; this.smeltingList.put(stackList, stack4); } public void addRecipe(Item item1, Item item2, Item item3, ItemStack stack) { this.addRecipe(new ItemStack(item1), new ItemStack(item2), new ItemStack(item3), stack); } public void addRecipe(Block block1, Item item2, Item item3, ItemStack stack) { this.addRecipe(Item.getItemFromBlock(block1), item2, item3, stack); } public void addRecipe(Block block1, Block block2, Item item3, ItemStack stack) { this.addRecipe(Item.getItemFromBlock(block1), Item.getItemFromBlock(block2), item3, stack); } public void addRecipe(Block block1, Block block2, Block block3, ItemStack stack) { this.addRecipe(Item.getItemFromBlock(block1), Item.getItemFromBlock(block2), Item.getItemFromBlock(block3), stack); } public ItemStack getSmeltingResult(ItemStack[] stack) { Iterator iterator = this.smeltingList.entrySet().iterator(); Entry entry; do { if (!iterator.hasNext()) { return null; } entry = (Entry)iterator.next(); } while (!this.isSameKey(stack, (ItemStack[])entry.getKey())); return (ItemStack)entry.getValue(); } private boolean isSameKey(ItemStack[] stackList, ItemStack[] stackList2) { boolean isSame = false; for(int i=0; i<=2; i++) { if(stackList*.getItem() == stackList2*.getItem()) { isSame = true; } else { return false; } } return isSame; } public Map getSmeltingList() { return this.smeltingList; } public static BlockAlloyFurnaceRecipes smelting() { return smeltingBase; } public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitx, float hity, float hitz) { if (world.isRemote) { return true; } else { player.openGui(Base.instance, 1, world, x, y, z); return true; } } }Et c’est tout je crois.
-
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitx, float hity, float hitz) { if (world.isRemote) { return true; } else { player.openGui(Base.instance, 1, world, x, y, z); return true; } }Cette fonction n’a rien à faire dans Recipes.java, elle doit être dans le bloc.
-
Hahaha comment je me suis fail… je croyais que j’étais dans bloc xP Merci!
J’ai compris pourquoi, Eclipse coupe le nom donc ça affiche: BlockAlloyF…
Le gui ne s’affiche pas mais la main du perso va vers le bloc contrairement à avant
-
Ton gui handle est bien enregistré ?
-
Oui, car mon Gui de Coffre fonctionne
NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler()); -
Ah en fait j’avais pas fait attention. Tu as seulement ton coffre dans le gui handler. Ta machine n’y est pas.
-
Maintenant, j’ai un NPE ici:
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { if (world.isRemote) { return true; } else { player.openGui(Base.instance, 0, world, x, y, z); <–- ICI return true; } }Honnêtement je ne comprend pas trop le openGui.
-
Étrange. La seule chose qui peut être null c’est l’instance. Tu as quoi dans la classe Base ?
-
package diabolicatrix.base; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import diabolicatrix.base.block.BlockAlloyFurnace; import diabolicatrix.base.block.BlockMineral; import diabolicatrix.base.block.BlockNetherTNT; import diabolicatrix.base.block.BlockNormal; import diabolicatrix.base.block.BlockTestChest; import diabolicatrix.base.gui.GuiHandler; import diabolicatrix.base.proxy.CommonProxy; import diabolicatrix.base.tileentity.TileEntityAlloyFurnace; import diabolicatrix.base.tileentity.TileEntityBlockChest; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemArmor.ArmorMaterial; import net.minecraft.item.ItemFood; import net.minecraft.item.ItemStack; import net.minecraftforge.common.util.EnumHelper; @Mod(modid = Base.MODID, name = "T4 Bases", version = "1.0.1") public class Base { public static final String MODID = "t4"; @Instance(MODID) public static Base instance; @SidedProxy(clientSide = "diabolicatrix.base.proxy.ClientProxy", serverSide = "diabolicatrix.base.proxy.CommonProxy") public static CommonProxy proxy; public static Item itemPizza, itemTopaze, itemRuby, itemSaphir, itemTitane, itemCobalt, itemAdamantine, itemOrichalque; public static Block blockTopaze, blockRuby, blockSaphir, blockTitane, blockCobalt, blockPlatine, blockAlloyFurnace, testChest, blockBrick, blockNTNT; public static Item itemSaphirHelmet, itemSaphirChestPlate, itemSaphirPants, itemSaphirBoots; public static ArmorMaterial saphir = EnumHelper.addArmorMaterial("saphir", 40, new int[] { 4, 9, 7, 4 }, 9); @EventHandler public void preInit(FMLPreInitializationEvent event) { itemTopaze = new ItemMineral().setUnlocalizedName("ItemTopaze").setTextureName("t4:itemtopaze") .setCreativeTab(tabTesseract4); itemRuby = new ItemMineral().setUnlocalizedName("ItemRuby").setTextureName("t4:itemruby") .setCreativeTab(tabTesseract4); itemSaphir = new ItemMineral().setUnlocalizedName("ItemSaphir").setTextureName("t4:itemsaphir") .setCreativeTab(tabTesseract4); itemTitane = new ItemMineral().setUnlocalizedName("ItemTitane").setTextureName("t4:itemtitane") .setCreativeTab(tabTesseract4); itemCobalt = new ItemMineral().setUnlocalizedName("ItemCobalt").setTextureName("t4:itemcobalt") .setCreativeTab(tabTesseract4); itemAdamantine = new ItemMineral().setUnlocalizedName("ItemAdamantine").setTextureName("t4:itemadamantine") .setCreativeTab(tabTesseract4); itemOrichalque = new ItemMineral().setUnlocalizedName("ItemOri").setTextureName("t4:itemorichalque") .setCreativeTab(tabTesseract4); itemPizza = new ItemFood(10, 0.8F, false).setUnlocalizedName("ItemPizza").setTextureName("t4:itempizza") .setCreativeTab(tabTesseract4); blockTopaze = new BlockMineral(Material.rock, "Topaze").setBlockName("BlockTopaze") .setBlockTextureName("t4:blocktopaze").setCreativeTab(tabTesseract4).setHardness(3.0F) .setResistance(5.0F); blockRuby = new BlockMineral(Material.rock, "Ruby").setBlockName("BlockRuby") .setBlockTextureName("t4:blockruby").setCreativeTab(tabTesseract4).setHardness(3.0F) .setResistance(5.0F); blockSaphir = new BlockMineral(Material.rock, "Saphir").setBlockName("BlockSaphir") .setBlockTextureName("t4:blocksaphir").setCreativeTab(tabTesseract4).setHardness(3.0F) .setResistance(5.0F); blockTitane = new BlockNormal(Material.rock).setBlockName("BlockTitane").setBlockTextureName("t4:blocktitane") .setCreativeTab(tabTesseract4).setHardness(3.0F).setResistance(5.0F); blockCobalt = new BlockNormal(Material.rock).setBlockName("BlockCobalt").setBlockTextureName("t4:blockcobalt") .setCreativeTab(tabTesseract4).setHardness(3.0F).setResistance(5.0F); blockBrick = new BlockNormal(Material.rock).setBlockName("BlockBrick").setBlockTextureName("t4:furnace_top") .setCreativeTab(tabTesseract4).setHardness(4.0F); blockNTNT = new BlockNetherTNT().setBlockName("BlockNTNT").setCreativeTab(tabTesseract4).setHardness(0.0F); blockAlloyFurnace = new BlockAlloyFurnace(Material.rock).setBlockName("BlockAlloyFurnace") .setCreativeTab(tabTesseract4).setHardness(3.5F); testChest = new BlockTestChest(Material.rock).setBlockName("BlockTestChest").setCreativeTab(tabTesseract4) .setHardness(4.0F).setResistance(35.0F).setBlockTextureName("t4:nether_brick"); itemSaphirHelmet = new ItemArmorSaphir(saphir, 0).setUnlocalizedName("itemSaphirHelmet") .setTextureName("t4:itemSaphirHelmet").setCreativeTab(tabTesseract4); itemSaphirChestPlate = new ItemArmorSaphir(saphir, 1).setUnlocalizedName("itemSaphirChestPlate") .setTextureName("t4:itemSaphirChestPlate").setCreativeTab(tabTesseract4); itemSaphirPants = new ItemArmorSaphir(saphir, 2).setUnlocalizedName("itemSaphirPants") .setTextureName("t4:itemSaphirPants").setCreativeTab(tabTesseract4); itemSaphirBoots = new ItemArmorSaphir(saphir, 3).setUnlocalizedName("itemSaphirBoots") .setTextureName("t4:itemSaphirBoots").setCreativeTab(tabTesseract4); GameRegistry.registerItem(itemPizza, itemPizza.getUnlocalizedName().substring(5)); GameRegistry.registerItem(itemTopaze, itemTopaze.getUnlocalizedName().substring(5)); GameRegistry.registerItem(itemRuby, itemRuby.getUnlocalizedName().substring(5)); GameRegistry.registerItem(itemSaphir, itemSaphir.getUnlocalizedName().substring(5)); GameRegistry.registerItem(itemTitane, itemTitane.getUnlocalizedName().substring(5)); GameRegistry.registerItem(itemCobalt, itemCobalt.getUnlocalizedName().substring(5)); GameRegistry.registerItem(itemAdamantine, itemAdamantine.getUnlocalizedName().substring(5)); GameRegistry.registerItem(itemOrichalque, itemOrichalque.getUnlocalizedName().substring(5)); GameRegistry.registerItem(itemSaphirHelmet, itemSaphirHelmet.getUnlocalizedName().substring(5)); GameRegistry.registerItem(itemSaphirChestPlate, itemSaphirChestPlate.getUnlocalizedName().substring(5)); GameRegistry.registerItem(itemSaphirPants, itemSaphirPants.getUnlocalizedName().substring(5)); GameRegistry.registerItem(itemSaphirBoots, itemSaphirBoots.getUnlocalizedName().substring(5)); GameRegistry.registerBlock(blockTopaze, blockTopaze.getUnlocalizedName().substring(5)); GameRegistry.registerBlock(blockRuby, blockRuby.getUnlocalizedName().substring(5)); GameRegistry.registerBlock(blockSaphir, blockSaphir.getUnlocalizedName().substring(5)); GameRegistry.registerBlock(blockTitane, blockTitane.getUnlocalizedName().substring(5)); GameRegistry.registerBlock(blockCobalt, blockCobalt.getUnlocalizedName().substring(5)); GameRegistry.registerBlock(blockBrick, blockBrick.getUnlocalizedName().substring(5)); GameRegistry.registerBlock(blockNTNT, blockNTNT.getUnlocalizedName().substring(5)); GameRegistry.registerBlock(blockAlloyFurnace, ItemBlockMetadata.class, "blockalloyfurnace"); GameRegistry.registerBlock(testChest, testChest.getUnlocalizedName().substring(5)); GameRegistry.registerWorldGenerator(new MineralGeneration(), 0); GameRegistry.registerTileEntity(TileEntityAlloyFurnace.class, "t4:TileEntityAlloyFurnace"); GameRegistry.registerTileEntity(TileEntityBlockChest.class, "TileEntityBlockChest"); } @EventHandler public void init(FMLInitializationEvent event) { NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler()); proxy.registerRender(); proxy.registerKeyBinding(); FMLCommonHandler.instance().bus().register(new T4EventHandler()); } @EventHandler public void postInit(FMLPostInitializationEvent event) { } public static CreativeTabs tabTesseract4 = new CreativeTabs("tabTesseract4") { @Override public Item getTabIconItem() { return new ItemStack(itemTopaze).getItem(); } }; } -
L’instance est pourtant ok …
Tu es sur que tu as bien un NPE sur cette ligne et non une autre ? Envoies le rapport de crash. -
-
Le NPE se trouve ici :
at net.minecraft.inventory.Slot.getStack(Slot.java:88) ~[Slot.class:?]public ItemStack getStack() { return this.inventory.getStackInSlot(this.slotIndex); // ligne 88 }Donc inventory est null alors qu’il ne devrait pas.
Et en effet dans ton container :[…] public class ContainerAlloyFurnace extends Container { private TileEntityAlloyFurnace tileAlloyFurnace; // revient à faire private TileEntityAlloyFurnace tileAlloyFurnace = null; public ContainerAlloyFurnace(TileEntityAlloyFurnace tile, InventoryPlayer inventory) { this.addSlotToContainer(new Slot(this.tileAlloyFurnace, 0, 49, 75)); this.addSlotToContainer(new Slot(this.tileAlloyFurnace, 1, 89, 75)); this.addSlotToContainer(new Slot(this.tileAlloyFurnace, 2, 129, 75)); this.addSlotToContainer(new SlotResult(this.tileAlloyFurnace, 3, 89, 135)); this.bindPlayerInventory(inventory); } […]Regarde bien, this.tileAlloyFurnace est toujours null.
Il te manque la ligne this.tileAlloyFurnace = tile au début du constructeur. -
Ah parfait, merci beaucoup, ça fonctionne!
-
J’avais une question , tu parle du nom de la machine mais même dans les photos le nom n’apparaît pas c’est normal ?
