Event spawnmob lors d'un clique droit sur un bloc
-
Ces temps-ci, je trouve que les nouveaux ont particulièrement du mal, nan ?
-
@‘Plaigon’:
Ces temps-ci, je trouve que les nouveaux ont particulièrement du mal, nan ?
a vrais dire, c’est presque la première fois que je code en java, je n’ai jamais essayé avant x)
-
Ils ne connaissent pas le Java malheureusement, mais malgré ça je me rappelle avoir eu du mal moi aussi alors que je connaissait le Java (je pense que je manquais surtout d’expérience). Et puis nous certaines choses nous paraissent logiques car on commence à avoir une certaines expérience.
-
C’est sûr que le début n’est pas simple. Après certaines personnes progresses plutôt vite, d’autres ont un peu plus de difficulté.
S’énerver dans cette situation ne sert à rien, même si c’est ce qu’on envie de faire quand on voit plusieurs questions / codes qui paraissent insensé pour quelqu’un d’expérimenté ^^.
Personnellement je fais partie des gens qui arrivent à se débrouiller plutôt bien, je n’ai pas fait une seule demande d’aide quand j’ai débuté (ce que je faisais se limitait par contre aux tutoriels quand je voyais que c’était trop compliqué pour moi je restai sur des choses moins complexe. Et à chaque fois que j’avais quelque chose de nouveau j’analysais au mieux la chose jusqu’à la comprendre).
Du-coup revenons au sujet. @jbamine, as-tu déjà lu (si ce n’est qu’en partie) le tutoriel sur Java ? J’ai essayé d’y mettre un maximum d’informations utiles pour les débutants.
Concernant l’utilisation de la méthode onBlockDestroyedByPlayer, ce que tu as fait actuellement c’est l’appeler. C’est à dire exécuter son contenu. Or ce n’est pas ce que tu cherches, toi tu veux modifier son comportement, donc la redéfinir.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’:
C’est sûr que le début n’est pas simple. Après certaines personnes progresses plutôt vite, d’autres ont un peu plus de difficulté.
S’énerver dans cette situation ne sert à rien, même si c’est ce qu’on envie de faire quand on voit plusieurs questions / codes qui paraissent insensé pour quelqu’un d’expérimenté ^^.
Personnellement je fais partie des gens qui arrivent à se débrouiller plutôt bien, je n’ai pas fait une seule demande d’aide quand j’ai débuté (ce que je faisais se limitait par contre aux tutoriels quand je voyais que c’était trop compliqué pour moi je restai sur des choses moins complexe. Et à chaque fois que j’avais quelque chose de nouveau j’analysais au mieux la chose jusqu’à la comprendre).
Du-coup revenons au sujet. @jbamine, as-tu déjà lu (si ce n’est qu’en partie) le tutoriel sur Java ? J’ai essayé d’y mettre un maximum d’informations utiles pour les débutants.
Concernant l’utilisation de la méthode onBlockDestroyedByPlayer, ce que tu as fait actuellement c’est l’appeler. C’est à dire exécuter son contenu. Or ce n’est pas ce que tu cherches, toi tu veux modifier son comportement, donc la redéfinir.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é.merci j’ai réussi, enfin j’ai pas encore testé mais je sais que ça va marcher

personnellement je fais un truc, (je sais que vous allez me tuer mais ) j’utilise Mcreator ou je créer les effet voulus puis je cherche le code pour voir comment ça marche x)
c’est une méthode idiote mais ça marche quoi
EDIT: par contre pour la bossbar je trouve pas le tuto en 1.7.10 normalement il suffit de faire un implements IBossDisplayData mais ça marche pas
-
@‘jbamine’:
IBossDisplayData mais ça marche pas
C’est-à-dire ? Quelles sont les erreurs ? Faut être plus précis ^^
-
@‘Plaigon’:
@‘jbamine’:
IBossDisplayData mais ça marche pas
C’est-à-dire ? Quelles sont les erreurs ? Faut être plus précis ^^
justement aucune erreur j’ai juste mis comme le wither quand j’ai regarder le dossier src, c’est a dire:
public class EntityPanda extends EntityMob implements IBossDisplayData //<<<==============ceci { public EntityPanda(World p_i1738_1_) { super(p_i1738_1_); isImmuneToFire = true; this.experienceValue = 200; this.getNavigator().setBreakDoors(true); this.tasks.addTask(0, new EntityAISwimming(this)); this.tasks.addTask(2, new EntityAIAttackOnCollide(this, EntityPlayer.class, 100.0D, false)); this.tasks.addTask(5, new EntityAIMoveTowardsRestriction(this, 2.0D)); this.tasks.addTask(7, new EntityAIWander(this, 20.0D)); this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityPlayer.class, 64.0F)); this.tasks.addTask(8, new EntityAILookIdle(this)); this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true)); this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 0, true)); this.setSize(0.6F, 1.8F); } -
On vient de te dire de limiter un maximum tes copiés-collés, alors arrête d’en faire x)
Alors suis ce tuto, lis bien les explications de chaque bout de code donné, et tu verras que ça ira déjà mieux
https://www.minecraftforgefrance.fr/showthread.php?tid=1420 -
@‘jbamine’:
personnellement je fais un truc, (je sais que vous allez me tuer mais ) j’utilise Mcreator ou je créer les effet voulus puis je cherche le code pour voir comment ça marche x)
c’est une méthode idiote mais ça marche quoi
En effet.
Cherches plutôt des exemples fait par des développeurs (https://github.com/TheGreyGhost/MinecraftByExample pour en citer un, on doit en trouver d’autres sur github) ou regardes le code source de mod open source simple (je précise simple car certains mods ont des dépendances de partout, pour un débutant c’est l’horreur à comprendre).MCreator génère un code pas propre du tout qui est en plus foireux. Apprendre avec ça est de loin une mauvaise idée.
-
bon ça ne marche pas pour le bloc, je comprend pas pourquoi, j’a mis le : onBlockDestroyedByPlayer avec des evènements world dans les accolades pourtant.
public void onBlockDestroyedByPlayer(World world, int x, int y, int z, int metadata) { world.createExplosion((Entity)null, x, y, z, 4F, true); world.spawnEntityInWorld(new EntityLightningBolt(world, x, y, z)); Entity sentity = EntityList.createEntityByName("Panda", world);if (sentity != null) { sentity.setLocationAndAngles(x, y, z, world.rand.nextFloat() * 360F, 0.0F); world.spawnEntityInWorld(sentity); ((EntityLiving)sentity).playLivingSound(); } } -
Bonjour alors voici la marche a suivre pour faire spawner ton mob :
@Override 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); EntityWither wither = new EntityWither(world); // création d'une instance de le class "EntityWither" wither.setPosition((int) x, (int) y, (int) z); // La je donne les coordonnées de là ou il va spawner world.spawnEntityInWorld(wither); // Je le fait spawn }Voila J’ai testé et cela fonctionne
Je te laisse modifier l’entité et les coordonnées à ta guise
PS : là tu peut copier/coller
-
Je crois me souvenir que lorsqu’on appelle spawnEntityInWorld dans une fonction client & server, il faut justement faire un !world.isRemote pour éviter d’avoir une image fixe du mob
-
@‘Plaigon’:
Je crois me souvenir que lorsqu’on appelle spawnEntityInWorld dans une fonction client & server, il faut justement faire un !world.isRemote pour éviter d’avoir une image fixe du mob
oui justement j’etait victime de se bug aussi quand je le faisait spawn merci

EDIT: et surtout merci @SpyMan

ReEDIT: je viens d’essayer et ça ne marche pas, peut un porte l’événement. le pire, c’est qu’il n’y a aucun message d’erreur nule part !

-
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