Compare commits

...

9 Commits

Author SHA1 Message Date
YouHaveTrouble 1484d262c0 tell paper to not remap 2024-06-26 18:24:55 +02:00
YouHaveTrouble 4976ff56f0 check base potion type for nulls 2024-06-26 18:22:15 +02:00
YouHaveTrouble 477f042e91 update depends to java 21 and minecraft 1.21 2024-06-26 18:21:54 +02:00
YouHaveTrouble 409d115337 stop specified commands from being able to execute in combat 2024-05-12 14:17:59 +02:00
YouHaveTrouble 6c022dd88e bump version 2024-04-18 17:14:42 +02:00
YouHaveTrouble 01b6cd309c Decrease event handling priority in EnvironmentalListener 2024-04-18 17:12:46 +02:00
YouHaveTrouble 7253eab958 Lower event handler priority in PvpListener 2024-04-18 17:11:33 +02:00
YouHaveTrouble 645068f66c bump version 2024-04-18 15:17:59 +02:00
YouHaveTrouble 27a68339ed Add null checks for playerData in PlayerListener
Added null checks for playerData in the methods onPlayerQuit, onPlayerTeleport and onPlayerDeath of the PlayerListener class. This addresses potential issues where plugins are using players as entities, which can sometimes cause playerData to be null.
2024-04-18 15:16:14 +02:00
6 changed files with 53 additions and 24 deletions
+11 -4
View File
@@ -6,14 +6,14 @@
<groupId>me.youhavetrouble</groupId>
<artifactId>PreventStabby</artifactId>
<version>2.0.0-pre-1</version>
<version>2.0.0-pre-4</version>
<packaging>jar</packaging>
<name>PreventStabby</name>
<description>Stop people from getting stabbed!</description>
<properties>
<java.version>17</java.version>
<java.version>21</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
@@ -31,7 +31,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.3.0</version>
<version>3.6.0</version>
<executions>
<execution>
<phase>package</phase>
@@ -46,6 +46,13 @@
<shadedPattern>me.youhavetrouble.preventstabby.bstats</shadedPattern>
</relocation>
</relocations>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<paperweight-mappings-namespace>mojang</paperweight-mappings-namespace>
</manifestEntries>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
@@ -78,7 +85,7 @@
<dependency>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.20.4-R0.1-SNAPSHOT</version>
<version>1.21-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
@@ -7,10 +7,7 @@ import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.*;
public class ConfigCache {
@@ -66,12 +63,14 @@ public class ConfigCache {
List.of("Should killing of a player that logged out of combat be announced?")
);
this.combatBlockedCommands.addAll(getList(
List<String> commandsBlockedInCombat = getList(
"settings.block_in_combat.commands",
List.of("spawn", "tpa", "home"),
List.of("Commands to block when player is in combat")
)
);
for (String command : commandsBlockedInCombat) {
this.combatBlockedCommands.add(command.toLowerCase(Locale.ENGLISH));
}
this.block_teleports_in_combat = getBoolean(
"settings.block_in_combat.teleports",
@@ -126,6 +125,8 @@ public class ConfigCache {
List.of("Distance from the player where placing dangerous blocks will be disallowed")
);
// Messages
this.pvp_enabled = getString("messages.pvp_enabled", "<red>You enabled PvP!");
this.pvp_disabled = getString("messages.pvp_disabled", "<red>You disabled PvP!");
@@ -46,6 +46,7 @@ public class PlayerListener implements Listener {
Player player = event.getPlayer();
if (!PreventStabby.getPlugin().getConfigCache().punish_for_combat_logout) return;
PlayerData playerData = PreventStabby.getPlugin().getPlayerManager().getPlayer(player.getUniqueId());
if (playerData == null) return;
if (!playerData.isInCombat()) return;
player.setHealth(0);
if (!PreventStabby.getPlugin().getConfigCache().punish_for_combat_logout_announce) return;
@@ -56,6 +57,7 @@ public class PlayerListener implements Listener {
public void onPlayerTeleport(PlayerTeleportEvent event) {
Player player = event.getPlayer();
PlayerData playerData = PreventStabby.getPlugin().getPlayerManager().getPlayer(player.getUniqueId());
if (playerData == null) return; // Plugins using players as entities can cause this state
playerData.setTeleportTimestamp(Instant.now().getEpochSecond());
}
@@ -63,7 +65,7 @@ public class PlayerListener implements Listener {
public void onPlayerDeath(EntityDeathEvent event) {
if (!(event.getEntity() instanceof Player player)) return;
PlayerData playerData = PreventStabby.getPlugin().getPlayerManager().getPlayer(player.getUniqueId());
if (playerData == null) return;
if (playerData == null) return; // Plugins using players as entities can cause this state
playerData.markNotInCombat();
}
@@ -31,7 +31,7 @@ public class EnvironmentalListener implements Listener {
dangerousBuckets.add(Material.POWDER_SNOW_BUCKET);
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onDangerousBucketDump(PlayerBucketEmptyEvent event) {
ConfigCache config = plugin.getConfigCache();
if (!config.bucket_stopper_enabled) return;
@@ -53,7 +53,7 @@ public class EnvironmentalListener implements Listener {
}
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onBlockIgnite(BlockIgniteEvent event) {
ConfigCache config = plugin.getConfigCache();
if (!config.fire_stopper_enabled) return;
@@ -77,7 +77,7 @@ public class EnvironmentalListener implements Listener {
}
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onBlockIgnite(BlockPlaceEvent event) {
ConfigCache config = plugin.getConfigCache();
if (!config.block_stopper_enabled) return;
@@ -2,19 +2,20 @@ package me.youhavetrouble.preventstabby.listeners;
import me.youhavetrouble.preventstabby.PreventStabby;
import me.youhavetrouble.preventstabby.data.DamageCheckResult;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.AreaEffectCloudApplyEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.PotionSplashEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerFishEvent;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.potion.PotionType;
import java.util.Locale;
public class PvpListener implements Listener {
@@ -24,7 +25,7 @@ public class PvpListener implements Listener {
this.plugin = plugin;
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onEntityDamage(EntityDamageByEntityEvent event) {
Entity attacker = event.getDamager();
Entity victim = event.getEntity();
@@ -36,7 +37,7 @@ public class PvpListener implements Listener {
plugin.getPlayerManager().handleDamageCheck(result);
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onPotionSplash(PotionSplashEvent event) {
if (!(event.getEntity().getShooter() instanceof Player thrower)) return;
boolean harmful = false;
@@ -56,11 +57,14 @@ public class PvpListener implements Listener {
}
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onPotionCloudEffectApply(AreaEffectCloudApplyEvent event) {
if (!(event.getEntity().getSource() instanceof Player thrower)) return;
boolean harmful = false;
for (PotionEffect effect : event.getEntity().getBasePotionType().getPotionEffects()) {
AreaEffectCloud cloud = event.getEntity();
if (cloud.getBasePotionType() == null) return;
PotionType potionType = cloud.getBasePotionType();
for (PotionEffect effect : potionType.getPotionEffects()) {
if (!PotionEffectType.Category.HARMFUL.equals(effect.getType().getEffectCategory())) continue;
harmful = true;
break;
@@ -78,7 +82,7 @@ public class PvpListener implements Listener {
});
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onFish(PlayerFishEvent event) {
if (event.getCaught() instanceof Item) return;
if (plugin.getConfigCache().allow_fishing_rod_pull) return;
@@ -93,4 +97,19 @@ public class PvpListener implements Listener {
plugin.getPlayerManager().handleDamageCheck(result);
}
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onCommandInCombat(PlayerCommandPreprocessEvent event) {
Player player = event.getPlayer();
if (!plugin.getPlayerManager().getPlayer(player.getUniqueId()).isInCombat()) return;
String message = event.getMessage().toLowerCase(Locale.ROOT);
if (message.startsWith("/")) {
message = message.substring(1);
}
message = message.split(" ")[0];
if (!plugin.getConfigCache().getCombatBlockedCommands().contains(message)) return;
event.setCancelled(true);
player.sendMessage(plugin.getConfigCache().cant_do_that_during_combat);
}
}
+1 -1
View File
@@ -2,7 +2,7 @@ name: PreventStabby
version: ${project.version}
main: me.youhavetrouble.preventstabby.PreventStabby
authors: [YouHaveTrouble]
api-version: 1.20
api-version: 1.21
folia-supported: true
description: Stop people from getting stabbed!
soft-depend: