MFF

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

    getSubItem avec un item chargé en energie et un déchargé (API Energie Forge)

    Planifier Épinglé Verrouillé Déplacé Résolu 1.12.x
    1.12.2
    3 Messages 2 Publieurs 336 Vues 2 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • InfiniteI Hors-ligne
      Infinite
      dernière édition par

      Bonjour,
      Je travaille actuellement sur un mod qui utilise l’API d’énergie de Forge (FE) sauf que je n’arrive pas a ajouter un item chargé et un autre déchargé dans l’onglet créatif.
      Je sais que l’api energétique de forge est tres similaire a l’API Redstone Flux de la CoFHTeam donc j’ai récupéré la méthode utilisée par Redstone Arsenal (un mod utilisant l’API Redstone Flux) et celle du CoFHCore.
      Sauf qu’elle ne semble pas fonctionner du tout étant donné que cette méthode modifie un tag nbt avec comme clef “Energy” alors que l’api de Forge semble utiliser un capability.
      Et, comme je ne connais pas les capabilities, je n’arrive pas a mettre une version chargée de mon objet dans l’onglet créatif.

      Voici la classe de mon item :

      public class EnergizedItemBase extends Item implements IEnergyStorage, IHasModel
      {
          protected int energy;
          protected int capacity;
          protected int maxReceive;
          protected int maxExtract;
          
          protected boolean showInCreative = true;
              
          public EnergizedItemBase(String name, int capacity, int maxReceive, int maxExtract, int energy)
          {
              this.capacity = capacity;
              this.maxReceive = maxReceive;
              this.maxExtract = maxExtract;
              this.energy = Math.max(0 , Math.min(capacity, energy));
              
              setUnlocalizedName(name);
              setRegistryName(name);
              setCreativeTab(ERST.ERST_TAB);
              
              ModItems.ITEMS.add(this);
          }
      
          @Override
          public int receiveEnergy(int maxReceive, boolean simulate)
          {
              if (!canReceive())
                  return 0;
      
              int energyReceived = Math.min(capacity - energy, Math.min(this.maxReceive, maxReceive));
              if (!simulate)
                  energy += energyReceived;
              return energyReceived;
          }
      
          @Override
          public int extractEnergy(int maxExtract, boolean simulate)
          {
              if (!canExtract())
                  return 0;
      
              int energyExtracted = Math.min(energy, Math.min(this.maxExtract, maxExtract));
              if (!simulate)
                  energy -= energyExtracted;
              return energyExtracted;
          }
      
          @Override
          public int getEnergyStored()
          {
              return energy;
          }
      
          @Override
          public int getMaxEnergyStored()
          {
              return capacity;
          }
      
          @Override
          public boolean canExtract()
          {
              return this.maxExtract > 0;
          }
      
          @Override
          public boolean canReceive()
          {
              return this.maxReceive > 0;
          }
          
          @SideOnly(Side.CLIENT)
          public void addInformation(ItemStack stack, @Nullable World playerIn, List<String> tooltip, ITooltipFlag advanced)
          {
              tooltip.add(getEnergyStored() + "/" + getMaxEnergyStored() + " FE");
          }
          
          @Override
          public void registerModels()
          {
              ERST.proxy.registerItemRenderer(this, 0, "inventory");
          }
          
          @Override
          public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items) {
      
              if (isInCreativeTab(tab) && showInCreative) {
                  items.add(setDefaultEnergyTag(new ItemStack(this, 1, 0), 0));
                  items.add(setDefaultEnergyTag(new ItemStack(this, 1, 0), capacity));
              }
          }
          
          public EnergizedItemBase setShowInCreative(boolean showInCreative) {
      
              this.showInCreative = showInCreative;
              return this;
          }
          
          public static ItemStack setDefaultEnergyTag(ItemStack container, int energy) {
      
              if (!container.hasTagCompound()) {
                  container.setTagCompound(new NBTTagCompound());
              }
              System.out.println(container.getTagCompound().getInteger("Energy"));
              container.getTagCompound().setInteger("Energy", energy);
              
      
              return container;
          }
      }
      

      Je précise que les deux méthodes que j’ai recopiées sont getSubItems (vient de Redstone Arsenal) et setDefaultEnergyTag (de CofhCore)

      J’espère que vous serez en capacité de m’éclairer 😄

      Mes Sites(Mes Sites)
      |
      |    Site général : Game & play
      |   Site de projets (en dev !) :Infinite's Ressources
      J'ai et je suis content d'avoir 16,75 points d'ICRating

      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

        Bonjour,

        C’est le même principe, les capabilités de forge sont sauvegarder à travers le capabality storage dans le tag nbt de l’item.

        Ce qu’il te faut c’est trouver le bon nom du tag et pour ça regarder du côté de la classe ItemStack (pour trouver le nom du tag des capa de forge) ainsi que dans le storage de la capability d’énergie.

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

          Problème réglé, l’item n’avait pas de tag, c’était a moi de le set. De plus, j’ai changé d’API, l’api Energie de Forge est tres compliquée a utiliser donc je me suis tourné vers l’api Redstone Flux (mais du coup mon mod en est dépendant, ce qui est dérangeant). Si vous le pouvez, ce serait cool de faire un tuto sur l’API énergie de forge, ça aiderait beaucoup de personnes voulant créer des mods d’énergie. En attendant, je pense peut être, si j’ai le temps faire un tuto sur l’api RedstoneFlux.

          Bref, je passe en résolu !
          Merci pour ton aide.

          Mes Sites(Mes Sites)
          |
          |    Site général : Game & play
          |   Site de projets (en dev !) :Infinite's Ressources
          J'ai et je suis content d'avoir 16,75 points d'ICRating

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

          MINECRAFT FORGE FRANCE © 2024

          Powered by NodeBB