Slimmer BlockState-Database
- Default logSurvival to false - "/lcbs cleanup" command to delete survival items, with logSurvival: false Rename TabCompletion
This commit is contained in:
parent
814c848e53
commit
4498d8343f
12 changed files with 116 additions and 13 deletions
|
@ -18,12 +18,12 @@ import de.jaschastarke.bukkit.lib.commands.MethodCommand;
|
||||||
import de.jaschastarke.bukkit.lib.commands.IMethodCommandContainer;
|
import de.jaschastarke.bukkit.lib.commands.IMethodCommandContainer;
|
||||||
import de.jaschastarke.bukkit.lib.commands.MissingPermissionCommandException;
|
import de.jaschastarke.bukkit.lib.commands.MissingPermissionCommandException;
|
||||||
import de.jaschastarke.bukkit.lib.commands.NeedsPlayerArgumentCommandException;
|
import de.jaschastarke.bukkit.lib.commands.NeedsPlayerArgumentCommandException;
|
||||||
import de.jaschastarke.bukkit.lib.commands.TabCompletionHelper;
|
|
||||||
import de.jaschastarke.bukkit.lib.commands.annotations.Alias;
|
import de.jaschastarke.bukkit.lib.commands.annotations.Alias;
|
||||||
import de.jaschastarke.bukkit.lib.commands.annotations.Description;
|
import de.jaschastarke.bukkit.lib.commands.annotations.Description;
|
||||||
import de.jaschastarke.bukkit.lib.commands.annotations.IsCommand;
|
import de.jaschastarke.bukkit.lib.commands.annotations.IsCommand;
|
||||||
import de.jaschastarke.bukkit.lib.commands.annotations.NeedsPermission;
|
import de.jaschastarke.bukkit.lib.commands.annotations.NeedsPermission;
|
||||||
import de.jaschastarke.bukkit.lib.commands.annotations.Usages;
|
import de.jaschastarke.bukkit.lib.commands.annotations.Usages;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.parser.TabCompletion;
|
||||||
import de.jaschastarke.minecraft.lib.permissions.IAbstractPermission;
|
import de.jaschastarke.minecraft.lib.permissions.IAbstractPermission;
|
||||||
import de.jaschastarke.minecraft.lib.permissions.IPermission;
|
import de.jaschastarke.minecraft.lib.permissions.IPermission;
|
||||||
import de.jaschastarke.modularize.ModuleEntry.ModuleState;
|
import de.jaschastarke.modularize.ModuleEntry.ModuleState;
|
||||||
|
@ -139,7 +139,7 @@ public class FeatureSwitchGameMode extends CoreModule<LimitedCreative> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<TabCompletionHelper> getTabCompleter(MethodCommand cmd) {
|
public List<TabCompletion> getTabCompleter(MethodCommand cmd) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,10 +8,10 @@ import de.jaschastarke.bukkit.lib.commands.CommandContext;
|
||||||
import de.jaschastarke.bukkit.lib.commands.IHelpDescribed;
|
import de.jaschastarke.bukkit.lib.commands.IHelpDescribed;
|
||||||
import de.jaschastarke.bukkit.lib.commands.IMethodCommandContainer;
|
import de.jaschastarke.bukkit.lib.commands.IMethodCommandContainer;
|
||||||
import de.jaschastarke.bukkit.lib.commands.MethodCommand;
|
import de.jaschastarke.bukkit.lib.commands.MethodCommand;
|
||||||
import de.jaschastarke.bukkit.lib.commands.TabCompletionHelper;
|
|
||||||
import de.jaschastarke.bukkit.lib.commands.annotations.Description;
|
import de.jaschastarke.bukkit.lib.commands.annotations.Description;
|
||||||
import de.jaschastarke.bukkit.lib.commands.annotations.IsCommand;
|
import de.jaschastarke.bukkit.lib.commands.annotations.IsCommand;
|
||||||
import de.jaschastarke.bukkit.lib.commands.annotations.NeedsPermission;
|
import de.jaschastarke.bukkit.lib.commands.annotations.NeedsPermission;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.parser.TabCompletion;
|
||||||
import de.jaschastarke.maven.ArchiveDocComments;
|
import de.jaschastarke.maven.ArchiveDocComments;
|
||||||
import de.jaschastarke.maven.PluginCommand;
|
import de.jaschastarke.maven.PluginCommand;
|
||||||
import de.jaschastarke.minecraft.lib.permissions.IAbstractPermission;
|
import de.jaschastarke.minecraft.lib.permissions.IAbstractPermission;
|
||||||
|
@ -95,7 +95,7 @@ public class MainCommand extends BukkitCommand implements IHelpDescribed, IMetho
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<TabCompletionHelper> getTabCompleter(MethodCommand cmd) {
|
public List<TabCompletion> getTabCompleter(MethodCommand cmd) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,9 +94,33 @@ public class BlockStateCommand extends BukkitCommand implements IHelpDescribed {
|
||||||
throw new CommandException("Module " + mod.getName() + " is disabled");
|
throw new CommandException("Module " + mod.getName() + " is disabled");
|
||||||
return super.execute(context, args);
|
return super.execute(context, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes no longer used data from the BlockState-Database. Currently it only removes non-creative entries
|
||||||
|
* from the database, if you changed to "logSurvival"-config from true to false.
|
||||||
|
*/
|
||||||
|
@IsCommand("cleanup")
|
||||||
|
@Usages("")
|
||||||
|
public boolean cleanupDatabase(final CommandContext context, String... args) throws CommandException {
|
||||||
|
if (mod.getConfig().getLogSurvival()) {
|
||||||
|
context.responseFormatted(ChatFormattings.INFO, L("command.blockstate.nothing_to_cleanup"));
|
||||||
|
} else {
|
||||||
|
mod.getPlugin().getServer().getScheduler().runTaskAsynchronously(mod.getPlugin(), new BukkitRunnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
int countDeleted = mod.getModel().cleanUp(DBModel.Cleanup.SURVIVAL);
|
||||||
|
if (countDeleted < 0)
|
||||||
|
context.responseFormatted(ChatFormattings.ERROR, L("command.blockstate.cleanup_error"));
|
||||||
|
else
|
||||||
|
context.responseFormatted(ChatFormattings.SUCCESS, L("command.blockstate.cleanup_success", countDeleted));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Modifies the Block-GameMode-Database and sets all blocks in the selection to the provided gamemode. Set it
|
* Modifies the BlockState-Database and sets all blocks in the selection to the provided gamemode. Set it
|
||||||
* to "creative" to disable drop of this block on destroying. Set it to "survival" to allow it.
|
* to "creative" to disable drop of this block on destroying. Set it to "survival" to allow it.
|
||||||
* WorldEdit is required, because the selection Region is used.
|
* WorldEdit is required, because the selection Region is used.
|
||||||
* gamemode can be: survival / creative / adventure / s / c / a / 0 / 1 / 2
|
* gamemode can be: survival / creative / adventure / s / c / a / 0 / 1 / 2
|
||||||
|
@ -247,7 +271,13 @@ public class BlockStateCommand extends BukkitCommand implements IHelpDescribed {
|
||||||
mod.getModuleEntry().disable();
|
mod.getModuleEntry().disable();
|
||||||
|
|
||||||
thread.start();
|
thread.start();
|
||||||
context.response(L("command.blockstate.migrate_started", source.getType(), target.getType()));
|
String sourceType = source.getType().toString();
|
||||||
|
if (params.getParameter("import") != null) {
|
||||||
|
if (params.getParameter("import").equals("cc")) {
|
||||||
|
sourceType = "CreativeControl-" + sourceType;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
context.response(L("command.blockstate.migrate_started", sourceType, target.getType()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -130,11 +130,11 @@ public class BlockStateConfig extends Configuration implements IConfigurationSub
|
||||||
* Log all Block-Places to the database. Disable to make the database more slim by not adding blocks placed in
|
* Log all Block-Places to the database. Disable to make the database more slim by not adding blocks placed in
|
||||||
* survival-mode.
|
* survival-mode.
|
||||||
*
|
*
|
||||||
* default: true
|
* default: false
|
||||||
*/
|
*/
|
||||||
@IsConfigurationNode(order = 400)
|
@IsConfigurationNode(order = 400)
|
||||||
public boolean getLogSurvival() {
|
public boolean getLogSurvival() {
|
||||||
return config.getBoolean("logSurvival", true);
|
return config.getBoolean("logSurvival", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private StringList ignoredWorlds = null;
|
private StringList ignoredWorlds = null;
|
||||||
|
|
|
@ -64,6 +64,10 @@ public interface DBModel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum Cleanup {
|
||||||
|
SURVIVAL;
|
||||||
|
}
|
||||||
|
|
||||||
public void onEnable() throws Exception;
|
public void onEnable() throws Exception;
|
||||||
public void onDisable();
|
public void onDisable();
|
||||||
public void moveState(Block from, Block to);
|
public void moveState(Block from, Block to);
|
||||||
|
@ -83,4 +87,6 @@ public interface DBModel {
|
||||||
public void removeState(Block block);
|
public void removeState(Block block);
|
||||||
public void finish();
|
public void finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int cleanUp(Cleanup target);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ import de.jaschastarke.bukkit.lib.database.ResultIterator;
|
||||||
import de.jaschastarke.database.Type;
|
import de.jaschastarke.database.Type;
|
||||||
import de.jaschastarke.database.db.Database;
|
import de.jaschastarke.database.db.Database;
|
||||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.BlockState.Source;
|
import de.jaschastarke.minecraft.limitedcreative.blockstate.BlockState.Source;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.blockstate.DBModel.Cleanup;
|
||||||
import de.jaschastarke.utils.IDebugLogHolder;
|
import de.jaschastarke.utils.IDebugLogHolder;
|
||||||
|
|
||||||
public class DBQueries {
|
public class DBQueries {
|
||||||
|
@ -300,6 +301,23 @@ public class DBQueries {
|
||||||
throw new RuntimeException("Currently only SQLite is supported.");
|
throw new RuntimeException("Currently only SQLite is supported.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int cleanup(Cleanup q) throws SQLException {
|
||||||
|
PreparedStatement delete;
|
||||||
|
if (dbg.isDebug())
|
||||||
|
dbg.getLog().debug("DBQuery: cleanup: " + q.toString());
|
||||||
|
if (q == Cleanup.SURVIVAL) {
|
||||||
|
delete = db.prepare("DELETE FROM lc_block_state WHERE gm = ?");
|
||||||
|
if (db.getType() == Type.MySQL)
|
||||||
|
delete.setString(1, GameMode.SURVIVAL.name());
|
||||||
|
else
|
||||||
|
delete.setInt(1, GameMode.SURVIVAL.getValue());
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return delete.executeUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
public Database getDB() {
|
public Database getDB() {
|
||||||
return db;
|
return db;
|
||||||
}
|
}
|
||||||
|
|
|
@ -198,4 +198,15 @@ public class SyncronizedModel extends AbstractModel implements DBModel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int cleanUp(Cleanup target) {
|
||||||
|
try {
|
||||||
|
return q.cleanup(target);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
mod.getLog().severe(e.getMessage());
|
||||||
|
mod.getLog().warn("Failed to cleanup BlockState-DB");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ import org.bukkit.metadata.Metadatable;
|
||||||
|
|
||||||
import de.jaschastarke.database.DatabaseConfigurationException;
|
import de.jaschastarke.database.DatabaseConfigurationException;
|
||||||
import de.jaschastarke.minecraft.limitedcreative.ModBlockStates;
|
import de.jaschastarke.minecraft.limitedcreative.ModBlockStates;
|
||||||
|
import de.jaschastarke.minecraft.limitedcreative.blockstate.thread.CallableAction;
|
||||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.thread.ThreadLink;
|
import de.jaschastarke.minecraft.limitedcreative.blockstate.thread.ThreadLink;
|
||||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.thread.Transaction;
|
import de.jaschastarke.minecraft.limitedcreative.blockstate.thread.Transaction;
|
||||||
|
|
||||||
|
@ -259,4 +260,21 @@ public class ThreadedModel extends AbstractModel implements DBModel, Listener {
|
||||||
public ModBlockStates getModel() {
|
public ModBlockStates getModel() {
|
||||||
return mod;
|
return mod;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int cleanUp(final Cleanup target) {
|
||||||
|
return threads.call(new CallableAction<Integer>() {
|
||||||
|
@Override
|
||||||
|
public void process(ThreadLink link, DBQueries q) {
|
||||||
|
this.returnSet = true;
|
||||||
|
try {
|
||||||
|
this.returnValue = q.cleanup(target);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
this.returnValue = -1;
|
||||||
|
mod.getLog().severe(e.getMessage());
|
||||||
|
mod.getLog().warn("Failed to cleanup BlockState-DB");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -134,6 +134,20 @@ public class ThreadLink {
|
||||||
return action.getValue();
|
return action.getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void queue(Action act) {
|
||||||
|
synchronized (updateQueue) {
|
||||||
|
updateQueue.add(act);
|
||||||
|
updateQueue.notify();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public <T> T call(CallableAction<T> act) {
|
||||||
|
synchronized (updateQueue) {
|
||||||
|
updateQueue.push(act);
|
||||||
|
updateQueue.notify();
|
||||||
|
}
|
||||||
|
return act.getValue();
|
||||||
|
}
|
||||||
|
|
||||||
public List<BlockState> callUpdate(Cuboid c) {
|
public List<BlockState> callUpdate(Cuboid c) {
|
||||||
FetchCuboidAction action = new FetchCuboidAction(c);
|
FetchCuboidAction action = new FetchCuboidAction(c);
|
||||||
synchronized (updateQueue) {
|
synchronized (updateQueue) {
|
||||||
|
|
|
@ -26,12 +26,12 @@ import de.jaschastarke.bukkit.lib.commands.ICommand;
|
||||||
import de.jaschastarke.bukkit.lib.commands.IHelpDescribed;
|
import de.jaschastarke.bukkit.lib.commands.IHelpDescribed;
|
||||||
import de.jaschastarke.bukkit.lib.commands.MethodCommand;
|
import de.jaschastarke.bukkit.lib.commands.MethodCommand;
|
||||||
import de.jaschastarke.bukkit.lib.commands.MissingPermissionCommandException;
|
import de.jaschastarke.bukkit.lib.commands.MissingPermissionCommandException;
|
||||||
import de.jaschastarke.bukkit.lib.commands.TabCompletionHelper;
|
|
||||||
import de.jaschastarke.bukkit.lib.commands.TabCompletionHelper.Completer;
|
|
||||||
import de.jaschastarke.bukkit.lib.commands.TabCompletionHelper.Context;
|
|
||||||
import de.jaschastarke.bukkit.lib.commands.annotations.IsCommand;
|
import de.jaschastarke.bukkit.lib.commands.annotations.IsCommand;
|
||||||
import de.jaschastarke.bukkit.lib.commands.annotations.Usages;
|
import de.jaschastarke.bukkit.lib.commands.annotations.Usages;
|
||||||
import de.jaschastarke.bukkit.lib.commands.parser.DefinedParameterParser;
|
import de.jaschastarke.bukkit.lib.commands.parser.DefinedParameterParser;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.parser.TabCompletion;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.parser.TabCompletion.Completer;
|
||||||
|
import de.jaschastarke.bukkit.lib.commands.parser.TabCompletion.Context;
|
||||||
import de.jaschastarke.maven.ArchiveDocComments;
|
import de.jaschastarke.maven.ArchiveDocComments;
|
||||||
import de.jaschastarke.maven.PluginCommand;
|
import de.jaschastarke.maven.PluginCommand;
|
||||||
import de.jaschastarke.minecraft.lib.permissions.IAbstractPermission;
|
import de.jaschastarke.minecraft.lib.permissions.IAbstractPermission;
|
||||||
|
@ -114,9 +114,9 @@ public class RegionsCommand extends BukkitCommand implements IHelpDescribed {
|
||||||
for (ICommand cmd : handler.getCommands()) {
|
for (ICommand cmd : handler.getCommands()) {
|
||||||
if (cmd instanceof MethodCommand) {
|
if (cmd instanceof MethodCommand) {
|
||||||
if (cmd.getName().equals("info")) {
|
if (cmd.getName().equals("info")) {
|
||||||
((MethodCommand) cmd).getCompleter().add(TabCompletionHelper.forUsageLine("[region]"));
|
((MethodCommand) cmd).getCompleter().add(TabCompletion.forUsageLine("[region]"));
|
||||||
}
|
}
|
||||||
for (TabCompletionHelper c : ((MethodCommand) cmd).getCompleter()) {
|
for (TabCompletion c : ((MethodCommand) cmd).getCompleter()) {
|
||||||
c.setCompleter("region", new RegionCompleter());
|
c.setCompleter("region", new RegionCompleter());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,9 @@ command.blockstate.migration_finished_restart: A Server-Restart is required!
|
||||||
command.blockstate.migration_error: Migration failed with error: {0}
|
command.blockstate.migration_error: Migration failed with error: {0}
|
||||||
command.blockstate.migrate_useronline_error: There are players on the Server. The migration shouldn't be run with active players.
|
command.blockstate.migrate_useronline_error: There are players on the Server. The migration shouldn't be run with active players.
|
||||||
command.blockstate.migrate_confirm: Are you sure you want to start the migration? It may take a very long time and much CPU. To confirm execution run the command with the following added: {0}
|
command.blockstate.migrate_confirm: Are you sure you want to start the migration? It may take a very long time and much CPU. To confirm execution run the command with the following added: {0}
|
||||||
|
command.blockstate.nothing_to_cleanup: Nothing to cleanup
|
||||||
|
command.blockstate.cleanup_success: Successfully removed {0} entries from database
|
||||||
|
command.blockstate.cleanup_error: Error while cleaning database. Check server.log
|
||||||
|
|
||||||
cmdblock.blocked: This command is blocked while in creative mode.
|
cmdblock.blocked: This command is blocked while in creative mode.
|
||||||
cmdblock.blocked.requires_worldedit: WorlEdit is required to use this command
|
cmdblock.blocked.requires_worldedit: WorlEdit is required to use this command
|
||||||
|
|
|
@ -38,6 +38,9 @@ command.blockstate.migration_finished_restart: Server-Neustart notwendig!
|
||||||
command.blockstate.migration_error: Migration mit folgendem Fehler fehlgeschlagen: {0}
|
command.blockstate.migration_error: Migration mit folgendem Fehler fehlgeschlagen: {0}
|
||||||
command.blockstate.migrate_useronline_error: Es sind Spieler auf dem Server. Die Migration sollte nicht mit aktiven Spielern ausgeführt werden.
|
command.blockstate.migrate_useronline_error: Es sind Spieler auf dem Server. Die Migration sollte nicht mit aktiven Spielern ausgeführt werden.
|
||||||
command.blockstate.migrate_confirm: Bist du sicher. dass du die Migration starten willst? Dies dauert vermutlich sehr lange und benötigt viel Prozessor-Leistung. Um die Ausführung zu bestätigen führe den Befehl erneut mit folgendem Parameter aus: {0}
|
command.blockstate.migrate_confirm: Bist du sicher. dass du die Migration starten willst? Dies dauert vermutlich sehr lange und benötigt viel Prozessor-Leistung. Um die Ausführung zu bestätigen führe den Befehl erneut mit folgendem Parameter aus: {0}
|
||||||
|
command.blockstate.nothing_to_cleanup: Nichts aufzuräumen
|
||||||
|
command.blockstate.cleanup_success: Erfolgreich {0} Datensätze aus der Datenbank gelöscht
|
||||||
|
command.blockstate.cleanup_error: Fehler beim Aufräumen der Datenbank. server.log prüfen
|
||||||
|
|
||||||
cmdblock.blocked: Dieses Kommando ist im Kreativ-Modus blockiert
|
cmdblock.blocked: Dieses Kommando ist im Kreativ-Modus blockiert
|
||||||
cmdblock.blocked.requires_worldedit: WorldEdit wird für diesen Befehl benötigt
|
cmdblock.blocked.requires_worldedit: WorldEdit wird für diesen Befehl benötigt
|
||||||
|
|
Loading…
Reference in a new issue