Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Suchti;
- import org.bukkit.ChatColor;
- import org.bukkit.entity.Player;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.entity.EntityDamageByEntityEvent;
- import org.bukkit.event.entity.EntityPickupItemEvent;
- import org.bukkit.event.entity.PlayerDeathEvent;
- import org.bukkit.plugin.java.JavaPlugin;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.UUID;
- //<- Sind Tipps an mich selber :D
- public class SuchtisAntiTrap extends JavaPlugin implements Listener {
- // Map für den Cooldown
- private final Map<UUID, Long> cooldowns = new HashMap<>();
- // Map für das Chat gespamme (könnte während des events auf den Keks gehen xD)
- private final Map<UUID, Long> chat_cooldown = new HashMap<>();
- @Override
- public void onEnable() {
- // Config
- saveDefaultConfig();
- // Listener
- getServer().getPluginManager().registerEvents(this, this);
- }
- @EventHandler
- public void on(final PlayerDeathEvent e) {
- // Gibt den Cooldown wenn der Spieler Tod is
- if(e.getEntity().hasPermission("activate.antitrap"))
- cooldowns.put(e.getEntity().getUniqueId(), System.currentTimeMillis());
- }
- @EventHandler
- public void on(final EntityPickupItemEvent e) {
- if(!(e.getEntity() instanceof Player)) return;
- // Checkt "Kann nichts aufheben während des Cooldowns"
- if(!getConfig().getBoolean("cant-pickup-on-cooldown")) return;
- // gibt den Cooldown
- Long time = cooldowns.get(e.getEntity().getUniqueId());
- if(time == null) return;
- // Liest die Sekunden aus config.yml
- int seconds = getConfig().getInt("cooldown");
- if(seconds == 0) return;
- // Checkt den Cooldown
- float diff = time + (seconds * 1000) - System.currentTimeMillis();
- if(diff > 0) {
- // Cooldown! Schaltet aufheben aus
- e.setCancelled(true);
- // wenn es länger braucht als <X sekunden, lassen wir den Code weiter nachrichten senden
- int cooldown_minimal = getConfig().getInt("message-spam");
- if(cooldown_minimal < diff / 1000) return;
- // Handling message (um Spam zu vermeiden)
- // Holt sich den Cooldown für die letzte Nachricht
- Long cd = chat_cooldown.get(e.getEntity().getUniqueId());
- if(cd != null) {
- // Schaut ob cooldown abgelaufen is
- if(cd + 1000 > System.currentTimeMillis()) return;
- // Entfernt Chat cooldowns
- chat_cooldown.remove(e.getEntity().getUniqueId());
- }
- // Lädt die zu spammende Nachricht
- String message = getConfig().getString("message");
- if(message == null) return;
- message = message.replace("{seconds}", String.valueOf(Math.round(diff / 1000)));
- // Sendet die Spam nachricht
- e.getEntity().sendMessage(ChatColor.translateAlternateColorCodes('&', message));
- chat_cooldown.put(e.getEntity().getUniqueId(), System.currentTimeMillis());
- return;
- }
- // Entfernt den Cooldown
- cooldowns.remove(e.getEntity().getUniqueId());
- }
- @EventHandler
- public void on(final EntityDamageByEntityEvent e) {
- if (!(e.getDamager() instanceof Player && e.getEntity() instanceof Player)) return;
- // Holt sich die Sekunden angabe aus Config.yml
- int seconds = getConfig().getInt("cooldown");
- if(seconds == 0) return;
- float diff = 0;
- boolean sendMessage = false;
- // Prüft "Config Angreifen auf an oder aus?"
- if(!getConfig().getBoolean("attack-on-cooldown")) {
- Long attacker = cooldowns.get(e.getDamager().getUniqueId());
- if (attacker != null) {
- diff = attacker + (seconds * 1000) - System.currentTimeMillis();
- if(diff > 0){
- sendMessage = true;
- e.setCancelled(true);
- }
- else cooldowns.remove(e.getDamager().getUniqueId());
- }
- }
- // Prüft "Config angegriffen werden an oder aus?"
- if(!getConfig().getBoolean("attacked-on-cooldown")){
- Long victim = cooldowns.get(e.getEntity().getUniqueId());
- if (victim != null) {
- diff = victim + (seconds * 1000) - System.currentTimeMillis();
- if(diff > 0) e.setCancelled(true);
- else cooldowns.remove(e.getEntity().getUniqueId());
- }
- }
- // Wenn es abbricht wird ne nachricht gesendet
- if(e.isCancelled() && sendMessage){
- // wenn es länger braucht als <X sekunden, lassen wir den Code weiter nachrichten senden
- int cooldown_minimal = getConfig().getInt("message-spam");
- if(cooldown_minimal < diff / 1000) return;
- // Nachricht laden
- String message = getConfig().getString("message");
- if(message == null) return;
- message = message.replace("{seconds}", String.valueOf(Math.round(diff / 1000)));
- // Nachricht senden
- e.getDamager().sendMessage(ChatColor.translateAlternateColorCodes('&', message));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement