• Récent
  • Mots-clés
  • Populaire
  • Utilisateurs
  • Groupes
  • S'inscrire
  • Se connecter
  • S'inscrire
  • Se connecter
  • Recherche
  • Récent
  • Mots-clés
  • Populaire
  • Utilisateurs
  • Groupes

Résolu Crash à cause de feuille d'arbre

Archives Cauldron
1.5.2
3
5
3.7k
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.
  • Patatoufet
    Patatoufet dernière édition par robin4002 7 août 2018, 22:41 30 juil. 2013, 18:48

    –-- Minecraft Crash Report ----
    // I'm sorry, Dave.
    
    Time: 27/07/13 20:15
    Description: Exception ticking world
    
    java.lang.NoClassDefFoundError: net/minecraft/client/Minecraft
    at fr.shunayte.mod.blocks.BlockLeavesShunayte.func_71847_b(BlockLeavesShunayte.java:100)
    at net.minecraft.world.WorldServer.func_72893_g(WorldServer.java:686)
    at net.minecraft.world.WorldServer.func_72835_b(WorldServer.java:382)
    at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:809)
    at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:320)
    at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:716)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:600)
    at net.minecraft.server.ThreadMinecraftServer.run(SourceFile:573)
    Caused by: java.lang.ClassNotFoundException: net.minecraft.client.Minecraft
    at cpw.mods.fml.relauncher.RelaunchClassLoader.findClass(RelaunchClassLoader.java:273)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 8 more
    Caused by: java.lang.RuntimeException: Attempted to load class net/minecraft/client/Minecraft for invalid side SERVER
    at cpw.mods.fml.common.asm.transformers.SideTransformer.transform(SideTransformer.java:50)
    at cpw.mods.fml.relauncher.RelaunchClassLoader.runTransformers(RelaunchClassLoader.java:387)
    at cpw.mods.fml.relauncher.RelaunchClassLoader.findClass(RelaunchClassLoader.java:260)
    ... 10 more
    
    A detailed walkthrough of the error, its code path and all known details is as follows:
    ---------------------------------------------------------------------------------------
    
    -- Head --
    Stacktrace:
    at fr.shunayte.mod.blocks.BlockLeavesShunayte.func_71847_b(BlockLeavesShunayte.java:100)
    at net.minecraft.world.WorldServer.func_72893_g(WorldServer.java:686)
    at net.minecraft.world.WorldServer.func_72835_b(WorldServer.java:382)
    
    -- Affected level --
    Details:
    Level name: world
    All players: 1 total; [EntityPlayerMP['Patatoufet'/48, l='world', x=229,67, y=71,11, z=251,47](Patatoufet at 229.67429253669644,71.11152141153735,251.4659027356265)]
    Chunk stats: ServerChunkCache: 442 Drop: 0
    Level seed: -2375827280995750463
    Level generator: ID 00 - default, ver 1\. Features enabled: true
    Level generator options:
    Level spawn location: World: (236,64,252), Chunk: (at 12,4,12 in 14,15; contains blocks 224,0,240 to 239,255,255), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)
    Level time: 3109 game time, 3109 day time
    Level dimension: 0
    Level storage version: 0x04ABD - Anvil
    Level weather: Rain time: 171839 (now: false), thunder time: 115665 (now: false)
    Level game mode: Game mode: survival (ID 0). Hardcore: false. Cheats: false
    Stacktrace:
    at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:809)
    at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:320)
    at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:716)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:600)
    at net.minecraft.server.ThreadMinecraftServer.run(SourceFile:573)
    
    – System Details --
    Details:
    Minecraft Version: 1.5.2
    Operating System: Windows 7 (amd64) version 6.1
    Java Version: 1.7.0_17, Oracle Corporation
    Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
    Memory: 648133056 bytes (618 MB) / 986382336 bytes (940 MB) up to 986382336 bytes (940 MB)
    JVM Flags: 2 total; -Xmx1G -Xms1G
    AABB Pool Size: 7061 (395416 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
    Suspicious classes: FML and Forge are installed
    IntCache: cache: 0, tcache: 0, allocated: 3, tallocated: 63
    CraftBukkit Information:
    Running: CraftBukkit version git-MCPC-Plus-jenkins-MCPC-Plus-Legacy-617 (MC: 1.5.2) (Implementing API version 1.5.2-R1.1-SNAPSHOT) true
    Plugins: { WorldEdit v5.5.6 com.sk89q.worldedit.bukkit.WorldEditPlugin [], VoxelSniper v5.168.5-SNAPSHOT-jnks198 com.thevoxelbox.voxelsniper.VoxelSniper [przerwap, MikeMatrix, Gavjenks, giltwist, psanker, Deamon5550, DivineRage], TagAPI v2.3 org.kitteh.tag.TagAPI [mbaxter], PluginManager v1.0.1 net.skycraftmc.PluginManager.PluginManagerPlugin [Technius], Modifyworld v1.19.6 ru.tehkode.modifyworld.bukkit.Modifyworld [t3hk0d3], Multiverse-Core v2.5-b641 com.onarandombox.MultiverseCore.MultiverseCore [Rigby, fernferret, lithium3141, main–], PermissionsEx v1.19.6 ru.tehkode.permissions.bukkit.PermissionsEx [t3hk0d3], LogBlock v1.70 de.diddiz.LogBlock.LogBlock [DiddiZ, md_5, ammar2], ModeraChat v0.2 fr.ungeek.ModeraChat.Main [PunKeel], WorldGuard v5.7.5 com.sk89q.worldguard.bukkit.WorldGuardPlugin [], dynmap v1.8-773 org.dynmap.bukkit.DynmapPlugin [mikeprimm], Essentials v2.11.1 com.earth2me.essentials.Essentials [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits, md_5, Iaccidentally], ChatManager v1.19.1 ru.tehkode.chatmanager.bukkit.ChatManager [t3hk0d3], EssentialsSpawn v2.11.1 com.earth2me.essentials.spawn.EssentialsSpawn [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits], Multiverse-Inventories v2.5-b335 com.onarandombox.multiverseinventories.MultiverseInventories [dumptruckman], Multiverse-Downloader v1.0-SNAPSHOT-b1 com.mvplugin.downloader.MultiverseDownloaderPlugin [dumptruckman],}
    Warnings: DEFAULT
    Threads: { TIMED_WAITING pool-1-thread-1: [sun.misc.Unsafe.park(Native Method), java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source), java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(Unknown Source), java.util.concurrent.SynchronousQueue$TransferStack.transfer(Unknown Source), java.util.concurrent.SynchronousQueue.poll(Unknown Source), java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source), java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source), java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source), java.lang.Thread.run(Unknown Source)], TIMED_WAITING File IO Thread: [java.lang.Thread.sleep(Native Method), net.minecraft.world.storage.ThreadedFileIOBase.func_75736_b(SourceFile:43), net.minecraft.world.storage.ThreadedFileIOBase.run(SourceFile:22), java.lang.Thread.run(Unknown Source)], TIMED_WAITING Snooper Timer: [java.lang.Object.wait(Native Method), java.util.TimerThread.mainLoop(Unknown Source), java.util.TimerThread.run(Unknown Source)], RUNNABLE DestroyJavaVM: [], WAITING Reference Handler: [java.lang.Object.wait(Native Method), java.lang.Object.wait(Object.java:503), java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)], TIMED_WAITING Spigot Watchdog Thread: [java.lang.Thread.sleep(Native Method), org.spigotmc.WatchdogThread.run(WatchdogThread.java:87)], TIMED_WAITING MySQL Connection Reaper Thread - LogBlock: [java.lang.Thread.sleep(Native Method), de.diddiz.util.MySQLConnectionPool$ConnectionReaper.run(MySQLConnectionPool.java:103), java.lang.Thread.run(Unknown Source)], WAITING MV-Inv Profile Write Thread: [sun.misc.Unsafe.park(Native Method), java.util.concurrent.locks.LockSupport.park(Unknown Source), java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source), java.util.concurrent.LinkedBlockingQueue.take(Unknown Source), com.onarandombox.multiverseinventories.util.data.FlatFilePlayerData$FileWriteThread.run(FlatFilePlayerData.java:208)], RUNNABLE Server thread: [java.lang.Thread.dumpThreads(Native Method), java.lang.Thread.getAllStackTraces(Unknown Source), org.bukkit.craftbukkit.v1_5_R3.CraftCrashReport.call(CraftCrashReport.java:27), net.minecraft.crash.CrashReportCategory.func_71500_a(CrashReportCategory.java:106), net.minecraft.crash.CrashReport.func_71504_g(CrashReport.java:59), net.minecraft.crash.CrashReport.<init>(CrashReport.java:41), net.minecraft.crash.CrashReport.func_85055_a(CrashReport.java:303), net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:813), net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:320), net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:716), net.minecraft.server.MinecraftServer.run(MinecraftServer.java:600), net.minecraft.server.ThreadMinecraftServer.run(SourceFile:573)], TIMED_WAITING Spigot Metrics Thread: [java.lang.Object.wait(Native Method), java.util.TimerThread.mainLoop(Unknown Source), java.util.TimerThread.run(Unknown Source)], TIMED_WAITING Connection #0 write thread: [java.lang.Thread.sleep(Native Method), net.minecraft.network.TcpWriterThread.run(TcpWriterThread.java:49)], WAITING PermissionsEx-Cleaner: [java.lang.Object.wait(Native Method), java.lang.Object.wait(Object.java:503), java.util.TimerThread.mainLoop(Unknown Source), java.util.TimerThread.run(Unknown Source)], WAITING Chunk I/O Executor Thread-1: [sun.misc.Unsafe.park(Native Method), java.util.concurrent.locks.LockSupport.park(Unknown Source), java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source), java.util.concurrent.LinkedBlockingQueue.take(Unknown Source), java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source), java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source), java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source), java.lang.Thread.run(Unknown Source)], RUNNABLE Thread-6: [org.fusesource.jansi.internal.Kernel32._getch(Native Method), org.fusesource.jansi.internal.WindowsSupport.readByte(WindowsSupport.java:46), org.bukkit.craftbukkit.libs.jline.WindowsTerminal.readByte(WindowsTerminal.java:184), org.bukkit.craftbukkit.libs.jline.WindowsTerminal.access$000(WindowsTerminal.java:53), org.bukkit.craftbukkit.libs.jline.WindowsTerminal$1.read(WindowsTerminal.java:151), java.io.FilterInputStream.read(Unknown Source), org.bukkit.craftbukkit.libs.jline.console.ConsoleReader$1.read(ConsoleReader.java:167), org.bukkit.craftbukkit.libs.jline.internal.InputStreamReader.read(InputStreamReader.java:267), org.bukkit.craftbukkit.libs.jline.internal.InputStreamReader.read(InputStreamReader.java:204), org.bukkit.craftbukkit.libs.jline.console.ConsoleReader.readCharacter(ConsoleReader.java:995), org.bukkit.craftbukkit.libs.jline.console.ConsoleReader.readLine(ConsoleReader.java:1167), net.minecraft.server.dedicated.DedicatedServerCommandThread.run(DedicatedServerCommandThread.java:37)], WAITING pool-2-thread-1: [sun.misc.Unsafe.park(Native Method), java.util.concurrent.locks.LockSupport.park(Unknown Source), java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source), java.util.concurrent.LinkedBlockingQueue.take(Unknown Source), java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source), java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source), java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source), java.lang.Thread.run(Unknown Source)], RUNNABLE Connection #0 read thread: [java.net.SocketInputStream.socketRead0(Native Method), java.net.SocketInputStream.read(Unknown Source), java.net.SocketInputStream.read(Unknown Source), java.io.FilterInputStream.read(Unknown Source), org.bouncycastle.crypto.io.CipherInputStream.nextChunk(Unknown Source), org.bouncycastle.crypto.io.CipherInputStream.read(Unknown Source), java.io.FilterInputStream.read(Unknown Source), net.minecraft.network.packet.Packet.func_73272_a(Packet.java:156), net.minecraft.network.TcpConnection.func_74447_i(TcpConnection.java:300), net.minecraft.network.TcpConnection.func_74450_c(TcpConnection.java:528), net.minecraft.network.TcpReaderThread.run(SourceFile:94)], RUNNABLE Attach Listener: [], WAITING Finalizer: [java.lang.Object.wait(Native Method), java.lang.ref.ReferenceQueue.remove(Unknown Source), java.lang.ref.ReferenceQueue.remove(Unknown Source), java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)], WAITING Thread-1: [sun.misc.Unsafe.park(Native Method), java.util.concurrent.locks.LockSupport.park(Unknown Source), java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source), java.util.concurrent.LinkedBlockingQueue.take(Unknown Source), cpw.mods.fml.relauncher.FMLRelaunchLog$ConsoleLogThread.run(FMLRelaunchLog.java:79), java.lang.Thread.run(Unknown Source)], TIMED_WAITING Thread-5: [java.lang.Thread.sleep(Native Method), net.minecraft.server.dedicated.DedicatedServerSleepThread.run(SourceFile:60)], RUNNABLE Listen thread: [java.net.DualStackPlainSocketImpl.accept0(Native Method), java.net.DualStackPlainSocketImpl.socketAccept(Unknown Source), java.net.AbstractPlainSocketImpl.accept(Unknown Source), java.net.PlainSocketImpl.accept(Unknown Source), java.net.ServerSocket.implAccept(Unknown Source), java.net.ServerSocket.accept(Unknown Source), net.minecraft.server.ServerListenThread.run(ServerListenThread.java:82)], TIMED_WAITING pool-1-thread-10: [sun.misc.Unsafe.park(Native Method), java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source), java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(Unknown Source), java.util.concurrent.SynchronousQueue$TransferStack.transfer(Unknown Source), java.util.concurrent.SynchronousQueue.poll(Unknown Source), java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source), java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source), java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source), java.lang.Thread.run(Unknown Source)], RUNNABLE Signal Dispatcher: [],}
    Recent tasks from 2305-2335{WorldEdit:com.sk89q.worldedit.bukkit.SessionTimer@2309,}
    FML: MCP v7.51 FML v5.2.23.738 Minecraft Forge 7.8.1.738 4 mods loaded, 4 mods active
    mcp{7.51} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
    FML{5.2.23.738} [Forge Mod Loader] (coremods) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
    Forge{7.8.1.738} [Minecraft Forge] (coremods) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
    Shunayte_1_5_2{1.0} [Shunayte] (Shunayte.zip) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
    Profiler Position: N/A (disabled)
    Vec3 Pool Size: 210 (11760 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
    Player Count: 1 / 20; [EntityPlayerMP['Patatoufet'/48, l='world', x=229,67, y=71,11, z=251,47](Patatoufet at 229.67429253669644,71.11152141153735,251.4659027356265)]
    Is Modded: Definitely; Server brand changed to 'mcpc,craftbukkit,fml,forge'
    Type: Dedicated Server (map_server.txt)
    

    et voici la fonction qui pose problème

    public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random) {
    this.graphicsLevel = Minecraft.getMinecraft().gameSettings.fancyGraphics;
    this.graphicsState = graphicsLevel ? 0 : 1;
    if (!par1World.isRemote) {
    int l = par1World.getBlockMetadata(par2, par3, par4);
    if ((l & 8) != 0 && (l & 4) == 0) {
    byte b0 = 4;
    int i1 = b0 + 1;
    byte b1 = 32;
    int j1 = b1 * b1;
    int k1 = b1 / 2;
    if (this.adjacentTreeBlocks == null)
    this.adjacentTreeBlocks = new int[b1 * b1 * b1];
    int l1;
    if (par1World.checkChunksExist(par2 - i1, par3 - i1, par4 - i1, par2 + i1, par3 + i1, par4 + i1)) {
    int i2;
    int j2;
    int k2;
    for (l1 = -b0; l1 <= b0; ++l1) {
    for (i2 = -b0; i2 <= b0; ++i2) {
    for (j2 = -b0; j2 <= b0; ++j2) {
    k2 = par1World.getBlockId(par2 + l1, par3 + i2, par4 + j2);
    Block block = Block.blocksList[k2];
    if (block != null && block.canSustainLeaves(par1World, par2 + l1, par3 + i2, par4 + j2))
    this.adjacentTreeBlocks[(l1 + k1) * j1 + (i2 + k1) * b1 + j2 + k1] = 0;
    else if (block != null && block.isLeaves(par1World, par2 + l1, par3 + i2, par4 + j2))
    this.adjacentTreeBlocks[(l1 + k1) * j1 + (i2 + k1) * b1 + j2 + k1] = -2;
    else
    this.adjacentTreeBlocks[(l1 + k1) * j1 + (i2 + k1) * b1 + j2 + k1] = -1;
    }
    }
    }
    for (l1 = 1; l1 <= 4; ++l1) {
    for (i2 = -b0; i2 <= b0; ++i2) {
    for (j2 = -b0; j2 <= b0; ++j2) {
    for (k2 = -b0; k2 <= b0; ++k2) {
    if (this.adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1) * b1 + k2 + k1] == l1 - 1) {
    if (this.adjacentTreeBlocks[(i2 + k1 - 1) * j1 + (j2 + k1) * b1 + k2 + k1] == -2)
    this.adjacentTreeBlocks[(i2 + k1 - 1) * j1 + (j2 + k1) * b1 + k2 + k1] = l1;
    if (this.adjacentTreeBlocks[(i2 + k1 + 1) * j1 + (j2 + k1) * b1 + k2 + k1] == -2)
    this.adjacentTreeBlocks[(i2 + k1 + 1) * j1 + (j2 + k1) * b1 + k2 + k1] = l1;
    if (this.adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1 - 1) * b1 + k2 + k1] == -2)
    this.adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1 - 1) * b1 + k2 + k1] = l1;
    if (this.adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1 + 1) * b1 + k2 + k1] == -2)
    this.adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1 + 1) * b1 + k2 + k1] = l1;
    if (this.adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1) * b1 + (k2 + k1 - 1)] == -2)
    this.adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1) * b1 + (k2 + k1 - 1)] = l1;
    if (this.adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1) * b1 + k2 + k1 + 1] == -2)
    this.adjacentTreeBlocks[(i2 + k1) * j1 + (j2 + k1) * b1 + k2 + k1 + 1] = l1;
    }
    }
    }
    }
    }
    }
    l1 = this.adjacentTreeBlocks[k1 * j1 + k1 * b1 + k1];
    if (l1 >= 0)
    par1World.setBlockMetadataWithNotify(par2, par3, par4, l & -9, 4);
    else
    this.removeLeaves(par1World, par2, par3, par4);
    }
    }
    })

    Merci d’avance 😃

    1 réponse Dernière réponse Répondre Citer 0
    • Gugu
      Gugu dernière édition par 30 juil. 2013, 18:56

      NoClassDefFoundError

      Oublié un @ClientSide ?

      "If you have a comprehensive explanation for everything then it decreases uncertainty and anxiety and reduces your cognitive load. And if you can use that simplifying algorithm to put yourself on the side of moral virtue then you’re constantly a good person with a minimum of effort."
      ― Jordan B. Peterson

      1 réponse Dernière réponse Répondre Citer 0
      • Patatoufet
        Patatoufet dernière édition par 30 juil. 2013, 19:17

        Je viens de revoir tout mon fichier et franchement si j’ai oublié un Side.Client, je ne voit pas vraiment où.

        1 réponse Dernière réponse Répondre Citer 0
        • robin4002
          robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 30 juil. 2013, 21:49

          Le problème vient d’ici :

          this.graphicsLevel = Minecraft.getMinecraft().gameSettings.fancyGraphics;
          this.graphicsState = graphicsLevel ? 0 : 1;

          Tu utilise Minecraft c’est une classe qui est que en client.

          J’utilise ça pour le graphique fast/fancy :
          https://github.com/MCNanotech/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotech_mod/main/blocks/BlockNanoLeaves.java

          1 réponse Dernière réponse Répondre Citer 0
          • Patatoufet
            Patatoufet dernière édition par 1 août 2013, 19:12

            problème réglé, merci à toi 🙂

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

            MINECRAFT FORGE FRANCE © 2018

            Powered by NodeBB