Résolu Problème de recette furnace
-
Bonjours à tous, je poste encore car j’ai deux problèmes que je n’arrive pas à résoudre.
Dans un premier cas je veux créer une recette composé d’un slot input et un slotout, mais lorsque je met mon block dans le slot input rien ne se passe.
le code : https://pastebin.com/XhRrFxcJEt dans un deuxièmes cas la recette se lance mais je peux mettre n’importe quel objet dans le slot et la recette se lance quand même, et je souhaiterai qu’elle puisse se lancer uniquement avec 3 Item et Block définie avec une seule manière de les placer.
le code : https://pastebin.com/Yg1T2K9PMerci de vouloir bien m’aider x)
-
C’est bon j’ai réussi à régler le problème (enfin)
-
Salut’
Pour le premier cas, il suffisait de lire une fois le code et tu aurais dû tout de suite voir le problème : la fonction “addRecipe” est vide x)
Et pour le second problème, la fonction “isSameKey” n’est pas correcte, tu vérifie la taille des tableaux mais tu ne vérifies pas leur contenu (même problème dans la 1e classe également). -
Merci de ta réponse, je testerai ça plus tard je suis pas chez moi.
-
J’ai réussi à régler le problème du fonctionnement de la recette, en revanche je n’arrive pas encore à faire fonctionner une seule et unique " recipe ", c’est à dire que je peux mettre n’importe quoi dans le input, et j’obtiens quand même l’item définie dans l’output.
-
Yo, c’est un peut le bordel dans tes class de recipe :
1 - il te faut une Map<ItemStack, ItemStack> qui vas permettre de stocker t’es recipes donc un input qui est la clé et l’output qui sera la valeur
Map : Permet de stocké des valeurs en leur associant une clé, cette dernière permet de récupéré la valeur qui lui est attaché
2- un fonction pour vérifié si dans la Map il ya une correspondance avec ton item en entré (slot input), soit la clé
3- une fonction qui vas permettre de récupéré la valeur associé a la clé (item en entré, soit ton slot input), cette fonction prendra en paramètre l’itemstack qui se situe dans ton slot input.
Voila un exemple de la class de recipe
tu peut creer d’autre class de recipe en les extends a cette classimport java.util.Map; import java.util.HashMap; public class Recipe { public static final Recipe INSTANCE = new Recipe(); private Map<ItemStack, ItemStack> recipes = new HashMap<ItemStack, ItemStack>(); public Recipe() { // Exemple this.addRecipe(new ItemStack(Items.apple), new ItemStack(Items.diamond)); } public void addRecipe(ItemStack in, ItemStack out) { if (!this.isKeyExist(in)) { this.recipes.put(in, out); } } public ItemStack getResult(ItemStack input) { if (this.isKeyExist(input)) { for (ItemStack stack : this.recipes.keySet()) { if (stack.isItemEqual(input)) { return this.recipes.get(stack); } } } } public boolean isKeyExist(ItemStack stack) { if (stack != null) { for (ItemStack stack : this.recipes.keySet()) { if (stack.isItemEqual(input)) { return true; } } } return false; } }
Ensuite il te faudrat verifié dans le TileEntity de ta machine si la fonction getResult ne retourne pas null pour demarré le craft, sinon tu fait rien
-
Merci de ta réponse.
J’ai essayé ton code en l’adaptant (logique), sauf que ça ne marche pas. Je crash dès que j’essaie de me connecter. -
Salut,
Il faudrait peut-être envoyer le log pour qu’on voie l’erreur. -
Le crash report montre que l’erreur vient de ma classe TileEntity mais je sais pas quoi modifier
---- Minecraft Crash Report ---- // Shall we play a game? Time: 18/08/18 20:21 Description: Ticking block entity java.lang.NullPointerException: Ticking block entity at com.lezink.lezinkmod.common.TileEntityCompactor.canSmelt(TileEntityCompactor.java:191) at com.lezink.lezinkmod.common.TileEntityCompactor.updateEntity(TileEntityCompactor.java:207) 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 com.lezink.lezinkmod.common.TileEntityCompactor.canSmelt(TileEntityCompactor.java:191) at com.lezink.lezinkmod.common.TileEntityCompactor.updateEntity(TileEntityCompactor.java:207) -- Block entity being ticked -- Details: Name: TileEntityCompactor // com.lezink.lezinkmod.common.TileEntityCompactor Block type: ID #183 (tile.Copactor // com.lezink.lezinkmod.common.Comapactor) Block data value: 0 / 0x0 / 0b0000 Block location: World: (-663,4,-391), Chunk: (at 9,0,9 in -42,-25; contains blocks -672,0,-400 to -657,255,-385), Region: (-2,-1; contains chunks -64,-32 to -33,-1, blocks -1024,0,-512 to -513,255,-1) Actual block type: ID #183 (tile.Copactor // com.lezink.lezinkmod.common.Comapactor) 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: Plat All players: 0 total; [] Chunk stats: ServerChunkCache: 625 Drop: 0 Level seed: -2996494463208639930 Level generator: ID 01 - flat, ver 0. Features enabled: true Level generator options: Level spawn location: World: (-656,4,-400), Chunk: (at 0,0,0 in -41,-25; contains blocks -656,0,-400 to -641,255,-385), Region: (-2,-1; contains chunks -64,-32 to -33,-1, blocks -1024,0,-512 to -513,255,-1) Level time: 579415 game time, 434101 day time Level dimension: 0 Level storage version: 0x04ABD - Anvil Level weather: Rain time: 8075 (now: false), thunder time: 85346 (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 (x86) version 10.0 Java Version: 1.8.0_181, Oracle Corporation Java VM Version: Java HotSpot(TM) Client VM (mixed mode), Oracle Corporation Memory: 806150952 bytes (768 MB) / 1037959168 bytes (989 MB) up to 1037959168 bytes (989 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: 0, tallocated: 0 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 lezinkmod{1.0.0} [lezinkmod] (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'
-
@lezinkdu07 a dit dans Problème de recette furnace :
at com.lezink.lezinkmod.common.TileEntityCompactor.canSmelt(TileEntityCompactor.java:191)
Le problème se trouve à la ligne 191 de la classe TileEntityCompactor, tu as un objet null.
-
Bon mon jeu veut bien se lancer maintenant, mais je suis revenu aux problèmes du début :/, j’ai remis le code que j’ai mis dans le pastbin…
-
Bon j’ai toujours les mêmes problèmes qu’auparavant mais je pense que cela peut venir du TileEntity, et j’ai aussi modifié mes codes par rapport au début du coup je les remets
TileEntityCompactor : https://pastebin.com/Cui9VgFt
CompactorRecipes : https://pastebin.com/skSdaYYM
Ici le craft ne se lance pas ( la j’ai 1 slot input et 1 slot output )TransformatorRecipes : https://pastebin.com/8pFbER5H
Ici le craft se lance avec n’importe quel Item. ( la j’ai 3 slot input et 1 slot output
Je sais que je suis chiant, et que vous avez pas que ça à faire mais ça fait 1j que je cherche les solutions mais j’y arrive pas alors bon -
Pourtant ce ne sont pas des problèmes compliqués ^^
private boolean canSmelt() { if (this.contents[0] == null || this.contents[1] == null) { return false; } [...]
Ici, pour le compactor, la recette ne peut pas se lancer si le slot du résultat est vide.
Et pour le transformator, c’est toujours le même problème depuis le début :
@aymericred a dit dans Problème de recette furnace :
Et pour le second problème, la fonction “isSameKey” n’est pas correcte, tu vérifie la taille des tableaux mais tu ne vérifies pas leur contenu (même problème dans la 1e classe également).
-
J’ai changé ça mais dès que je mets une recette dans le RecipeCompactor ça crash et ça me met dans le rapport que cette ligne n’est pas bonne. Donc je la retire et la je crash plus mais du coup je peux pas faire fonctionner la recette.
-
C’est bon j’ai réussi à régler le problème (enfin)