Navigation

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Fluids 1.7.10

    Tutoriels des membres
    1.7.10
    8
    25
    940
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Ciolgaming
      Ciolgaming last edited by robin4002

      Introduction

      Dans ce tutoriel, vous allez apprendre à faire un fluid qui ressemblera à celà :

      text alternatif

      Pré-requis

      • Créer un block
      • Créer un Item

      Code

      Classe Principale

      public static Block poisenouswaterb;
      public static Fluid poison;
      public static Item poisonbucket;
      

      Il faudra déclarer cela dans ta classe principale,

      Ensuite on va aller dans PreInit de ta classe principale et mettre :

      	@EventHandler
      	public void preInit(FMLPreInitializationEvent event)
      	{
      		poison = new Fluid("poison").setDensity(4000).setViscosity(500).setTemperature(286).setLuminosity(10).setUnlocalizedName("poison"); //on cree notre fluid que l'on nomme poison
              FluidRegistry.registerFluid(poison); // on register notre fluid
              poison = FluidRegistry.getFluid("poison");
      
              poisenouswaterb = new BlockFluidPoison(poison, Material.water).setBlockTextureName(Reference.MOD_ID + ":poison"); // on crée notre block
      		GameRegistry.registerBlock(poisenouswaterb, poisenouswaterb.getUnlocalizedName().substring(5)); //puis on le register
      
      poisonbucket = new ItemBucketPoison(CiolMod.poisenouswaterb).setUnlocalizedName("poisonbucket").setCreativeTab(CreativeTabs.tabMisc).setContainerItem(Items.bucket).setTextureName(Reference.MOD_ID + ":poisonbucket"); //on definit notre sceau de poison
      
      GameRegistry.registerItem(poisonbucket , "poisonbucket "); // on register l'item
      
      FluidContainerRegistry.registerFluidContainer(FluidRegistry.getFluidStack("poison", FluidContainerRegistry.BUCKET_VOLUME), new ItemStack(ItemMod.poisonbucket), FluidContainerRegistry.EMPTY_BUCKET);
      }
      

      Classe de notre block de poison :

      public class BlockFluidPoison extends BlockFluidClassic {
          
          public boolean canDisplace(IBlockAccess world, int x, int y, int z)
          {
              if(world.getBlock(x, y, z).getMaterial().isLiquid())
              {
                  return false;
              }
              return super.canDisplace(world, x, y, z);
          }
          
          public boolean displaceIfPossible(World world, int x, int y, int z)
          {
              if(world.getBlock(x, y, z).getMaterial().isLiquid())
              {
                  return false;
              }
              return super.displaceIfPossible(world, x, y, z);
          }
      
      	public BlockFluidPoison(Fluid fluid, Material material) {
      		super(fluid, material);
      	}
      }
      

      La class de notre sceau :

      public class ItemBucketPoison extends ItemBucket {
      
      	public ItemBucketPoison(Block p_i45331_1_) {
      		super(p_i45331_1_);
      	}
      }
      

      Les event :

      Retournons dans notre class principale :

      ajoutons-y :

          @SubscribeEvent
          public void onBucketFill(FillBucketEvent event)
          {
              Block id = event.world.getBlock(event.target.blockX, event.target.blockY, event.target.blockZ);
              int metadata = event.world.getBlockMetadata(event.target.blockX, event.target.blockY, event.target.blockZ);
              if(id == this.poisenouswaterb && metadata == 0)
              {
                  event.world.setBlockToAir(event.target.blockX, event.target.blockY, event.target.blockZ);
                  if (!event.world.isRemote){
                  	event.entityPlayer.inventory.consumeInventoryItem(Items.bucket);
                      EntityItem itemsc = new EntityItem(event.world, event.entityPlayer.posX, event.entityPlayer.posY, event.entityPlayer.posZ, new ItemStack(this.poisonbucket, 1));
                      event.world.spawnEntityInWorld(itemsc);
                  }
              }
          }
      

      Pour terminer on va register l’event dans la class principale dans postInit :

      MinecraftForge.EVENT_BUS.register(this);
      

      Bonus

      Si vous voulez ajouter des dégats à votre liquide, il suffit d’ajouter celà à la class de votre block :

          public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity)
          {
            if (((entity instanceof EntityLivingBase)) && (!world.isRemote)) {
              ((EntityLivingBase)entity).attackEntityFrom(DamageSource.drown, 1.0F);
            }
          }
      

      Merci d’avoir suivi mon tutoriel, si il vous à aidé n’hésitez pas a me donner 1 point positif 😉

      Si vous trouvez une erreur dans le tutoriel, merci de me le signaler

      Ce tutoriel de Ciolgaming publié sur Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International

      W 1 Reply Last reply Reply Quote 1
      • W
        whartokx @Ciolgaming last edited by whartokx

        @Ciolgaming problème, quand on récupère le fluide avec un seau on reçois de l’eau. normal? ma classe principale : https://pastebin.com/xBEwcxUH

        1 Reply Last reply Reply Quote 0
        • Ciolgaming
          Ciolgaming last edited by Ciolgaming

          @whartokx a dit dans Fluids 1.7.10 :

          https://pastebin.com/xBEwcxUH

          A mon avis tu as oubié de register l’event, regarde le tuto sur les events 🙂

          C’est un truc du genre FMLRegisterEvent.register(this);
          Je suis plus ^sûr en 1.7 déso

          1 Reply Last reply Reply Quote 0
          • JustAnDev
            JustAnDev last edited by

            @Ciolgaming a dit dans Fluids 1.7.10 :

            @SubscribeEvent public void onBucketFill(FillBucketEvent event) { Block id = event.world.getBlock(event.target.blockX, event.target.blockY, event.target.blockZ); int metadata = event.world.getBlockMetadata(event.target.blockX, event.target.blockY, event.target.blockZ); if(id == this.poisenouswaterb && metadata == 0) { event.world.setBlockToAir(event.target.blockX, event.target.blockY, event.target.blockZ); if (!event.world.isRemote){ event.entityPlayer.inventory.consumeInventoryItem(Items.bucket); EntityItem itemsc = new EntityItem(event.world, event.entityPlayer.posX, event.entityPlayer.posY, event.entityPlayer.posZ, new ItemStack(this.poisonbucket, 1)); event.world.spawnEntityInWorld(itemsc); } } }

            en 1.8 ca marche a moitié le code pour recup bucket ne marche pas

            1 Reply Last reply Reply Quote 0
            • B
              Blackbalrog last edited by

              Refais ton tutoriel ou alors quelqu’un le refais je n’ai pas tous compris s’il vous plait.

              1 Reply Last reply Reply Quote 0
              • robin4002
                robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                Bonsoir,
                J’ai remis en forme le tutoriel (beaucoup de balise cassé dû au passage vers NodeBB), cela sera probablement mieux maintenant.

                AstFaster 1 Reply Last reply Reply Quote 0
                • B
                  Blackbalrog last edited by

                  Merci.

                  1 Reply Last reply Reply Quote 0
                  • S
                    skyreth last edited by

                    This post is deleted!
                    1 Reply Last reply Reply Quote 0
                    • AstFaster
                      AstFaster @robin4002 last edited by

                      @robin4002 Moi aussi je récupère de l’eau et pourtant g bien tout suivi

                      1 Reply Last reply Reply Quote 0
                      • robin4002
                        robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                        Vérifies ton event FillBucketEvent

                        AstFaster 1 Reply Last reply Reply Quote 0
                        • AstFaster
                          AstFaster @robin4002 last edited by robin4002

                          @robin4002 Je viens de le faire
                          Et tjrs rien. Tu veux mon code ?

                          tiens ma classe principale
                          https://pastebin.com/cPdDV3BV

                          1 Reply Last reply Reply Quote 0
                          • robin4002
                            robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by robin4002

                            Tu as vérifié que l’événement est bien appelé en mettant un point d’arrêt ou un print dedans ?

                            Et sinon un message ça suffit, inutile de spammer. Il y a l’option éditer pour ajouter du contenu à un message.

                            AstFaster 1 Reply Last reply Reply Quote 0
                            • AstFaster
                              AstFaster last edited by

                              Et mon print il s’affichera où @robin4002 ?

                              1 Reply Last reply Reply Quote 0
                              • AstFaster
                                AstFaster @robin4002 last edited by

                                @robin4002 Je viens de tester et quand mon event et censé sa déclencher. Il ne se passe rien

                                1 Reply Last reply Reply Quote 0
                                • robin4002
                                  robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                                  En effet et j’ai trouvé pourquoi, il te manque @Mod.EventHandler au-dessus de init et postInit.

                                  1 Reply Last reply Reply Quote 0
                                  • AstFaster
                                    AstFaster last edited by

                                    Merci Bcp !

                                    1 Reply Last reply Reply Quote 0
                                    • AstFaster
                                      AstFaster last edited by

                                      @robin4002 Connais-tu une méthode pour rajouter de la vie à la place d’en enlever
                                      ?

                                      1 Reply Last reply Reply Quote 0
                                      • robin4002
                                        robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                                        Donner l’effet de régénération. Ou juste appeler la méthode setHealth de l’entité.

                                        AstFaster 1 Reply Last reply Reply Quote 0
                                        • AstFaster
                                          AstFaster last edited by

                                          mrc

                                          1 Reply Last reply Reply Quote 0
                                          • AstFaster
                                            AstFaster @robin4002 last edited by

                                            @robin4002 Juste comment tu add un effet ?

                                            1 Reply Last reply Reply Quote 0
                                            • 1
                                            • 2
                                            • 1 / 2
                                            • First post
                                              Last post
                                            Design by Woryk
                                            Contact / Mentions Légales / Faire un don

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB