Advertisement
xeRicker

Untitled

Aug 8th, 2024
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.99 KB | None | 0 0
  1. private Map<Player, Double> playerWetness = new HashMap<>();
  2. private Map<Player, Double> playerSanity = new HashMap<>();
  3.  
  4. @Override
  5. public void onEnable() {
  6. getServer().getPluginManager().registerEvents(this, this);
  7. startStatusUpdater();
  8. }
  9.  
  10. @EventHandler
  11. public void onPlayerJoin(PlayerJoinEvent event) {
  12. Player player = event.getPlayer();
  13. playerWetness.put(player, 0.0);
  14. playerSanity.put(player, 100.0);
  15. }
  16.  
  17. @EventHandler
  18. public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
  19. if (event.getDamager() instanceof Player) {
  20. Player player = (Player) event.getDamager();
  21. if (playerWetness.getOrDefault(player, 0.0) > 50) {
  22. dropRandomItem(player);
  23. }
  24. }
  25. }
  26.  
  27. private void updatePlayerStatus(Player player) {
  28. Location loc = player.getLocation();
  29. World world = player.getWorld();
  30.  
  31. // Update wetness
  32. if (world.hasStorm() && player.getLocation().getBlock().getHighestBlock().getType() == Material.AIR) {
  33. increaseWetness(player, 3.33); // 100 / 30 seconds
  34. } else if (player.isInWater()) {
  35. increaseWetness(player, 10.0); // 100 / 10 seconds
  36. } else {
  37. decreaseWetness(player, 5.0); // 100 / 20 seconds
  38. }
  39.  
  40. // Update sanity
  41. if (loc.getBlock().getLightLevel() < 3) {
  42. decreaseSanity(player, 20.0); // 100 / 5 seconds
  43. } else {
  44. increaseSanity(player, 10.0); // Arbitrary value, adjust as needed
  45. }
  46.  
  47. updateActionBar(player);
  48. }
  49.  
  50. private void increaseWetness(Player player, double amount) {
  51. playerWetness.put(player, Math.min(100, playerWetness.getOrDefault(player, 0.0) + amount));
  52. }
  53.  
  54. private void decreaseWetness(Player player, double amount) {
  55. playerWetness.put(player, Math.max(0, playerWetness.getOrDefault(player, 0.0) - amount));
  56. }
  57.  
  58. private void decreaseSanity(Player player, double amount) {
  59. playerSanity.put(player, Math.max(0, playerSanity.getOrDefault(player, 100.0) - amount));
  60. }
  61.  
  62. private void increaseSanity(Player player, double amount) {
  63. playerSanity.put(player, Math.min(100, playerSanity.getOrDefault(player, 100.0) + amount));
  64. }
  65.  
  66. private void updateActionBar(Player player) {
  67. double wetness = playerWetness.getOrDefault(player, 0.0);
  68. double sanity = playerSanity.getOrDefault(player, 100.0);
  69.  
  70. String message = String.format(
  71. ChatColor.BLUE + "Przemoczenie: %.1f%% " + ChatColor.GREEN + "Psychika: %.1f%%",
  72. wetness, sanity
  73. );
  74.  
  75. player.sendActionBar(message);
  76.  
  77. if (wetness > 90 || sanity < 10) {
  78. player.playSound(player.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1.0f, 1.0f);
  79. player.spawnParticle(org.bukkit.Particle.WATER_SPLASH, player.getLocation().add(0, 1, 0), 10);
  80. }
  81. }
  82.  
  83. private void dropRandomItem(Player player) {
  84. ItemStack[] inventory = player.getInventory().getContents();
  85. Random random = new Random();
  86. ItemStack itemToDrop = null;
  87.  
  88. while (itemToDrop == null && inventory.length > 0) {
  89. int slot = random.nextInt(inventory.length);
  90. itemToDrop = inventory[slot];
  91. }
  92.  
  93. if (itemToDrop != null) {
  94. player.getInventory().remove(itemToDrop);
  95. player.getWorld().dropItemNaturally(player.getLocation(), itemToDrop);
  96. player.sendMessage(ChatColor.RED + "Upuściłeś przedmiot z powodu przemoczenia!");
  97. }
  98. }
  99.  
  100. private void startStatusUpdater() {
  101. new BukkitRunnable() {
  102. @Override
  103. public void run() {
  104. for (Player player : Bukkit.getOnlinePlayers()) {
  105. updatePlayerStatus(player);
  106. }
  107. }
  108. }.runTaskTimer(this, 0L, 20L); // Run every second (20 ticks)
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement