package org.ultralogger.logger.sql;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockBurnEvent;
import org.bukkit.event.block.BlockDispenseEvent;
import org.bukkit.event.block.BlockFormEvent;
import org.bukkit.event.block.BlockGrowEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.ultralogger.Main;
public class BlockLogger implements Listener,Runnable{
private SQL manager;
public BlockLogger(SQL sql){
manager=sql;
Thread t = new Thread(this,"[UltraLogger] - SQL Block Logger");
t.start();
}
@EventHandler (priority = EventPriority.MONITOR)
public void onBreak(BlockBreakEvent e){
String name = e.getPlayer().getName();
boolean op = Main.isAdmin(e.getPlayer());
int gamemode = e.getPlayer().getGameMode().getValue();
Block i = e.getBlock();
manager.query("INSERT INTO `"+manager.getprefix()+"_block`(`time`, `id`, `event`, `x`, `y`, `z`, `entity_name`, `op`, `gamemode`) VALUES (NOW(), "+i.getTypeId()+", 'break' ," +
toSQLquery(i.getLocation())+",'"+name+"',"+ op + "," + gamemode +")");
}
@EventHandler (priority = EventPriority.MONITOR)
public void onBurn(BlockBurnEvent e){
Block i = e.getBlock();
manager.query("INSERT INTO `"+manager.getprefix()+"_block`(`time`, `id`, `event`, `x`, `y`, `z`, `entity_name`) VALUES (NOW(), "+i.getTypeId()+", 'burn' ," +
""+toSQLquery(i.getLocation())+",NULL)");
}
@EventHandler (priority = EventPriority.MONITOR)
public void onDispense(BlockDispenseEvent e){
Block i = e.getBlock();
manager.query("INSERT INTO `"+manager.getprefix()+"_block`(`time`, `id`, `event`, `x`, `y`, `z`, `entity_name`) VALUES (NOW(), "+i.getTypeId()+", 'dispense' ," +
""+toSQLquery(i.getLocation())+",NULL)");
}
@EventHandler (priority = EventPriority.MONITOR)
public void onForm(BlockFormEvent e){
Block i = e.getBlock();
manager.query("INSERT INTO `"+manager.getprefix()+"_block`(`time`, `id`, `event`, `x`, `y`, `z`, `entity_name`) VALUES (NOW(), "+i.getTypeId()+", 'form' ," +
""+toSQLquery(i.getLocation())+",NULL)");
}
@EventHandler (priority = EventPriority.MONITOR)
public void onGrow(BlockGrowEvent e){
Block i = e.getBlock();
manager.query("INSERT INTO `"+manager.getprefix()+"_block`(`time`, `id`, `event`, `x`, `y`, `z`, `entity_name`) VALUES (NOW(), "+i.getTypeId()+", 'grow' ," +
""+toSQLquery(i.getLocation())+",NULL)");
}
@EventHandler (priority = EventPriority.MONITOR)
public void onPlace(BlockPlaceEvent e){
String name = e.getPlayer().getName();
boolean op = Main.isAdmin(e.getPlayer());
int gamemode = e.getPlayer().getGameMode().getValue();
Block i = e.getBlock();
manager.query("INSERT INTO `"+manager.getprefix()+"_block`(`time`, `id`, `event`, `x`, `y`, `z`, `entity_name`,op,gamemode) VALUES (NOW(), "+i.getTypeId()+", 'place' ," +
toSQLquery(i.getLocation())+",'"+name+"',"+ op + "," + gamemode +")");
}
/*
* TODO: Move to another file where it can be called from as it is used in multiple Loggers
*/
public String toSQLquery(Location loc){
String s =loc.getBlockX()+","+loc.getBlockY()+","+loc.getBlockZ();
return s;
}
@Override
public void run() {
manager.register(this);
//Create the def block table
manager.query("CREATE TABLE IF NOT EXISTS `"+manager.getprefix()+"_block`(`prim_key` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,`time` DATETIME NOT NULL,`id` SMALLINT UNSIGNED NOT NULL," +
"`event` VARCHAR(255) NOT NULL,`x` INT NOT NULL,`y` INT NOT NULL, `z` INT NOT NULL,`entity_name` VARCHAR(255), `op` BOOLEAN, `gamemode` SMALLINT,PRIMARY KEY (prim_key))");
}
}