88 lines
3.3 KiB
Java
88 lines
3.3 KiB
Java
package ca.thetechrobo.fbl;
|
|
|
|
import java.time.Instant;
|
|
import java.util.UUID;
|
|
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.NamespacedKey;
|
|
import org.bukkit.OfflinePlayer;
|
|
import org.bukkit.entity.Entity;
|
|
import org.bukkit.entity.EntityType;
|
|
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.player.PlayerQuitEvent;
|
|
import org.bukkit.persistence.PersistentDataContainer;
|
|
import org.bukkit.persistence.PersistentDataType;
|
|
import org.bukkit.plugin.java.JavaPlugin;
|
|
import net.kyori.adventure.text.Component;
|
|
|
|
public class PlayerTookDamage implements Listener {
|
|
private JavaPlugin pl;
|
|
public PlayerTookDamage(JavaPlugin pl) {
|
|
this.pl = pl;
|
|
}
|
|
private long load_internal_long(Player p, NamespacedKey key, long def) {
|
|
PersistentDataContainer c = p.getPersistentDataContainer();
|
|
if (c.has(key, PersistentDataType.LONG)) {
|
|
long i = c.get(key, PersistentDataType.LONG);
|
|
return i;
|
|
}
|
|
return def;
|
|
}
|
|
private String load_internal_str(Player p, NamespacedKey key) {
|
|
PersistentDataContainer c = p.getPersistentDataContainer();
|
|
if (c.has(key, PersistentDataType.STRING)) {
|
|
String i = c.get(key, PersistentDataType.STRING);
|
|
return i;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@EventHandler
|
|
public void playerTookDamage(EntityDamageByEntityEvent e) {
|
|
if (!(e.getEntity().getType() == EntityType.PLAYER)) return;
|
|
Entity damager = e.getDamager();
|
|
if (!(damager.getType() == EntityType.PLAYER)) return;
|
|
Player p2 = (Player) damager;
|
|
Player p = (Player) e.getEntity();
|
|
long unixTimestamp = Instant.now().getEpochSecond();
|
|
NamespacedKey key = new NamespacedKey(this.pl, "AntiBL_LastHit");
|
|
NamespacedKey key2 = new NamespacedKey(this.pl, "AntiBL_HitOn");
|
|
p.getPersistentDataContainer().set(key, PersistentDataType.LONG, unixTimestamp);
|
|
p2.getPersistentDataContainer().set(key, PersistentDataType.LONG, unixTimestamp);
|
|
p.getPersistentDataContainer().set(key2, PersistentDataType.STRING, p2.getUniqueId().toString());
|
|
p2.getPersistentDataContainer().set(key2, PersistentDataType.STRING, p.getUniqueId().toString());
|
|
new CountdownTimer(11, p).runTaskTimer(this.pl, 0, 20);
|
|
new CountdownTimer(11, p2).runTaskTimer(this.pl, 0, 20);
|
|
new NoMoreSayingYouBattleLogged(p, this.pl).runTaskLater(pl, 11*20);
|
|
new NoMoreSayingYouBattleLogged(p2, this.pl).runTaskLater(pl, 11*20);
|
|
}
|
|
@EventHandler
|
|
public void playerLeftGame(PlayerQuitEvent e) {
|
|
Player p = e.getPlayer();
|
|
NamespacedKey key = new NamespacedKey(this.pl, "AntiBL_LastHit");
|
|
long lastOldHit = load_internal_long(p, key, 0);
|
|
long unixTimestamp = Instant.now().getEpochSecond();
|
|
long difference = unixTimestamp - lastOldHit;
|
|
if (difference < 11) {
|
|
Component pDisplayName = p.displayName();
|
|
String uu = load_internal_str(p, new NamespacedKey(this.pl, "AntiBL_HitOn"));
|
|
String p2d = "someone";
|
|
if (uu == null) {
|
|
}
|
|
else {
|
|
UUID p2u = UUID.fromString(uu);
|
|
OfflinePlayer p2 = Bukkit.getOfflinePlayer(p2u);
|
|
p2d = p2.getName();
|
|
}
|
|
Component message = pDisplayName.append(Component.text(" quit during battle with " + p2d))
|
|
.append(Component.text("."));
|
|
Bukkit.broadcast(message);
|
|
p.damage(unixTimestamp); // THAT'S A LOTTA DAMAGE!
|
|
p.kick(Component.text("You logged out during PvP and died!"));
|
|
}
|
|
}
|
|
}
|