diff --git a/src/main/java/me/metallicgoat/tweaksaddon/MBedwarsTweaksAddon.java b/src/main/java/me/metallicgoat/tweaksaddon/MBedwarsTweaksAddon.java index 1d18f2c..3d71f56 100644 --- a/src/main/java/me/metallicgoat/tweaksaddon/MBedwarsTweaksAddon.java +++ b/src/main/java/me/metallicgoat/tweaksaddon/MBedwarsTweaksAddon.java @@ -83,6 +83,7 @@ public void registerEvents() { manager.registerEvents(new PlaceBlocksOnBed(), plugin); manager.registerEvents(new PlayerLimitBypass(), plugin); manager.registerEvents(new RemoveInvisOnDamage(), plugin); + manager.registerEvents(new SpecialItemCooldown(), plugin); // Spawners manager.registerEvents(new AFKSpawners(), plugin); diff --git a/src/main/java/me/metallicgoat/tweaksaddon/config/MainConfig.java b/src/main/java/me/metallicgoat/tweaksaddon/config/MainConfig.java index 4da3a3b..d6538d4 100644 --- a/src/main/java/me/metallicgoat/tweaksaddon/config/MainConfig.java +++ b/src/main/java/me/metallicgoat/tweaksaddon/config/MainConfig.java @@ -350,6 +350,13 @@ public class MainConfig { ) public static boolean allow_block_place_on_bed = false; + @Config( + description = { + "Adds a use cooldown to special items (in seconds)" + } + ) + public static double special_items_cooldown = 0; + @Config( description = { "If enabled you still join a server even if the Player Limit is reached" diff --git a/src/main/java/me/metallicgoat/tweaksaddon/tweaks/misc/SpecialItemCooldown.java b/src/main/java/me/metallicgoat/tweaksaddon/tweaks/misc/SpecialItemCooldown.java new file mode 100644 index 0000000..4d9c996 --- /dev/null +++ b/src/main/java/me/metallicgoat/tweaksaddon/tweaks/misc/SpecialItemCooldown.java @@ -0,0 +1,38 @@ +package me.metallicgoat.tweaksaddon.tweaks.misc; + +import de.marcely.bedwars.api.event.player.PlayerUseSpecialItemEvent; +import me.metallicgoat.tweaksaddon.MBedwarsTweaksPlugin; +import me.metallicgoat.tweaksaddon.config.MainConfig; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +import java.util.IdentityHashMap; +import java.util.Map; + +public class SpecialItemCooldown implements Listener { + + private final Map cooldownPlayers = new IdentityHashMap<>(); + + @EventHandler (priority = EventPriority.LOW) + public void onSpecialItemUse(PlayerUseSpecialItemEvent event) { + if (MainConfig.special_items_cooldown == 0) + return; + + final String cooldownItemId = cooldownPlayers.get(event.getPlayer()); + final String itemId = event.getSpecialItem().getId(); + + if (cooldownItemId != null && event.getSpecialItem().getId().equals(cooldownItemId)) { + event.setCancelled(true); + return; + } + + cooldownPlayers.put(event.getPlayer(), itemId); + + Bukkit.getScheduler().runTaskLater(MBedwarsTweaksPlugin.getInstance(), () -> { + cooldownPlayers.remove(event.getPlayer()); + }, (long) (20D * MainConfig.special_items_cooldown)); + } +}