antibattlelog/src/main/java/ca/thetechrobo/fbl/PlayerTookDamage.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!"));
}
}
}