Private Drop

Discussion in 'Archived: Plugin Requests' started by HardKillz11, Mar 25, 2014.

  1. Offline

    HardKillz11

    Plugin category: Anti-grief, Role-Playing

    Suggested name: Private Drop

    What I want: I need a plugin that the player who can kill the monster only they can pickup an item that drop by the monster.

    Example Situation : Player A hit zombie but zombie didn't die Then Player B hit zombie and zombie died so only Player B can picup Item that drop by that zombie.

    Ideas for commands: /prd [on : off] (toggle Private Drop on or off)

    Ideas for permissions: PrivateDrop.bypass (they can pickup item that other player kill monster)

    When I'd like it by: As Soon As Possible

    Version: Minecraft Bukkit 1.6.4
     
  2. Offline

    Aucun

    Interesting idea, however, I'm not sure if you can set dropped items to private like that. I know you can get the items dropped by the entity and then just place them into the players inventory. This is at first glance, I'll look deeper into the dropped items.
     
  3. Offline

    timtower Administrator Administrator Moderator

    Meta data on the item, then look to the pickupevent and cancel it when it isn't the right player
     
  4. Offline

    Aucun


    That would work, I've yet to use metadata so I'll have to look up how it works. This plugin could take a lot of memory on a large server, every time a player kills a hostile entity it needs to store the dropped items until either picked up or de-spawned.

    I know plugins like LagClear have a habit of keeping items spawned if the player leaves the area or teleports away. I might need to drop items from being player specific after a set amount of time to avoid memory problems :/
     
  5. Offline

    HardKillz11

    Is this plugin possible?
     
  6. Offline

    Maurdekye

    HardKillz11 Any plugin is possible, as long as it doesn't modify the client. Including this, which is fairly easy to do, actually.
     
  7. Offline

    Nnnnneeeedddd

    Hi, This plugin was fairly easy to make so i made it
    this is the link: <Edit by Moderator: Redacted mediafire url>

    This is the code:

    Code:java
    1. package biz.boulter.privateDrop;
    2.  
    3. import java.util.ArrayList;
    4. import org.bukkit.entity.Item;
    5. import org.bukkit.entity.Player;
    6. import org.bukkit.event.EventHandler;
    7. import org.bukkit.event.Listener;
    8. import org.bukkit.event.entity.EntityDamageByEntityEvent;
    9. import org.bukkit.event.entity.EntityDeathEvent;
    10. import org.bukkit.event.player.PlayerPickupItemEvent;
    11. import org.bukkit.inventory.ItemStack;
    12. import org.bukkit.inventory.meta.ItemMeta;
    13. import org.bukkit.plugin.java.JavaPlugin;
    14.  
    15. public class PrivateDrop extends JavaPlugin implements Listener{
    16. @Override
    17. public void onEnable(){
    18. System.out.println(
    19. "[PrivateDrop] Created By: "+getDescription().getAuthors()
    20. );
    21.  
    22. getServer().getPluginManager().registerEvents(this, this);
    23. }
    24.  
    25. @EventHandler
    26. public void onEntityDeath(EntityDeathEvent e){
    27. for(ItemStack item: e.getDrops()){
    28. if(e.getEntity().getLastDamageCause() instanceof EntityDamageByEntityEvent){
    29. EntityDamageByEntityEvent edbee = (EntityDamageByEntityEvent) e.getEntity().getLastDamageCause();
    30.  
    31. if(edbee.getDamager() instanceof Player){
    32. Player killer = (Player) edbee.getDamager();
    33. ItemMeta im = item.getItemMeta();
    34. ArrayList loreLst = new ArrayList();
    35. loreLst.add(killer.getName());
    36. im.setLore(loreLst);
    37. item.setItemMeta(im);
    38. }
    39. }
    40. }
    41. }
    42.  
    43. @EventHandler
    44. public void onPickup(PlayerPickupItemEvent e){
    45. Item i = e.getItem();
    46. ItemMeta im = i.getItemStack().getItemMeta();
    47.  
    48. if(im.getLore() != null){
    49. if(im.getLore().contains(e.getPlayer().getName())){
    50. im.setLore(null);
    51. i.getItemStack().setItemMeta(im);
    52. }else{
    53. e.setCancelled(true);
    54. }
    55. }
    56. }
    57. }
     
    Last edited by a moderator: Nov 3, 2016
    HardKillz11 likes this.
  8. Offline

    timtower Administrator Administrator Moderator

    Nnnnneeeedddd You could replace this: System.out.println("[PrivateDrop] Created By: "+getDescription().getAuthors());
    with this:
    this.getLogger().info("Created By: "+getDescription().getAuthors());
     
  9. Offline

    Nnnnneeeedddd

    it doesn't make any difference
    if i'm wrong please explain because im kinda new to this
     
  10. Offline

    Sam991

    i know there is a plugin like this with players, when a player kills another player, only the player who killed him/her can loot the body. I seen it on a server.. probably custom
     
  11. Offline

    timtower Administrator Administrator Moderator

    It doesn't, but this.getLogger() is made for that, System.out.println is common for small java applications, not for bukkit plugins
     
  12. Offline

    KweiL

  13. Offline

    HardKillz11

    [quote uid=90708464 name="Nnnnneeeedddd" post=2381993]Hi, This plugin was fairly easy to make so i made it
    this is the link: <Edit by Moderator: Redacted mediafire url>

    This is the code:

    Code:java
    1. package biz.boulter.privateDrop;
    2.  
    3. import java.util.ArrayList;
    4. import org.bukkit.entity.Item;
    5. import org.bukkit.entity.Player;
    6. import org.bukkit.event.EventHandler;
    7. import org.bukkit.event.Listener;
    8. import org.bukkit.event.entity.EntityDamageByEntityEvent;
    9. import org.bukkit.event.entity.EntityDeathEvent;
    10. import org.bukkit.event.player.PlayerPickupItemEvent;
    11. import org.bukkit.inventory.ItemStack;
    12. import org.bukkit.inventory.meta.ItemMeta;
    13. import org.bukkit.plugin.java.JavaPlugin;
    14.  
    15. public class PrivateDrop extends JavaPlugin implements Listener{
    16. @Override
    17. public void onEnable(){
    18. System.out.println(
    19. "[PrivateDrop] Created By: "+getDescription().getAuthors()
    20. );
    21.  
    22. getServer().getPluginManager().registerEvents(this, this);
    23. }
    24.  
    25. @EventHandler
    26. public void onEntityDeath(EntityDeathEvent e){
    27. for(ItemStack item: e.getDrops()){
    28. if(e.getEntity().getLastDamageCause() instanceof EntityDamageByEntityEvent){
    29. EntityDamageByEntityEvent edbee = (EntityDamageByEntityEvent) e.getEntity().getLastDamageCause();
    30.  
    31. if(edbee.getDamager() instanceof Player){
    32. Player killer = (Player) edbee.getDamager();
    33. ItemMeta im = item.getItemMeta();
    34. ArrayList loreLst = new ArrayList();
    35. loreLst.add(killer.getName());
    36. im.setLore(loreLst);
    37. item.setItemMeta(im);
    38. }
    39. }
    40. }
    41. }
    42.  
    43. @EventHandler
    44. public void onPickup(PlayerPickupItemEvent e){
    45. Item i = e.getItem();
    46. ItemMeta im = i.getItemStack().getItemMeta();
    47.  
    48. if(im.getLore() != null){
    49. if(im.getLore().contains(e.getPlayer().getName())){
    50. im.setLore(null);
    51. i.getItemStack().setItemMeta(im);
    52. }else{
    53. e.setCancelled(true);
    54. }
    55. }
    56. }
    57. }
    [/quote]


    Thank you very much for your time to do this plugin :)
     
    Last edited by a moderator: Nov 3, 2016

Share This Page