Ajouter un gui et un container à un bloc
-
Ajoutes System.out.println(“test”); au dessus de player.openGui(CompleatCraft.instance, 0, world, x, y, z); dans le bloc, puis System.out.println(“test 2”); au dessus de return new GuiBlockFour((TileEntityFour)tile, player.inventory); dans le GuiHandler.
Vas en jeu, fais un clic sur ton bloc et regardes ce que tu as dans la console. -
Il ne se passe rien dans la console.
-
Ajoutes @Override au dessus de la fonction onBlockActivated ?
-
Toujours rien ^^
-
Pas d’erreur lorsque tu ajoutes le override ?
-
Non

-
Je ne vois pas comment c’est possible o_O
-
Bizarrre, montres la classe de ton block avec le system.out et le @Override, voir si ils sont bien placés.
-
-
Et le “test” apparaît vraiment aucune fois dans la console quand tu cliques droit sur ton bloc ?
-
Non, il n’y a rien
-
Dans ta classe principale, à la déclaration de ton block, tu fais un new BlocksMod, alors que depuis le début tu nous montres ta classe BlockFour, donc erreur très bête.
-
Ok merci c’est bon mais après l’avoir ouvert mon jeu crash et maintenant, je ne peux plus lancer mon monde.
Crash report :
[16:35:37] [Server thread/INFO]: Starting integrated minecraft server version 1.7.10 [16:35:37] [Server thread/INFO]: Generating keypair [16:35:37] [Server thread/INFO] [FML]: Injecting existing block and item data into this server instance [16:35:37] [Server thread/INFO] [FML]: Applying holder lookups [16:35:37] [Server thread/INFO] [FML]: Holder lookups applied [16:35:37] [Server thread/INFO] [FML]: Loading dimension 0 (New World) (net.minecraft.server.integrated.IntegratedServer@6034c282) [16:35:37] [Server thread/INFO] [FML]: Loading dimension 1 (New World) (net.minecraft.server.integrated.IntegratedServer@6034c282) [16:35:37] [Server thread/INFO] [FML]: Loading dimension -1 (New World) (net.minecraft.server.integrated.IntegratedServer@6034c282) [16:35:37] [Server thread/INFO]: Preparing start region for level 0 [16:35:38] [Server thread/INFO]: Changing view distance to 12, from 10 [16:35:38] [Server thread/ERROR]: Encountered an unexpected exception net.minecraft.util.ReportedException: Ticking block entity at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:709) ~[MinecraftServer.class:?] at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) ~[MinecraftServer.class:?] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) ~[IntegratedServer.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?] Caused by: java.lang.NullPointerException at Package1.common.FourTotal.BlockFourRecipes.isSameKey(BlockFourRecipes.java:73) ~[BlockFourRecipes.class:?] at Package1.common.FourTotal.BlockFourRecipes.getSmeltingResult(BlockFourRecipes.java:63) ~[BlockFourRecipes.class:?] at Package1.common.FourTotal.TileEntityFour.smeltItem(TileEntityFour.java:213) ~[TileEntityFour.class:?] at Package1.common.FourTotal.TileEntityFour.updateEntity(TileEntityFour.java:200) ~[TileEntityFour.class:?] at net.minecraft.world.World.updateEntities(World.java:2160) ~[World.class:?] at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:515) ~[WorldServer.class:?] at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:703) ~[MinecraftServer.class:?] … 4 more [16:35:38] [Server thread/ERROR]: This crash report has been saved to: D:\BUREAU\FREEZER-regroupement de dossiers\Codage\Mods\Forge 1.7.10\eclipse\.\crash-reports\crash-2017-07-17_16.35.38-server.txt [16:35:38] [Server thread/INFO]: Stopping server [16:35:38] [Server thread/INFO]: Saving players [16:35:38] [Server thread/INFO]: Saving worlds [16:35:38] [Server thread/INFO]: Saving chunks for level 'New World'/Overworld [16:35:38] [Server thread/INFO]: Saving chunks for level 'New World'/Nether [16:35:38] [Server thread/INFO]: Saving chunks for level 'New World'/The End [16:35:38] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:388]: –-- Minecraft Crash Report ---- // On the bright side, I bought you a teddy bear! Time: 17/07/17 16:35 Description: Ticking block entity java.lang.NullPointerException: Ticking block entity at Package1.common.FourTotal.BlockFourRecipes.isSameKey(BlockFourRecipes.java:73) at Package1.common.FourTotal.BlockFourRecipes.getSmeltingResult(BlockFourRecipes.java:63) at Package1.common.FourTotal.TileEntityFour.smeltItem(TileEntityFour.java:213) at Package1.common.FourTotal.TileEntityFour.updateEntity(TileEntityFour.java:200) at net.minecraft.world.World.updateEntities(World.java:2160) at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:515) at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:703) at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Stacktrace: at Package1.common.FourTotal.BlockFourRecipes.isSameKey(BlockFourRecipes.java:73) at Package1.common.FourTotal.BlockFourRecipes.getSmeltingResult(BlockFourRecipes.java:63) at Package1.common.FourTotal.TileEntityFour.smeltItem(TileEntityFour.java:213) at Package1.common.FourTotal.TileEntityFour.updateEntity(TileEntityFour.java:200) -- Block entity being ticked -- Details: Name: compleatcraft:FourTileEntity // Package1.common.FourTotal.TileEntityFour Block type: ID #177 (tile.BlockFour // Package1.common.FourTotal.BlockFour) Block data value: 0 / 0x0 / 0b0000 Block location: World: (-206,67,152), Chunk: (at 2,4,8 in -13,9; contains blocks -208,0,144 to -193,255,159), Region: (-1,0; contains chunks -32,0 to -1,31, blocks -512,0,0 to -1,255,511) Actual block type: ID #177 (tile.BlockFour // Package1.common.FourTotal.BlockFour) Actual block data value: 0 / 0x0 / 0b0000 Stacktrace: at net.minecraft.world.World.updateEntities(World.java:2160) at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:515) -- Affected level -- Details: Level name: New World All players: 0 total; [] Chunk stats: ServerChunkCache: 625 Drop: 0 Level seed: -8957039999929459700 Level generator: ID 00 - default, ver 1\. Features enabled: true Level generator options: Level spawn location: World: (-196,64,148), Chunk: (at 12,4,4 in -13,9; contains blocks -208,0,144 to -193,255,159), Region: (-1,0; contains chunks -32,0 to -1,31, blocks -512,0,0 to -1,255,511) Level time: 221841 game time, 18584 day time Level dimension: 0 Level storage version: 0x04ABD - Anvil Level weather: Rain time: 21306 (now: true), thunder time: 153946 (now: false) Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: true Stacktrace: at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:703) at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) -- System Details -- Details: Minecraft Version: 1.7.10 Operating System: Windows 10 (amd64) version 10.0 Java Version: 1.8.0_131, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 919065176 bytes (876 MB) / 1038876672 bytes (990 MB) up to 1038876672 bytes (990 MB) JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used IntCache: cache: 0, tcache: 0, allocated: 12, tallocated: 94 FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1614 4 mods loaded, 4 mods active States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored UCHIJAAAA mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) UCHIJAAAA FML{7.10.99.99} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.4.1614-1.7.10.jar) UCHIJAAAA Forge{10.13.4.1614} [Minecraft Forge] (forgeSrc-1.7.10-10.13.4.1614-1.7.10.jar) UCHIJAAAA compleatcraft{1.0.0} [Compleat Craft] (bin) GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread. Profiler Position: N/A (disabled) Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used Player Count: 0 / 8; [] Type: Integrated Server (map_client.txt) Is Modded: Definitely; Client brand changed to 'fml,forge' [16:35:38] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:393]: #@!@# Game crashed! Crash report saved to: #@!@# .\crash-reports\crash-2017-07-17_16.35.38-server.txt [16:35:38] [Client thread/INFO] [FML]: Waiting for the server to terminate/save. [16:35:39] [Server thread/INFO] [FML]: Unloading dimension 0 [16:35:39] [Server thread/INFO] [FML]: Unloading dimension -1 [16:35:39] [Server thread/INFO] [FML]: Unloading dimension 1 [16:35:39] [Server thread/INFO] [FML]: Applying holder lookups [16:35:39] [Server thread/INFO] [FML]: Holder lookups applied [16:35:39] [Server thread/INFO] [FML]: The state engine was in incorrect state SERVER_STOPPING and forced into state SERVER_STOPPED. Errors may have been discarded. [16:35:39] [Client thread/INFO] [FML]: Server terminated. AL lib: (EE) alc_cleanup: 1 device not closed Java HotSpot(TM) 64-Bit Server VM warning: Using incremental CMS is deprecated and will likely be removed in a future release -
BlockFourRecipes.java:73 ?
-
pour l’erreur 1 :
http://www.noelshack.com/2017-29-1-1500302613-capture.pngpour l’erreur 2 :
http://www.noelshack.com/2017-29-1-1500302621-capture1.pngpour l’erreur 3 :
http://www.noelshack.com/2017-29-1-1500302625-capture2.pnget pour l’erreur 4 :
http://www.noelshack.com/2017-29-1-1500302627-capture3.png -
File ta classe entièrement, on gagnera en efficacité/compréhension.
Tu devrais sûrement rajouter un null-check de stackList*, avant d’appeler dessus un .getItem() -
BlockFourRecipes :
package Package1.common.FourTotal; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; public class BlockFourRecipes { private static final BlockFourRecipes smeltingBase = new BlockFourRecipes(); private Map smeltingList = new HashMap(); public BlockFourRecipes() { 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) //1er cas { this.addRecipe(new ItemStack(item1), new ItemStack(item2), new ItemStack(item3), stack); } public void addRecipe(Block block1, Item item2, Item item3, ItemStack stack) //2nd cas { this.addRecipe(Item.getItemFromBlock(block1), item2, item3, stack); } public void addRecipe(Block block1, Block block2, Item item3, ItemStack stack) //3ème cas { this.addRecipe(Item.getItemFromBlock(block1), Item.getItemFromBlock(block2), item3, stack); } public void addRecipe(Block block1, Block block2, Block block3, ItemStack stack) //4ème cas { 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 BlockFourRecipes smelting() { return smeltingBase; } }TileEntityFour:
package Package1.common.FourTotal; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; public class TileEntityFour extends TileEntity implements IInventory{ private ItemStack[] contents = new ItemStack[4]; private int workingTime = 0; private int workingTimeNeeded = 200; @Override public void writeToNBT(NBTTagCompound compound) { super.writeToNBT(compound); NBTTagList nbttaglist = new NBTTagList(); for (int i = 0; i < this.contents.length; ++i) //pour les slots { if (this.contents* != null) { NBTTagCompound nbttagcompound1 = new NBTTagCompound(); nbttagcompound1.setByte("Slot", (byte)i); this.contents*.writeToNBT(nbttagcompound1); nbttaglist.appendTag(nbttagcompound1); } } compound.setTag("Items", nbttaglist); compound.setShort("workingTime",(short)this.workingTime); //On les enregistrent en short compound.setShort("workingTimeNeeded", (short)this.workingTimeNeeded); } @Override public void readFromNBT(NBTTagCompound compound) { super.readFromNBT(compound); NBTTagList nbttaglist = compound.getTagList("Items", 10); this.contents = new ItemStack[this.getSizeInventory()]; for (int i = 0; i < nbttaglist.tagCount(); ++i) //Encore une fois pour les slots { NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); int j = nbttagcompound1.getByte("Slot") & 255; if (j >= 0 && j < this.contents.length) { this.contents[j] = ItemStack.loadItemStackFromNBT(nbttagcompound1); } } this.workingTime = compound.getShort("workingTime"); //On lit nos valeurs this.workingTimeNeeded = compound.getShort("workingTimeNeeded"); } @Override public int getSizeInventory() { return this.contents.length; } @Override public ItemStack getStackInSlot(int slotIndex) { return this.contents[slotIndex]; } @Override public ItemStack decrStackSize(int slotIndex, int amount) { if (this.contents[slotIndex] != null) { ItemStack itemstack; if (this.contents[slotIndex].stackSize <= amount) { itemstack = this.contents[slotIndex]; this.contents[slotIndex] = null; this.markDirty(); return itemstack; } else { itemstack = this.contents[slotIndex].splitStack(amount); if (this.contents[slotIndex].stackSize == 0) { this.contents[slotIndex] = null; } this.markDirty(); return itemstack; } } else { return null; } } @Override public ItemStack getStackInSlotOnClosing(int slotIndex) { if (this.contents[slotIndex] != null) { ItemStack itemstack = this.contents[slotIndex]; this.contents[slotIndex] = null; return itemstack; } else { return null; } } @Override public void setInventorySlotContents(int slotIndex, ItemStack stack) { this.contents[slotIndex] = stack; if (stack != null && stack.stackSize > this.getInventoryStackLimit()) { stack.stackSize = this.getInventoryStackLimit(); } this.markDirty(); } @Override public String getInventoryName() { return "tile.BlockFour"; } @Override public boolean hasCustomInventoryName() { return false; } @Override public int getInventoryStackLimit() { return 64; } @Override public boolean isUseableByPlayer(EntityPlayer player) { return this.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : player.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; } @Override public void openInventory() { } @Override public void closeInventory() { } @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { return slot == 3 ? false : true; } public boolean isBurning() { return this.workingTime > 0; } private boolean canSmelt() { if (this.contents[0] == null || this.contents[1] == null || this.contents[2] == null) { return true; } else { ItemStack itemstack = BlockFourRecipes.smelting().getSmeltingResult(new ItemStack[]{this.contents[0], this.contents[1], this.contents[2]}); //Il y a une erreur ici, c'est normal, on y vient après (c'est pour les recettes) if (itemstack == null) return false; if (this.contents[3] == null) return true; if (!this.contents[3].isItemEqual(itemstack)) return false; int result = contents[3].stackSize + itemstack.stackSize; return result <= getInventoryStackLimit() && result <= this.contents[3].getMaxStackSize(); } } public void updateEntity() { if(this.isBurning() && this.canSmelt()) { ++this.workingTime; } if(this.canSmelt() && !this.isBurning()) { this.workingTime = 1; } if(this.canSmelt() && this.workingTime == this.workingTimeNeeded) { this.smeltItem(); this.workingTime = 0; } if(!this.canSmelt()) { this.workingTime= 0; } } public void smeltItem() { if (this.canSmelt()) { ItemStack itemstack = BlockFourRecipes.smelting().getSmeltingResult(new ItemStack[]{this.contents[0], this.contents[1], this.contents[2]}); if (this.contents[3] == null) { this.contents[3] = itemstack.copy(); } else if (this.contents[3].getItem() == itemstack.getItem()) { this.contents[3].stackSize += itemstack.stackSize; } –this.contents[0].stackSize; –this.contents[1].stackSize; –this.contents[2].stackSize; if (this.contents[0].stackSize <= 0) { this.contents[0] = null; } if (this.contents[1].stackSize <= 0) { this.contents[1] = null; } if (this.contents[2].stackSize <= 0) { this.contents[2] = null; } } } @SideOnly(Side.CLIENT) public int getCookProgress() { return this.workingTime * 41 / this.workingTimeNeeded; //41 correspond à la hauteur de la barre de progression car notre barre de progression se déroule de haut en bas } } -
???
-
Salut juste j’ai un problème j’ai suivi ce tuto (mon mc est en 1.8) en éspérant pouvoir réussir mais j’ai rencontré des erreurs.
J’ai réussi à régler la plupart mais… yen a une qui me bloque.
au niveau de la classe du container j’ai une erreur. :@Voici mon container et merci de votre réponse.
package com.mod.mod2bk.init; import java.util.List; import Blocks.TileEntityGeneticMachine; 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.world.World; public class ContainerGeneticMachine extends Container { private final TileEntityGeneticMachine tileGM; public ContainerGeneticMachine(TileEntityGeneticMachine tile, InventoryPlayer inventory) { this.tileGM = tile; tile.openInventory(); // c'est à ce niveau là que ya l'erreur. for(int i = 0; i < 3; ++i) { for(int j = 0; j < 9; ++j) { this.addSlotToContainer(new Slot(tile, j + i * 9, 8 + j * 18, 18 + i * 18)); } } this.bindPlayerInventory(inventory); } @Override public boolean canInteractWith(EntityPlayer playerIn) { return false; } } -
Salut,
La fonction a été renommée, il devrait en avoir une autre avec un nom similaire.