Very simple Death Log

Discussion in 'Archived: Plugin Requests' started by Jacold92, Nov 12, 2012.

Thread Status:
Not open for further replies.
  1. Offline

    Jacold92

    Hello. I need very lightweight and simple death log plugin - this will have only features:
    - Logging death in console
    - Saving death in database with coordinates and date

    Is there any way to create it?
     
  2. Offline

    jacklin213

    Yeh this is simple, when u say data base do u mean store it into a file or data base as in SQLlight or MySQL
     
  3. Offline

    Jacold92

    in MySQL (eventually configurable option in config.yml)
     
  4. Offline

    jacklin213

    Well then let's hope someone is going to take on this task, I'm too noob for it
     
  5. Offline

    Musicguy

    I could do it in a text file, as most people could, but I don't know the first thing about databases.
     
  6. Offline

    jacklin213

    ^ ditto

    EDIT: im actually really good with databases but i have never tried to learn how to intergrate MySQL into java
     
  7. Offline

    Javacow

    I would be happy do do this with text file, with option to remember items players lost on death and commands to teleport players to where they died. If you require MySQL, then I can't help, but I can definitely set up file based storage.
     
  8. Offline

    javoris767

    I'm on it :D

    Here ya go
    Download: http://pr3datorcraft.com/dl/DeathLogPlus.jar
    If you want any extra additions I'll try to add it :3

    Main
    Code:
    package me.javoris767.deathlogplus;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.sql.Statement;
     
    import org.bukkit.Bukkit;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class DeathLogPlus extends JavaPlugin {
        public static DeathLogPlus plugin;
       
        public void onDisable() {
            log("is now disabled!");
           
        }
        public void onEnable() {
            log("is now enabled!");
            Bukkit.getPluginManager().registerEvents(new PlayerListener(this), this);
            loadConfig();
            if(getConfig().getBoolean("DeathLogPlus.MySQL.Enabled")) {
                  Connection connection = null;
                  Statement st = null;
                  int rs = 0;
                  try {
                    connection = DriverManager.getConnection("jdbc:mysql://" + getConfig().getString("DeathLogPlus.MySQL.Server") +
                            "/" + getConfig().getString("DeathLogPlus.MySQL.Database"), getConfig().getString("DeathLogPlus.MySQL.User"), getConfig().getString("DeathLogPlus.MySQL.Password"));
                    st = connection.createStatement();
                    rs = st.executeUpdate("CREATE TABLE IF NOT EXISTS `deathlogplus`( `id` MEDIUMINT NOT NULL AUTO_INCREMENT, `playername` text, `message` text, `x` MEDIUMINT(255), `y` MEDIUMINT(255), `z` MEDIUMINT(255), `world` text, PRIMARY KEY (`id`))");
                  } catch (SQLException e) {
                    e.printStackTrace();
                    System.out.print(rs);
                  }
            }
        }
        public void log(String msg) {
            Bukkit.getLogger().info("[" + this + "]: " + msg);
        }
        public static void add(String playername, String message, double x, double y, double z, String worldname) {
            PreparedStatement pst = null;
            Connection con = null;
            long time = System.currentTimeMillis()/1000; //Unix time
            //Checking if they should be logged
                try {
                    con = DriverManager.getConnection("jdbc:mysql://" + plugin.getConfig().getString("DeathLogPlus.MySQL.Server") +
                            "/" + plugin.getConfig().getString("DeathLogPlus.MySQL.Database"), plugin.getConfig().getString("DeathLogPlus.MySQL.User"), plugin.getConfig().getString("DeathLogPlus.MySQL.Password"));
     
                    String database = "deathlogplus";
                    //Prepared statement
                    pst = con.prepareStatement("INSERT INTO "+database+"(playername, message, x, y, z, worldname, time) VALUES(?, ?, ?, ?, ?, ?, ?)");
                    //Values
                    pst.setString(1, playername);
                    pst.setString(2, message);
                    pst.setDouble(3, x);
                    pst.setDouble(4, y);
                    pst.setDouble(5, z);
                    pst.setString(6, worldname);
                    pst.setLong(7, time);
                    //Do the MySQL query
                    pst.executeUpdate();
                    } catch (SQLException ex) {
                        System.out.print(ex);
                    }
        }
        private void loadConfig() {
            String path0 = "DeathLogPlus.MySQL.Enabled";
            String path1 = "DeathLogPlus.MySQL.Server";
            String path2 = "DeathLogPlus.MySQL.Database";
            String path3 = "DeathLogPlus.MySQL.User";
            String path4 = "DeathLogPlus.MySQL.Password";
     
            getConfig().addDefault(path0, false);
            getConfig().addDefault(path1, "Server Address eg.Localhost");
            getConfig().addDefault(path2, "Place Database name here");
            getConfig().addDefault(path3, "Place User of MySQL Database here");
            getConfig().addDefault(path4, "Place User password here");
           
            getConfig().options().copyDefaults(true);
            //getConfig().options().header("");
            saveConfig();
        }
    }
    PlayerListener
    Code:
    package me.javoris767.deathlogplus;
     
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.PlayerDeathEvent;
     
    public class PlayerListener implements Listener {
       
        public DeathLogPlus plugin;
        public PlayerListener(DeathLogPlus deathLogPlus) {
            plugin = deathLogPlus;
        }
       
        @EventHandler(priority = EventPriority.MONITOR)
        public void onPlayerDeath(PlayerDeathEvent event) {
            Player player = event.getEntity();
            String message = event.getDeathMessage();
            double x = (int)Math.floor(player.getLocation().getX());
            double y = (int)Math.floor(player.getLocation().getY());
            double z = (int)Math.floor(player.getLocation().getZ());
           
            plugin.log(message);
            if(plugin.getConfig().getBoolean("DeathLogPlus.MySQL.Enabled")) {
                DeathLogPlus.add(player.getName(), message, x, y, z, player.getWorld().getName());
            }
        }
    }
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 29, 2016
  9. Offline

    jacklin213

    ^ arnt you gonna compile it and give a link of the plugin to the op
     
  10. Offline

    javoris767

     
  11. Offline

    jacklin213

    ^ woops face palm XD
     
  12. Offline

    amazed2025

    smart ass >.< Sasuke <3 xD
     
  13. Offline

    Jacold92

    Code:
    23:08:57 [INFO] [DeathLogPlus v0.1]: Ndrangheta hit the ground too hard
    23:08:57 [SEVERE] Could not pass event PlayerDeathEvent to DeathLogPlus v0.1
    org.bukkit.event.EventException
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:341)
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477)
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462)
            at org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerDeathEvent(CraftEventFactory.java:335)
            at net.minecraft.server.EntityPlayer.die(EntityPlayer.java:253)
            at net.minecraft.server.EntityLiving.damageEntity(EntityLiving.java:730)
            at net.minecraft.server.EntityHuman.damageEntity(EntityHuman.java:605)
            at net.minecraft.server.EntityPlayer.damageEntity(EntityPlayer.java:306)
            at net.minecraft.server.EntityLiving.a(EntityLiving.java:929)
            at net.minecraft.server.EntityHuman.a(EntityHuman.java:1202)
            at net.minecraft.server.Entity.a(Entity.java:767)
            at net.minecraft.server.EntityLiving.a(EntityLiving.java:234)
            at net.minecraft.server.EntityPlayer.b(EntityPlayer.java:404)
            at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:426)
            at net.minecraft.server.Packet10Flying.handle(SourceFile:136)
            at net.minecraft.server.NetworkManager.b(NetworkManager.java:290)
            at net.minecraft.server.NetServerHandler.d(NetServerHandler.java:113)
            at net.minecraft.server.ServerConnection.b(SourceFile:39)
            at net.minecraft.server.DedicatedServerConnection.b(SourceFile:30)
            at net.minecraft.server.MinecraftServer.r(MinecraftServer.java:595)
            at net.minecraft.server.DedicatedServer.r(DedicatedServer.java:222)
            at net.minecraft.server.MinecraftServer.q(MinecraftServer.java:493)
            at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:426)
            at net.minecraft.server.ThreadServerApplication.run(SourceFile:856)
    Caused by: java.lang.NullPointerException
            at me.javoris767.deathlogplus.DeathLogPlus.add(DeathLogPlus.java:47)
            at me.javoris767.deathlogplus.PlayerListener.onPlayerDeath(PlayerListener.java:26)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:601)
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:339)
            ... 24 more
    
    Unfortunately, saving to database not work for me. Can you fix it? Can I help solve the problem?
     
  14. Offline

    1mpre55

    It's because "plugin" object is null in the main class.
     
  15. Offline

    javoris767

  16. Offline

    Jacold92

    Code:
    16:46:41 [INFO] [DeathLogPlus v0.1.1]: Ndrangheta tried to swim in lava
    16:46:41 [INFO] com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'worldname' in 'field list'
    Next one.
     
  17. Offline

    javoris767

  18. Offline

    Jacold92

    Code:
    19:54:58 [INFO] [DeathLog] Ndrangheta hit the ground too hard
    19:54:58 [INFO] com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unkn'
    
    Oh rly? :p
     
  19. Offline

    javoris767

    You left out the other part that should be in the error, but redownload lol I tested it on my server.
    Download: http://pr3datorcraft.com/dl/DeathLogPlus.jar
     
    Jacold92 likes this.
  20. Offline

    Jacold92

    Finally works perfect. Thanks :)
     
  21. Offline

    Jacold92

    javoris767 can you add some features?
    I need to:
    - Separate dead player nick, reason, name of killer (mob, env.) and weapon used,
    - Set localized text for each part od death message
    - Name of worldguard region where playes dies (only selected in config)

    It's will be very cool if you add these features ;) Cheers!
     
  22. Offline

    Jade

    Jacold92 That dev hasn't been on for 2 weeks, but this is a necro. I recommend making a new thread requesting for it to be updated, as this is a necro so I'm locking it. (And no one will look at an ancient thread. :\)
     
    timtower likes this.
Thread Status:
Not open for further replies.

Share This Page