LogBlock
Works 100% with 1.7 / 1.8
The best block logging and rollback solution for the savvy server administrator.
LogBlock is the best block logging plugin for Bukkit server. Not only is it awesomely powerful, it’s blazing fast! Everything is logged into a MySQL database, allowing developers to hook in and produce things such as player stats and even administrative panels. Every loggable action can be logged with LogBlock: WorldEdit, leave decay, fire, sign changes, explosions, chest changes, player and animal deaths, chat, commands and more!
Development builds of this project can be acquired at the provided continuous integration server. These builds have not been approved by the BukkitDev staff. Use them at your own risk.
LogBlock will very rarely break between Minecraft / Bukkit updates, however if you find it does, please be sure to try a development build from above, as we generally test new releases there until deemed stable.
What is LogBlock?
LogBlock is a tool which allows you to keep track of almost everything on your server, while also giving you the ability to rollback (revert) or redo changes made by users and natural occurrences such as liquid flow or leaf decay. Additionally, LogBlock is able to log and rollback chest contents, sign text and more! LogBlock was originally created by bootswithdefer for HMod, ported to Bukkit by DiddiZ and is now actively maintained by md_5, ammar2 and the community of developers on Bukkit. We accept pull requests on GitHub frequently which means that community developers can add features they wish to see quicker than LogBlock developers are able to from tickets. All database actions are run not only in their own threads, but are queued into a consumer to minimize lag on the main thread. This is great for larger servers! All optional features (not dependencies below) are enabled and disabled from within the config file allowing complete control over what is logged thus ensuring database size is kept to a minimum.
Notices
Most virtual chest plugins are not compatible with LogBlock. Because they do not set the player who is opening the “chest”, LogBlock can’t do what it’s meant to be able to do, thus, making errors in your console. Please report these issues to the fake-chest plugin developer, NOT LogBlock developers.
Issues are read more frequently on the GitHub Issues page as compared to the comments below. When updating to LB1.57, if you already have a large database and have changed your columns to MEDIUMINT, INT or LARGEINT, you do not need the updater to fix this for you automatically. To stop this behaviour, simply change “version” in the configuration to ‘1.57’.
If you are experiencing an error such as this please read the FAQ for answers.
If you're receiving errors regarding players from the consumer such as "[Consumer] Failed to add player <playername>" then change all `playerid` columns to MEDIUMINT or INT in each table that contains them. This may take a long time if you have a lot of rows.
Optional Dependencies
- WorldEdit (Recommended)
- Permissions plugin
- LogBlock Questioner
Need help?
Found a bug or an issue? Please report it (and attach code if you know how to squash it) on our ticket manager.
Just need help in general or have an urgent, more private bug? Join us on IRC at irc.esper.net #LogBlock and ping a +o or +v for faster help. Webchat is available here if you don't have a client, or prefer to use it.
As always, check if your question is on the FAQ before asking!
Installation
More Information
- FAQ (read me first!)
- Command reference
- Configuration
- Helpful Commands
- MySQL Connection Problems
- MySQL Schema
- SQL Queries
- Parameters
Are you a Developer?
If you wish to contribute to the LogBlock project, head on over to the GitHub page, fork the project and submit your pull request(s).
If you wish to develop a plugin that interacts with LogBlock in some way, read up on the API here. Support for API and more can be found in the IRC channel, which is listed above.
Developer builds can be found here. (These builds have not been approved by the BukkitDev staff. Use them at your own risk.)
Still need help? Join us on IRC at irc.esper.net #LogBlock and ping a +o or +v for faster help.
Please do not post comments requesting support. Report bugs here or, alternatively, talk to a real person. Commenting below is a surefire way to not receive help.
-
View User Profile
-
Send Message
Posted Feb 11, 2013When will LB be supporting meta data and enchantments etc for items?
It's annoying that always when i rollback all enchantments are getting reset in chests.
@xclucky
Think you had same issue as me and it's an issue from cRecipes.
-
View User Profile
-
Send Message
Posted Feb 10, 2013@_kalen_
Go to the logblock folder on your plugins directory and then look at all the world configs it should say to enable those logging things good luck.
-
View User Profile
-
Send Message
Posted Feb 10, 2013can logblock log paintings, item frames and cake-eating? If so, how?
-
View User Profile
-
Send Message
Posted Feb 10, 2013@Kepler_
No... that's what doesn't make sense... Nothing anywhere near it was broken... I also notice this same issue with glass panes, skulls, and practically any other block that isn't a whole block :/
-
View User Profile
-
Send Message
Posted Feb 10, 2013Is there a way to log fallen sand/gravel?
-
View User Profile
-
Send Message
Posted Feb 10, 2013@xclucky
Was the block behind the ladder broken?
-
View User Profile
-
Send Message
Posted Feb 9, 2013Is there some hack out there now that allows players to break blocks that aren't whole blocks in protected areas? http://i.imgur.com/iDSLCmu.png?1 As you can see... Logblock says no block was broken, however, the ladder is obviously not there... This has happened countless times with signs, skulls, and many other things, but never a whole block.
I am using the newest version of LogBlock as of 2/9/2013, along with the newest version of every other plugin (I am hooked into an RSS reader that notifies me when a plugin updates, so I am 100% sure I am using the newest version of EVERYTHING except for rTriggers, which I will update tonight). I am also using the newest version of CraftBukkit, 1.4.7-R1.0.
-
View User Profile
-
Send Message
Posted Feb 9, 2013There is no option for item frame logging right?
-
View User Profile
-
Send Message
Posted Feb 9, 2013@MrRazull Next time enter in pastebin!
-
View User Profile
-
Send Message
Posted Feb 8, 2013is there anyway to roll back TNT?
-
View User Profile
-
Send Message
Posted Feb 7, 2013The server has stopped responding! 2013-02-06 20:24:19 [SEVERE] Please report this to md_5! 2013-02-06 20:24:19 [SEVERE] Spigot version: 1.4.7-R0.2-SNAPSHOT 2013-02-06 20:24:19 [SEVERE] Begin Exception Trace For All Threads: 2013-02-06 20:24:19 [SEVERE]
------2013-02-06 20:24:19 [SEVERE] Current Thread: Signal Dispatcher 2013-02-06 20:24:19 [SEVERE] PID: 4 | Alive: true | State: RUNNABLE 2013-02-06 20:24:19 [SEVERE] Stack: 2013-02-06 20:24:19 [SEVERE]------2013-02-06 20:24:19 [SEVERE] Current Thread: Snooper Timer 2013-02-06 20:24:19 [SEVERE] PID: 10 | Alive: true | State: TIMED_WAITING 2013-02-06 20:24:19 [SEVERE] Stack: 2013-02-06 20:24:19 [SEVERE] java.lang.Object.wait(Native Method) 2013-02-06 20:24:19 [SEVERE] java.util.TimerThread.mainLoop(Unknown Source) 2013-02-06 20:24:19 [SEVERE] java.util.TimerThread.run(Unknown Source) 2013-02-06 20:24:19 [SEVERE]------2013-02-06 20:24:19 [SEVERE] Current Thread: Server thread 2013-02-06 20:24:19 [SEVERE] PID: 13 | Alive: true | State: RUNNABLE 2013-02-06 20:24:19 [SEVERE] Stack: 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.WorldGenMinable.a(SourceFile:48) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.BiomeDecorator.a(SourceFile:227) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.BiomeDecorator.b(SourceFile:241) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.BiomeDecorator.a(SourceFile:68) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.BiomeDecorator.a(SourceFile:27) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.BiomeBase.a(SourceFile:217) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.ChunkProviderGenerate.getChunkAt(SourceFile:450) 2013-02-06 20:24:19 [SEVERE] org.bukkit.craftbukkit.v1_4_R1.generator.NormalChunkGenerator.getChunkAt(NormalChunkGenerator.java:49) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.ChunkProviderServer.getChunkAt(ChunkProviderServer.java:230) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.Chunk.a(Chunk.java:800) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.ChunkProviderServer.getChunkAt(ChunkProviderServer.java:146) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.PlayerChunk.(PlayerChunk.java:24) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.PlayerChunkMap.a(PlayerChunkMap.java:70) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.PlayerChunkMap.addPlayer(PlayerChunkMap.java:113) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.PlayerList.a(PlayerList.java:129) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.PlayerList.c(PlayerList.java:174) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.PlayerList.a(PlayerList.java:98) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.PendingConnection.d(PendingConnection.java:130) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.PendingConnection.c(PendingConnection.java:45) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.DedicatedServerConnectionThread.a(DedicatedServerConnectionThread.java:44) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.DedicatedServerConnection.b(SourceFile:29) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.MinecraftServer.r(MinecraftServer.java:585) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.DedicatedServer.r(DedicatedServer.java:224) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.MinecraftServer.q(MinecraftServer.java:481) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.MinecraftServer.run(MinecraftServer.java:416) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.ThreadServerApplication.run(SourceFile:849) 2013-02-06 20:24:19 [SEVERE]------2013-02-06 20:24:19 [SEVERE] Current Thread: DestroyJavaVM 2013-02-06 20:24:19 [SEVERE] PID: 15 | Alive: true | State: RUNNABLE 2013-02-06 20:24:19 [SEVERE] Stack: 2013-02-06 20:24:19 [SEVERE]------2013-02-06 20:24:19 [SEVERE] Current Thread: Attach Listener 2013-02-06 20:24:19 [SEVERE] PID: 5 | Alive: true | State: RUNNABLE 2013-02-06 20:24:19 [SEVERE] Stack: 2013-02-06 20:24:19 [SEVERE]------2013-02-06 20:24:19 [SEVERE] Current Thread: File IO Thread 2013-02-06 20:24:19 [SEVERE] PID: 43 | Alive: true | State: TIMED_WAITING 2013-02-06 20:24:19 [SEVERE] Stack: 2013-02-06 20:24:19 [SEVERE] java.lang.Thread.sleep(Native Method) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.FileIOThread.b(SourceFile:43) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.FileIOThread.run(SourceFile:22) 2013-02-06 20:24:19 [SEVERE] java.lang.Thread.run(Unknown Source) 2013-02-06 20:24:19 [SEVERE]------2013-02-06 20:24:19 [SEVERE] Current Thread: Listen thread 2013-02-06 20:24:19 [SEVERE] PID: 17 | Alive: true | State: BLOCKED 2013-02-06 20:24:19 [SEVERE] Stack: 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.DedicatedServerConnectionThread.a(DedicatedServerConnectionThread.java:104) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.DedicatedServerConnectionThread.run(DedicatedServerConnectionThread.java:88) 2013-02-06 20:24:19 [SEVERE]------2013-02-06 20:24:19 [SEVERE] Current Thread: Thread-4 2013-02-06 20:24:19 [SEVERE] PID: 14 | Alive: true | State: TIMED_WAITING 2013-02-06 20:24:19 [SEVERE] Stack: 2013-02-06 20:24:19 [SEVERE] java.lang.Thread.sleep(Native Method) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.ThreadSleepForever.run(SourceFile:52) 2013-02-06 20:24:19 [SEVERE]------2013-02-06 20:24:19 [SEVERE] Current Thread: Spigot Watchdog Thread 2013-02-06 20:24:19 [SEVERE] PID: 18 | Alive: true | State: RUNNABLE 2013-02-06 20:24:19 [SEVERE] Stack: 2013-02-06 20:24:19 [SEVERE] java.lang.Thread.dumpThreads(Native Method) 2013-02-06 20:24:19 [SEVERE] java.lang.Thread.getAllStackTraces(Unknown Source) 2013-02-06 20:24:19 [SEVERE] org.bukkit.craftbukkit.v1_4_R1.util.WatchdogThread.run(WatchdogThread.java:60) 2013-02-06 20:24:19 [SEVERE]------2013-02-06 20:24:19 [SEVERE] Current Thread: Thread-10 2013-02-06 20:24:19 [SEVERE] PID: 30 | Alive: true | State: TIMED_WAITING 2013-02-06 20:24:19 [SEVERE] Stack: 2013-02-06 20:24:19 [SEVERE] java.lang.Thread.sleep(Native Method) 2013-02-06 20:24:19 [SEVERE] autosave.AutoSaveThread.run(AutoSaveThread.java:100) 2013-02-06 20:24:19 [SEVERE]------2013-02-06 20:24:19 [SEVERE] Current Thread: Thread-11 2013-02-06 20:24:19 [SEVERE] PID: 31 | Alive: true | State: TIMED_WAITING 2013-02-06 20:24:19 [SEVERE] Stack: 2013-02-06 20:24:19 [SEVERE] java.lang.Thread.sleep(Native Method) 2013-02-06 20:24:19 [SEVERE] autosave.AutoBackupThread6.run(AutoBackupThread6.java:111) 2013-02-06 20:24:19 [SEVERE]------2013-02-06 20:24:19 [SEVERE] Current Thread: Thread-12 2013-02-06 20:24:19 [SEVERE] PID: 32 | Alive: true | State: TIMED_WAITING 2013-02-06 20:24:19 [SEVERE] Stack: 2013-02-06 20:24:19 [SEVERE] java.lang.Thread.sleep(Native Method) 2013-02-06 20:24:19 [SEVERE] autosave.AutoPurgeThread.run(AutoPurgeThread.java:95) 2013-02-06 20:24:19 [SEVERE]------2013-02-06 20:24:19 [SEVERE] Current Thread: Thread-5 2013-02-06 20:24:19 [SEVERE] PID: 16 | Alive: true | State: RUNNABLE 2013-02-06 20:24:19 [SEVERE] Stack: 2013-02-06 20:24:19 [SEVERE] org.fusesource.jansi.internal.Kernel32._getch(Native Method) 2013-02-06 20:24:19 [SEVERE] org.fusesource.jansi.internal.WindowsSupport.readByte(WindowsSupport.java:46) 2013-02-06 20:24:19 [SEVERE] org.bukkit.craftbukkit.libs.jline.WindowsTerminal.readByte(WindowsTerminal.java:184) 2013-02-06 20:24:19 [SEVERE] org.bukkit.craftbukkit.libs.jline.WindowsTerminal.access$000(WindowsTerminal.java:53) 2013-02-06 20:24:19 [SEVERE] org.bukkit.craftbukkit.libs.jline.WindowsTerminal$1.read(WindowsTerminal.java:151) 2013-02-06 20:24:19 [SEVERE] java.io.FilterInputStream.read(Unknown Source) 2013-02-06 20:24:19 [SEVERE] org.bukkit.craftbukkit.libs.jline.console.ConsoleReader$1.read(ConsoleReader.java:167) 2013-02-06 20:24:19 [SEVERE] org.bukkit.craftbukkit.libs.jline.internal.InputStreamReader.read(InputStreamReader.java:267) 2013-02-06 20:24:19 [SEVERE] org.bukkit.craftbukkit.libs.jline.internal.InputStreamReader.read(InputStreamReader.java:204) 2013-02-06 20:24:19 [SEVERE] org.bukkit.craftbukkit.libs.jline.console.ConsoleReader.readCharacter(ConsoleReader.java:995) 2013-02-06 20:24:19 [SEVERE] org.bukkit.craftbukkit.libs.jline.console.ConsoleReader.readLine(ConsoleReader.java:1167) 2013-02-06 20:24:19 [SEVERE] net.minecraft.server.v1_4_R1.ThreadCommandReader.run(ThreadCommandReader.java:31) 2013-02-06 20:24:19 [SEVERE]------2013-02-06 20:24:19 [SEVERE] Current Thread: Spigot Metrics Gathering Thread 2013-02-06 20:24:19 [SEVERE] PID: 19 | Alive: true | State: TIMED_WAITING 2013-02-06 20:24:19 [SEVERE] Stack: 2013-02-06 20:24:19 [SEVERE] java.lang.Thread.sleep(Native Method) 2013-02-06 20:24:19 [SEVERE] org.bukkit.craftbukkit.v1_4_R1.util.TimedThread.run(TimedThread.java:29) 2013-02-06 20:24:19 [SEVERE]------2013-02-06 20:24:19 [SEVERE] Current Thread: MySQL Connection Reaper Thread - LogBlock 2013-02-06 20:24:19 [SEVERE] PID: 21 | Alive: true | State: TIMED_WAITING 2013-02-06 20:24:19 [SEVERE] Stack: 2013-02-06 20:24:19 [SEVERE] java.lang.Thread.sleep(Native Method) 2013-02-06 20:24:19 [SEVERE] de.diddiz.util.MySQLConnectionPool$ConnectionReaper.run(MySQLConnectionPool.java:103) 2013-02-06 20:24:19 [SEVERE] java.lang.Thread.run(Unknown Source) 2013-02-06 20:24:19 [SEVERE]-------
View User Profile
-
Send Message
Posted Feb 5, 2013Hello,
I noticed that the onlinetime update interval takes quite a while. Could you please create a version for me where it updates every hour? As im using this for a top rank list on my website using PHP to get it from the MYSQL.
-
View User Profile
-
Send Message
Posted Feb 4, 2013LB has been working fine for me for more than a year. All of a sudden, block changes aren't being logged and the plugin isn't responding to commands. When I check the log, I see:
2013-02-04 13:42:13 [INFO] [LogBlock] Enabling LogBlock v1.70 2013-02-04 13:42:13 [INFO] [LogBlock] Disabling LogBlock v1.70
with no other error text or anything. Why would it start up and then shut down right away?
Edit: It turns out that the plugin was unloading because I was trying to make it connect with a world with a period in the name, which threw a SQL exception when looking for a missing table. Since worlds with a period are bad, I renamed the new ones from period to underscore and all is well.
-
View User Profile
-
Send Message
Posted Feb 4, 2013Hi!
LB cannot trace and log Beakons. Some Peoples on my Server are lit under a Bug. Their Beakons got removed for no reason. I cannot do a rollback with Logblock, because Logblock is unable to redo Beakons. Could you fix that please?
-
View User Profile
-
Send Message
Posted Feb 3, 2013why do i get this error every time someone logs in:
22:45:26 [INFO] SabreBrick51[/151.213.52.152:49931] logged in with entity id 774 at ([spawn] 1211.1029726510158, 77.51445468949743, 105.58713776357274) 22:45:26 [INFO] Hi again, SabreBrick51 22:45:30 [SEVERE] [Consumer] SQL exception java.sql.SQLException: Duplicate unique index key at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620) at com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.java:1663) at de.diddiz.util.MySQLConnectionPool$JDCConnection.commit(MySQLConnecti onPool.java:146) at de.diddiz.LogBlock.Consumer.run(Consumer.java:311) at org.bukkit.craftbukkit.v1_4_R1.scheduler.CraftTask.run(CraftTask.java :53) at org.bukkit.craftbukkit.v1_4_R1.scheduler.CraftAsyncTask.run(CraftAsyn cTask.java:53) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) 22:45:32 [INFO] º*(M)LuckOfJeb r<[constructer]SabreBrick51> back
-
View User Profile
-
Send Message
Posted Feb 3, 2013I still have this error.... Has you sad before I've done this: version: '1.30' on the config file and my table is like this: CREATE TABLE `lb-players` ( playerid SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, playername varchar(32) NOT NULL, firstlogin DATETIME NOT NULL, lastlogin DATETIME NOT NULL, onlinetime TIME NOT NULL, ip varchar(255) NOT NULL, PRIMARY KEY (playerid), UNIQUE (playername) );
BTW I really need this...
-
View User Profile
-
Send Message
Posted Feb 2, 2013I need help where i put my Mysql, do i put it in the config or make a new folder?
-
View User Profile
-
Send Message
Posted Jan 31, 2013I need help with logblock becoming enabled on a multiworld server. I tried to make tables on mysql and failed. Logblock only works on my flat spawn world. Not the end world or the survival world. If you can help me please do.
-
View User Profile
-
Send Message
Posted Jan 31, 2013How to make Logblock register: - frames placement/breaking - skulls placement/breaking ?
-
View User Profile
-
Send Message
Posted Jan 31, 2013Authors should look new issues at github, you`re welcome.