package org.ultralogger.logger.sql;
import org.bukkit.Location;
import org.bukkit.entity.HumanEntity;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.ultralogger.Main;
public class InventoryLogger implements Listener,Runnable{
private SQL manager;
public InventoryLogger(SQL sql){
manager=sql;
Thread t = new Thread(this,"[UltraLogger] - SQL Inventory Logger");
t.start();
}
@EventHandler (priority = EventPriority.MONITOR)
public void onOpen(InventoryOpenEvent e){
String name = e.getPlayer().getName();
boolean op = Main.isAdmin(e.getPlayer());
int gamemode = e.getPlayer().getGameMode().getValue();
HumanEntity i =e.getPlayer();
manager.query("INSERT INTO `"+manager.getprefix()+"_inventory`(`time`, `name`, `op`, `gamemode`, `event`, `InvTitel/Item`, `InvName/From`, `x`, `y`, `z`) VALUES (NOW(), '"+name+"'," + op + "," + gamemode +","+
"'open','"+e.getView().getTitle()+"','"+e.getView().getType().name()+"',"+toSQLquery(i.getLocation())+")");
}
@EventHandler (priority = EventPriority.MONITOR)
public void onClose(InventoryCloseEvent e){
String name = e.getPlayer().getName();
boolean op = Main.isAdmin(e.getPlayer());
int gamemode = e.getPlayer().getGameMode().getValue();
HumanEntity i =e.getPlayer();
manager.query("INSERT INTO `"+manager.getprefix()+"_inventory`(`time`, `name`, `op`, `gamemode`, `event`, `InvTitel/Item`, `InvName/From`, `x`, `y`, `z`) VALUES (NOW(), '"+name+"'," + op + "," + gamemode +","+
"'close','"+e.getView().getTitle()+"','"+e.getView().getType().name()+"',"+toSQLquery(i.getLocation())+")");
}
private ItemStack last = null;
private Inventory lastI = null;
private int amount = -1;
@EventHandler (priority = EventPriority.MONITOR)
public void onClick(InventoryClickEvent e){
String name = e.getWhoClicked().getName();
boolean op = e.getWhoClicked().isOp();
int gamemode = e.getWhoClicked().getGameMode().getValue();
if(e.getCurrentItem()==null){ return;}
HumanEntity i =e.getWhoClicked();
ItemStack item =e.getCursor();
boolean in = e.getView().getBottomInventory().getSize()<=e.getRawSlot();
if(last!=null&&lastI!=null&&e.getView().getTopInventory().getType()==lastI.getType()&&item.getTypeId()==0){
last.setAmount(amount);
if(in){
manager.query("INSERT INTO `"+manager.getprefix()+"_inventory`(`time`, `name`, `op`, `gamemode`, `event`, `InvTitel/Item`, `InvName/From`, `x`, `y`, `z`) VALUES (NOW(), '"+name+"'," + op + "," + gamemode +","+
"'put','"+last.toString()+"','"+lastI.getType().name()+"',"+toSQLquery(i.getLocation())+")");
}
else{
manager.query("INSERT INTO `"+manager.getprefix()+"_inventory`(`time`, `name`, `op`, `gamemode`, `event`, `InvTitel/Item`, `InvName/From`, `x`, `y`, `z`) VALUES (NOW(), '"+name+"'," + op + "," + gamemode +","+
"'put','"+last.toString()+"','"+e.getView().getType().name()+"',"+toSQLquery(i.getLocation())+")");
}
last=e.getCurrentItem();
amount=item.getAmount();
lastI=e.getView().getTopInventory();
}
else{
last=item;
amount=item.getAmount();
lastI=e.getView().getTopInventory();
manager.query("INSERT INTO `"+manager.getprefix()+"_inventory`(`time`, `name`, `op`, `gamemode`, `event`, `InvTitel/Item`, `InvName/From`, `x`, `y`, `z`) VALUES (NOW(), '"+name+"'," + op + "," + gamemode +","+
"'click','"+item.toString()+"','"+e.getView().getTitle()+"',"+toSQLquery(i.getLocation())+")");
}
}
/*
* 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 inventory table
manager.query("CREATE TABLE IF NOT EXISTS `"+manager.getprefix()+"_inventory`(`prim_key` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,`time` DATETIME NOT NULL,`name` VARCHAR(255) NOT NULL,`op` BOOLEAN, `gamemode` INT," +
"`event` VARCHAR(255) NOT NULL, `InvTitel/Item` VARCHAR(255) NOT NULL, `InvName/From` VARCHAR(255) NOT NULL, `x` INT NOT NULL,`y` INT NOT NULL, `z` INT NOT NULL, PRIMARY KEY (prim_key))");
}
}