MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Crash lors d'un give via la casse d'un bloc

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    25 Messages 6 Publieurs 4.3k Vues 1 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • Benjamin LoisonB Hors-ligne
      Benjamin Loison
      dernière édition par

      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>

      >! Développeur de Altis-Life (Arma III) sur Minecraft !
      >! Site web     : https://lemnoslife.com

      1 réponse Dernière réponse Répondre Citer 0
      • RedRelayR Hors-ligne
        RedRelay Moddeurs confirmés
        dernière édition par

        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.

        –------------------------------------------------------------------------------------
        Si tu trouves mon intervention pertinente, n'hésite pas a m…

        1 réponse Dernière réponse Répondre Citer 0
        • BrokenSwingB Hors-ligne
          BrokenSwing Moddeurs confirmés Rédacteurs
          dernière édition par

          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));
          }
          }
          
          
          1 réponse Dernière réponse Répondre Citer 0
          • robin4002R Hors-ligne
            robin4002 Moddeurs confirmés Rédacteurs Administrateurs
            dernière édition par

            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)));
            }
            
            1 réponse Dernière réponse Répondre Citer 0
            • Benjamin LoisonB Hors-ligne
              Benjamin Loison
              dernière édition par

              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:

              1. @SubscribeEvent
              2. public void onBlockDestroyed(BreakEvent event)
              3. {
              4. if(event.block == ModAltisCraft.blockPomme)
              5. {
              6. event.getPlayer().inventory.addItemStackToInventory(new ItemStack(Items.apple, 1));
              7.    event.world.setBlock(x, y, z, ModAltisCraft.blockPomme, 0, 2);
              8. }
              9. }

              J’ai mis ça dans ma classe des events mais rien :S

              >! Développeur de Altis-Life (Arma III) sur Minecraft !
              >! Site web     : https://lemnoslife.com

              1 réponse Dernière réponse Répondre Citer 0
              • DiabolicaTrixD Hors-ligne
                DiabolicaTrix Correcteurs Moddeurs confirmés
                dernière édition par

                Au pire, fais un packet qui give au joueur.

                1 réponse Dernière réponse Répondre Citer 0
                • robin4002R Hors-ligne
                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                  dernière édition par

                  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 ?

                  1 réponse Dernière réponse Répondre Citer 0
                  • Benjamin LoisonB Hors-ligne
                    Benjamin Loison
                    dernière édition par

                    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());
                    

                    >! Développeur de Altis-Life (Arma III) sur Minecraft !
                    >! Site web     : https://lemnoslife.com

                    1 réponse Dernière réponse Répondre Citer 0
                    • BrokenSwingB Hors-ligne
                      BrokenSwing Moddeurs confirmés Rédacteurs
                      dernière édition par

                      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

                      1 réponse Dernière réponse Répondre Citer 0
                      • Benjamin LoisonB Hors-ligne
                        Benjamin Loison
                        dernière édition par

                        Ca a marché merci impec’ j’étais sûr que ça venait de la merci beaucoup !!!

                        >! Développeur de Altis-Life (Arma III) sur Minecraft !
                        >! Site web     : https://lemnoslife.com

                        1 réponse Dernière réponse Répondre Citer 0
                        • 1
                        • 2
                        • 1 / 2
                        • Premier message
                          Dernier message
                        Design by Woryk
                        ContactMentions Légales

                        MINECRAFT FORGE FRANCE © 2024

                        Powered by NodeBB