Crash lors d'un give via la casse d'un bloc
-
Ce que je veux c’est que ça spawn directement dans son inventaire
…. -
Dans ce cas essaie avec les event
@SubscribeEvent public void onBlockDestroyed(BreakEvent event) { if(event.block == TaClassePrincipale.blockPomme) { event.getPlayer().inventory.addItemStackToInventory(new ItemStack(Items.apple, 1 + rand.nextInt(5))); event.world.setBlock(x, y, z, ModAltisCraft.blockPomme, 0, 2); } } -
Pas moyen d’éviter les events ?
-
Non je ne connais pas d’autre méthode dans la classe Block appelé lorsqu’il est cassé. Mais tu sais tu devras bien y passer en + ce n’est pas compliqué.
Tu rajoutes cette ligne là dans ta méthode init :
MinecraftForge.EVENT_BUS.register(new TaClasseDEvent());EDIT = Y’a moyen de faire autrement, il suffit d’envoyer un packet.
-
Ouai mais bon les events et moi… :S
-
Et tout mais pas les packets :') enfin bon je suis sûr que c’est possible avec mon code de base quelqu’un d’autre a des idées ?

-
Nop je suis la seule personne ce soir =D
Essaie ça, je n’y avais pas du tout pensépublic void onBlockDestroyedByPlayer(World world, int x, int y, int z, int l) { if(world.isRemote){ Minecraft.getMinecraft().thePlayer.inventory.addItemStackToInventory(new ItemStack(Items.apple, 1 + rand.nextInt(5))); } else { world.setBlock(x, y, z, ModAltisCraft.blockPomme, 0, 2); } } -
Ca marche impec’ merci beaucoup

-
Nop ça ne marche pas j’ai testé.
Regarde bien, fais toi giver l’item par le block, déco-reco et tu verras qu’il n’est pas sauvegardé dans ta barre d’action….
C’est sûrement un prob de Sides, on a dû placer le code au mauvais endroit (dans la mauvaise condition). Il faut regarder dans les autres classes de Minecraft, par-exemple la vache et son saut de lait. Pour ça je te laisse tu ne devrais pas avoir trop de mal
-
Alors voilà ma nouvelle classe :
package fr.altiscraft.altiscraft.common; import java.util.ArrayList; import java.util.Random; import net.minecraft.block.BlockBush; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.IShearable; public class CannabisPlante extends BlockBush implements IShearable { protected CannabisPlante() { super(Material.leaves); float f = 0.4F; setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, 0.8F, 0.5F + f); } public void onBlockDestroyedByPlayer(World world, int x, int y, int z, int l) { if (world.isRemote) { Minecraft.getMinecraft().thePlayer.inventory.addItemStackToInventory(new ItemStack(ModAltisCraft.itemCannabis, 1)); } else { world.setBlock(x, y, z, ModAltisCraft.CannabisPlante, 0, 2); } } public boolean isShearable(ItemStack item, IBlockAccess world, int x, int y, int z) { return false; } public ArrayList <itemstack>onSheared(ItemStack item, IBlockAccess world, int x, int y, int z, int fortune) { return null; } public int quantityDropped(Random rdm) { return 0; } public Item getItemDropped(int int1, Random rdm, int int2) { return Item.getItemFromBlock(this); } }Le problème est celui que tu as dis ça ne sauvegarde pas j’ai regardé du côté sceau de lait mais je n’ai vu que ça qui ne m’aide pas trop…
/** * Called when a player interacts with a mob. e.g. gets milk from a cow, gets into the saddle on a pig. */ public boolean interact(EntityPlayer p_70085_1_) { ItemStack itemstack = p_70085_1_.inventory.getCurrentItem(); if (itemstack != null && itemstack.getItem() == Items.bucket && !p_70085_1_.capabilities.isCreativeMode) { if (itemstack.stackSize-- == 1) { p_70085_1_.inventory.setInventorySlotContents(p_70085_1_.inventory.currentItem, new ItemStack(Items.milk_bucket)); } else if (!p_70085_1_.inventory.addItemStackToInventory(new ItemStack(Items.milk_bucket))) { p_70085_1_.dropPlayerItemWithRandomChoice(new ItemStack(Items.milk_bucket, 1, 0), false); } return true; } else { return super.interact(p_70085_1_); } }Voilà je ne sais pas comment résoudre ça :x Merci d’avance</itemstack>
-
On te l’a dit utilise les events !
Le give d’objet ça se fait uniquement coté serveur.
Le système a été fait pour te simplifier la vie, tu te compliques la vie en cherchant a le contourner. -
Surtout que le code n’est pas très compliqué :
(code 1.8)@SubscribeEvent public void onPlayerBreakBlock(BreakEvent event) { if(event.state.getBlock() == TestMod.plante && !event.getPlayer().capabilities.isCreativeMode) //Ne donne pas le bloc si le joueur est en créatif car ça peut être embêtant { event.getPlayer().inventory.addItemStackToInventory(new ItemStack(TestMod.plante)); } } -
Franchement les événements c’est super simple …
Et sinon il y a cette fonction :public void harvestBlock(World world, EntityPlayer player, int x, int y, int z, int metadata) { super.harvestBlock(world, player, x, y, z, metadata); player.inventory.addItemStackToInventory(new ItemStack(Items.apple, 1 + world.rand.nextInt(5))); } -
Merci pour la fonction c’est bon en faite je n’aime pas trop passé par les events perso voilà merci beaucoup à tous
!EDIT: La fonction ne marche pas en multi comment faire ?? (Encore sans les events de préférences :S)
S’il vous plaît, merci

EDIT-EDIT:
- @SubscribeEvent
- public void onBlockDestroyed(BreakEvent event)
- {
- if(event.block == ModAltisCraft.blockPomme)
- {
- event.getPlayer().inventory.addItemStackToInventory(new ItemStack(Items.apple, 1));
- event.world.setBlock(x, y, z, ModAltisCraft.blockPomme, 0, 2);
- }
- }
J’ai mis ça dans ma classe des events mais rien :S
-
Au pire, fais un packet qui give au joueur.
-
Heu si elle devrait fonctionner. C’est elle qui gère le drop et la destruction du bloc, donc …
Pour l’event, est-ce que tu as bien enregistré la classe dans laquelle il se trouve ? -
Par exemple avec cette classe :
package fr.altiscraft.altiscraft.common; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; public class BlockPomme extends Block { public Random rand = new Random(); public void onBlockDestroyedByPlayer(World world, int x, int y, int z, int l) { world.setBlock(x, y, z, ModAltisCraft.blockPomme, 0, 2); } protected BlockPomme() { super(Material.leaves); } public boolean renderAsNormalBlock() { return false; } public boolean isOpaqueCube() { return false; } public int quantityDropped(Random rdm) { return 0; } public Item getItemDropped(int int1, Random rdm, int int2) { return Item.getItemFromBlock(this); } public void harvestBlock(World world, EntityPlayer player, int x, int y, int z, int metadata) { super.harvestBlock(world, player, x, y, z, metadata); player.inventory.addItemStackToInventory(new ItemStack(Items.apple, 1)); } }Et si je lance le jeu en multi ou en solo, le block respawn mais je ne gagne pas dans mon inventaire la pomme…
Et pour les events j’ai cette classe je copie tout pour si y a une erreur enfin bon mon code est à la fin :
package diabolicatrix.project; import java.util.UUID; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.InputEvent.KeyInputEvent; import cpw.mods.fml.common.gameevent.TickEvent.PlayerTickEvent; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import diabolicatrix.project.proxy.ClientProxy; import fr.altiscraft.altiscraft.common.GuiSpawn; import fr.altiscraft.altiscraft.common.ModAltisCraft; import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.scoreboard.Score; import net.minecraft.scoreboard.ScoreObjective; import net.minecraft.scoreboard.Scoreboard; import net.minecraft.server.MinecraftServer; import net.minecraftforge.event.world.BlockEvent.BreakEvent; public class T4EventHandler { private MinecraftServer mcs = MinecraftServer.getServer(); private Item checkArmor = GameRegistry.findItem("flansmod", "Archeo"); // private Minecraft mc = Minecraft.getMinecraft(); private UUID uuid; private String boardTitle; private String scoreString; private boolean shift = false; @SubscribeEvent @SideOnly(Side.CLIENT) public void onKeyInput(KeyInputEvent event) { if (ClientProxy.overMouse.isPressed()) { if (Minecraft.getMinecraft().objectMouseOver.entityHit instanceof EntityPlayer) { Scoreboard scoreboard = Minecraft.getMinecraft().theWorld.getScoreboard(); String name = Minecraft.getMinecraft().thePlayer.getDisplayName(); ScoreObjective scoreobjective = scoreboard.getObjective("Policier"); if (scoreobjective != null) { Score test = scoreboard.func_96529_a(name, scoreobjective); System.out.println(test.getScorePoints()); if (test.getScorePoints() > 0) { if (Minecraft.getMinecraft().objectMouseOver.entityHit != null && Minecraft.getMinecraft().objectMouseOver.entityHit instanceof EntityPlayer) { UUID uuid = Minecraft.getMinecraft().objectMouseOver.entityHit.getUniqueID(); Base.instance.network.sendToServer(new PacketOp(uuid)); } // } // } // Minecraft.getMinecraft().displayGuiScreen(new // GuiMouseOver()); } } } } if (ClientProxy.gang.isPressed()) { Minecraft.getMinecraft().displayGuiScreen(new GuiGangMenu()); } if (ClientProxy.restrain.isPressed()) { if (Minecraft.getMinecraft().objectMouseOver.entityHit instanceof EntityPlayer) { Scoreboard scoreboard2 = Minecraft.getMinecraft().theWorld.getScoreboard(); String name2 = Minecraft.getMinecraft().thePlayer.getDisplayName(); ScoreObjective scoreobjective2 = scoreboard2.getObjective("Policier"); EntityPlayer player = (EntityPlayer) Minecraft.getMinecraft().objectMouseOver.entityHit; EEPRestrained props = EEPRestrained.get(player); if (Minecraft.getMinecraft().thePlayer.worldObj.isRemote) { if (scoreobjective2 != null) { Score test2 = scoreboard2.func_96529_a(name2, scoreobjective2); System.out.println(test2.getScorePoints()); if (test2.getScorePoints() > 0) { UUID uuid = Minecraft.getMinecraft().objectMouseOver.entityHit.getUniqueID(); UUID restrainer = Minecraft.getMinecraft().thePlayer.getUniqueID(); Base.instance.network.sendToServer(new PacketRestrain(uuid, restrainer)); // ChatComponentText component = new // ChatComponentText(EnumChatFormatting.GRAY + // I18n.format("t4.restraining") + // player.getDisplayName()); } } } } } if (ClientProxy.unescort.isPressed()) { Minecraft.getMinecraft().displayGuiScreen(new GuiSpawn()); // if (Minecraft.getMinecraft().thePlayer.riddenByEntity != null) { // EntityPlayer player = (EntityPlayer) // Minecraft.getMinecraft().thePlayer.riddenByEntity; // EntityPlayer lol = Minecraft.getMinecraft().thePlayer; // System.out.println(player.getDisplayName()); // System.out.println(lol.getDisplayName()); // lol.dismountEntity(lol); // Base.instance.network.sendToServer(new PacketUnescort(uuid3, // uuid2)); // System.out.println("packet sent"); // } } /* * if(Minecraft.getMinecraft().gameSettings.keyBindForward.isPressed()){ * EntityPlayer player = Minecraft.getMinecraft().thePlayer; * EEPRestrained props = EEPRestrained.get(player); * if(props.isRestrained()) { event.setCanceled(true); } } * if(Minecraft.getMinecraft().gameSettings.keyBindBack.isPressed()){ * EntityPlayer player = Minecraft.getMinecraft().thePlayer; * EEPRestrained props = EEPRestrained.get(player); * if(props.isRestrained()) { event.setCanceled(true); } } * if(Minecraft.getMinecraft().gameSettings.keyBindLeft.isPressed()){ * EntityPlayer player = Minecraft.getMinecraft().thePlayer; * EEPRestrained props = EEPRestrained.get(player); * if(props.isRestrained()) { event.setCanceled(true); } } * if(Minecraft.getMinecraft().gameSettings.keyBindRight.isPressed()){ * EntityPlayer player = Minecraft.getMinecraft().thePlayer; * EEPRestrained props = EEPRestrained.get(player); * if(props.isRestrained()) { event.setCanceled(true); } } */ } /* * @SubscribeEvent * * @SideOnly(Side.CLIENT) public void onTickEvent(PlayerTickEvent event) { * if (Minecraft.getMinecraft().theWorld != null) { EntityPlayer player = * Minecraft.getMinecraft().thePlayer; EEPRestrained props = * EEPRestrained.get(player); * * if (player != null && props != null) { if (props.isRestrained()) { * //IAttributeInstance attribute = * player.getEntityAttribute(SharedMonsterAttributes.movementSpeed); * //attribute.applyModifier(new AttributeModifier("Slow", -100D, * 50).setSaved(false)); player.motionX = 0.0D; player.motionY = 0.0D; * player.motionZ = 0.0D; player.setJumping(false); } } } * * } */ /* * @SubscribeEvent * * @SideOnly(Side.CLIENT) public void onTickEvent(PlayerTickEvent event) { * if(event.player.inventory.armorInventory[3] != null){ * if(event.player.inventory.armorInventory[3].getItem() == checkArmor) { * event.player.addPotionEffect(new * PotionEffect(Potion.waterBreathing.getId(), 0, 3)); } } } */ @SubscribeEvent @SideOnly(Side.CLIENT) public void onPlayerTickEvent(PlayerTickEvent event) { /* * if(GuiSpawn.getSelected() == "dassadsasdasadasd" && * Minecraft.getMinecraft().currentScreen == null) { * Minecraft.getMinecraft().displayGuiScreen(new GuiSpawnMenu()); } */ // System.out.println("Test 1"); if (event.player.inventory.armorInventory[3] != null) { // System.out.println("Test 2"); // Minecraft.getMinecraft().displayGuiScreen(new GuiSpawnMenu()); } } @SubscribeEvent public void onBlockDestroyed(BreakEvent event) { if (event.block == ModAltisCraft.blockPomme) { event.getPlayer().inventory.addItemStackToInventory(new ItemStack(Items.apple, 1)); } } }Et ça fonctionne puisque les fonctions dedans marchent et dans la classe principale j’ai dans le init:
FMLCommonHandler.instance().bus().register(new T4EventHandler()); MinecraftForge.EVENT_BUS.register(new ForgeT4EventHandler()); -
En se référant à cette liste : http://www.minecraftforgefrance.fr/forge-events.php , il semblerait que l’event soit un event Forge et non FML, mais tu le met dans la classe qui gèrent les events FML.
L’event devrait se trouver dans ForgeT4EventHandler -
Ca a marché merci impec’ j’étais sûr que ça venait de la merci beaucoup !!!