mirror of
https://github.com/YouHaveTrouble/PreventStabby.git
synced 2026-05-12 05:16:55 +00:00
added combat events
This commit is contained in:
@@ -8,7 +8,6 @@ import eu.endermite.togglepvp.util.Listener;
|
|||||||
import eu.endermite.togglepvp.util.DatabaseSQLite;
|
import eu.endermite.togglepvp.util.DatabaseSQLite;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.bstats.bukkit.Metrics;
|
import org.bstats.bukkit.Metrics;
|
||||||
import org.bstats.charts.CustomChart;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.reflections.Reflections;
|
import org.reflections.Reflections;
|
||||||
|
|||||||
@@ -74,6 +74,24 @@ public class TogglePvpAPI {
|
|||||||
return TogglePvp.getPlugin().getPlayerManager().hasLoginProtection(uuid);
|
return TogglePvp.getPlugin().getPlayerManager().hasLoginProtection(uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if player has teleport protection.
|
||||||
|
* @param player Player to check
|
||||||
|
* @return True if player has teleport protection, false if not
|
||||||
|
*/
|
||||||
|
public static boolean hasTeleportProtection(Player player) {
|
||||||
|
return TogglePvp.getPlugin().getPlayerManager().hasLoginProtection(player.getUniqueId());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if player has teleport protection.
|
||||||
|
* @param uuid UUID of player to check
|
||||||
|
* @return True if player has teleport protection, false if not
|
||||||
|
*/
|
||||||
|
public static boolean hasTeleportProtection(UUID uuid) {
|
||||||
|
return TogglePvp.getPlugin().getPlayerManager().hasLoginProtection(uuid);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if player has login protection.
|
* Checks if player has login protection.
|
||||||
* @param player Player to check
|
* @param player Player to check
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
package eu.endermite.togglepvp.api.event;
|
||||||
|
|
||||||
|
import eu.endermite.togglepvp.TogglePvp;
|
||||||
|
import eu.endermite.togglepvp.players.PlayerData;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Cancellable;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fired when player enters combat.
|
||||||
|
*/
|
||||||
|
public class PlayerEnterCombatEvent extends Event implements Cancellable {
|
||||||
|
|
||||||
|
private static final HandlerList HANDLERS = new HandlerList();
|
||||||
|
private final Player player;
|
||||||
|
private boolean cancelled;
|
||||||
|
|
||||||
|
public PlayerEnterCombatEvent(Player player) {
|
||||||
|
this.player = player;
|
||||||
|
this.cancelled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Player getPlayer() {
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlayerData getPlayerData() {
|
||||||
|
return TogglePvp.getPlugin().getPlayerManager().getPlayer(player.getUniqueId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCancelled(boolean cancel) {
|
||||||
|
cancelled = cancel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public HandlerList getHandlers() {
|
||||||
|
return HANDLERS;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
package eu.endermite.togglepvp.api.event;
|
||||||
|
|
||||||
|
import eu.endermite.togglepvp.TogglePvp;
|
||||||
|
import eu.endermite.togglepvp.players.PlayerData;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Cancellable;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fired when player leaves combat. If cancelled, it will refresh combat timer to the value set in the config.
|
||||||
|
*/
|
||||||
|
public class PlayerLeaveCombatEvent extends Event implements Cancellable {
|
||||||
|
|
||||||
|
private static final HandlerList HANDLERS = new HandlerList();
|
||||||
|
private final Player player;
|
||||||
|
private boolean cancelled;
|
||||||
|
|
||||||
|
public PlayerLeaveCombatEvent(Player player) {
|
||||||
|
this.player = player;
|
||||||
|
this.cancelled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Player getPlayer() {
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlayerData getPlayerData() {
|
||||||
|
return TogglePvp.getPlugin().getPlayerManager().getPlayer(player.getUniqueId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCancelled(boolean cancel) {
|
||||||
|
cancelled = cancel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public HandlerList getHandlers() {
|
||||||
|
return HANDLERS;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,17 +6,15 @@ import java.time.Instant;
|
|||||||
|
|
||||||
public class PlayerData {
|
public class PlayerData {
|
||||||
|
|
||||||
private long cachetime, combattime;
|
private long cachetime, combattime, loginTimestamp, teleportTimestamp;
|
||||||
private boolean pvpEnabled;
|
private boolean pvpEnabled, lastCombatCheck, inCombat;
|
||||||
private boolean lastCombatCheck;
|
|
||||||
private long loginTimestamp;
|
|
||||||
private long teleportTimestamp;
|
|
||||||
|
|
||||||
public PlayerData(boolean pvpEnabled) {
|
public PlayerData(boolean pvpEnabled) {
|
||||||
this.pvpEnabled = pvpEnabled;
|
this.pvpEnabled = pvpEnabled;
|
||||||
this.combattime = Instant.now().getEpochSecond()-1;
|
this.combattime = Instant.now().getEpochSecond()-1;
|
||||||
this.loginTimestamp = Instant.now().getEpochSecond()-1;
|
this.loginTimestamp = Instant.now().getEpochSecond()-1;
|
||||||
this.teleportTimestamp = Instant.now().getEpochSecond()-1;
|
this.teleportTimestamp = Instant.now().getEpochSecond()-1;
|
||||||
|
this.inCombat = false;
|
||||||
refreshCachetime();
|
refreshCachetime();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,4 +69,12 @@ public class PlayerData {
|
|||||||
public long getTeleportTimestamp() {
|
public long getTeleportTimestamp() {
|
||||||
return teleportTimestamp;
|
return teleportTimestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isInCombat() {
|
||||||
|
return inCombat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInCombat(boolean inCombat) {
|
||||||
|
this.inCombat = inCombat;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package eu.endermite.togglepvp.players;
|
package eu.endermite.togglepvp.players;
|
||||||
|
|
||||||
import eu.endermite.togglepvp.TogglePvp;
|
import eu.endermite.togglepvp.TogglePvp;
|
||||||
|
import eu.endermite.togglepvp.api.event.PlayerLeaveCombatEvent;
|
||||||
import eu.endermite.togglepvp.config.ConfigCache;
|
import eu.endermite.togglepvp.config.ConfigCache;
|
||||||
import eu.endermite.togglepvp.util.CombatTimer;
|
import eu.endermite.togglepvp.util.CombatTimer;
|
||||||
import eu.endermite.togglepvp.util.PluginMessages;
|
import eu.endermite.togglepvp.util.PluginMessages;
|
||||||
@@ -29,10 +30,20 @@ public class PlayerManager {
|
|||||||
combatTrackerTask = Bukkit.getScheduler().runTaskTimerAsynchronously(TogglePvp.getPlugin(), () -> {
|
combatTrackerTask = Bukkit.getScheduler().runTaskTimerAsynchronously(TogglePvp.getPlugin(), () -> {
|
||||||
for (Map.Entry<UUID, PlayerData> set : playerList.entrySet()) {
|
for (Map.Entry<UUID, PlayerData> set : playerList.entrySet()) {
|
||||||
UUID uuid = set.getKey();
|
UUID uuid = set.getKey();
|
||||||
|
PlayerData playerData = set.getValue();
|
||||||
if (!CombatTimer.isInCombat(uuid)) {
|
if (!CombatTimer.isInCombat(uuid)) {
|
||||||
if (set.getValue().getLastCombatCheck()) {
|
if (playerData.getLastCombatCheck()) {
|
||||||
set.getValue().setLastCombatCheck(false);
|
PlayerLeaveCombatEvent playerLeaveCombatEvent = new PlayerLeaveCombatEvent(Bukkit.getPlayer(uuid));
|
||||||
PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getLeaving_combat());
|
Bukkit.getPluginManager().callEvent(playerLeaveCombatEvent);
|
||||||
|
|
||||||
|
if (playerLeaveCombatEvent.isCancelled()) {
|
||||||
|
playerData.refreshCombatTime();
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
playerData.setLastCombatCheck(false);
|
||||||
|
playerData.setInCombat(false);
|
||||||
|
PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getLeaving_combat());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
set.getValue().setLastCombatCheck(true);
|
set.getValue().setLastCombatCheck(true);
|
||||||
@@ -47,7 +58,11 @@ public class PlayerManager {
|
|||||||
|
|
||||||
public void refreshPlayersCombatTime(UUID uuid) {
|
public void refreshPlayersCombatTime(UUID uuid) {
|
||||||
try {
|
try {
|
||||||
playerList.get(uuid).refreshCombatTime();
|
PlayerData data = playerList.get(uuid);
|
||||||
|
if (data == null)
|
||||||
|
return;
|
||||||
|
data.refreshCombatTime();
|
||||||
|
data.setInCombat(true);
|
||||||
} catch (Exception ignored) {
|
} catch (Exception ignored) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
package eu.endermite.togglepvp.util;
|
package eu.endermite.togglepvp.util;
|
||||||
|
|
||||||
import eu.endermite.togglepvp.TogglePvp;
|
import eu.endermite.togglepvp.TogglePvp;
|
||||||
|
import eu.endermite.togglepvp.api.event.PlayerEnterCombatEvent;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@@ -11,9 +15,15 @@ public class CombatTimer {
|
|||||||
long now = Instant.now().getEpochSecond();
|
long now = Instant.now().getEpochSecond();
|
||||||
long combattime = TogglePvp.getPlugin().getSmartCache().getPlayerData(uuid).getCombattime();
|
long combattime = TogglePvp.getPlugin().getSmartCache().getPlayerData(uuid).getCombattime();
|
||||||
if (combattime < now) {
|
if (combattime < now) {
|
||||||
|
Player player = Bukkit.getPlayer(uuid);
|
||||||
|
PlayerEnterCombatEvent playerEnterCombatEvent = new PlayerEnterCombatEvent(player);
|
||||||
|
Bukkit.getPluginManager().callEvent(playerEnterCombatEvent);
|
||||||
|
if (playerEnterCombatEvent.isCancelled())
|
||||||
|
return;
|
||||||
|
|
||||||
|
TogglePvp.getPlugin().getPlayerManager().refreshPlayersCombatTime(uuid);
|
||||||
PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getEntering_combat());
|
PluginMessages.sendActionBar(uuid, TogglePvp.getPlugin().getConfigCache().getEntering_combat());
|
||||||
}
|
}
|
||||||
TogglePvp.getPlugin().getPlayerManager().refreshPlayersCombatTime(uuid);
|
|
||||||
} catch (Exception ignored) {}
|
} catch (Exception ignored) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -24,9 +34,7 @@ public class CombatTimer {
|
|||||||
|
|
||||||
public static boolean isInCombat(UUID uuid) {
|
public static boolean isInCombat(UUID uuid) {
|
||||||
try {
|
try {
|
||||||
long combattimer = TogglePvp.getPlugin().getPlayerManager().getPlayer(uuid).getCombattime();
|
return TogglePvp.getPlugin().getPlayerManager().getPlayer(uuid).isInCombat();
|
||||||
long now = Instant.now().getEpochSecond();
|
|
||||||
return combattimer > now;
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user