Résolu Update Entity,Bloc Machine
-
Salut,
ça fait environ 2 semaines(oui,oui 2 semaines) que je cherche de faire un "double update entity"je m’explique:
Mon block s’update quand la recette débute mais a la fin de la recette elle ne se re-update pas.
j’ai chercher dans plusieurs mods avec JD-GUI mais j’ai rien trouvé :s
Du coup vous avez une petite idée? -
Envoies ton code.
-
Voila le code : http://pastebin.com/hfBbNwRa
-
Ta fonction updateEntity n’est pas correcte, c’est pour ça que cela update que dans au début et pas à la fin.
Regarde la classe TileEntityFurnace -
ok merci je regarderai
EDIT: Bon j’ai corriger le truc mais,depuis que j’ai modifierif (flag != power > 0) { flag1 = true; PlateMachine.updateFurnaceBlockState(this.power > 0,this.worldObj, this.xCoord, this.yCoord, this.zCoord); }
L’update ne se fait plus.
-
Mets un @override sur toutes les fonctions qui en ont besoin, çà te permettra de voir quelles fonctions ne sont pas correctes.
-
Non, à mon avis il te manque d’autres trucs avec la boolean flag.
-
Pourtant quand je regarde dans le TileEntity du furnace(ctrl + f) avec flag il n’y a que
boolean flag = this.furnaceBurnTime > 0;
et ça
if (flag != this.furnaceBurnTime > 0) { flag1 = true; BlockFurnace.updateFurnaceBlockState(this.furnaceBurnTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord); }
du coup je re-envois pour voir si il n’y a pas de fautes … :s
public void updateEntity() { boolean flag = this.power > 0; boolean flag1 = false; if (hasPower() && isMacerating()) { this.power--; } if (!this.worldObj.isRemote) { if(this.power !=0 ||this.slots[0] != null){ if (this.power == 0 && this.canSmelt()){ if (this.power > 0) { flag1 = true; } } if (this.canSmelt() && this.hasPower() ) { ++this.cookTime; if (this.cookTime == this.maceratingSpeed) { this.cookTime = 0; this.smeltItem(); flag1 = true; } } else { this.cookTime = 0; } } if (flag != power > 0) { flag1 = true; PlateMachine.updateFurnaceBlockState(this.power > 0,this.worldObj, this.xCoord, this.yCoord, this.zCoord); } } if (flag1) { this.markDirty(); } if (!addedToEnet) onLoaded(); }
-
Mets des System.out.println pour voir ce qu’il se passe.
-
Bon ça me spamme de “LA RECETTE MARCHE” xD
Mais Parcontre il semble que l’update ne se fasse pas -
Mets en plusieurs à plusieurs endroits et c’est mieux de nous dire où tu les a mis.
-
Bon voila le code de l’updateEntity
public void updateEntity() { boolean flag = this.power > 0; boolean flag1 = false; if (hasPower() && isMacerating()) { this.power–; } if (!this.worldObj.isRemote) { if(this.power !=0 ||this.slots[0] != null){ if (this.power == 0 && this.canSmelt()){ if (this.power > 0) { flag1 = true; } } if (this.canSmelt() && this.hasPower() ) { ++this.cookTime; System.out.println("la recette marche"); if (this.cookTime == this.maceratingSpeed) { this.cookTime = 0; this.smeltItem(); flag1 = true; } } else { this.cookTime = 0; } } if (flag != power > 0) { flag1 = true; PlateMachine.updateFurnaceBlockState(this.power > 0,this.worldObj, this.xCoord, this.yCoord, this.zCoord); System.out.println("update?"); } } if (flag1) { this.markDirty(); } if (!addedToEnet) onLoaded(); }
Donc j’en ai mis 2,Hors ça m’en spam qu’un(“La recette marche”)
Il ne me spam pas de “update?” donc il y a forcement un problème avec leif(flag!= power > 0)
ce qui empêche .updateFurnaceBlockState
-
Affiche la valeur de flag et la valeur de power > 0
-
Nope ça n’a rien changé
-
Non mais je sais très bien que ça va rien changer x)
Ce que je veux c’est la valeur de ces deux booleans x)Faut vraiment que je fasse un tutoriel pour expliquer comment déboguer du code.
-
boolean flag = this.power > 0;
par contre l’autre boolean tu veux parler de this.power?
-
Ok, tu n’as rien compris.
Comme ça :public void updateEntity() { boolean flag = this.power > 0; boolean flag1 = false; if (hasPower() && isMacerating()) { this.power–; } if (!this.worldObj.isRemote) { if(this.power !=0 ||this.slots[0] != null){ if (this.power == 0 && this.canSmelt()){ if (this.power > 0) { flag1 = true; } } if (this.canSmelt() && this.hasPower() ) { ++this.cookTime; if (this.cookTime == this.maceratingSpeed) { this.cookTime = 0; this.smeltItem(); flag1 = true; } } else { this.cookTime = 0; } } System.out.println("flag ? " + flag); System.out.println("power > 0 ? " + Boolean.valueOf(power > 0)); if (flag != power > 0) { flag1 = true; PlateMachine.updateFurnaceBlockState(this.power > 0,this.worldObj, this.xCoord, this.yCoord, this.zCoord); } } if (flag1) { this.markDirty(); } if (!addedToEnet) onLoaded(); }
Et je veux savoir ce qui s’affiche dans la console.
-
ah ok je n’avait vraiment pas compris x)
bon ça me spam:
flag ? true
power > 0 ? true -
Je trouve çà bizarre le “flag != power > 0”. çà veut dire qu’il faut que les 2 soit différents (par exemple l’un à true et l’autre à false) pour que la condition soit exécutée, que veux-tu faire vraiment ?
-
power > 0 est sur true même quand il n’y a rien dans ta machine ?
SCAREX -> c’est normal. flag vaut power > 0 au début de la fonction, donc lorsque la machine arrive à la fin, flag sera true et power > 0 sera faux, donc ça change. Et au début c’est l’inverse, flag faux false et power > 0 vaut true. Ça c’est le fonctionnement normal de ce code.
Or chez lui il y a un problème.