From 0dcb356c1d158138c5bc5b267f4a225e185328da Mon Sep 17 00:00:00 2001 From: Xelara Networks Date: Sun, 7 Jun 2026 23:58:50 -0400 Subject: [PATCH] first commit --- README.md | 0 pom.xml | 47 +++ .../bitnix/antiflypvp/AntiFlyPVPPlugin.java | 269 ++++++++++++++++++ src/main/resources/config.yml | 12 + src/main/resources/plugin.yml | 6 + target/AntiFLY-PVP.jar | Bin 0 -> 7145 bytes .../bitnix/antiflypvp/AntiFlyPVPPlugin.class | Bin 0 -> 9498 bytes target/classes/config.yml | 12 + target/classes/plugin.yml | 6 + target/maven-archiver/pom.properties | 5 + .../compile/default-compile/createdFiles.lst | 1 + .../compile/default-compile/inputFiles.lst | 1 + 12 files changed, 359 insertions(+) create mode 100644 README.md create mode 100644 pom.xml create mode 100644 src/main/java/com/bitnix/antiflypvp/AntiFlyPVPPlugin.java create mode 100644 src/main/resources/config.yml create mode 100644 src/main/resources/plugin.yml create mode 100644 target/AntiFLY-PVP.jar create mode 100644 target/classes/com/bitnix/antiflypvp/AntiFlyPVPPlugin.class create mode 100644 target/classes/config.yml create mode 100644 target/classes/plugin.yml create mode 100644 target/maven-archiver/pom.properties create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..bc7706e --- /dev/null +++ b/pom.xml @@ -0,0 +1,47 @@ + + 4.0.0 + + com.bitnix + AntiFLY-PVP + 1.1 + jar + + AntiFLY-PVP + + + 21 + UTF-8 + + + + + papermc + https://repo.papermc.io/repository/maven-public/ + + + + + + io.papermc.paper + paper-api + 1.21.8-R0.1-SNAPSHOT + provided + + + + + AntiFLY-PVP + + + org.apache.maven.plugins + maven-compiler-plugin + 3.13.0 + + 21 + + + + + diff --git a/src/main/java/com/bitnix/antiflypvp/AntiFlyPVPPlugin.java b/src/main/java/com/bitnix/antiflypvp/AntiFlyPVPPlugin.java new file mode 100644 index 0000000..29a414b --- /dev/null +++ b/src/main/java/com/bitnix/antiflypvp/AntiFlyPVPPlugin.java @@ -0,0 +1,269 @@ +package com.bitnix.antiflypvp; + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerToggleFlightEvent; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitTask; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public final class AntiFlyPVPPlugin extends JavaPlugin implements Listener { + + private final Map combatUntil = new HashMap<>(); + private final Map expiryTasks = new HashMap<>(); + + private long combatDurationTicks; + private long combatDurationMillis; + private boolean disableFlightOnAnyDamage; + private boolean disableFlightOnDamagingAnyEntity; + private boolean opBypass; + + private String msgCombatStartDamaged; + private String msgCombatStartAttack; + private String msgCombatFlyBlocked; + private String msgCombatEnded; + + @Override + public void onEnable() { + saveDefaultConfig(); + loadPluginSettings(); + + getServer().getPluginManager().registerEvents(this, this); + getLogger().info("AntiFLY-PVP enabled."); + } + + @Override + public void onDisable() { + for (BukkitTask task : expiryTasks.values()) { + if (task != null) { + task.cancel(); + } + } + expiryTasks.clear(); + combatUntil.clear(); + } + + private void loadPluginSettings() { + reloadConfig(); + FileConfiguration config = getConfig(); + + int seconds = config.getInt("combat-duration-seconds", 300); + if (seconds < 1) { + seconds = 300; + } + + this.combatDurationMillis = seconds * 1000L; + this.combatDurationTicks = seconds * 20L; + + this.disableFlightOnAnyDamage = config.getBoolean("disable-flight-on-any-damage", true); + this.disableFlightOnDamagingAnyEntity = config.getBoolean("disable-flight-on-damaging-any-entity", true); + this.opBypass = config.getBoolean("op-bypass", true); + + this.msgCombatStartDamaged = color(config.getString( + "messages.combat-start-damaged", + "&cFlight disabled: you were damaged and are now in combat for &e%time%&c seconds." + )); + + this.msgCombatStartAttack = color(config.getString( + "messages.combat-start-attack", + "&cFlight disabled: you attacked something and are now in combat for &e%time%&c seconds." + )); + + this.msgCombatFlyBlocked = color(config.getString( + "messages.combat-fly-blocked", + "&cYou cannot fly while in combat. Time left: &e%time%&c seconds." + )); + + this.msgCombatEnded = color(config.getString( + "messages.combat-ended", + "&aYour combat timer ended. You may fly again if you still have permission." + )); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerDamaged(EntityDamageEvent event) { + if (!disableFlightOnAnyDamage) { + return; + } + + if (!(event.getEntity() instanceof Player player)) { + return; + } + + if (shouldIgnore(player)) { + return; + } + + enterCombat(player, msgCombatStartDamaged); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onEntityDamagedByPlayer(EntityDamageByEntityEvent event) { + if (!disableFlightOnDamagingAnyEntity) { + return; + } + + Player attacker = getResponsiblePlayer(event.getDamager()); + if (attacker == null) { + return; + } + + if (shouldIgnore(attacker)) { + return; + } + + enterCombat(attacker, msgCombatStartAttack); + } + + @EventHandler(ignoreCancelled = true) + public void onFlightToggle(PlayerToggleFlightEvent event) { + Player player = event.getPlayer(); + + if (shouldIgnore(player)) { + return; + } + + if (!isInCombat(player.getUniqueId())) { + return; + } + + event.setCancelled(true); + disableFlightNow(player); + player.sendMessage(replaceTime(msgCombatFlyBlocked, getRemainingSeconds(player.getUniqueId()))); + } + + @EventHandler + public void onJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + + if (shouldIgnore(player)) { + return; + } + + if (isInCombat(player.getUniqueId())) { + disableFlightNow(player); + } + } + + private Player getResponsiblePlayer(Entity damager) { + if (damager instanceof Player player) { + return player; + } + + if (damager instanceof Projectile projectile) { + Object shooter = projectile.getShooter(); + if (shooter instanceof Player player) { + return player; + } + } + + return null; + } + + private boolean shouldIgnore(Player player) { + if (player.getGameMode() == GameMode.CREATIVE || player.getGameMode() == GameMode.SPECTATOR) { + return true; + } + + return opBypass && player.isOp(); + } + + private void enterCombat(Player player, String startMessage) { + UUID uuid = player.getUniqueId(); + boolean alreadyInCombat = isInCombat(uuid); + + disableFlightNow(player); + + long expiresAt = System.currentTimeMillis() + combatDurationMillis; + combatUntil.put(uuid, expiresAt); + + BukkitTask oldTask = expiryTasks.remove(uuid); + if (oldTask != null) { + oldTask.cancel(); + } + + BukkitTask newTask = Bukkit.getScheduler().runTaskLater(this, () -> { + Long stored = combatUntil.get(uuid); + if (stored != null && stored <= System.currentTimeMillis()) { + combatUntil.remove(uuid); + expiryTasks.remove(uuid); + + Player online = Bukkit.getPlayer(uuid); + if (online != null && online.isOnline()) { + online.sendMessage(msgCombatEnded); + } + } + }, combatDurationTicks); + + expiryTasks.put(uuid, newTask); + + if (!alreadyInCombat) { + player.sendMessage(replaceTime(startMessage, combatDurationMillis / 1000L)); + } + } + + private void disableFlightNow(Player player) { + if (player.isFlying()) { + player.setFlying(false); + } + + if (player.getAllowFlight()) { + player.setAllowFlight(false); + } + } + + private boolean isInCombat(UUID uuid) { + Long expiresAt = combatUntil.get(uuid); + if (expiresAt == null) { + return false; + } + + if (expiresAt <= System.currentTimeMillis()) { + combatUntil.remove(uuid); + + BukkitTask task = expiryTasks.remove(uuid); + if (task != null) { + task.cancel(); + } + + return false; + } + + return true; + } + + private long getRemainingSeconds(UUID uuid) { + Long expiresAt = combatUntil.get(uuid); + if (expiresAt == null) { + return 0L; + } + + long remaining = expiresAt - System.currentTimeMillis(); + if (remaining <= 0L) { + return 0L; + } + + return (remaining + 999L) / 1000L; + } + + private String replaceTime(String message, long seconds) { + return message.replace("%time%", String.valueOf(seconds)); + } + + private String color(String input) { + return input == null ? "" : input.replace("&", "ยง"); + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..f40b264 --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,12 @@ +combat-duration-seconds: 300 + +disable-flight-on-any-damage: true +disable-flight-on-damaging-any-entity: true + +op-bypass: true + +messages: + combat-start-damaged: "&cFlight disabled: you were damaged and are now in combat for &e%time%&c seconds." + combat-start-attack: "&cFlight disabled: you attacked something and are now in combat for &e%time%&c seconds." + combat-fly-blocked: "&cYou cannot fly while in combat. Time left: &e%time%&c seconds." + combat-ended: "&aYour combat timer ended. You may fly again if you still have permission." diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..72cb4d4 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,6 @@ +name: AntiFLY-PVP +version: 1.1 +main: com.bitnix.antiflypvp.AntiFlyPVPPlugin +api-version: '1.21' +author: bitnix +description: Disables player flight during combat. diff --git a/target/AntiFLY-PVP.jar b/target/AntiFLY-PVP.jar new file mode 100644 index 0000000000000000000000000000000000000000..7089d0fab1c59a6f72d7f1a927024267df52edd9 GIT binary patch literal 7145 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/bitnix/antiflypvp/AntiFlyPVPPlugin.class b/target/classes/com/bitnix/antiflypvp/AntiFlyPVPPlugin.class new file mode 100644 index 0000000000000000000000000000000000000000..c17d7fb04e4f80750c08662d2ff66cfa85f72d82 GIT binary patch literal 9498 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 D%}Tyt literal 0 HcmV?d00001 diff --git a/target/classes/config.yml b/target/classes/config.yml new file mode 100644 index 0000000..f40b264 --- /dev/null +++ b/target/classes/config.yml @@ -0,0 +1,12 @@ +combat-duration-seconds: 300 + +disable-flight-on-any-damage: true +disable-flight-on-damaging-any-entity: true + +op-bypass: true + +messages: + combat-start-damaged: "&cFlight disabled: you were damaged and are now in combat for &e%time%&c seconds." + combat-start-attack: "&cFlight disabled: you attacked something and are now in combat for &e%time%&c seconds." + combat-fly-blocked: "&cYou cannot fly while in combat. Time left: &e%time%&c seconds." + combat-ended: "&aYour combat timer ended. You may fly again if you still have permission." diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml new file mode 100644 index 0000000..72cb4d4 --- /dev/null +++ b/target/classes/plugin.yml @@ -0,0 +1,6 @@ +name: AntiFLY-PVP +version: 1.1 +main: com.bitnix.antiflypvp.AntiFlyPVPPlugin +api-version: '1.21' +author: bitnix +description: Disables player flight during combat. diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties new file mode 100644 index 0000000..cabdb46 --- /dev/null +++ b/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Sun Jun 07 20:39:31 EDT 2026 +artifactId=AntiFLY-PVP +groupId=com.bitnix +version=1.1 diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..6bc3eca --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1 @@ +com/bitnix/antiflypvp/AntiFlyPVPPlugin.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..e8e025e --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1 @@ +/home/bitnix/Desktop/AntiFLY-PVP/src/main/java/com/bitnix/antiflypvp/AntiFlyPVPPlugin.java