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.
    • SCAREXS Hors-ligne
      SCAREX
      dernière édition par

      Regarde le code plus précisément en faisant click droit “Open call hierarchy” sur la fonction qui vide le seau

      Site web contenant mes scripts : http://SCAREXgaming.github.io

      Pas de demandes de support par MP ni par skype SVP.
      Je n'accepte sur skype que l…

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

        Pour le premier problème, j’ai trouvé une solution toute simple : faire un extends de ShapedOreRecipe.
        Voici le code:

        public class ShapedOreRecipeWithoutRemain extends ShapedOreRecipe
        {
        
            public ShapedOreRecipeWithoutRemain(Block result     , Object[] recipe) { super(result, recipe); }
            public ShapedOreRecipeWithoutRemain(Item result      , Object[] recipe) { super(result, recipe); }
            public ShapedOreRecipeWithoutRemain(ItemStack result , Object[] recipe) { super(result, recipe); }
        
            @Override
            public ItemStack[] getRemainingItems(InventoryCrafting inv)
            {
                return new ItemStack[inv.getSizeInventory()];
            }
        }
        

        Il reste donc plus que le deuxième problème.

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

          Pourquoi faire une autre classe et pas utiliser ShapedOreRecipes directement ?
          Pour le  deuxième problème, créée un Material en prenant exemple sur celui de la lave.

          Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

          AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

          Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
          Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

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

            C’est parce que ShapedOreRecipe laisse un seau vide dans la table de craft si on fait un craft avec un seau plain. Donc comme je veux faire un craft avec un seau d’eau qui donne un autre seau, je ne vaux pas qu’il rest un seau vide dans la table de craft et ```java
            @Override
                public ItemStack[] getRemainingItems(InventoryCrafting inv)
                {
                    return new ItemStack[inv.getSizeInventory()];
                }

            permet de ne rien laisser dans la table de craft.(A part les item qu'il y a en trop pour le craft comme une buche de bois si on en met 2 dans un slot)
            
            Pour le deuxième problème, ce sont les entités qui gèrent le déplacement et les dégats dans les liquides : dans onUpdate(), il vérifient si le block dans lequel il est à pour material material.lava et dans ce cas, l'entité est ralentie et est en feu.
            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

              1. ça va être difficile. Le système de craft de Minecraft n’est pas du tout prévu pour ça.

              2. LivingUpdateEvent -> si le bloc au coordonnée de ton entité est ton bloc tu ralenti l’entité.

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

                @‘robin4002’:

                1. ça va être difficile. Le système de craft de Minecraft n’est pas du tout prévu pour ça.

                2. LivingUpdateEvent -> si le bloc au coordonnée de ton entité est ton bloc tu ralenti l’entité.

                C’est une bonne idée pour mon deuxième problème d’utiliser LivingUpdateEvent, je vais tester ça. (Et j’ai déjà trouvé une solution, un peut plus haut pour le premier problème)

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

                  Pour le 1), ah oui autant pour moi.
                  Pour le 2), oui bonne idée.

                  Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                  AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                  Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                  Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                  1 réponse Dernière réponse Répondre Citer 0
                  • 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
                                          • 1 / 2
                                          • Premier message
                                            Dernier message
                                          Design by Woryk
                                          ContactMentions Légales

                                          MINECRAFT FORGE FRANCE © 2024

                                          Powered by NodeBB