Compare commits

...

6 Commits

Author SHA1 Message Date
YouHaveTrouble bea0d9c7df make sure mount has player rider before checking for attack cancel 2021-09-17 15:28:34 +02:00
YouHaveTrouble 0eccf1b1af fix unable to attack mounts with no player on them 2021-09-17 15:26:40 +02:00
YouHaveTrouble 2669c538cd remove debug 2 electric boogaloo 2021-08-03 17:45:30 +02:00
YouHaveTrouble 36861084cc remove debug 2021-08-03 17:31:35 +02:00
YouHaveTrouble f182c2c859 add worldguard flag for force pvp 2021-08-03 17:24:17 +02:00
YouHaveTrouble 60b360f170 bump version 2021-07-29 13:37:32 +02:00
11 changed files with 130 additions and 31 deletions
+15 -6
View File
@@ -6,7 +6,7 @@
<groupId>me.youhavetrouble</groupId> <groupId>me.youhavetrouble</groupId>
<artifactId>PreventStabby</artifactId> <artifactId>PreventStabby</artifactId>
<version>1.3-pre1</version> <version>1.3-pre4</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>PreventStabby</name> <name>PreventStabby</name>
@@ -74,8 +74,12 @@
<url>https://oss.sonatype.org/content/groups/public/</url> <url>https://oss.sonatype.org/content/groups/public/</url>
</repository> </repository>
<repository> <repository>
<id>jitpack.io</id> <id>bs-repo</id>
<url>https://jitpack.io</url> <url>https://ci.pluginwiki.us/plugin/repository/everything/</url>
</repository>
<repository>
<id>sk89q-repo</id>
<url>https://maven.enginehub.org/repo/</url>
</repository> </repository>
</repositories> </repositories>
@@ -98,10 +102,9 @@
<version>0.9.12</version> <version>0.9.12</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.github.Thatsmusic99</groupId> <groupId>com.github.thatsmusic99</groupId>
<artifactId>ConfigurationMaster</artifactId> <artifactId>ConfigurationMaster</artifactId>
<version>v1.0-RC-2</version> <version>v1.0.3</version>
<scope>compile</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.bstats</groupId> <groupId>org.bstats</groupId>
@@ -109,5 +112,11 @@
<version>2.2.1</version> <version>2.2.1</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>com.sk89q.worldguard</groupId>
<artifactId>worldguard-bukkit</artifactId>
<version>7.0.4-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies> </dependencies>
</project> </project>
@@ -2,6 +2,7 @@ package me.youhavetrouble.preventstabby;
import me.youhavetrouble.preventstabby.commands.MainCommand; import me.youhavetrouble.preventstabby.commands.MainCommand;
import me.youhavetrouble.preventstabby.config.ConfigCache; import me.youhavetrouble.preventstabby.config.ConfigCache;
import me.youhavetrouble.preventstabby.hooks.WorldGuardHook;
import me.youhavetrouble.preventstabby.players.PlayerManager; import me.youhavetrouble.preventstabby.players.PlayerManager;
import me.youhavetrouble.preventstabby.players.SmartCache; import me.youhavetrouble.preventstabby.players.SmartCache;
import me.youhavetrouble.preventstabby.util.PreventStabbyListener; import me.youhavetrouble.preventstabby.util.PreventStabbyListener;
@@ -21,9 +22,9 @@ public final class PreventStabby extends JavaPlugin {
@Getter private static PreventStabby plugin; @Getter private static PreventStabby plugin;
private ConfigCache configCache; private ConfigCache configCache;
protected PlayerManager playerManager; private PlayerManager playerManager;
protected DatabaseSQLite sqLite; private DatabaseSQLite sqLite;
protected SmartCache smartCache; private SmartCache smartCache;
@Override @Override
public void onEnable() { public void onEnable() {
@@ -68,6 +69,10 @@ public final class PreventStabby extends JavaPlugin {
pvpCommand.setExecutor(mainCommand); pvpCommand.setExecutor(mainCommand);
pvpCommand.setTabCompleter(mainCommand); pvpCommand.setTabCompleter(mainCommand);
try {
WorldGuardHook.init();
} catch (NoClassDefFoundError ignored) {}
Metrics metrics = new Metrics(this, 10597); Metrics metrics = new Metrics(this, 10597);
} }
@@ -78,7 +83,7 @@ public final class PreventStabby extends JavaPlugin {
public void reloadPluginConfig(CommandSender commandSender) { public void reloadPluginConfig(CommandSender commandSender) {
getServer().getScheduler().runTaskAsynchronously(this, () -> { getServer().getScheduler().runTaskAsynchronously(this, () -> {
reloadPluginConfig(); reloadPluginConfig();
commandSender.sendMessage("TogglePvP configuration reloaded."); commandSender.sendMessage("PreventStabby configuration reloaded.");
}); });
} }
@@ -14,7 +14,7 @@ public class HelpCommand {
List<String> helpPage = new ArrayList<>(); List<String> helpPage = new ArrayList<>();
helpPage.add(PluginMessages.parseMessage("&b&m &bTogglePvP Help&b&m ")); helpPage.add(PluginMessages.parseMessage("&b&m &bPreventStabby Help&b&m "));
helpPage.add(PluginMessages.parseMessage("&9/pvp &b&lhelp &f- shows this message")); helpPage.add(PluginMessages.parseMessage("&9/pvp &b&lhelp &f- shows this message"));
if (sender.hasPermission("preventstabby.command.toggle")) { if (sender.hasPermission("preventstabby.command.toggle")) {
helpPage.add(PluginMessages.parseMessage("&9/pvp &b&l[on/off] &f- enables or disables PvP")); helpPage.add(PluginMessages.parseMessage("&9/pvp &b&l[on/off] &f- enables or disables PvP"));
@@ -0,0 +1,74 @@
package me.youhavetrouble.preventstabby.hooks;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.StateFlag;
import com.sk89q.worldguard.protection.flags.registry.FlagConflictException;
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
import com.sk89q.worldguard.protection.regions.RegionContainer;
import com.sk89q.worldguard.protection.regions.RegionQuery;
import me.youhavetrouble.preventstabby.PreventStabby;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
public class WorldGuardHook {
private static WorldGuardPlugin worldGuardPlugin;
private static FlagRegistry flagRegistry;
public static StateFlag FORCE_PVP_FLAG;
public static void init() {
PreventStabby plugin = PreventStabby.getPlugin();
try {
Class.forName("com.sk89q.worldguard.protection.flags.registry.FlagConflictException");
worldGuardPlugin = WorldGuardPlugin.inst();
if (WorldGuard.getInstance() == null || worldGuardPlugin == null) return;
plugin.getLogger().info("Hooking into WorldGuard");
flagRegistry = WorldGuard.getInstance().getFlagRegistry();
createForcePvpFlag(plugin);
} catch (NoClassDefFoundError | ClassNotFoundException e) {
return;
}
}
private static void createForcePvpFlag(Plugin plugin) {
if (!isHooked()) return;
if (flagRegistry == null) return;
String flagName = "preventstabby-force-pvp";
try {
StateFlag flag = new StateFlag(flagName, false);
flagRegistry.register(flag);
FORCE_PVP_FLAG = flag;
} catch (FlagConflictException e) {
Flag<?> existing = flagRegistry.get(flagName);
if (existing instanceof StateFlag) {
FORCE_PVP_FLAG = (StateFlag) existing;
} else {
plugin.getLogger().severe("There is a conflict between flag names!");
}
}
}
public static boolean isPlayerForcedToPvp(Player player) {
if (!isHooked()) return false;
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionQuery query = container.createQuery();
org.bukkit.Location loc = player.getLocation();
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
ApplicableRegionSet set = query.getApplicableRegions(new Location(BukkitAdapter.adapt(loc.getWorld()), loc.getX(), loc.getY(), loc.getZ()));
return set.testState(localPlayer, FORCE_PVP_FLAG);
}
public static boolean isHooked() {
return worldGuardPlugin != null;
}
}
@@ -26,7 +26,7 @@ public class PlayerJoinAndLeaveListener implements Listener {
PlayerData playerData = PreventStabby.getPlugin().getPlayerManager().getPlayer(player.getUniqueId()); PlayerData playerData = PreventStabby.getPlugin().getPlayerManager().getPlayer(player.getUniqueId());
long time = Instant.now().getEpochSecond(); long time = Instant.now().getEpochSecond();
if (playerData == null) { if (playerData == null) {
PreventStabby.getPlugin().getPlayerManager().addPlayer(uuid, new PlayerData(false)); PreventStabby.getPlugin().getPlayerManager().addPlayer(uuid, new PlayerData(uuid,false));
Bukkit.getScheduler().runTaskAsynchronously(PreventStabby.getPlugin(), () -> { Bukkit.getScheduler().runTaskAsynchronously(PreventStabby.getPlugin(), () -> {
PlayerData data = PreventStabby.getPlugin().getSqLite().getPlayerInfo(uuid); PlayerData data = PreventStabby.getPlugin().getSqLite().getPlayerInfo(uuid);
PreventStabby.getPlugin().getPlayerManager().addPlayer(uuid, data); PreventStabby.getPlugin().getPlayerManager().addPlayer(uuid, data);
@@ -7,11 +7,12 @@ import java.util.UUID;
public class PlayerData { public class PlayerData {
private UUID playerUuid; private final UUID playerUuid;
private long cachetime, combattime, loginTimestamp, teleportTimestamp; private long cachetime, combattime, loginTimestamp, teleportTimestamp;
private boolean pvpEnabled, lastCombatCheck, inCombat; private boolean pvpEnabled, lastCombatCheck, inCombat;
public PlayerData(boolean pvpEnabled) { public PlayerData(UUID playerUuid, boolean pvpEnabled) {
this.playerUuid = playerUuid;
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;
@@ -3,6 +3,7 @@ package me.youhavetrouble.preventstabby.players;
import me.youhavetrouble.preventstabby.PreventStabby; import me.youhavetrouble.preventstabby.PreventStabby;
import me.youhavetrouble.preventstabby.api.event.PlayerLeaveCombatEvent; import me.youhavetrouble.preventstabby.api.event.PlayerLeaveCombatEvent;
import me.youhavetrouble.preventstabby.config.ConfigCache; import me.youhavetrouble.preventstabby.config.ConfigCache;
import me.youhavetrouble.preventstabby.hooks.WorldGuardHook;
import me.youhavetrouble.preventstabby.util.CombatTimer; import me.youhavetrouble.preventstabby.util.CombatTimer;
import me.youhavetrouble.preventstabby.util.PluginMessages; import me.youhavetrouble.preventstabby.util.PluginMessages;
import lombok.Getter; import lombok.Getter;
@@ -36,8 +37,7 @@ public class PlayerManager {
if (!CombatTimer.isInCombat(uuid)) { if (!CombatTimer.isInCombat(uuid)) {
if (playerData.getLastCombatCheck()) { if (playerData.getLastCombatCheck()) {
Player player = Bukkit.getPlayer(uuid); Player player = Bukkit.getPlayer(uuid);
if (player == null) if (player == null) continue;
return;
PlayerLeaveCombatEvent playerLeaveCombatEvent = new PlayerLeaveCombatEvent(player); PlayerLeaveCombatEvent playerLeaveCombatEvent = new PlayerLeaveCombatEvent(player);
Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> {
Bukkit.getPluginManager().callEvent(playerLeaveCombatEvent); Bukkit.getPluginManager().callEvent(playerLeaveCombatEvent);
@@ -111,25 +111,25 @@ public class PlayerManager {
public boolean canDamage(UUID attacker, UUID victim, boolean sendDenyMessage, boolean checkVictimSpawnProtection) { public boolean canDamage(UUID attacker, UUID victim, boolean sendDenyMessage, boolean checkVictimSpawnProtection) {
if (hasLoginProtection(attacker) || hasTeleportProtection(attacker)) if (hasLoginProtection(attacker) || hasTeleportProtection(attacker)) return false;
return false;
if (checkVictimSpawnProtection && hasLoginProtection(victim)) if (checkVictimSpawnProtection && hasLoginProtection(victim)) return false;
return false;
if (checkVictimSpawnProtection && hasTeleportProtection(victim)) if (checkVictimSpawnProtection && hasTeleportProtection(victim)) return false;
return false;
SmartCache smartCache = PreventStabby.getPlugin().getSmartCache(); SmartCache smartCache = PreventStabby.getPlugin().getSmartCache();
if (!smartCache.getPlayerData(attacker).isPvpEnabled()) { Player attackerPlayer = Bukkit.getPlayer(attacker);
Player victimPlayer = Bukkit.getPlayer(victim);
if (!smartCache.getPlayerData(attacker).isPvpEnabled() && (attackerPlayer != null && !isInForcedPvpRegion(attackerPlayer))) {
if (sendDenyMessage) { if (sendDenyMessage) {
ConfigCache config = PreventStabby.getPlugin().getConfigCache(); ConfigCache config = PreventStabby.getPlugin().getConfigCache();
PluginMessages.sendActionBar(attacker, config.getCannot_attack_attacker()); PluginMessages.sendActionBar(attacker, config.getCannot_attack_attacker());
} }
return false; return false;
} }
if (!smartCache.getPlayerData(victim).isPvpEnabled()) { if (!smartCache.getPlayerData(victim).isPvpEnabled() && (victimPlayer != null && !isInForcedPvpRegion(victimPlayer))) {
if (sendDenyMessage) { if (sendDenyMessage) {
ConfigCache config = PreventStabby.getPlugin().getConfigCache(); ConfigCache config = PreventStabby.getPlugin().getConfigCache();
PluginMessages.sendActionBar(attacker, config.getCannot_attack_victim()); PluginMessages.sendActionBar(attacker, config.getCannot_attack_victim());
@@ -157,4 +157,9 @@ public class PlayerManager {
return Instant.now().getEpochSecond() < smartCache.getPlayerData(uuid).getTeleportTimestamp(); return Instant.now().getEpochSecond() < smartCache.getPlayerData(uuid).getTeleportTimestamp();
} }
public boolean isInForcedPvpRegion(Player player) {
if (!WorldGuardHook.isHooked()) return false;
return WorldGuardHook.isPlayerForcedToPvp(player);
}
} }
@@ -42,7 +42,7 @@ public class SmartCache {
return playerData; return playerData;
} catch (NullPointerException ex) { } catch (NullPointerException ex) {
// Return false if database call fails // Return false if database call fails
return new PlayerData(false); return new PlayerData(uuid,false);
} }
} }
} }
@@ -53,7 +53,7 @@ public class SmartCache {
PreventStabby.getPlugin().getPlayerManager().getPlayer(uuid).setPvpEnabled(state); PreventStabby.getPlugin().getPlayerManager().getPlayer(uuid).setPvpEnabled(state);
} }
// Update the database aswell // Update the database aswell
PreventStabby.getPlugin().getSqLite().updatePlayerInfo(uuid, new PlayerData(state)); PreventStabby.getPlugin().getSqLite().updatePlayerInfo(uuid, new PlayerData(uuid, state));
} }
@@ -64,12 +64,12 @@ public class DatabaseSQLite {
} }
} }
Statement statement = conn.createStatement(); Statement statement = conn.createStatement();
String sql = "SELECT * FROM `players` WHERE `player_uuid` = '" + uuid.toString() + "';"; String sql = "SELECT * FROM `players` WHERE `player_uuid` = '" + uuid + "';";
statement.execute(sql); statement.execute(sql);
ResultSet result = statement.getResultSet(); ResultSet result = statement.getResultSet();
boolean state = result.getBoolean("pvpenabled"); boolean state = result.getBoolean("pvpenabled");
conn.close(); conn.close();
return new PlayerData(state); return new PlayerData(uuid, state);
} catch (SQLException throwables) { } catch (SQLException throwables) {
throwables.printStackTrace(); throwables.printStackTrace();
} }
@@ -45,14 +45,16 @@ public class Util {
Set<UUID> playerPassengersWithPvpEnabled = new HashSet<>(); Set<UUID> playerPassengersWithPvpEnabled = new HashSet<>();
boolean hasPlayerPassengers = false;
for (Entity passenger : mount.getPassengers()) { for (Entity passenger : mount.getPassengers()) {
if (!(passenger instanceof Player)) continue; if (!(passenger instanceof Player)) continue;
Player player = (Player) passenger; Player player = (Player) passenger;
hasPlayerPassengers = true;
if (PreventStabby.getPlugin().getPlayerManager().getPlayerPvPState(player.getUniqueId())) if (PreventStabby.getPlugin().getPlayerManager().getPlayerPvPState(player.getUniqueId()))
playerPassengersWithPvpEnabled.add(player.getUniqueId()); playerPassengersWithPvpEnabled.add(player.getUniqueId());
} }
if (playerPassengersWithPvpEnabled.isEmpty()) { if (hasPlayerPassengers && playerPassengersWithPvpEnabled.isEmpty()) {
PluginMessages.sendActionBar(attacker, config.getCannot_attack_mounts_victim()); PluginMessages.sendActionBar(attacker, config.getCannot_attack_mounts_victim());
return true; return true;
} }
+5 -2
View File
@@ -1,11 +1,14 @@
name: TogglePvP name: PreventStabby
version: ${project.version} version: ${project.version}
main: eu.endermite.togglepvp.PreventStabby main: me.youhavetrouble.preventstabby.PreventStabby
authors: [YouHaveTrouble] authors: [YouHaveTrouble]
api-version: 1.13 api-version: 1.13
description: Stop people from getting stabbed! description: Stop people from getting stabbed!
soft-depend:
- WorldGuard
commands: commands:
preventstabby: preventstabby:
permission: preventstabby.command
aliases: aliases:
- pvp - pvp
permissions: permissions: