• Bonjour.

    J'avais il y a peu ouvert un topic à propos de textures dynamiques. Je reviens sur le sujet : j'ai fait ce code dans le BlockAtomizationChamber :

    @SideOnly(Side.CLIENT)
    
    public void registerBlockIcons(IIconRegister iiconRegister)
        {
        this.blockIcon = iiconRegister.registerIcon(VirtualCraft.MODID + ":topmultiblock");
        this.on = iiconRegister.registerIcon(VirtualCraft.MODID + ":atomizationchamber");
        this.onU = iiconRegister.registerIcon(VirtualCraft.MODID + ":atomizationchamberU");
        this.onD = iiconRegister.registerIcon(VirtualCraft.MODID + ":atomizationchamberD");
        this.onB = iiconRegister.registerIcon(VirtualCraft.MODID + ":atomizationchamberB");
        this.off = iiconRegister.registerIcon(VirtualCraft.MODID + ":atomizationchamberoff");
        this.offU = iiconRegister.registerIcon(VirtualCraft.MODID + ":atomizationchamberoffU");
        this.offD = iiconRegister.registerIcon(VirtualCraft.MODID + ":atomizationchamberoffD");
        this.offB = iiconRegister.registerIcon(VirtualCraft.MODID + ":atomizationchamberoffB");
        }
    
    @SideOnly(Side.CLIENT)
    public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
        {
    
    if (world.getBlockMetadata(x, y, z) == 0) {
    if (side == 1 || side == 0)
        return this.blockIcon;
    
    TileEntity teTemp = world.getTileEntity(x, y, z);
        TileEntity teD = world.getTileEntity(x, y - 1, z);
        TileEntity teU = world.getTileEntity(x, y + 1, z);
    
        if (teTemp instanceof TileEntityAtomizationChamber) {
        TileEntityAtomizationChamber te = (TileEntityAtomizationChamber) teTemp;
        if (te.getWorking() == true) {
        if ((teD instanceof TileEntityMultiblock) && (teU instanceof TileEntityMultiblock)) return this.onB;
            else if (teD instanceof TileEntityMultiblock) return this.onD;
            else if (teU instanceof TileEntityMultiblock) return this.onU;
    
        return this.on;
        }
        }
        if ((teD instanceof TileEntityMultiblock) && (teU instanceof TileEntityMultiblock)) return this.offB;
        else if (teD instanceof TileEntityMultiblock) return this.offD;
        else if (teU instanceof TileEntityMultiblock) return this.offU;
    
        return this.off;
        }
    
    return this.getIcon(side, world.getBlockMetadata(x, y, z));
        }
    
    @SideOnly(Side.CLIENT)
    public IIcon getIcon(int side, int metadata)
    {
    
    if (side == 1 || side == 0)
        return this.blockIcon;
    return this.on;
    
    }
    

    et sous certaines conditions, TileEntityAtomizationChamber exécute :

    this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
    

    Pourtant, même lorsque cette fonction est exécutée, les textures ne se mettent pas à jour. En revanche, en mettant à jour un voisin manuellement en jeu, les textures se rafraîchissent. Une idée de pourquoi ?

    Merci d'avance !

  • Moddeurs confirmés Rédacteurs Administrateurs

    http://www.minecraftforgefrance.fr/showthread.php?tid=1304#partie3-2

    public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt)
    {
    this.readFromNBT(pkt.func_148857_g());
    this.worldObj.markBlockRangeForRenderUpdate(this.xCoord, this.yCoord, this.zCoord, this.xCoord, this.yCoord, this.zCoord);
    }