[1.12.2]Ma Barre d'énergie ne veux pas se mettre a jour(ou n est pas syncro)
-
Bonsoir,
Les variables static ont une seule instance par classe.
Ton problème de variable partagé vient de là, ton energyStorage n’a rien à faire en static …
Et les capabilities n’ont rien à voir dans cette histoire.EDIT : j’ai fusionné les deux demandes comme c’est lié au même problème.
-
merci
a toi Robin je vais enlevé le static
mais comment vais je faire pour aller chercher energystorage car sans le static ca me fait un Reported exception thrown (NPE ) ? -
Le jeu crash car tu as un NPE à la ligne 68 de ElementEnergyStored.java.
Reste à trouver ce qui est null et pourquoi. -
bah enfaite c est le tile.energyrstorage… dans ElementEnergyStored qui fait un npe si EnergyStorage energystorage = new …est pas static
Edit après 1h de recherche: je ne trouve toujours pas -
ca marche toujours pas ;(
-
C’est tile ou energyrstorage qui est null ? Il est censé être initialisé où ?
-
c est a dire qui est censé être initialiser et ou ? car de base c est pas tile.energystorage mais storage qui est public IEnergy storage mais ca marche pas si je met ca (meme avec le code de Thermal) et c est tile qui est null si je dis pas de bêtises
-
L’endroit où la variable est initialisé c’est là où il y a
nomVariable = new MonObjet(...) -
oui c est public TileentiyMachine() tile;
voila mon code:
package com.Nugarium.NuagrMod.machine; import cofh.redstoneflux.api.*; import cofh.redstoneflux.impl.EnergyStorage; import net.minecraft.util.ResourceLocation; import java.util.List; public class ElementEnergyStored extends ElementBase { public static final ResourceLocation DEFAULT_TEXTURE = new ResourceLocation(GuiProps.PATH_ELEMENTS + "energy.png"); public static final int DEFAULT_SCALE = 42; public EnergyStorage storage; public TileEntityUpgradeArmorMachine tile; // If this is enabled, 1 pixel of energy will always show in the bar as long as it is non-zero. public static boolean alwaysShowMinimum = false; public ElementEnergyStored(GuiBase gui, int posX, int posY, EnergyStorage storage) { super(gui, posX, posY); tile = new TileEntityUpgradeArmorMachine(); this.storage = storage; this.texture = DEFAULT_TEXTURE; this.sizeX = 16; this.sizeY = DEFAULT_SCALE; this.texW = 32; this.texH = 64; } public ElementEnergyStored setAlwaysShow(boolean show) { alwaysShowMinimum = show; return this; } @Override public void drawBackground(int mouseX, int mouseY, float gameTicks) { int amount = getScaled(); RenderHelper.bindTexture(texture); drawTexturedModalRect(posX, posY, 0, 0, sizeX, sizeY); drawTexturedModalRect(posX, posY + DEFAULT_SCALE - amount, 16, DEFAULT_SCALE - amount, sizeX, amount); } @Override public void drawForeground(int mouseX, int mouseY) { } @Override public void addTooltip(List<String> list) { if (tile.energyStorage.getMaxEnergyStored() < 0) { list.add("Infinite RF"); } else { list.add(StringHelper.formatNumber(tile.energyStorage.getEnergyStored()) + " / " + StringHelper.formatNumber(tile.energyStorage.getMaxEnergyStored()) + " RF"); } } public int getScaled() { if (tile.energyStorage.getMaxEnergyStored() <= 0) { return sizeY; } long fraction = (long) tile.energyStorage.getEnergyStored() * sizeY / tile.energyStorage.getMaxEnergyStored(); return alwaysShowMinimum && tile.energyStorage.getEnergyStored() > 0 ? Math.max(1, MathHelper.round(fraction)) : MathHelper.round(fraction); } }et si je fait ca ca ne marche pas (la texture ce load pas )
-
Normal, tu génére un tile entity relié à rien.
Faut get la tile qui se trouve dans le monde via world.getTileEntity(pos). -
oui mais le problème c est que je n est pas la fontion World ni BlockPos donc comment je pourrait faire pour appeler ces deux classes ?
ca ca marcherais ?
public TileentityMachine tile; public BlockPos pos; public ElementEnergyStored(){ tile.getWorld().getTileEntity(pos); }j ai essayer et ca n a pas marcher la barre ne se draw meme pas


-
Mais qu’est-ce que cette horreur qui n’a aucun sens ?
à quel endroit tu appeles le constructeur de ElementEnergyStored ?
-
dans mon Gui dans l initGui();
@Override public void initGui() { super.initGui(); addElement(new ElementEnergyStored(this, 150, 20, tile.getEnergyStorage())); } -
Voilà, donc tu as déjà le tile ici …
-
oui mais je vois pas le rapport car la classe TileentityMachine je l appelle de la meme manière pour tile.getEnergyStorage() c est a dire public TileentityMachine tile; je n utilise pas de world.getTileEntity(pos)
arpes je peux faire ca
package com.Nugarium.NuagrMod.machine; import cofh.redstoneflux.api.*; import cofh.redstoneflux.impl.EnergyStorage; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import java.util.List; public class ElementEnergyStored extends ElementBase { public static final ResourceLocation DEFAULT_TEXTURE = new ResourceLocation(GuiProps.PATH_ELEMENTS + "energy.png"); public static final int DEFAULT_SCALE = 42; public EnergyStorage storage; private TileEntityUpgradeArmorMachine tile; // If this is enabled, 1 pixel of energy will always show in the bar as long as it is non-zero. public static boolean alwaysShowMinimum = false; public ElementEnergyStored(GuiBase gui, int posX, int posY, EnergyStorage storage) { super(gui, posX, posY); this.storage = storage; this.texture = DEFAULT_TEXTURE; this.sizeX = 16; this.sizeY = DEFAULT_SCALE; this.texW = 32; this.texH = 64; } public ElementEnergyStored setAlwaysShow(boolean show) { alwaysShowMinimum = show; return this; } @Override public void drawBackground(int mouseX, int mouseY, float gameTicks) { int amount = getScaled(); RenderHelper.bindTexture(texture); drawTexturedModalRect(posX, posY, 0, 0, sizeX, sizeY); drawTexturedModalRect(posX, posY + DEFAULT_SCALE - amount, 16, DEFAULT_SCALE - amount, sizeX, amount); } @Override public void drawForeground(int mouseX, int mouseY) { } @Override public void addTooltip(List<String> list) { if (tile.getMaxEnergyStored() < 0) { list.add("Infinite RF"); } else { list.add(StringHelper.formatNumber(tile.getEnergyStored()) + " / " + StringHelper.formatNumber(tile.getMaxEnergyStored()) + " RF"); } } public int getScaled() { if (tile.getMaxEnergyStored() <= 0) { return sizeY; } long fraction = (long) this.tile.getEnergyStored() * sizeY / this.tile.getMaxEnergyStored(); return alwaysShowMinimum && this.tile.getEnergyStored() > 0 ? Math.max(1, MathHelper.round(fraction)) : MathHelper.round(fraction); } }dans la tile les fonctions
@Override public int getEnergyStored() { return energyStorage.energy; } @Override public int getMaxEnergyStored() { return energyStorage.capacity; }mais ca fait aussi un NPE
-
Fais une archive de ton dossier mdk et envoies-le-moi, je vais regarder …
-
ok
le voici: projet NugarMod1.12.2
(le mod ne contient pas de virus bien sur ) -
Il y un truc qui va pas sur ta workspace …

J’ai aussi eu des JEI avant ça, que j’ai pu régler avec ungradlew clean+ remplacer le compile par deobcompile pour JEI dans le build.gradle mais pour redstoneflux je ne vois pas où est le souci.
+ Le même soucis avec pleins d’autres mods en virant tout ce qui sont était dans le dossier mods du dossier run. -
c’est a cause de l api de RedstoneFlux qui est dans mon mod mais je n ai pas se problème pourtant ?
il faut peut être essayer de mettre le mod redstone flux dans le dossier mod avec les autre mod que j ai mis ou alors recréer un mod et met mon src a la place de l autre c est ce que j ai fait quand j’avais eu se problème -
J’ai déjà complètement vidé le dossier mods.
Fais voir ton classpath sur eclipse ?