Advertisement
Guest User

MySQL Info Command

a guest
Oct 18th, 2016
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 14.47 KB | None | 0 0
  1. package me.snics.ingame;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9.  
  10. import org.bukkit.Bukkit;
  11. import org.bukkit.Material;
  12. import org.bukkit.SkullType;
  13. import org.bukkit.Sound;
  14. import org.bukkit.command.Command;
  15. import org.bukkit.command.CommandSender;
  16. import org.bukkit.entity.Creature;
  17. import org.bukkit.entity.Player;
  18. import org.bukkit.event.EventHandler;
  19. import org.bukkit.event.Listener;
  20. import org.bukkit.event.block.BlockBreakEvent;
  21. import org.bukkit.event.block.BlockPlaceEvent;
  22. import org.bukkit.event.entity.EntityDamageByEntityEvent;
  23. import org.bukkit.event.entity.PlayerDeathEvent;
  24. import org.bukkit.event.inventory.InventoryClickEvent;
  25. import org.bukkit.event.player.PlayerLoginEvent;
  26. import org.bukkit.inventory.Inventory;
  27. import org.bukkit.inventory.ItemStack;
  28. import org.bukkit.inventory.meta.ItemMeta;
  29. import org.bukkit.inventory.meta.SkullMeta;
  30. import org.bukkit.plugin.java.JavaPlugin;
  31.  
  32. import com.mysql.jdbc.PreparedStatement;
  33.  
  34. public class Main extends JavaPlugin implements Listener
  35. {
  36.     private static Connection connection;
  37.     private Inventory inv;
  38.     String label = "§f§l[§c§lLABEL§f§l] §r";
  39.    
  40.     public void onEnable()
  41.     {
  42.         Bukkit.getServer().getPluginManager().registerEvents(this, this);  
  43.     }
  44.    
  45.     public void onDisable()
  46.     {
  47.         try
  48.         {
  49.             if(connection != null && !connection.isClosed())
  50.             {
  51.                 connection.close();
  52.             }
  53.         }
  54.    
  55.         catch (Exception e)
  56.         {
  57.             e.printStackTrace();
  58.         }
  59.     }
  60.    
  61.     public static synchronized void openConnection()
  62.     {
  63.         try
  64.         {
  65.             // Verbinding maken met de database.
  66.             connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/ingame", "root", "Pidiboe002");
  67.         }
  68.        
  69.         catch (SQLException e)
  70.         {
  71.             e.printStackTrace();
  72.         }
  73.        
  74.     }
  75.    
  76.     public static synchronized void closeConnection()
  77.     {
  78.         try
  79.         {
  80.             // Verbinding verbreken na gebruik van de database.
  81.             connection.close();
  82.         }
  83.         catch (Exception e)
  84.         {
  85.             e.printStackTrace();
  86.         }
  87.     }
  88.    
  89.     public static synchronized boolean playerDataContainsPlayer (Player player)
  90.     {
  91.         try
  92.         {
  93.             // Maak een query.
  94.             PreparedStatement sql = (PreparedStatement) connection.prepareStatement("SELECT * FROM `player_data` WHERE player_name=?;");
  95.             // Verplaats het "?" met de speler naam.
  96.             sql.setString(1, player.getName());
  97.            
  98.             // Result
  99.             ResultSet resultset = sql.executeQuery();
  100.             boolean containsPlayer = resultset.next();
  101.            
  102.             // Sluit alles weer.
  103.             sql.close();
  104.             resultset.close();
  105.            
  106.             return containsPlayer;
  107.  
  108.            
  109.         }
  110.         catch (Exception e)
  111.         {
  112.             e.printStackTrace();
  113.             return false;
  114.         }
  115.        
  116.     }
  117.    
  118.     @EventHandler
  119.     public void onBreak (BlockBreakEvent e)
  120.     {
  121.         Player braker = e.getPlayer();
  122.        
  123.         openConnection();
  124.         try
  125.         {
  126.             int brokenBlocks = 0;
  127.             if(playerDataContainsPlayer(braker))
  128.             {
  129.                 PreparedStatement sql = (PreparedStatement) connection.prepareStatement("SELECT blocks_broken FROM `player_data` WHERE player_name=?;");
  130.                 sql.setString(1, braker.getName());
  131.                
  132.                 ResultSet result = sql.executeQuery();
  133.                 result.next();
  134.                
  135.                 brokenBlocks = result.getInt("blocks_broken");
  136.                
  137.                 PreparedStatement sqlUpdate = (PreparedStatement) connection.prepareCall("UPDATE `player_data` SET blocks_broken=? WHERE player_name=?;");
  138.                 sqlUpdate.setInt(1, brokenBlocks +1);
  139.                 sqlUpdate.setString(2, braker.getName());
  140.                
  141.                 sqlUpdate.executeUpdate();
  142.                 sqlUpdate.close();
  143.                 sql.close();
  144.             }
  145.         }
  146.         catch (Exception ex3)
  147.         {
  148.             ex3.printStackTrace();
  149.         }
  150.         finally
  151.         {
  152.             closeConnection();
  153.         }
  154.     }
  155.    
  156.     @EventHandler
  157.     public void onPlace (BlockPlaceEvent e)
  158.     {
  159.         Player placer = e.getPlayer();
  160.        
  161.         openConnection();
  162.         try
  163.         {
  164.             int placedBlocks = 0;
  165.             if(playerDataContainsPlayer(placer))
  166.             {
  167.                 // Maak een query
  168.                 PreparedStatement sql = (PreparedStatement) connection.prepareStatement("SELECT blocks_placed FROM `player_data` WHERE player_name=?;");
  169.                 // Verplaats het "?" met de persoon die de blokken plaatst.
  170.                 sql.setString(1, placer.getName());
  171.                
  172.                 //Result
  173.                 ResultSet result = sql.executeQuery();
  174.                 result.next();
  175.                
  176.                 // Vraag de geplaatste blokken op in de "blocks_placed" kolom van de database.
  177.                 placedBlocks = result.getInt("blocks_placed");
  178.                
  179.                 // Update de Blocks placed counter.
  180.                 PreparedStatement sqlUpdate = (PreparedStatement) connection.prepareStatement("UPDATE `player_data` SET blocks_placed=? WHERE player_name=?;");
  181.                
  182.                 // Nadat hij een block geplaatst heeft +1.
  183.                 sqlUpdate.setInt(1, placedBlocks +1);
  184.                 // Verplaats het "?" met zijn naam.
  185.                 sqlUpdate.setString(2, placer.getName());
  186.                
  187.                 //Voer de query uit.
  188.                 sqlUpdate.executeUpdate();
  189.                 sqlUpdate.close();
  190.                 sql.close();
  191.             }
  192.         }
  193.         catch (Exception e2)
  194.         {
  195.             e2.printStackTrace();
  196.         }
  197.         finally
  198.         {
  199.             closeConnection();
  200.         }
  201.     }
  202.    
  203.     @EventHandler
  204.     public void onPlayerDeath (PlayerDeathEvent e)
  205.     {
  206.         Player victim = e.getEntity();
  207.         Player killer = e.getEntity().getKiller();
  208.        
  209.         if(!(killer instanceof Player))
  210.         {
  211.             openConnection();
  212.             try
  213.             {
  214.                 int previousDeaths = 0;
  215.                
  216.                 PreparedStatement sql = (PreparedStatement) connection.prepareStatement("SELECT player_deaths FROM `player_data` WHERE player_name=?;");
  217.                 sql.setString(1, victim.getName());
  218.                
  219.                 ResultSet result = sql.executeQuery();
  220.                
  221.                 result.next();
  222.                 previousDeaths = result.getInt("player_deaths");
  223.                
  224.                 PreparedStatement sqlUpdate = (PreparedStatement) connection.prepareCall("UPDATE `player_data` SET player_deaths=? WHERE player_name=?;");
  225.                 sqlUpdate.setInt(1, previousDeaths + 1);
  226.                 sqlUpdate.setString(2, victim.getName());
  227.                
  228.                 sqlUpdate.executeUpdate();
  229.                 sqlUpdate.close();
  230.                 sql.close();
  231.                 result.close();
  232.             }
  233.            
  234.             catch (Exception ex5)
  235.             {
  236.                 ex5.printStackTrace();
  237.                 victim.sendMessage("Hello");
  238.             }
  239.            
  240.             finally
  241.             {
  242.                 closeConnection();
  243.  
  244.             }
  245.             return;
  246.         }
  247.        
  248.         openConnection();
  249.         try
  250.         {
  251.             int previousDeaths = 0;
  252.             int previousKills = 0;
  253.            
  254.             PreparedStatement sqlDeaths = (PreparedStatement) connection.prepareStatement("SELECT player_deaths FROM `player_data` WHERE player_name =?;");
  255.             sqlDeaths.setString(1, victim.getName());
  256.            
  257.             PreparedStatement sqlKills = (PreparedStatement) connection.prepareStatement("SELECT player_kills FROM `player_data` WHERE player_name=?;");
  258.             sqlKills.setString(1, killer.getName());
  259.            
  260.             ResultSet resultDeaths = sqlDeaths.executeQuery();
  261.             ResultSet resultKills = sqlKills.executeQuery();
  262.             resultDeaths.next();
  263.             resultKills.next();
  264.            
  265.             previousDeaths = resultDeaths.getInt("player_deaths");
  266.             previousKills = resultKills.getInt("player_kills");
  267.            
  268.             PreparedStatement sqlDeathsUpdate = (PreparedStatement) connection.prepareStatement("UPDATE `player_data` SET player_deaths=? WHERE player_name=?;");
  269.            
  270.             sqlDeathsUpdate.setInt(1, previousDeaths +1);
  271.             sqlDeathsUpdate.setString(2, victim.getName());
  272.            
  273.             PreparedStatement sqlKillsUpdate = (PreparedStatement) connection.prepareStatement("UPDATE `player_data` SET player_kills=? WHERE player_name=?;");
  274.            
  275.             sqlKillsUpdate.setInt(1, previousKills +1);
  276.             sqlKillsUpdate.setString(2, killer.getName());
  277.            
  278.             sqlDeathsUpdate.executeUpdate();
  279.             sqlKillsUpdate.executeUpdate();
  280.             sqlDeathsUpdate.close();
  281.             sqlKillsUpdate.close();
  282.             sqlDeaths.close();
  283.             sqlKills.close();
  284.             resultKills.close();
  285.             resultDeaths.close();
  286.            
  287.         }
  288.        
  289.         catch(Exception ex4)
  290.         {
  291.             ex4.printStackTrace();
  292.         }
  293.        
  294.         finally
  295.         {
  296.             closeConnection();
  297.         }
  298.     }
  299.    
  300.     @EventHandler
  301.     public void onHit (EntityDamageByEntityEvent e)
  302.     {
  303.         Player killer = (Player) e.getDamager();
  304.         if(e.getEntity() instanceof Player) return;
  305.         if(e.getDamager() instanceof Player && e.getEntity() instanceof Creature)
  306.         {
  307.             // De speler doet nu 50 healt af per hit.
  308.             e.setDamage(50);
  309.            
  310.             openConnection();
  311.             try
  312.             {
  313.                 int previousKills = 0;
  314.                 if(playerDataContainsPlayer(killer))
  315.                 {
  316.                     // Maak de query.
  317.                     PreparedStatement sql = (PreparedStatement) connection.prepareStatement("SELECT player_mob_kills FROM `player_data` WHERE player_name=?;");
  318.                     // Verplaats het "?" met de killer zijn naam.
  319.                     sql.setString(1, killer.getName());
  320.                    
  321.                     // Result
  322.                     ResultSet result = sql.executeQuery();
  323.                     result.next();
  324.                    
  325.                     // De kills opvragen in de player_mob_kills kolom van de database.
  326.                     previousKills = result.getInt("player_mob_kills");
  327.                    
  328.                     // Update de kill counter.
  329.                     PreparedStatement killUpdate = (PreparedStatement) connection.prepareStatement("UPDATE `player_data` SET player_mob_kills=? WHERE player_name=?;");
  330.                     // Na dat hij een kill gemaakt heeft gaat de counter +1.
  331.                     killUpdate.setInt(1, previousKills + 1);
  332.                     // Verplaats het "?" met de killer zijn naam.
  333.                     killUpdate.setString(2, killer.getName());
  334.                    
  335.                     // Voer de query uit.
  336.                     killUpdate.executeUpdate();
  337.                     killUpdate.close();
  338.                     sql.close();
  339.                     result.close();
  340.                 }
  341.             }
  342.            
  343.             catch (SQLException e1)
  344.             {
  345.                
  346.                
  347.             }
  348.             finally
  349.             {
  350.                 closeConnection();
  351.             }
  352.         }
  353.        
  354.     }
  355.    
  356.     @EventHandler
  357.     public void onLogin (PlayerLoginEvent e)
  358.     {
  359.         openConnection();
  360.         // Check of de speler al in de database staat.
  361.         if(!(playerDataContainsPlayer(e.getPlayer())))
  362.         {
  363.             try
  364.             {
  365.                 // Als hij er niet in staat word hij in de database gezet, met als counter 0.
  366.                 PreparedStatement sql = (PreparedStatement) connection.prepareStatement("INSERT INTO `player_data` VALUES (?,0,0,0,0,0);");
  367.                 // Verplaats het "?" met de zijn naam.
  368.                 sql.setString(1, e.getPlayer().getName());
  369.                
  370.                 // Voer de query uit.
  371.                 sql.execute();
  372.                 sql.close();
  373.             }
  374.            
  375.             catch (SQLException e1)
  376.             {
  377.                 e1.printStackTrace();
  378.             }
  379.             finally
  380.             {
  381.                 closeConnection();
  382.                
  383.             }
  384.         }
  385.     }
  386.        
  387.     public boolean onCommand(CommandSender sender,Command cmd, String commandLabel, String[] args)
  388.     {
  389.         // De console kan het commande niet doen.
  390.         if(!(sender instanceof Player))
  391.         {
  392.  
  393.             sender.sendMessage(label + "Je kan deze command alleen maar ingame gebruiken!");
  394.             return true;
  395.         }
  396.        
  397.         Player player = (Player) sender;
  398.        
  399.         if(cmd.getName().equalsIgnoreCase("info"))
  400.         {
  401.             if(args.length == 0)
  402.             {
  403.             player.sendMessage(label + "Gebruik: /info [Player]");
  404.             player.playSound(player.getLocation(), Sound.ITEM_BREAK, 1f, 1f);
  405.             return true;
  406.             }  
  407.            
  408.             openConnection();
  409.            
  410.                 try
  411.                 {
  412.                     // Vraag de kolom naam "player_name" op uit de tabel "player_data" dit zorgt ervoor dat ik alde namen kijg die erin zitten.
  413.                     PreparedStatement sql = (PreparedStatement) connection.prepareStatement("SELECT * FROM `player_data` WHERE player_name=?;");
  414.                     // Verplaays het "?" met het eerste argument dat ik in de chat heb ingegeven.
  415.                     sql.setString(1, args[0]);
  416.                    
  417.                     // Result.
  418.                     ResultSet result = sql.executeQuery();
  419.                        
  420.                     result.next();
  421.                    
  422.                     // Om het makkelijker te maken.
  423.                     // Ik vraag het eerste vakje op van de tabel.
  424.                     String name = result.getObject(1).toString();
  425.                     // Ik vraag het tweede vakje op van de tabel.
  426.                     String killsMobs = result.getObject(2).toString();
  427.                     // Ik vraag het derde vakje op van de tabel.
  428.                     String deaths = result.getObject(3).toString();
  429.                     String killsPlayers = result.getObject(4).toString();
  430.                     String blocksPlaced = result.getObject(5).toString();
  431.                     String blocksBroken = result.getObject(6).toString();
  432.                    
  433.                     // Inventory
  434.                     // kills
  435.                     // Mobs
  436.                     ItemStack Kills = new ItemStack(Material.BONE);
  437.                     ItemMeta metaKills = Kills.getItemMeta();
  438.                     metaKills.setDisplayName("§fKills");
  439.                     List<String> metaKillsLore = new ArrayList<String>();
  440.                     metaKillsLore.add("§cMob Kills: §f" + killsMobs);
  441.                     metaKillsLore.add("§cPlayer Kills: §f" + killsPlayers);
  442.                     metaKillsLore.add("§cDeaths: §f" + deaths);
  443.                     metaKills.setLore(metaKillsLore);
  444.                     Kills.setItemMeta(metaKills);
  445.                    
  446.                    
  447.                     //Head
  448.                     ItemStack Head = new ItemStack(Material.SKULL_ITEM,1 , (short) SkullType.PLAYER.ordinal());
  449.                     SkullMeta metaHead = (SkullMeta) Head.getItemMeta();
  450.                     metaHead.setOwner(name);
  451.                     metaHead.setDisplayName("§fDit is§c " + name + "§f zijn info.");
  452.                     Head.setItemMeta(metaHead);
  453.                    
  454.                    
  455.                     // Blocks
  456.                     // Broken || Placed
  457.                     ItemStack Blocks = new ItemStack(Material.BRICK);
  458.                     ItemMeta metaBlocks = Blocks.getItemMeta();
  459.                     metaBlocks.setDisplayName("§fBlocks");
  460.                     List<String> metaBlocksLore = new ArrayList<String>();
  461.                     metaBlocksLore.add("§cBlokken geplaatst: §f" + blocksPlaced);
  462.                     metaBlocksLore.add("§cBlokken gebroken: §f" + blocksBroken);
  463.                     metaBlocks.setLore(metaBlocksLore);
  464.                     Blocks.setItemMeta(metaBlocks);
  465.  
  466.            
  467.                     // Maak de inventory
  468.                     inv = Bukkit.createInventory(null, 9, "§c§lInfo Menu");
  469.                     // Het heal item.
  470.                     inv.setItem(4, Kills);
  471.                     inv.setItem(0, Head);
  472.                     inv.setItem(5, Blocks);
  473.                     // Open de inventory.
  474.                     player.openInventory(inv);
  475.                     player.playSound(player.getLocation(), Sound.ITEM_PICKUP, 1f, 1f);
  476.  
  477.                 }          
  478.                 catch (Exception e)
  479.                 {
  480.                     // Dit word getriggered als de speler waar ik info over wouw niet in de database staat.
  481.                     player.sendMessage(label + "Sorry, deze speler kan ik niet vinden.");
  482.                     player.playSound(player.getLocation(), Sound.ITEM_BREAK, 1f, 1f);
  483.                 }
  484.                 finally
  485.                 {
  486.                     closeConnection();
  487.                 }
  488.             }
  489.         return true;
  490.     }
  491.    
  492.     // Inventory Security
  493.     @EventHandler
  494.     public void onInventoryClick (InventoryClickEvent e)
  495.     {
  496.         // Zorgt ervoor dat de lege vakje geen error geven.
  497.         if(!e.getInventory().getName().equalsIgnoreCase("§c§lInfo Menu")) return;
  498.         // Zorgt ervoor dat we geen error krijgen als we uit de inventory klikken.
  499.         if(e.getCurrentItem() == null || e.getCurrentItem().getType() == Material.AIR || !e.getCurrentItem().hasItemMeta()) return;
  500.         if(e.getCurrentItem().getItemMeta().getDisplayName().contains("§fKills"))
  501.         {
  502.             // Zorgt ervoor de je geen items uit de Info tool kan nemen.
  503.             e.setCancelled(true);
  504.             return;
  505.         }
  506.        
  507.         if(e.getCurrentItem().getItemMeta().getDisplayName().contains("§fBlocks"))
  508.         {
  509.             // Zorgt ervoor de je geen items uit de Info tool kan nemen.
  510.             e.setCancelled(true);
  511.             return;
  512.         }
  513.        
  514.         if(e.getCurrentItem().getItemMeta().getDisplayName().contains("§fDit is§c " + e.getWhoClicked().getName() + "§f zijn info."))
  515.         {
  516.             e.setCancelled(true);
  517.             return;
  518.         }
  519.        
  520.     }
  521. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement