forked from LogBlock/LogBlock
Merge pull request #499 from frymaster/nonentity-kill-logging
Implement logging for environmental (non-entity) kills
This commit is contained in:
@@ -160,9 +160,9 @@ public class Consumer extends TimerTask
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param killer
|
* @param killer
|
||||||
* Can' be null
|
* Can't be null
|
||||||
* @param victim
|
* @param victim
|
||||||
* Can' be null
|
* Can't be null
|
||||||
*/
|
*/
|
||||||
public void queueKill(Entity killer, Entity victim) {
|
public void queueKill(Entity killer, Entity victim) {
|
||||||
if (killer == null || victim == null)
|
if (killer == null || victim == null)
|
||||||
@@ -173,6 +173,19 @@ public class Consumer extends TimerTask
|
|||||||
queueKill(victim.getLocation(), entityName(killer), entityName(victim), weapon);
|
queueKill(victim.getLocation(), entityName(killer), entityName(victim), weapon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This form should only be used when the killer is not an entity e.g. for fall or suffocation damage
|
||||||
|
* @param killer
|
||||||
|
* Can't be null
|
||||||
|
* @param victim
|
||||||
|
* Can't be null
|
||||||
|
*/
|
||||||
|
public void queueKill(String killer, Entity victim) {
|
||||||
|
if (killer == null || victim == null)
|
||||||
|
return;
|
||||||
|
queueKill(victim.getLocation(), killer, entityName(victim), 0);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param world
|
* @param world
|
||||||
* World the victim was inside.
|
* World the victim was inside.
|
||||||
@@ -539,7 +552,7 @@ public class Consumer extends TimerTask
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String[] getInserts() {
|
public String[] getInserts() {
|
||||||
return new String[]{"INSERT INTO `" + getWorldConfig(loc.getWorld()).table + "-kills` (date, killer, victim, weapon, x, y, z) VALUES (FROM_UNIXTIME(" + date + "), " + playerID(killer) + ", " + playerID(victim) + ", " + weapon + ", " + loc.getBlockX() + ", " + loc.getBlockY() + ", " + loc.getBlockZ() + ");"};
|
return new String[]{"INSERT INTO `" + getWorldConfig(loc.getWorld()).table + "-kills` (date, killer, victim, weapon, x, y, z) VALUES (FROM_UNIXTIME(" + date + "), " + playerID(killer) + ", " + playerID(victim) + ", " + weapon + ", " + loc.getBlockX() + ", " + (loc.getBlockY() < 0 ? 0 : loc.getBlockY()) + ", " + loc.getBlockZ() + ");"};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -46,6 +46,7 @@ public class Config
|
|||||||
public static Set<String> ignoredChat;
|
public static Set<String> ignoredChat;
|
||||||
public static SimpleDateFormat formatter;
|
public static SimpleDateFormat formatter;
|
||||||
public static boolean safetyIdCheck;
|
public static boolean safetyIdCheck;
|
||||||
|
public static boolean logEnvironmentalKills;
|
||||||
|
|
||||||
public static enum LogKillsLevel
|
public static enum LogKillsLevel
|
||||||
{
|
{
|
||||||
@@ -82,6 +83,7 @@ public class Config
|
|||||||
def.put("clearlog.autoClearLogDelay", "6h");
|
def.put("clearlog.autoClearLogDelay", "6h");
|
||||||
def.put("logging.logCreeperExplosionsAsPlayerWhoTriggeredThese", false);
|
def.put("logging.logCreeperExplosionsAsPlayerWhoTriggeredThese", false);
|
||||||
def.put("logging.logKillsLevel", "PLAYERS");
|
def.put("logging.logKillsLevel", "PLAYERS");
|
||||||
|
def.put("logging.logEnvironmentalKills", false);
|
||||||
def.put("logging.logPlayerInfo", false);
|
def.put("logging.logPlayerInfo", false);
|
||||||
def.put("logging.hiddenPlayers", new ArrayList<String>());
|
def.put("logging.hiddenPlayers", new ArrayList<String>());
|
||||||
def.put("logging.hiddenBlocks", Arrays.asList(0));
|
def.put("logging.hiddenBlocks", Arrays.asList(0));
|
||||||
@@ -149,6 +151,7 @@ public class Config
|
|||||||
} catch (final IllegalArgumentException ex) {
|
} catch (final IllegalArgumentException ex) {
|
||||||
throw new DataFormatException("logging.logKillsLevel doesn't appear to be a valid log level. Allowed are 'PLAYERS', 'MONSTERS' and 'ANIMALS'");
|
throw new DataFormatException("logging.logKillsLevel doesn't appear to be a valid log level. Allowed are 'PLAYERS', 'MONSTERS' and 'ANIMALS'");
|
||||||
}
|
}
|
||||||
|
logEnvironmentalKills = config.getBoolean("logging.logEnvironmentalKills", false);
|
||||||
hiddenPlayers = new HashSet<String>();
|
hiddenPlayers = new HashSet<String>();
|
||||||
for (final String playerName : config.getStringList("logging.hiddenPlayers"))
|
for (final String playerName : config.getStringList("logging.hiddenPlayers"))
|
||||||
hiddenPlayers.add(playerName.toLowerCase().trim());
|
hiddenPlayers.add(playerName.toLowerCase().trim());
|
||||||
|
@@ -2,6 +2,7 @@ package de.diddiz.LogBlock.listeners;
|
|||||||
|
|
||||||
import static de.diddiz.LogBlock.config.Config.isLogging;
|
import static de.diddiz.LogBlock.config.Config.isLogging;
|
||||||
import static de.diddiz.LogBlock.config.Config.logKillsLevel;
|
import static de.diddiz.LogBlock.config.Config.logKillsLevel;
|
||||||
|
import static de.diddiz.LogBlock.config.Config.logEnvironmentalKills;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Monster;
|
import org.bukkit.entity.Monster;
|
||||||
@@ -15,6 +16,7 @@ import de.diddiz.LogBlock.LogBlock;
|
|||||||
import de.diddiz.LogBlock.Logging;
|
import de.diddiz.LogBlock.Logging;
|
||||||
import de.diddiz.LogBlock.config.Config.LogKillsLevel;
|
import de.diddiz.LogBlock.config.Config.LogKillsLevel;
|
||||||
|
|
||||||
|
|
||||||
public class KillLogging extends LoggingListener
|
public class KillLogging extends LoggingListener
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -26,14 +28,22 @@ public class KillLogging extends LoggingListener
|
|||||||
public void onEntityDeath(EntityDeathEvent deathEvent) {
|
public void onEntityDeath(EntityDeathEvent deathEvent) {
|
||||||
EntityDamageEvent event = deathEvent.getEntity().getLastDamageCause();
|
EntityDamageEvent event = deathEvent.getEntity().getLastDamageCause();
|
||||||
// For a death event, there should always be a damage event and it should not be cancelled. Check anyway.
|
// For a death event, there should always be a damage event and it should not be cancelled. Check anyway.
|
||||||
if (event!= null && event.isCancelled() == false && isLogging(event.getEntity().getWorld(), Logging.KILL) && event instanceof EntityDamageByEntityEvent && event.getEntity() instanceof LivingEntity) {
|
if (event!= null && event.isCancelled() == false && isLogging(event.getEntity().getWorld(), Logging.KILL) && event.getEntity() instanceof LivingEntity) {
|
||||||
final LivingEntity victim = (LivingEntity)event.getEntity();
|
final LivingEntity victim = (LivingEntity)event.getEntity();
|
||||||
final Entity killer = ((EntityDamageByEntityEvent)event).getDamager();
|
if (event instanceof EntityDamageByEntityEvent) {
|
||||||
if (logKillsLevel == LogKillsLevel.PLAYERS && !(victim instanceof Player && killer instanceof Player))
|
final Entity killer = ((EntityDamageByEntityEvent)event).getDamager();
|
||||||
return;
|
if (logKillsLevel == LogKillsLevel.PLAYERS && !(victim instanceof Player && killer instanceof Player))
|
||||||
else if (logKillsLevel == LogKillsLevel.MONSTERS && !((victim instanceof Player || victim instanceof Monster) && killer instanceof Player || killer instanceof Monster))
|
return;
|
||||||
return;
|
else if (logKillsLevel == LogKillsLevel.MONSTERS && !((victim instanceof Player || victim instanceof Monster) && killer instanceof Player || killer instanceof Monster))
|
||||||
consumer.queueKill(killer, victim);
|
return;
|
||||||
|
consumer.queueKill(killer, victim);
|
||||||
|
} else if (logEnvironmentalKills) {
|
||||||
|
if (logKillsLevel == LogKillsLevel.PLAYERS && !(victim instanceof Player))
|
||||||
|
return;
|
||||||
|
else if (logKillsLevel == LogKillsLevel.MONSTERS && !((victim instanceof Player || victim instanceof Monster)))
|
||||||
|
return;
|
||||||
|
consumer.queueKill(event.getCause().toString(),victim);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user