[1.12] Créer un four
-
Ok en fait la fonction update est nommé tick chez toi (probablement car tu n’as pas la même version des mappings que dans le tutoriel).
Donc renomme simplement la fonction update en tick et retire la fonction généré en dessous.Ensuite pour le crash, c’est parce que tu enregistres un bloc qui est null.
Tu peux envoyer le code de la classe MachineBlock ? -
package com.ben.heaven.blocks; import com.ben.heaven.Heaven; import com.ben.heaven.tileentity.TileMachineBuilder; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumBlockRenderType; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class MachineBuilder extends BlockContainer { public MachineBuilder(String name, Material materialIn) { super(materialIn); setUnlocalizedName(name); setRegistryName(name); } @Override public boolean hasTileEntity() { return true; } @Override public TileEntity createNewTileEntity(World world, int metadata) { return new TileMachineBuilder(); } @Override public void breakBlock(World worldIn, BlockPos pos, IBlockState state) { TileEntity tileentity = worldIn.getTileEntity(pos); if (tileentity instanceof TileMachineBuilder) { InventoryHelper.dropInventoryItems(worldIn, pos, (TileMachineBuilder) tileentity); } super.breakBlock(worldIn, pos, state); } @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { if (world.isRemote) { return true; } else { TileEntity tileentity = world.getTileEntity(pos); if (tileentity instanceof TileMachineBuilder) { player.openGui(Heaven.instance, 0, world, pos.getX(), pos.getY(), pos.getZ()); } return true; } } @Override public EnumBlockRenderType getRenderType(IBlockState state) { return EnumBlockRenderType.MODEL; } @Override public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) { if (stack.hasDisplayName()) { TileEntity tileentity = worldIn.getTileEntity(pos); if (tileentity instanceof TileMachineBuilder) { ((TileMachineBuilder) tileentity).setCustomName(stack .getDisplayName()); } } } } -
at com.ben.heaven.init.MachineBlock.registerBlocks(MachineBlock.java:32)
C’est MachineBlock qu’il me faut, pas MachineBuilder.
-
@robin4002 en fait c’est bon l’erreur etait du a la mauvaise nomination de la fonction merci beaucoup^^
-
@robin4002 par contre g verifie la classe recipe je ne vois pas ce qui ne va pas mais la machine ne transforme pas les pommes et fleche en patate cuite (j’ai repris l’exemple du tuto pour test)
voici egalement ma classe recipepackage com.ben.heaven.recipes; import java.util.HashMap; import java.util.Iterator; import java.util.Map.Entry; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; public class RecipesMachineBuilder { private static final HashMap <ItemStack[], ItemStack>recipes = new HashMap<ItemStack[], ItemStack>(); static { addRecipe(Items.APPLE, Items.ARROW, Items.BAKED_POTATO); } private static void addRecipe(Item ingredient1, Item ingredient2, Item resultat1) { addRecipe(new ItemStack(ingredient1), new ItemStack(ingredient2), new ItemStack(resultat1)); } private static void addRecipe(ItemStack ingredient1, ItemStack ingredient2, ItemStack resultat1) { recipes.put(new ItemStack[]{ingredient1, ingredient2}, resultat1); } private static boolean areKeysEqual(ItemStack[] key1, ItemStack[] key2) { if(key1.length != key2.length) return false; for(int i = 0; i < key1.length; i++) { ItemStack s1 = key1[i]; ItemStack s2 = key2[i]; if(s1.isEmpty() && !s2.isEmpty()) return false; if(!s1.isEmpty() && s2.isEmpty()) return false; if(s1.getItem() != s2.getItem()) return false; if(s1.getItemDamage() != s2.getItemDamage()) return false; } return true; } public static ItemStack getRecipeResult(ItemStack[] ingredients) { Iterator<Entry<ItemStack[], ItemStack>> it = recipes.entrySet().iterator(); while(it.hasNext()) { Entry <ItemStack[], ItemStack>entry = it.next(); if(areKeysEqual(entry.getKey(), ingredients)) { return entry.getValue(); } } return null; } } -
@robin4002 saurais tu pourquoi la recette ne fonctionne pas ?
-
Non, sinon j’aurai déjà répondu.
-
@robin4002 d’accord excuse moi ^^
-
Il faut que tu debug ton code de ton côté.
Lances le jeu en mode debug (icône de scarabée) puis mets des points d’arrêt aux endroits pertinent dans le code (par exemple dans la fonction tick, c’est ici qu’il vérifie s’il y a quelque chose à faire).
Quand l’exécution arrive sur un point d’arrêt cela mets en pause le jeu et tu peux observer le contenu des variables.
-
@robin4002 D’accord pour le debug pas de probleme mais les points d’arret et la suite je comprends ce qu’il faut faire mais je ne comprends pas comment ^^
-
Premier lien après recherche google : https://pierrejean.wp.imt.fr/2014/02/17/eclipse-debogage-et-points-darrets/
Un jour je ferai une vidéo sur l’utilisation du debogguer.
-
Dans la classe du Gui tu peux supprimer la ligne
drawDefaultBackground()et ajouter a la place dans la classe ceci:public void drawScreen(int mouseX, int mouseY, float partialTicks) { this.drawDefaultBackground(); super.drawScreen(mouseX, mouseY, partialTicks); this.renderHoveredToolTip(mouseX, mouseY); }comme ca en plus sa rend les tooltips des items quand tu passes dessus
