Copier TileEntity



  • Salut,

    J'aimerais copier un coffre et son contenu à un endroit souhaité, mais le problème c'est qu'une fois copié, les coffres sont reliés.

    
    world.setBlock(targetx, targety, targetz, Blocks.chest);
    TileEntity tile = world.getTileEntity(x, y, z);
    NBTTagCompound nbt = new NBTTagCompound();
    tile.writeToNBT(nbt);
    nbt.setInteger("x", targetx);
    nbt.setInteger("y", targety);
    nbt.setInteger("z", targetz);
    tile.readFromNBT(nbt);
    world.setTileEntity(targetx, targety, targetz);
    
    

    Les coffres sont relié entre eux, si je modifie le contenu d'un, ça modifie aussi le contenu de l'autre.



  • Salut, il faut que tu remplace java leEntity tile = world.getTileEntity(x, y, z); par quelque chose comme ```java
    leEntity tile = world.getTileEntity(x, y, z).copy();

    Sinon, les deux coffres ont le même tileentity.


  • La méthode existe pas :x



  • Non et il y a aucune méthode du genre, mais par contre, avec ce que tu as déjà fait, tu peux faire autre chose :

    
    


  • TileEntity tile = world.getTileEntity(x, y, z);
    NBTTagCompound nbt = new NBTTagCompound();
    tile.writeToNBT(nbt);
    nbt.setInteger("x", x);
    nbt.setInteger("y", y);
    nbt.setInteger("z", z);
    tile.readFromNBT(nbt);
    
    TileEntityChest newChest = new TileEntityChest();
    newChest.readFromNBT(nbt);
    
    world.setTileEntity(x, y, z, newChest);
    

    Les coffres ne sont plus relié, si je casse le coffre original il me drop le stuff sans le retirer de l'autre, mais je ne peux pas ouvrir le coffre original. De plus, si je quitte et que je reviens dans le monde, le jeu plante:

    Details:
    Found chunk: true
    Location: World: (-91,4,518), Chunk: (at 5,0,6 in -6,32; contains blocks -96,0,512 to -81,255,527), Region: (-1,1; contains chunks -32,32 to -1,63, blocks -512,0,512 to -1,255,1023)
    
    


  • Retire le "tile.readFromNBT(nbt);" il est inutile du coup. Et si ça crash toujours, envoie le rapport en entier 🙂



  • Le rapport y'a que marqué ça mais énormément de fois.
    Sinon, j'ai trouvé la solution:

    
    TileEntity tilebase = world.getTileEntity(x, y, z);
    NBTTagCompound nbt= new NBTTagCompound();
    if(tilebase != null) {
       tilebase.writeToNBT(nbt);
    } else {
       nbt= null;
    }
    
    world.setBlock(targetx, targety, targetz, Blocks.chest, 0,3);
    TileEntity tileentity = world.getTileEntity(targetx, targety, targetz);
    if(nbttagbase != null && tileentity != null) {
       nbt.setInteger("x", targetx);
       nbt.setInteger("y", targety);
       nbt.setInteger("z", targetz);;
       tileentity.readFromNBT(nbt);
       tileentity.markDirty();
       world.setTileEntity(targetx, targety, targetz, tileentity);
    }
    
    


  • Je te conseil de revoir les bases du Java sur la notion d'objets et de références 😉



  • Ah oui effectivement c'est plus propre et va plus éviter les crash.

    Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk