Résolu Event spawnmob lors d'un clique droit sur un bloc
-
Dans ces cas là il faut que tu montres à quoi ressemble ton code maintenant et commencer à mettre des System.out.println(“Message”) pour voir où est ce que ton code foire par rapport à ce que tu veux.
-
@‘Toutoune1008’:
Dans ces cas là il faut que tu montres à quoi ressemble ton code maintenant et commencer à mettre des System.out.println(“Message”) pour voir où est ce que ton code foire par rapport à ce que tu veux.
public static Block panda_block; public static void init() { panda_block = new BlockBasic(Material.rock); panda_block.setBlockName("panda_block"); panda_block.setCreativeTab(CreativeTabs.tabBlock); panda_block.setBlockTextureName(References.MOD_ID + ":panda_block_front"); panda_block.setHardness(4).setResistance(2); } public void onBlockClicked (World world, int x, int y, int z, int neighbor) { world.spawnEntityInWorld(new EntityLightningBolt(world, x, y, z)); world.createExplosion((Entity)null, x, y, z, 4F, true); EntityPanda Panda = new EntityPanda(world); Panda.setPosition((int) x, (int) y, (int) z); world.spawnEntityInWorld(Panda); } public static void register() { GameRegistry.registerBlock(panda_block, panda_block.getUnlocalizedName().substring(5)); GameRegistry.addRecipe(new ItemStack(blocks.panda_block, 1), new Object[]{"zzz", "dnd", "ege", 'z', Items.skull, 'd', Blocks.diamond_block, 'e', Blocks.emerald_block, 'n', Items.nether_star, 'g', Items.golden_apple}); }
voila le code
EDIT: j’ai essayé les print, et je pense que l’événement en lui même n’est pas pris en compte
-
Tu n’as pas appliqué ce que je t’ai dit de faire.
Donc normal que ta fonction n’est jamais appelé (fonction, pas événement).@‘robin4002’:
Ouvres le fichier BlockBasic.java (si tu utilises ce fichier pour d’autres blocs, il faudrait plutôt créer une nouvelle classe sinon tous tes blocs utilisant cette classe vont avoir le même comportement) et dans cette classe ajoute la fonction suivante :
public void onBlockDestroyedByPlayer(World world, int x, int y, int z, int metadata) { }
Ainsi lorsque ton bloc sera cassé, au lieu de faire ce qui se trouve dans la fonction onBlockDestroyedByPlayer qui se trouve dans le fichier Block.java, il va faire ce qu’il se trouve dans ta fonction onBlockDestroyedByPlayer de ta classe BlockBasic.java. C’est ce qu’on appelle “override” une fonction en anglais (outrepasser en français).
Ensuite entre les deux crochets tu vas pouvoir faire ce que tu veux, donc faire spawner l’entité. -
@‘robin4002’:
Tu n’as pas appliqué ce que je t’ai dit de faire.
Donc normal que ta fonction n’est jamais appelé (fonction, pas événement).@‘robin4002’:
Ouvres le fichier BlockBasic.java (si tu utilises ce fichier pour d’autres blocs, il faudrait plutôt créer une nouvelle classe sinon tous tes blocs utilisant cette classe vont avoir le même comportement) et dans cette classe ajoute la fonction suivante :
public void onBlockDestroyedByPlayer(World world, int x, int y, int z, int metadata) { }
Ainsi lorsque ton bloc sera cassé, au lieu de faire ce qui se trouve dans la fonction onBlockDestroyedByPlayer qui se trouve dans le fichier Block.java, il va faire ce qu’il se trouve dans ta fonction onBlockDestroyedByPlayer de ta classe BlockBasic.java. C’est ce qu’on appelle “override” une fonction en anglais (outrepasser en français).
Ensuite entre les deux crochets tu vas pouvoir faire ce que tu veux, donc faire spawner l’entité.je comprend pas, même en mettant onBlockDestroyedByPlayer ça marche pas. alors je fais quoi ? ou plus précisément je doit la placer où dans la classe ?
(désolé si je vous énèrve mais j’ai beaucoup de difficulté a comprendre si on me donne pas d’exemple :/(je parle dans n’importe quel domaine, pas qu’en codage)) -
Revois ton code s’il te plait
-
@‘SpyMan’:
Revois ton code s’il te plait
j’evois tout le code :
package com.mod.panda.init; import com.mod.panda.References; import com.mod.panda.blocks.BlockBasic; import com.mod.panda.entity.EntityPanda; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntityMobSpawner; import net.minecraft.util.ChatComponentText; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class blocks { public static Block panda_block; public static void init() { panda_block = new BlockBasic(Material.rock); panda_block.setBlockName("panda_block"); panda_block.setCreativeTab(CreativeTabs.tabBlock); panda_block.setBlockTextureName(References.MOD_ID + ":panda_block_front"); panda_block.setHardness(4).setResistance(2); } public void onBlockDestroyedByPlayer (World world, int x, int y, int z, int neighbor) { world.spawnEntityInWorld(new EntityLightningBolt(world, x, y, z)); world.createExplosion((Entity)null, x, y, z, 4F, true); EntityPanda Panda = new EntityPanda(world); Panda.setPosition((int) x, (int) y, (int) z); world.spawnEntityInWorld(Panda); } public static void register() { GameRegistry.registerBlock(panda_block, panda_block.getUnlocalizedName().substring(5)); GameRegistry.addRecipe(new ItemStack(blocks.panda_block, 1), new Object[]{"zzz", "dnd", "ege", 'z', Items.skull, 'd', Blocks.diamond_block, 'e', Blocks.emerald_block, 'n', Items.nether_star, 'g', Items.golden_apple}); } }
ceci est la classe blockbasic car je n’ai qu’un bloc
-
Un conseil, revois tout depuis le début car là, t’as juste tout mélangé….
Tu ne peux pas tout faire tenir dans une seule classe, et puis tu m’étonnes que ta fonction onBlockDestroyedByPlayer, soit jamais appelée xD la clase hérite pas de Block -
@‘Plaigon’:
Un conseil, revois tout depuis le début car là, t’as juste tout mélangé….
Tu ne peux pas tout faire tenir dans une seule classe, et puis tu m’étonnes que ta fonction onBlockDestroyedByPlayer, soit jamais appelée xD la clase hérite pas de Blockcomment ça la classe hérite pas de bloc ?
aidez moi a corriger ces bug vous me perdez là
-
La fonction onBlockDestroyedByPlayer doit être placé dans la classe BlockBasic.java (qu’il serait logique de renommer en BlocPanda), PAS dans la classe blocks.java, normal que ça ne marche pas.
-
@‘AymericRed’:
La fonction onBlockDestroyedByPlayer doit être placé dans la classe BlockBasic.java (qu’il serait logique de renommer en BlocPanda), PAS dans la classe blocks.java, normal que ça ne marche pas.
mais ça change quoi car ça marche pas quand je crée la classe BlockPanda
-
Qu’est-ce’ qui ne marche pas ?
-
Envoies ta classe BlockBasic / BlockPanda (si tu l’as renommé).
-
@‘robin4002’:
Envoies ta classe BlockBasic / BlockPanda (si tu l’as renommé).
voilà. je sent que vous allez crier XD
blocks.java:
package com.mod.panda.init; import com.mod.panda.References; import com.mod.panda.blocks.BlockBasic; import com.mod.panda.entity.EntityPanda; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntityMobSpawner; import net.minecraft.util.ChatComponentText; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class blocks { public static Block panda_block; public blocks(Material materialIn) { } public static void init() { } public static void register() { GameRegistry.registerBlock(panda_block, panda_block.getUnlocalizedName().substring(5)); GameRegistry.addRecipe(new ItemStack(blocks.panda_block, 1), new Object[]{"zzz", "dnd", "ege", 'z', Items.skull, 'd', Blocks.diamond_block, 'e', Blocks.emerald_block, 'n', Items.nether_star, 'g', Items.golden_apple}); } }
BlockPanda.java:
package com.mod.panda.init; import com.mod.panda.References; import com.mod.panda.blocks.BlockBasic; import com.mod.panda.entity.EntityPanda; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.world.World; public class BlockPanda extends blocks { protected BlockPanda(Material materialIn) { super(materialIn); panda_block = new BlockBasic(Material.rock); panda_block.setBlockName("panda_block"); panda_block.setCreativeTab(CreativeTabs.tabBlock); panda_block.setBlockTextureName(References.MOD_ID + ":panda_block_front"); panda_block.setHardness(4).setResistance(2); } public void onBlockDestroyedByPlayer (World world, int x, int y, int z, int neighbor) { world.spawnEntityInWorld(new EntityLightningBolt(world, x, y, z)); world.createExplosion((Entity)null, x, y, z, 4F, true); EntityPanda Panda = new EntityPanda(world); Panda.setPosition((int) x, (int) y, (int) z); world.spawnEntityInWorld(Panda); } }
-
package com.mod.panda.init; import com.mod.panda.References; import com.mod.panda.blocks.BlockBasic; import com.mod.panda.entity.EntityPanda; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntityMobSpawner; import net.minecraft.util.ChatComponentText; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class blocks { public static Block panda_block; public blocks(Material materialIn) { } public static void init() { panda_block = new BlockPanda(Material.rock).setBlockName("panda_block").setCreativeTab(CreativeTabs.tabBlock);.setBlockTextureName(References.MOD_ID + ":panda_block_front").setHardness(4).setResistance(2); } public static void register() { GameRegistry.registerBlock(panda_block, panda_block.getUnlocalizedName().substring(5)); GameRegistry.addRecipe(new ItemStack(blocks.panda_block, 1), new Object[]{"zzz", "dnd", "ege", 'z', Items.skull, 'd', Blocks.diamond_block, 'e', Blocks.emerald_block, 'n', Items.nether_star, 'g', Items.golden_apple}); } }
BlockPanda.java:
package com.mod.panda.init; import com.mod.panda.References; import com.mod.panda.blocks.BlockBasic; import com.mod.panda.entity.EntityPanda; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.block.Block; import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.world.World; public class BlockPanda extends Block { protected BlockPanda(Material materialIn) { super(materialIn); } public void onBlockDestroyedByPlayer (World world, int x, int y, int z, int metadata) { world.spawnEntityInWorld(new EntityLightningBolt(world, x, y, z)); world.createExplosion((Entity)null, x, y, z, 4F, true); EntityPanda panda = new EntityPanda(world); panda.setPosition((int) x, (int) y, (int) z); world.spawnEntityInWorld(panda); } }
ça fonctionnera mieux comme ça.
-
Salut,
Comme il a modifié le mon de la class, ce n’est pas “panda_block = new BlockBasic(Material.rock);” mais “panda_block = new BlockPanda(Material.rock);”. -
Bien vu
-
@‘LeBossMax2’:
Salut,
Comme il a modifié le mon de la class, ce n’est pas “panda_block = new BlockBasic(Material.rock);” mais “panda_block = new BlockPanda(Material.rock);”.quand je fais ça, il y a plein d’erreurs
EDIT: j’ai réussi en me posant quelques minute je me suis rendu compte de mes erreur ! merci beaucoup
(pour ceux qui veulent savoir, j’ai tout simplement pas fait attention que j’avait déjà un package avec la classe de mon bloc x)
-
Balise résolue ?
-
@‘Plaigon’:
Balise résolue ?
oui
-
C’est pas oui qu’il faut dire, il faut éditer ton premier message pour l’ajouter …
C’est expliqué dans la discussion importante “[RÈGLES] À LIRE AVANT DE POSTER” que tu n’as surement pas lu …