MFF

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

    Bucket et Liquide

    Planifier Épinglé Verrouillé Déplacé Résolu 1.8.x
    1.8
    29 Messages 6 Publieurs 5.8k 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.
    • LeBossMax2L Hors-ligne
      LeBossMax2
      dernière édition par

      J’ai fait quelque chose avec LivingUpdateEvent mais avec beaucoup d’entités, ça fait vite du lag.
      :::

      @SubscribeEvent
          public void onLivingUpdate(LivingUpdateEvent event)
          {
              EntityLivingBase entity = event.entityLiving;
              BlockPos pos = new BlockPos(entity);
              World world = entity.worldObj;
      
              boolean inTarmac = false;
      
              AxisAlignedBB bBox = entity.getEntityBoundingBox();
              if (bBox == null)
                  return;
      
              Iterable <blockpos>iterable = BlockPos.getAllInBox(new BlockPos(bBox.minX, bBox.minY, bBox.minZ), new BlockPos(bBox.maxX, bBox.maxY, bBox.maxZ));
              Iterator <blockpos>iterator = iterable.iterator();
              while (iterator.hasNext())
              {
                  BlockPos testPos = iterator.next();
                  System.out.println("Test…" + testPos);
                  if (world.getBlockState(testPos).getBlock() == BlockMod.tarmacLiquid)
                  {
                      inTarmac = true;
                      break;
                  }
              }
      
              if (inTarmac)
              {
                  entity.setFire(1);
                  entity.motionX *= 0.2f;
                  entity.motionY *= 0.5f;
                  entity.motionZ *= 0.2f;
              }
      
          }
      

      :::

      Si quelqu’un a un moyen plus simple et moins couteux en ressources, je suis preneur !</blockpos></blockpos>

      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

        Pourquoi tout ça ?
        Un simple :
        if(world.getBlockState(new BlockPos(entity.posX, entity.posY, entity.posZ).getBlock() == BlockMod.tarmacLiquid)
        suffit.

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

          J’ai fait ce truc compliqué pour détecter tous les blocks en collision avec l’entité. Si je met
          if(world.getBlockState(new BlockPos(entity.posX, entity.posY, entity.posZ).getBlock() == BlockMod.tarmacLiquid)
          ça va juste détecter le block au pieds de l’entité. Donc je sais pas si c’est vraiment mieux.

          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

            if(world.getBlockState(new BlockPos(entity.posX, entity.posY, entity.posZ).getBlock() == BlockMod.tarmacLiquid || world.getBlockState(new BlockPos(entity.posX, entity.posY, entity.posZ).up().getBlock() == BlockMod.tarmacLiquid)
            devrait être suffisant.

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

              Merci ! Comme ça, ça lag moins !

              J’ai un dernier petit problème, je pence pas que ce soir trais important mais bon. Quand je prend mon liquide en item, sa texture c’est un block noir et rose (au lieux de l’item plat du liquide).
              Voici le code que j’ai mit pour définir le model du liquide (pris sur un tuto):

              Item item = Item.getItemFromBlock(fluid);
                      final ModelResourceLocation resLoc = new ModelResourceLocation(ModMaxyFactory.MOD_ID + ":" + fluid.getUnlocalizedName().substring(5), "tarmacliquid");
              
                      ModelBakery.addVariantName(item);
                      ModelLoader.setCustomMeshDefinition(item, new ItemMeshDefinition()
                      {
                          @Override
                          public ModelResourceLocation getModelLocation(ItemStack stack)
                          {
                              return resLoc;
                          }
                      });
                      ModelLoader.setCustomStateMapper(fluid, new StateMapperBase()
                      {
                          @Override
                          protected ModelResourceLocation getModelResourceLocation(IBlockState p_178132_1_)
                          {
                              return resLoc;
                          }
                      });
              

              et voici le blockstate de mon liquide :

              {
                  "forge_marker": 1,
                  "defaults": {
                      "model": "forge:fluid",
                      "transform": "forge:default-item"
                  },
                  "variants": {
                      "tarmacliquid" : [{
                          "custom": { "fluid": "fluid_tarmac" }
                      }]
                  }
              }
              

              Dites moi si il y a des choses à changer.

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

                Salut, pourrais-tu me passer tout ton code de liquide pour que je puisse voir de mon côté, merci.  😉

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

                  @‘elx9000’:

                  Salut, pourrais-tu me passer tout ton code de liquide pour que je puisse voir de mon côté, merci.  😉

                  Il n’y a pas grand chose de plus que je pourrais ajouter. C’est deux lignes peuvent peut-être être utiles :

                  fluidTarmac = new Fluid("fluid_tarmac", new ResourceLocation("maxyfactory:blocks/tarmac"), new ResourceLocation("maxyfactory:blocks/tarmac_flowing")).setTemperature(800);
                  tarmacLiquid = ((BlockFluidClassic) new TarmacLiquid(FluidMod.fluidTarmac, MaterialMod.liquid).setUnlocalizedName("tarmacLiquid")).setTickRate(20).setQuantaPerBlock(5).setTemperature(800);
                  

                  TarmacLiquid est just un extends de BlockFluidClassic.(La class de forge qui permet de faire des liquides simplement)

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

                    Merci je vais voir ce que je peux faire

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

                      Pourrais - tu me passer exactement tout ton code (même la plus petite ligne), j’ai beaucoup de mal à recréer ton fluide.

                      Merci d’avance.

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

                        Dans FMLPreInitializationEvent, il y a :
                        :::

                        Fluid fluidTarmac = new Fluid("fluid_tarmac", new ResourceLocation("maxyfactory:blocks/tarmac"), new ResourceLocation("maxyfactory:blocks/tarmac_flowing")).setTemperature(800);
                        FluidRegistry.registerFluid(fluidTarmac);
                        
                        Block tarmacLiquid = ((BlockFluidClassic) new BlockFluidClassic(FluidMod.fluidTarmac, MaterialMod.liquid).setUnlocalizedName("tarmacLiquid")).setTickRate(20).setQuantaPerBlock(5).setTemperature(800);
                        GameRegistry.registerBlock(tarmacLiquid, "tarmacLiquid");
                        
                        Item itemTarmacLiquid = Item.getItemFromBlock(tarmacLiquid);
                        final ModelResourceLocation resLoc = new ModelResourceLocation("maxyfactory:fluid_tarmac", "tarmacliquid");
                        
                        ModelBakery.addVariantName(item);
                        ModelLoader.setCustomMeshDefinition(itemTarmacLiquid, new ItemMeshDefinition()
                        {
                            @Override
                            public ModelResourceLocation getModelLocation(ItemStack stack)
                            {
                                return resLoc;
                            }
                        });
                        ModelLoader.setCustomStateMapper(itemTarmacLiquid, new StateMapperBase()
                        {
                            @Override
                            protected ModelResourceLocation getModelResourceLocation(IBlockState p_178132_1_)
                            {
                                return resLoc;
                            }
                        });
                        
                        

                        :::

                        Dans FMLInitializationEvent (coté client), il y a ça :
                        :::

                        
                        Item itemTarmacLiquid = Item.getItemFromBlock(tarmacLiquid);
                        Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(itemTarmacLiquid, 0, new ModelResourceLocation("maxyfactory:" + itemTarmacLiquid.getUnlocalizedName().substring(5), "inventory"));
                        
                        

                        :::

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

                          Ok merci, je travaille dessus

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

                            J’ai trouvé la solution, c’était tout bête : il fallait enlever ce qui il a dans init car cela rajoute une localisation du model et ça fait un bug.
                            Merci à tous pour votre aide !

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

                            MINECRAFT FORGE FRANCE © 2024

                            Powered by NodeBB