MFF

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

    Plusieurs textures pour un même modèle custom d'une entité

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    37 Messages 4 Publieurs 5.0k 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.
    • FolganskyF Hors-ligne
      Folgansky Correcteurs
      dernière édition par

      @‘DiabolicaTrix’:

      Essaie de créer un nouveau monde. ou de changer les ids pour un autre.

      Ok bonne nouvelle, j’ai mis l’id à 30 et changé le world, plus de crash.
      Ceci dit ce qui spawn est invisible, montable, mais invisible.

      Edit: Si la ligne 18 est bien "       dw.addObject(30, “Moto”);         "

      Edit2: Rectification

      J’avais oublié de changer l’Id du render pour “30”.
      Ceci dit mon metadata 0 et 1 font spawn une moto ayant la même texture.
      Bien que:
      :::

      {
      EntityMoto e = new EntityMoto(world);
        if(!world.isRemote)
            {
         e.setPosition(x, y + 1.0F, z);
         world.spawnEntityInWorld(e);
         stack.stackSize–;
            }
        else
        {
         DataWatcher dw = e.getDataWatcher();
         dw.updateObject(30, "Moto");
        }
            return true;
      }
      else if(metadata == 1)
      {
      EntityMoto e = new EntityMoto(world);
        if(!world.isRemote)
            {
      :::
      
         e.setPosition(x, y + 1.0F, z);
         world.spawnEntityInWorld(e);
         stack.stackSize--;
            }
        else
        {
         DataWatcher dw = e.getDataWatcher();
         dw.updateObject(30, "Moto1");
        }
            return true;
      }
      

      Que j’ai bien rafraichis mes fichiers de textures et qu’elle sont très facilement différenciable (simplement la palette de couleur opposée)

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

        C’est étange, tu peux renvoyer tes code (render+EntityMoto surtout)

        1 réponse Dernière réponse Répondre Citer 0
        • FolganskyF Hors-ligne
          Folgansky Correcteurs
          dernière édition par

          Les voici, je te préviens, la classe de la moto est une jungle je pense.

          :::

          package fr.powergame.modpg.common;
          
          import java.util.Iterator;
          import java.util.List;
          
          import net.minecraft.block.Block;
          import net.minecraft.block.material.Material;
          import net.minecraft.entity.Entity;
          import net.minecraft.entity.EntityAgeable;
          import net.minecraft.entity.IEntityLivingData;
          import net.minecraft.entity.SharedMonsterAttributes;
          import net.minecraft.entity.item.EntityItem;
          import net.minecraft.entity.passive.EntityHorse;
          import net.minecraft.entity.player.EntityPlayer;
          import net.minecraft.init.Blocks;
          import net.minecraft.init.Items;
          import net.minecraft.item.Item;
          import net.minecraft.item.ItemArmor;
          import net.minecraft.item.ItemStack;
          import net.minecraft.item.ItemSword;
          import net.minecraft.stats.AchievementList;
          import net.minecraft.util.DamageSource;
          import net.minecraft.util.MathHelper;
          import net.minecraft.world.World;
          
          public  class EntityMoto extends EntityHorse
          {
          @SuppressWarnings("unused")
          private boolean field_110294_bI;
          private int field_110285_bP;
              @SuppressWarnings("unused")
          private boolean persistenceRequired;
          public EntityMoto(World model)
          {
              super(model);
              }
          
          public int getHorseType()
              {
                  return 0;
              }
          
              public boolean isAdultHorse()
              {
                  return true;
              }
          
              public int getGrowingAge()
              {
                  return 12000;
              }
          
          public double getMountedYOffset()
              {
                  return (double)this.height * 0.5D;
              } 
          
              protected void applyEntityAttributes()
              {
                  super.applyEntityAttributes();
                  this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(10.0D);
              }
          
          public boolean isEntityInvulnerable()
              {
                  return true;
              }
          
          public void setJumpPower(int p_110206_1_)
              {
                  if (this.isHorseSaddled())
                  {
                      if (p_110206_1_ < 0)
                      {
                          p_110206_1_ = 0;
                      }
                      else
                      {
                          this.field_110294_bI = true;
                      }
          
                      if (p_110206_1_ >= 90)
                      {
                          this.jumpPower = 0.0F;
                      }
                      else
                      {
                          this.jumpPower = 0.0F + 0.0F * (float)p_110206_1_ / 90.0F;
                      }
                  }
              }
          
          @SuppressWarnings("rawtypes")
          public void onLivingUpdate()
              {
          if(this.ticksExisted>=12000)
          {
          this.setDead();
          }
          else if (this.riddenByEntity == null)
              {
              motionX = motionY = motionZ = 0.0F;
              }
              else
              {
              super.onLivingUpdate();
                     this.worldObj.theProfiler.startSection("looting");
          
                     if (!this.worldObj.isRemote && this.canPickUpLoot() && !this.dead && this.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing"))
                     {
                         List list = this.worldObj.getEntitiesWithinAABB(EntityItem.class, this.boundingBox.expand(1.0D, 0.0D, 1.0D));
                         Iterator iterator = list.iterator();
          
                         while (iterator.hasNext())
                         {
                             EntityItem entityitem = (EntityItem)iterator.next();
          
                             if (!entityitem.isDead && entityitem.getEntityItem() != null)
                             {
                                 ItemStack itemstack = entityitem.getEntityItem();
                                 int i = getArmorPosition(itemstack);
          
                                 if (i > -1)
                                 {
                                     boolean flag = true;
                                     ItemStack itemstack1 = this.getEquipmentInSlot(i);
          
                                     if (itemstack1 != null)
                                     {
                                         if (i == 0)
                                         {
                                             if (itemstack.getItem() instanceof ItemSword && !(itemstack1.getItem() instanceof ItemSword))
                                             {
                                                 flag = true;
                                             }
                                             else if (itemstack.getItem() instanceof ItemSword && itemstack1.getItem() instanceof ItemSword)
                                             {
                                                 ItemSword itemsword = (ItemSword)itemstack.getItem();
                                                 ItemSword itemsword1 = (ItemSword)itemstack1.getItem();
          
                                                 if (itemsword.func_150931_i() == itemsword1.func_150931_i())
                                                 {
                                                     flag = itemstack.getItemDamage() > itemstack1.getItemDamage() || itemstack.hasTagCompound() && !itemstack1.hasTagCompound();
                                                 }
                                                 else
                                                 {
                                                     flag = itemsword.func_150931_i() > itemsword1.func_150931_i();
                                                 }
                                             }
                                             else
                                             {
                                                 flag = false;
                                             }
                                         }
                                         else if (itemstack.getItem() instanceof ItemArmor && !(itemstack1.getItem() instanceof ItemArmor))
                                         {
                                             flag = true;
                                         }
                                         else if (itemstack.getItem() instanceof ItemArmor && itemstack1.getItem() instanceof ItemArmor)
                                         {
                                             ItemArmor itemarmor = (ItemArmor)itemstack.getItem();
                                             ItemArmor itemarmor1 = (ItemArmor)itemstack1.getItem();
          
                                             if (itemarmor.damageReduceAmount == itemarmor1.damageReduceAmount)
                                             {
                                                 flag = itemstack.getItemDamage() > itemstack1.getItemDamage() || itemstack.hasTagCompound() && !itemstack1.hasTagCompound();
                                             }
                                             else
                                             {
                                                 flag = itemarmor.damageReduceAmount > itemarmor1.damageReduceAmount;
                                             }
                                         }
                                         else
                                         {
                                             flag = false;
                                         }
                                     }
          
                                     if (flag)
                                     {
                                         if (itemstack1 != null && this.rand.nextFloat() - 0.1F < this.equipmentDropChances*)
                                         {
                                             this.entityDropItem(itemstack1, 0.0F);
                                         }
          
                                         if (itemstack.getItem() == Items.diamond && entityitem.func_145800_j() != null)
                                         {
                                             EntityPlayer entityplayer = this.worldObj.getPlayerEntityByName(entityitem.func_145800_j());
          
                                             if (entityplayer != null)
                                             {
                                                 entityplayer.triggerAchievement(AchievementList.field_150966_x);
                                             }
                                         }
          
                                         this.setCurrentItemOrArmor(i, itemstack);
                                         this.equipmentDropChances* = 2.0F;
                                         this.persistenceRequired = true;
                                         this.onItemPickup(entityitem, 1);
                                         entityitem.setDead();
                                     }
                                 }
                             }
                         }
                     }
          
                     this.worldObj.theProfiler.endSection();
              }
              }
          
              public IEntityLivingData onSpawnWithEgg(IEntityLivingData p_110161_1_)
              {
                  Object p_110161_1_1 = super.onSpawnWithEgg(p_110161_1_);
          @SuppressWarnings("unused")
          boolean flag = false;
                  int i = 0;
                  int l;
          
                  if (p_110161_1_1 instanceof EntityHorse.GroupData)
                  {
                      l = ((EntityHorse.GroupData)p_110161_1_1).field_111107_a;
                      i = ((EntityHorse.GroupData)p_110161_1_1).field_111106_b & 255 | this.rand.nextInt(5) << 8;
                  }
                  else
                  {
                      if (this.rand.nextInt(10) == 0)
                      {
                          l = 1;
                      }
                      else
                      {
                          int j = this.rand.nextInt(7);
                          int k = this.rand.nextInt(5);
                          l = 0;
                          i = j | k << 8;
                      }
          
                      p_110161_1_1 = new EntityHorse.GroupData(l, i);
                  }
          
                  this.setHorseType(l);
                  this.setHorseVariant(i);
          
                  if (this.rand.nextInt(5) == 0)
                  {
                      this.setGrowingAge(-24000);
                  }
                  else
                  {
                      this.getEntityAttribute(SharedMonsterAttributes.maxHealth);
                      this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.2D );
                  }
          
                  this.setHealth(this.getMaxHealth());
                  return (IEntityLivingData)p_110161_1_1;
              }
          
              public boolean hasCustomNameTag()
              {
                  return false;
              }
          
              public boolean shouldExecute()
              {
                  return false;
              }
          
          protected boolean isMovementCeased()
              {
                  return true;
              }
          
              protected boolean isAIEnabled()
              {
              if (this.riddenByEntity == null)
              {
              return false;
              }
                  return true;
              } 
          
              public float getAIMoveSpeed()
              {
                  return 0.5F;
              }
          
          public boolean canBeSteered()
              {
                  return true;
              }
          
              public boolean isHorseSaddled()
              {
                  return true;
              }
          
          public boolean isTame()
              {
                  return true;
              }
          
              public boolean isChested()
              {
                  return false;
              }
          
              public boolean isEatingHaystack()
              {
                  return false;
              }
          
              public boolean isRearing()
              {
                  return false;
              }
          
              public boolean func_110205_ce()
              {
                  return false;
              }
          
              public boolean allowLeashing()
              {
                  return false;
              }
          
              public boolean canBePushed()
              {
                  return true;
              }
          
              public boolean attackEntityFrom(DamageSource p_70097_1_, float p_70097_2_)
              {
                  Entity entity = p_70097_1_.getEntity();
                  return this.riddenByEntity != null && this.riddenByEntity.equals(entity) ? false : super.attackEntityFrom(p_70097_1_, p_70097_2_);
              }
          
              protected Item getDropItem()
              {
                  return null;
              }
          
              protected float getSoundVolume()
              {
                  return 0.0F;
              }
          
              public boolean canBreatheUnderwater()
              {
                  return false;
              }
          
              protected int getExperiencePoints(EntityPlayer p_70693_1_)
              {
                      return this.experienceValue = 0;
              }
          
              public void openGUI(EntityPlayer p_110199_1_)
              {
                  if (!this.worldObj.isRemote && (this.riddenByEntity == null || this.riddenByEntity == p_110199_1_) && this.isTame() && p_110199_1_.inventory.getCurrentItem() == null)
                  {
                  worldObj.playSoundAtEntity(this, "modpg:klaxonMoto", 1.0F, 1.0F);
                  }
              }
          
              protected void func_145780_a(int p_145780_1_, int p_145780_2_, int p_145780_3_, Block p_145780_4_)
              {
                  Block.SoundType soundtype = p_145780_4_.stepSound;
                  if (this.worldObj.getBlock(p_145780_1_, p_145780_2_ + 1, p_145780_3_) == Blocks.snow_layer)
                  {
                      soundtype = Blocks.snow_layer.stepSound;
                  }
          
                  if (!p_145780_4_.getMaterial().isLiquid())
                  {
                      int l = this.getHorseType();
          
                      if (this.riddenByEntity != null && l != 1 && l != 2)
                      {
                          ++this.field_110285_bP;
          
                          if (this.field_110285_bP > 5 && this.field_110285_bP % 3 == 0)
                          {
                              if (l == 0 && this.rand.nextInt(10) == 0)
                              {
                                  this.playSound("modpg:moto1", soundtype.getVolume() * 0.6F, soundtype.getPitch());
                              }
                          }
                      }
                  }
              }
          
              protected void fall(float p_70069_1_)
              {
                  if (p_70069_1_ > 1.0F)
                  {
                  this.playSound("modpg:chute", 0.4F, 1.0F);
                  }
          
                  int i = MathHelper.ceiling_float_int(p_70069_1_ * 0.5F - 3.0F);
          
                  if (i > 0)
                  {
                      this.attackEntityFrom(DamageSource.fall, (float)i);
          
                      if (this.riddenByEntity != null)
                      {
                          this.riddenByEntity.attackEntityFrom(DamageSource.fall, (float)i);
                      }
          
                      Block block = this.worldObj.getBlock(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY - 0.2D - (double)this.prevRotationYaw), MathHelper.floor_double(this.posZ));
          
                      if (block.getMaterial() != Material.air)
                      {
                          Block.SoundType soundtype = block.stepSound;
                          this.worldObj.playSoundAtEntity(this, soundtype.getStepResourcePath(), soundtype.getVolume() * 0.0F, soundtype.getPitch() * 0.0F);
                      }
                  }
              }    
          
          public boolean interact(EntityPlayer par1EntityPlayer)
            {
                if (super.interact(par1EntityPlayer) && par1EntityPlayer.inventory.getCurrentItem() == null)
                {
                worldObj.playSoundAtEntity(this, "modpg:davidson", 1.0F, 1.0F);
                par1EntityPlayer.mountEntity(this);
                return true;
                }
                return false;
            }
          
          @Override
          public EntityAgeable createChild(EntityAgeable p_90011_1_)
          {
          return null;
          }
          }
          

          :::

          :::

          package fr.powergame.modpg.common;
          
          import net.minecraft.client.model.ModelBase;
          import net.minecraft.client.renderer.entity.RenderLiving;
          import net.minecraft.entity.DataWatcher;
          import net.minecraft.entity.Entity;
          import net.minecraft.util.ResourceLocation;
          
          public class RenderMoto extends RenderLiving
          {
              public RenderMoto(ModelBase model, float shadow)
              {
                  super(model, shadow);
              }
          
          private ResourceLocation getMotoTexture(EntityMoto moto)
              {
          DataWatcher dw = moto.getDataWatcher();
             return new ResourceLocation("Modpg:textures/entity/" + dw.getWatchableObjectString(30) + ".png");
              }
          
              @Override
              protected ResourceLocation getEntityTexture(Entity entity)
              {
                  return this.getMotoTexture((EntityMoto)entity);
              }
          }
          

          :::

          Ps: Pas taper.

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

            Es-tu sur que la texture existe? Au pire fais un System.out.println(dw.getWatchableObjectString(30)) pour voir si ça donne bien moto.

            1 réponse Dernière réponse Répondre Citer 0
            • FolganskyF Hors-ligne
              Folgansky Correcteurs
              dernière édition par

              Ouaip niveau des textures je suis sûr que tout est bon. Fichier entity, textures: Moto et Moto1

              Pour le println metadata 0 me donne Moto
                                   metadata 1 me donne Moto1

              Donc là je vois pas.
              Le problème ne vient pas du fait que le render renvoie toujours à Moto? (Mec qui gratte au risque de dire une bêtise)

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

                Par contre personellement mon ressource location ressemble à ça: new ResourceLocation(“t4pro”, “textures/entity/steve.png”);

                Donc essaie: return new RessourceLocation(“Modpg”, “textures/entity/Moto.png”

                1 réponse Dernière réponse Répondre Citer 0
                • FolganskyF Hors-ligne
                  Folgansky Correcteurs
                  dernière édition par

                  Avec

                  return new ResourceLocation("Modpg:textures/entity/" + dw.getWatchableObjectString(30) + ".png");
                  

                  ou

                  return new ResourceLocation("Modpg", ":textures/entity/" + dw.getWatchableObjectString(30) + ".png");
                  

                  mes entités ont une texture, la même, c’est à dire “Moto”.

                  Edit:

                  avec

                   return new ResourceLocation("Modpg", "textures/entity/" + dw.getWatchableObjectString(30) + ".png");
                  

                  aucune texture trouvée

                  Edit:
                  PAR CONTRE
                  dans l’event handler quand je mets Moto1 ça me met la texture Moto1 pour les deux.
                  A toi de me dire ce que t’en penses =d

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

                    Et bien dans ce cas, ça veut dire que le datawatcher n’est pas updaté. essaie de mettre un sysout dans le dw.update.

                    1 réponse Dernière réponse Répondre Citer 0
                    • FolganskyF Hors-ligne
                      Folgansky Correcteurs
                      dernière édition par

                      @‘DiabolicaTrix’:

                      Et bien dans ce cas, ça veut dire que le datawatcher n’est pas updaté. essaie de mettre un sysout dans le dw.update.

                      Tu m’as pas déjà demandé de faire ça?

                      J’ai fais ça hier:

                      :::

                      {
                      int metadata = stack.getItemDamage();
                      if(metadata == 0)
                      {
                      EntityMoto e = new EntityMoto(world);
                        if(!world.isRemote)
                            {
                         e.setPosition(x, y + 1.0F, z);
                         world.spawnEntityInWorld(e);
                         stack.stackSize–;
                            }
                        else
                        {
                         DataWatcher dw = e.getDataWatcher();
                         dw.updateObject(30, "Moto");
                         System.out.println(dw.getWatchableObjectString(30));
                        }
                            return true;
                      }
                      else if(metadata == 1)
                      {
                      EntityMoto e = new EntityMoto(world);
                        if(!world.isRemote)
                            {
                         e.setPosition(x, y + 1.0F, z);
                         world.spawnEntityInWorld(e);
                         stack.stackSize--;
                            }
                        else
                        {
                         DataWatcher dw = e.getDataWatcher();
                         dw.updateObject(30, "Moto1");
                         System.out.println(dw.getWatchableObjectString(30));
                        }
                            return true;
                      }
                      

                      :::

                      Un coup j’ai “Moto”, un coup j’ai “Moto1”, mais je le met peut être au mauvais endroit.

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

                        Ok, essaie de retirer l’update de la condition pour que le client + serveur l’exécute. Aussi, c’est normal si la texture n’est pas sauvegardé, je vais te dire comment après.

                        1 réponse Dernière réponse Répondre Citer 0
                        • FolganskyF Hors-ligne
                          Folgansky Correcteurs
                          dernière édition par

                          Hum donc ça?

                          public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
                          {
                          int metadata = stack.getItemDamage();
                          if(metadata == 0)
                          {
                          EntityMoto e = new EntityMoto(world);
                            if(!world.isRemote)
                                {
                             e.setPosition(x, y + 1.0F, z);
                             world.spawnEntityInWorld(e);
                             stack.stackSize–;
                                }
                          //   else
                          //   {
                          //    DataWatcher dw = e.getDataWatcher();
                          //    dw.updateObject(30, "Moto");
                          //   }
                                return true;
                          }
                          else if(metadata == 1)
                          {
                          EntityMoto e = new EntityMoto(world);
                            if(!world.isRemote)
                                {
                             e.setPosition(x, y + 1.0F, z);
                             world.spawnEntityInWorld(e);
                             stack.stackSize--;
                                }
                          //   else
                          //   {
                          //    DataWatcher dw = e.getDataWatcher();
                          //    dw.updateObject(30, "Moto1");
                          //   }
                                return true;
                          }
                          else if (metadata == 2)
                              {
                              if(!world.isRemote)
                                  {
                              EntityBMX e = new EntityBMX(world);
                              e.setPosition(x, y + 1.0F, z);
                              world.spawnEntityInWorld(e);
                              stack.stackSize--;
                                  }
                                      return true;
                              }
                          else if (metadata == 3)
                              {
                              if(!world.isRemote)
                                  {
                              EntityBuggy e = new EntityBuggy(world);
                              e.setPosition(x, y + 1.0F, z);
                              world.spawnEntityInWorld(e);
                              stack.stackSize--;
                                  }
                                      return true;
                              }
                              else if (metadata == 4)
                              {
                              if(!world.isRemote)
                                  {
                              EntityBaignoire e = new EntityBaignoire(world);
                              e.setPosition(x, y + 1.0F, z);
                              world.spawnEntityInWorld(e);
                              stack.stackSize--;
                                  }
                                      return true;
                              }
                          return false;
                          }
                          

                          Parce qu’au final c’est comme au début, sauf que j’ai rajouté un event que je fais spawn l’entité qui lie toujours le même dataWatcher. Moi pas tout comprendre 😃

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

                            en fait il faut que tu gardes le dw.update, tu fais juste enlever le else.

                            1 réponse Dernière réponse Répondre Citer 0
                            • FolganskyF Hors-ligne
                              Folgansky Correcteurs
                              dernière édition par

                              Tu me fais une blague en me disant qu’il y a autre chose à faire?

                              Tout marche comme je l’espérais, le println me sort les bonnes valeurs, chaque metadata différent me donne bien une texture différente (et la bonne précisons).

                              Je te remercie de suite et je met en résolu ou y’a un problème éventuel à prévoir dans tout ça?

                              edit: Tu parlais de texture non sauvegardée.

                              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 tu passes par un event pour ajouter un data watcher à une entité qui vient de ton propre mod ?
                                Tu peux le faire directement dans le constructeur de l’entité …

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

                                  Ah ouais c’est vrai ce que robin a dit, tu peux mettre ton addobject dans le constructeur de l’entité, mais si tu veux pas touché parce que ça marche c’est pas grave ^^
                                  Par contre je te faisait modifier des trucs car je n’avais pas vu que tu avais dit que ça fonctionnait 😛

                                  Pour la sauvegarde, c’est simple:

                                  Dans ton EntityMoto tu ajoutes ces deux méthodes:

                                  public void writeEntityToNBT(NBTTagCompound nbt) {
                                  super.writeEntityToNBT(nbt);
                                  DataWatcher dw = this.getDataWatcher();
                                  nbt.setString("EntityMotoTexture", dw.getWatchableObjectString(30));
                                  }
                                  
                                  public void readEntityFromNBT(NBTTagCompound nbt) {
                                  super.readEntityFromNBT(nbt);
                                  DataWatcher dw = this.getDataWatcher();
                                  dw.updateObject(30, nbt.getString("EntityMotoTexture"));
                                  }
                                  

                                  Et c’est bon! la première écrit la valeur du datawatcher dans les tags nbt de l’entité et la seconde récupère le même tag et update le datawatcher avec.

                                  1 réponse Dernière réponse Répondre Citer 1
                                  • FolganskyF Hors-ligne
                                    Folgansky Correcteurs
                                    dernière édition par

                                    Ouki, vraiment super tout ça.

                                    Tout a fonctionné au moment où j’ai enlevé le “else”.
                                    Je vais continuer à passer par l’eventHandler, ça me permet d’y regrouper tous les dataWatcher de mes entités.
                                    (conventionnellement c’est peut être pas propre mais si je m’arrêtais à ça je n’avancerais plus)

                                    Dernière petite question en passant qui touche d’un peu plus loin le sujet:

                                    Mon seul limitant actuellement sera la limite de metadata pour cette classe item. Sachant que j’ai 5 entités pour le moment, que je vais forcément me motiver pour en faire 5 autres à la longue et que j’aimerais proposer 3 textures différentes par entités, ce qui nous fait 30 items différents pour faire spawn mes entités.

                                    Possible d’en avoir autant? (bloc c’est 15+1 et Slabs 7+1, items je n’en sais rien encore)

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

                                      Selon le nombre total de texture que tu as prévu, tu seras aussi limité niveau DataWatcher, fais attention !

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • FolganskyF Hors-ligne
                                        Folgansky Correcteurs
                                        dernière édition par

                                        Je n’arrive pas à appliquer vos précieux conseils sur d’autres entités.

                                        J’ai cru qu’il me suffisait de faire comme pour l’entité moto et de faire ça dans l’eventHandler:

                                        :::

                                        @SubscribeEvent
                                        public void handleConstruction(EntityConstructing event)
                                        {
                                          if(event.entity instanceof EntityMoto)
                                          {
                                              DataWatcher dw = event.entity.getDataWatcher();
                                              dw.addObject(30, "Moto");
                                          }
                                          else if(event.entity instanceof EntityKart)
                                          {
                                              DataWatcher dw = event.entity.getDataWatcher();
                                              dw.addObject(31, "Kart");
                                          }
                                          else if(event.entity instanceof EntityBuggy)
                                          {
                                              DataWatcher dw = event.entity.getDataWatcher();
                                              dw.addObject(32, "Buggy");
                                          }
                                          else if(event.entity instanceof EntityBMX)
                                          {
                                              DataWatcher dw = event.entity.getDataWatcher();
                                              dw.addObject(33, "BMX");
                                          }
                                          else if(event.entity instanceof EntityBaignoire)
                                          {
                                              DataWatcher dw = event.entity.getDataWatcher();
                                              dw.addObject(34, "Baignoire");
                                          }
                                        

                                        :::

                                        Une idée d’où je me foire?

                                        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

                                          Aucun problème pour les metadatas. Les metadatas des item stack est stocké dans un short si ma mémoire est bonne, ça fait donc 32767 metadata possible.

                                          Et je ne vois pas en quoi le dataWatcher est limitant. C’est un string, il peut mettre tout ce qui veut dedans ce qui laisse beaucoup de possibilité.
                                          D’ailleurs pour des questions d’optimisations (réduire la taille des paquets) il aurait été mieux d’utiliser un dataWatcher de type int ou short et dans le code du rendu bind une texture différente en fonction de la valeur de ce nombre.

                                          1 réponse Dernière réponse Répondre Citer 0
                                          • FolganskyF Hors-ligne
                                            Folgansky Correcteurs
                                            dernière édition par

                                            Je met les autres classes d’ailleurs peut-être que ça ne vient pas de l’eventHandler (bien que certains metadata me fassent crash, j’ai la tête dedans)

                                            :::

                                            @Override
                                            public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
                                            {
                                            int metadata = stack.getItemDamage();
                                            if(metadata == 0)
                                            {
                                            EntityMoto e = new EntityMoto(world);
                                              if(!world.isRemote)
                                                  {
                                               e.setPosition(x, y + 1.0F, z);
                                               world.spawnEntityInWorld(e);
                                               stack.stackSize–;
                                               DataWatcher dw = e.getDataWatcher();
                                               dw.updateObject(30, "Moto");
                                              }
                                                  return true;
                                            }
                                            else if(metadata == 1)
                                            {
                                            EntityMoto e = new EntityMoto(world);
                                              if(!world.isRemote)
                                                  {
                                               e.setPosition(x, y + 1.0F, z);
                                               world.spawnEntityInWorld(e);
                                               stack.stackSize--;
                                               DataWatcher dw = e.getDataWatcher();
                                               dw.updateObject(30, "Moto1");
                                              }
                                                  return true;
                                            }
                                            else if(metadata == 2)
                                            {
                                            EntityMoto e = new EntityMoto(world);
                                              if(!world.isRemote)
                                                  {
                                               e.setPosition(x, y + 1.0F, z);
                                               world.spawnEntityInWorld(e);
                                               stack.stackSize--;
                                               DataWatcher dw = e.getDataWatcher();
                                               dw.updateObject(30, "Moto2");
                                              }
                                                  return true;
                                            }
                                            else if (metadata == 3)
                                                {
                                                EntityBMX e = new EntityBMX(world);
                                                if(!world.isRemote)
                                                    {
                                                e.setPosition(x, y + 1.0F, z);
                                                world.spawnEntityInWorld(e);
                                                stack.stackSize--;
                                                DataWatcher dw = e.getDataWatcher();
                                                dw.updateObject(33, "BMX");
                                                    }
                                                        return true;
                                                }
                                            else if (metadata == 4)
                                                {
                                                EntityBMX e = new EntityBMX(world);
                                                if(!world.isRemote)
                                                    {
                                                e.setPosition(x, y + 1.0F, z);
                                                world.spawnEntityInWorld(e);
                                                stack.stackSize--;
                                                DataWatcher dw = e.getDataWatcher();
                                                dw.updateObject(33, "BMX1");
                                                    }
                                                        return true;
                                                }
                                            else if (metadata == 5)
                                                {
                                                EntityBMX e = new EntityBMX(world);
                                                if(!world.isRemote)
                                                    {
                                                e.setPosition(x, y + 1.0F, z);
                                                world.spawnEntityInWorld(e);
                                                stack.stackSize--;
                                                DataWatcher dw = e.getDataWatcher();
                                                dw.updateObject(33, "BMX2");
                                                    }
                                                        return true;
                                                }
                                            else if (metadata == 6)
                                                {
                                                EntityBuggy e = new EntityBuggy(world);
                                                if(!world.isRemote)
                                                    {
                                                e.setPosition(x, y + 1.0F, z);
                                                world.spawnEntityInWorld(e);
                                                stack.stackSize--;
                                                DataWatcher dw = e.getDataWatcher();
                                                dw.updateObject(32, "Buggy");
                                                    }
                                                        return true;
                                                }
                                            else if (metadata == 7)
                                                {
                                                EntityBuggy e = new EntityBuggy(world);
                                                if(!world.isRemote)
                                                    {
                                                e.setPosition(x, y + 1.0F, z);
                                                world.spawnEntityInWorld(e);
                                                stack.stackSize--;
                                                DataWatcher dw = e.getDataWatcher();
                                                dw.updateObject(32, "Buggy1");
                                                    }
                                                        return true;
                                                }
                                            else if (metadata == 8)
                                                {
                                                EntityBuggy e = new EntityBuggy(world);
                                                if(!world.isRemote)
                                                    {
                                                e.setPosition(x, y + 1.0F, z);
                                                world.spawnEntityInWorld(e);
                                                stack.stackSize--;
                                                DataWatcher dw = e.getDataWatcher();
                                                dw.updateObject(32, "Buggy2");
                                                    }
                                                        return true;
                                                }
                                                else if (metadata == 9)
                                                {
                                                EntityBaignoire e = new EntityBaignoire(world);
                                                if(!world.isRemote)
                                                    {
                                                e.setPosition(x, y + 1.0F, z);
                                                world.spawnEntityInWorld(e);
                                                stack.stackSize--;
                                                DataWatcher dw = e.getDataWatcher();
                                                dw.updateObject(34, "Baignoire");
                                                    }
                                                        return true;
                                                }
                                                else if (metadata == 10)
                                                {
                                                EntityBaignoire e = new EntityBaignoire(world);
                                                if(!world.isRemote)
                                                    {
                                                e.setPosition(x, y + 1.0F, z);
                                                world.spawnEntityInWorld(e);
                                                stack.stackSize--;
                                                DataWatcher dw = e.getDataWatcher();
                                                dw.updateObject(34, "Baignoire1");
                                                    }
                                                        return true;
                                                } 
                                                else if (metadata == 11)
                                                {
                                                EntityBaignoire e = new EntityBaignoire(world);
                                                if(!world.isRemote)
                                                    {
                                                e.setPosition(x, y + 1.0F, z);
                                                world.spawnEntityInWorld(e);
                                                stack.stackSize--;
                                                DataWatcher dw = e.getDataWatcher();
                                                dw.updateObject(34, "Baignoire2");
                                                    }
                                                        return true;
                                                }
                                                else if (metadata == 12)
                                                {
                                                EntityKart e = new EntityKart(world);
                                                if(!world.isRemote)
                                                    {
                                                e.setPosition(x, y + 1.0F, z);
                                                world.spawnEntityInWorld(e);
                                                stack.stackSize--;
                                                DataWatcher dw = e.getDataWatcher();
                                                dw.updateObject(31, "Kart");
                                                    }
                                                        return true;
                                                }
                                                else if (metadata == 13)
                                                {
                                                EntityKart e = new EntityKart(world);
                                                if(!world.isRemote)
                                                    {
                                                e.setPosition(x, y + 1.0F, z);
                                                world.spawnEntityInWorld(e);
                                                stack.stackSize--;
                                                DataWatcher dw = e.getDataWatcher();
                                                dw.updateObject(31, "Kart1");
                                                    }
                                                        return true;
                                                }
                                                else if (metadata == 14)
                                                {
                                                EntityKart e = new EntityKart(world);
                                                if(!world.isRemote)
                                                    {
                                                e.setPosition(x, y + 1.0F, z);
                                                world.spawnEntityInWorld(e);
                                                stack.stackSize--;
                                                DataWatcher dw = e.getDataWatcher();
                                                dw.updateObject(31, "Kart2");
                                                    }
                                                        return true;
                                                }
                                            return false;
                                            }
                                            

                                            :::

                                            :::

                                            public void writeEntityToNBT(NBTTagCompound nbt) {
                                            super.writeEntityToNBT(nbt);
                                            DataWatcher dw = this.getDataWatcher();
                                            nbt.setString("EntityKartTexture", dw.getWatchableObjectString(31));
                                            }
                                            
                                            public void readEntityFromNBT(NBTTagCompound nbt) {
                                            super.readEntityFromNBT(nbt);
                                            DataWatcher dw = this.getDataWatcher();
                                            dw.updateObject(31, nbt.getString("EntityKartTexture"));
                                            }
                                            

                                            :::

                                            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