MFF

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

    Drop de mon minerais par une variable

    Planifier Épinglé Verrouillé Déplacé Résolu 1.12.x
    1.12.2
    12 Messages 3 Publieurs 513 Vues 2 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.
    • robin4002R Hors-ligne
      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
      dernière édition par

      Bonsoir,

      Cela ne peut pas fonctionner de cette manière.
      Regardes dans la classe bloc s’il y a une méthode pour obtenir le drop ayant world en argument. Si ce n’est pas le cas, il faudra passer par l’event BlockEvent.HarvestDropsEvent pour réaliser ce que tu veux faire.

      1 réponse Dernière réponse Répondre Citer 0
      • I Hors-ligne
        ImperoMaximo
        dernière édition par ImperoMaximo

        Ce message a été supprimé !
        1 réponse Dernière réponse Répondre Citer 0
        • I Hors-ligne
          ImperoMaximo
          dernière édition par ImperoMaximo

          J’ai réussi merci de m’avoir mis sur la voie, j’ai fais autrement et en utilisant ce code:

          	 public long time() {return Minecraft.getMinecraft().world.getWorldTime();}
          	 public boolean day() {
          		 if(time() < 13000) return true;
          		 else return false;
          	 }
          
          	@Override
          	public Item getItemDropped(IBlockState state, Random rand, int fortune) {
          		//System.out.println(day());
          		if(day() == true) return TutorialItems.SOLARIUMSHARD;
          		else return TutorialItems.LUNARIUMSHARD;
          	}
          

          Cela fonctionne, il me reste un dernier soucis peut être idiot ou déjà résolu, avec la méthode getWorldTme() je suis sensé obtenir une valeureinférieure a 23999 et supérieure à 0, or quand je fais In Game /time set 26 000 par exemple, la valeur de day est false, c’est a dire que le jeu considère qu’il fais nuit alors qu’il fais jour, vous ne connaîtriez pas un moyen de régler ce léger soucis? En tout cas merci bcp @robin4002 .

          Edit: lorsque je dors dans un lit puis que je casse le minerais j’obtiens uniquement du lunarium et je ne sais pas trop pourquoi

          1 réponse Dernière réponse Répondre Citer 0
          • I Hors-ligne
            ImperoMaximo
            dernière édition par

            Voici la solution, j’ai juste fais une boucle do while, en espérant que cela serve a quelqu’un:

            package fr.minecraftforgefrance.tutorial.blocks;
            
            import java.util.Random;
            
            import fr.minecraftforgefrance.tutorial.items.TutorialItems;
            import net.minecraft.block.Block;
            import net.minecraft.block.material.Material;
            import net.minecraft.block.state.IBlockState;
            import net.minecraft.client.Minecraft;
            import net.minecraft.item.Item;
            import net.minecraft.util.math.BlockPos;
            import net.minecraft.world.IBlockAccess;
            
            public class SolariumOre extends Block
            {
            	public SolariumOre(Material materialIn) {
            		super (Material.IRON);
            		this.setUnlocalizedName("solarium_ore");
            	}
            	
            	public int getExpDrop(IBlockState state, IBlockAccess world, BlockPos pos, int fortune) {return 30;}
            	
            	public long time() {return Minecraft.getMinecraft().world.getWorldTime();}
            
            	public long algorythmeTime() {
            		long time = time();
            		if(time < 24000) return time;
            		else {
            			do time = time - 24000;
            			while(time > 23999);
            			return time;
            		}
            	}
            	
            	public boolean day() {
            		if(algorythmeTime() < 13000) return true;
            		else return false;
            	}
            	
            	@Override
            	public Item getItemDropped(IBlockState state, Random rand, int fortune) {
            		if(day() == true) return TutorialItems.SOLARIUMSHARD;
            		else return TutorialItems.LUNARIUMSHARD;
            	}
            
            	
            
            }
            

            Voila merci encore @robin4002 .

            1 réponse Dernière réponse Répondre Citer 0
            • LeBossMax2L Hors-ligne
              LeBossMax2
              dernière édition par

              Bonjour, ceci est une mauvaise solution car la classe Minecraft n’est pas disponible sur serveur. Donc le jeu va crash sur serveur. Il faut utiliser un fonction qui prend un World en paramètre pour pouvoir récupérer son gametime

              1 réponse Dernière réponse Répondre Citer 0
              • I Hors-ligne
                ImperoMaximo
                dernière édition par

                Ce message a été supprimé !
                1 réponse Dernière réponse Répondre Citer 0
                • I Hors-ligne
                  ImperoMaximo
                  dernière édition par

                  @LeBossMax2 bonjour,
                  Est ce que vous sauriez comment faire pour régler le soucis dont vous parlez ? Mettre un solde only client devant ou autre, merci d’avance

                  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 robin4002

                    Il faut passer par une fonction qui donne accès à world. Si tu cherches où getItemDropped est appelé tu vas tomber sur la fonction getDrops dans la classe Block :

                        public void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune)
                        {
                            Random rand = world instanceof World ? ((World)world).rand : RANDOM;
                    
                            int count = quantityDropped(state, fortune, rand);
                            for (int i = 0; i < count; i++)
                            {
                                Item item = this.getItemDropped(state, rand, fortune);
                                if (item != Items.AIR)
                                {
                                    drops.add(new ItemStack(item, 1, this.damageDropped(state)));
                                }
                            }
                        }
                    

                    Il suffit donc de l’override dans la classe de ton bloc et d’en changer le comportement :

                        @Override
                        public void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune)
                        {
                            boolean isDay = world instanceof World ? (((World)world).getWorldTime() % 24000 < 13000) : true;
                            if (isDay)
                            {
                                drops.add(new ItemStack(TutorialItems.SOLARIUMSHARD , 1));
                            }
                            else
                            {
                                drops.add(new ItemStack(TutorialItems.LUNARIUMSHARD, 1));
                            }
                        }
                    
                    1 réponse Dernière réponse Répondre Citer 1
                    • I Hors-ligne
                      ImperoMaximo
                      dernière édition par

                      Ce message a été supprimé !
                      1 réponse Dernière réponse Répondre Citer 0
                      • I Hors-ligne
                        ImperoMaximo
                        dernière édition par

                        merci beaucoup maintenant tout fonctionne, merci a vous deux

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

                        MINECRAFT FORGE FRANCE © 2024

                        Powered by NodeBB