From 88c18b6968673acc504f73f42b2d46ecb1af2101 Mon Sep 17 00:00:00 2001 From: amyavi <144570677+amyavi@users.noreply.github.com> Date: Sat, 5 Jul 2025 23:07:54 -0300 Subject: [PATCH 1/6] chore: update paper-api to 1.21.7 --- pom.xml | 8 ++++---- .../pw/kaboom/extras/commands/CommandJumpscare.java | 2 +- .../extras/modules/entity/EntityKnockback.java | 13 ++++++++++--- .../kaboom/extras/modules/entity/EntitySpawn.java | 8 ++++---- .../kaboom/extras/modules/player/PlayerDamage.java | 6 +++--- .../extras/modules/player/PlayerTeleport.java | 2 +- 6 files changed, 23 insertions(+), 16 deletions(-) diff --git a/pom.xml b/pom.xml index 7e5a728d..1dc2f10e 100644 --- a/pom.xml +++ b/pom.xml @@ -5,8 +5,8 @@ master - 17 - 17 + 21 + 21 true UTF-8 @@ -15,14 +15,14 @@ io.papermc.paper paper-api - 1.20.4-R0.1-SNAPSHOT + 1.21.7-R0.1-SNAPSHOT provided com.github.oshi oshi-core - 6.4.5 + 6.6.5 provided diff --git a/src/main/java/pw/kaboom/extras/commands/CommandJumpscare.java b/src/main/java/pw/kaboom/extras/commands/CommandJumpscare.java index 049c84dd..ff1f6254 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandJumpscare.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandJumpscare.java @@ -15,7 +15,7 @@ public final class CommandJumpscare implements CommandExecutor { private void createJumpscare(final Player player) { final int count = 4; - player.spawnParticle(Particle.MOB_APPEARANCE, player.getLocation(), count); + player.spawnParticle(Particle.ELDER_GUARDIAN, player.getLocation(), count); final int maxIterator = 10; for (int i = 0; i <= maxIterator; i++) { diff --git a/src/main/java/pw/kaboom/extras/modules/entity/EntityKnockback.java b/src/main/java/pw/kaboom/extras/modules/entity/EntityKnockback.java index 67dd9eda..27c38a09 100644 --- a/src/main/java/pw/kaboom/extras/modules/entity/EntityKnockback.java +++ b/src/main/java/pw/kaboom/extras/modules/entity/EntityKnockback.java @@ -1,5 +1,6 @@ package pw.kaboom.extras.modules.entity; +import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Arrow; import org.bukkit.entity.EntityType; import org.bukkit.event.EventHandler; @@ -7,6 +8,7 @@ import org.bukkit.event.entity.ProjectileHitEvent; import com.destroystokyo.paper.event.entity.EntityKnockbackByEntityEvent; +import org.bukkit.inventory.ItemStack; public final class EntityKnockback implements Listener { @EventHandler @@ -14,7 +16,7 @@ void onEntityKnockbackByEntity(final EntityKnockbackByEntityEvent event) { final int knockbackLimit = 60; if (event.getKnockbackStrength() > knockbackLimit) { - event.getAcceleration().multiply( + event.getKnockback().multiply( knockbackLimit / event.getKnockbackStrength() ); } @@ -27,8 +29,13 @@ void onProjectileHit(final ProjectileHitEvent event) { final Arrow arrow = (Arrow) event.getEntity(); final int knockbackLimit = 60; - if (arrow.getKnockbackStrength() > knockbackLimit) { - arrow.setKnockbackStrength(knockbackLimit); + final ItemStack weapon = arrow.getWeapon(); + if (weapon == null) return; + + if (weapon.getEnchantmentLevel(Enchantment.KNOCKBACK) > knockbackLimit) { + // replaces if already present + weapon.addUnsafeEnchantment(Enchantment.KNOCKBACK, knockbackLimit); + arrow.setWeapon(weapon); } } } diff --git a/src/main/java/pw/kaboom/extras/modules/entity/EntitySpawn.java b/src/main/java/pw/kaboom/extras/modules/entity/EntitySpawn.java index 8d94ace8..bad8f5ce 100644 --- a/src/main/java/pw/kaboom/extras/modules/entity/EntitySpawn.java +++ b/src/main/java/pw/kaboom/extras/modules/entity/EntitySpawn.java @@ -87,7 +87,7 @@ private boolean isEntityLimitReached(final EntityType entityType, final Chunk ch return true; } break; - case PRIMED_TNT: + case TNT: final int worldTntCount = world.getEntitiesByClass(TNTPrimed.class).size(); if (worldTntCount >= MAX_TNTS_PER_WORLD) { @@ -131,7 +131,7 @@ private void limitSlimeSize(final Slime slime) { } private void limitSpawner(final CreatureSpawner spawner) { - if (EntityType.MINECART_MOB_SPAWNER.equals(spawner.getSpawnedType())) { + if (EntityType.SPAWNER_MINECART.equals(spawner.getSpawnedType())) { spawner.setSpawnedType(EntityType.MINECART); } @@ -159,7 +159,7 @@ void onAreaEffectCloudApply(final AreaEffectCloudApplyEvent event) { @EventHandler void onExplosionPrime(final ExplosionPrimeEvent event) { - if (EntityType.MINECART_TNT.equals(event.getEntityType()) + if (EntityType.TNT_MINECART.equals(event.getEntityType()) && event.getEntity().getWorld() .getEntitiesByClass(ExplosiveMinecart.class).size() > 80) { event.setCancelled(true); @@ -197,7 +197,7 @@ void onItemSpawn(final ItemSpawnEvent event) { @EventHandler void onLightningStrike(final LightningStrikeEvent event) { final LightningStrike lightning = event.getLightning(); - final EntityType entityType = EntityType.LIGHTNING; + final EntityType entityType = EntityType.LIGHTNING_BOLT; final Chunk chunk = lightning.getChunk(); final World world = event.getWorld(); diff --git a/src/main/java/pw/kaboom/extras/modules/player/PlayerDamage.java b/src/main/java/pw/kaboom/extras/modules/player/PlayerDamage.java index 534a9bb8..0e599600 100644 --- a/src/main/java/pw/kaboom/extras/modules/player/PlayerDamage.java +++ b/src/main/java/pw/kaboom/extras/modules/player/PlayerDamage.java @@ -50,7 +50,7 @@ void onEntityRegainHealth(final EntityRegainHealthEvent event) { @EventHandler void onFoodLevelChange(final FoodLevelChangeEvent event) { final HumanEntity player = event.getEntity(); - final AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH); + final AttributeInstance attribute = player.getAttribute(Attribute.MAX_HEALTH); if (attribute == null) return; if (attribute.getValue() <= 0) { Utility.resetAttribute(attribute); @@ -97,7 +97,7 @@ void onPlayerDeath(final PlayerDeathEvent event) { xp.setExperience(event.getDroppedExp()); } - final AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH); + final AttributeInstance attribute = player.getAttribute(Attribute.MAX_HEALTH); if (attribute != null) { Utility.resetAttribute(attribute); } @@ -111,7 +111,7 @@ void onPlayerDeath(final PlayerDeathEvent event) { player.teleportAsync(world.getSpawnLocation()); } } catch (Exception exception) { - final AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH); + final AttributeInstance attribute = player.getAttribute(Attribute.MAX_HEALTH); if (attribute != null) { Utility.resetAttribute(attribute); } diff --git a/src/main/java/pw/kaboom/extras/modules/player/PlayerTeleport.java b/src/main/java/pw/kaboom/extras/modules/player/PlayerTeleport.java index bc58b079..0c94ff2e 100644 --- a/src/main/java/pw/kaboom/extras/modules/player/PlayerTeleport.java +++ b/src/main/java/pw/kaboom/extras/modules/player/PlayerTeleport.java @@ -13,7 +13,7 @@ public final class PlayerTeleport implements Listener { void onPlayerChangedWorld(final PlayerChangedWorldEvent event) { final Player player = event.getPlayer(); - final AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH); + final AttributeInstance attribute = player.getAttribute(Attribute.MAX_HEALTH); if (attribute == null) return; if (attribute.getValue() <= 0) { Utility.resetAttribute(attribute); From 99469ed02838ec75d954d9476ebdce146a20c552 Mon Sep 17 00:00:00 2001 From: amyavi <144570677+amyavi@users.noreply.github.com> Date: Sun, 6 Jul 2025 00:13:56 -0300 Subject: [PATCH 2/6] refactor: cleanup knockback limits --- .../modules/entity/EntityKnockback.java | 40 +++++-------------- 1 file changed, 10 insertions(+), 30 deletions(-) diff --git a/src/main/java/pw/kaboom/extras/modules/entity/EntityKnockback.java b/src/main/java/pw/kaboom/extras/modules/entity/EntityKnockback.java index 27c38a09..b98fbf1b 100644 --- a/src/main/java/pw/kaboom/extras/modules/entity/EntityKnockback.java +++ b/src/main/java/pw/kaboom/extras/modules/entity/EntityKnockback.java @@ -1,42 +1,22 @@ package pw.kaboom.extras.modules.entity; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.EntityType; +import io.papermc.paper.event.entity.EntityKnockbackEvent; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.entity.ProjectileHitEvent; -import com.destroystokyo.paper.event.entity.EntityKnockbackByEntityEvent; -import org.bukkit.inventory.ItemStack; +import org.bukkit.util.Vector; public final class EntityKnockback implements Listener { - @EventHandler - void onEntityKnockbackByEntity(final EntityKnockbackByEntityEvent event) { - final int knockbackLimit = 60; - - if (event.getKnockbackStrength() > knockbackLimit) { - event.getKnockback().multiply( - knockbackLimit / event.getKnockbackStrength() - ); - } - } + private static final double KNOCKBACK_LIMIT = 20; // translates to enchantment level 40 + private static final double KNOCKBACK_LIMIT_SQUARED = KNOCKBACK_LIMIT * KNOCKBACK_LIMIT; @EventHandler - void onProjectileHit(final ProjectileHitEvent event) { - if (event.getHitEntity() != null - && EntityType.ARROW.equals(event.getEntityType())) { - final Arrow arrow = (Arrow) event.getEntity(); - final int knockbackLimit = 60; - - final ItemStack weapon = arrow.getWeapon(); - if (weapon == null) return; - - if (weapon.getEnchantmentLevel(Enchantment.KNOCKBACK) > knockbackLimit) { - // replaces if already present - weapon.addUnsafeEnchantment(Enchantment.KNOCKBACK, knockbackLimit); - arrow.setWeapon(weapon); - } + void onEntityKnockbackByEntity(final EntityKnockbackEvent event) { + final Vector knockback = event.getKnockback(); + final double length = knockback.lengthSquared(); + if (length > KNOCKBACK_LIMIT_SQUARED) { + event.setKnockback(knockback.normalize() + .multiply(KNOCKBACK_LIMIT)); } } } From c7b7563f5d06d6767ef8fdbb4445236695d1656f Mon Sep 17 00:00:00 2001 From: amyavi <144570677+amyavi@users.noreply.github.com> Date: Sun, 6 Jul 2025 00:15:43 -0300 Subject: [PATCH 3/6] refactor: remove BlockPhysicsEvent check I don't think this ever worked, and the thing it was trying to solve was patched in papermixins already. --- .../extras/modules/block/BlockPhysics.java | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/main/java/pw/kaboom/extras/modules/block/BlockPhysics.java b/src/main/java/pw/kaboom/extras/modules/block/BlockPhysics.java index f6f5405e..37314aa3 100644 --- a/src/main/java/pw/kaboom/extras/modules/block/BlockPhysics.java +++ b/src/main/java/pw/kaboom/extras/modules/block/BlockPhysics.java @@ -6,7 +6,6 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockFormEvent; -import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.event.block.BlockRedstoneEvent; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.scheduler.BukkitScheduler; @@ -18,24 +17,6 @@ public final class BlockPhysics implements Listener { // from crashing the server private static double tps = 20; - @EventHandler - void onBlockPhysics(final BlockPhysicsEvent event) { - try { - switch (event.getChangedType()) { - case COMMAND_BLOCK: - case CHAIN_COMMAND_BLOCK: - case REPEATING_COMMAND_BLOCK: - if (Material.STRUCTURE_BLOCK.equals(event.getSourceBlock().getType())) { - event.setCancelled(true); - } - default: - break; - } - } catch (Exception | StackOverflowError e) { - event.setCancelled(true); - } - } - @EventHandler void onBlockRedstone(final BlockRedstoneEvent event) { if (tps < MINIMUM_TPS) { From f217f7c722a71d323e5c311fd7cbf91480522f0c Mon Sep 17 00:00:00 2001 From: amyavi <144570677+amyavi@users.noreply.github.com> Date: Sun, 6 Jul 2025 00:33:33 -0300 Subject: [PATCH 4/6] fix: properly apply spawner limits Makes it check if the delay is _above_ 1000 and removes the unnecessary blockstate clone. --- .../kaboom/extras/modules/entity/EntitySpawn.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/pw/kaboom/extras/modules/entity/EntitySpawn.java b/src/main/java/pw/kaboom/extras/modules/entity/EntitySpawn.java index bad8f5ce..0a176b60 100644 --- a/src/main/java/pw/kaboom/extras/modules/entity/EntitySpawn.java +++ b/src/main/java/pw/kaboom/extras/modules/entity/EntitySpawn.java @@ -135,20 +135,20 @@ private void limitSpawner(final CreatureSpawner spawner) { spawner.setSpawnedType(EntityType.MINECART); } - if (spawner.getDelay() > 100) { - spawner.setMaxSpawnDelay(100); - spawner.setDelay(100); - spawner.update(); + if (spawner.getMinSpawnDelay() < 1000) { + spawner.setMinSpawnDelay(1000); + } + + if (spawner.getMaxSpawnDelay() < 1000) { + spawner.setMaxSpawnDelay(1000); } if (spawner.getSpawnCount() > 200) { spawner.setSpawnCount(200); - spawner.update(); } if (spawner.getSpawnRange() > 50) { spawner.setSpawnRange(50); - spawner.update(); } } @@ -220,7 +220,7 @@ void onPreCreatureSpawn(final PreCreatureSpawnEvent event) { @EventHandler void onPreSpawnerSpawn(final PreSpawnerSpawnEvent event) { try { - limitSpawner((CreatureSpawner) event.getSpawnerLocation().getBlock().getState()); + limitSpawner((CreatureSpawner) event.getSpawnerLocation().getBlock().getState(false)); } catch (Exception exception) { event.setCancelled(true); } From 1e706a44eb0175d90239436c756525041a089b99 Mon Sep 17 00:00:00 2001 From: amyavi <144570677+amyavi@users.noreply.github.com> Date: Sun, 6 Jul 2025 01:27:56 -0300 Subject: [PATCH 5/6] fix: don't try changing the blockstate of spawner minecarts --- .../java/pw/kaboom/extras/modules/entity/EntitySpawn.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/pw/kaboom/extras/modules/entity/EntitySpawn.java b/src/main/java/pw/kaboom/extras/modules/entity/EntitySpawn.java index 0a176b60..99a418d7 100644 --- a/src/main/java/pw/kaboom/extras/modules/entity/EntitySpawn.java +++ b/src/main/java/pw/kaboom/extras/modules/entity/EntitySpawn.java @@ -231,8 +231,10 @@ void onSpawnerSpawn(final SpawnerSpawnEvent event) { if (EntityType.FALLING_BLOCK.equals(event.getEntityType())) { final FallingBlock block = (FallingBlock) event.getEntity(); - if (block.getBlockData().getMaterial().equals(Material.SPAWNER)) { - event.setCancelled(true); + if (!block.getBlockData().getMaterial().equals(Material.SPAWNER)) return; + event.setCancelled(true); + + if (event.getSpawner() != null) { event.getSpawner().setSpawnedType(EntityType.FALLING_BLOCK); } } From c915594d7e66fef381df4262edcf4de9ee32a967 Mon Sep 17 00:00:00 2001 From: amyavi <144570677+amyavi@users.noreply.github.com> Date: Sun, 6 Jul 2025 01:33:21 -0300 Subject: [PATCH 6/6] refactor: fix most deprecation warnings --- .../kaboom/extras/commands/CommandBroadcastVanilla.java | 6 +++--- .../java/pw/kaboom/extras/commands/CommandEnchantAll.java | 8 +++++++- src/main/java/pw/kaboom/extras/commands/CommandPing.java | 2 +- .../pw/kaboom/extras/modules/player/PlayerConnection.java | 2 +- .../pw/kaboom/extras/modules/player/PlayerDamage.java | 4 ++-- src/main/resources/plugin.yml | 2 +- 6 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/main/java/pw/kaboom/extras/commands/CommandBroadcastVanilla.java b/src/main/java/pw/kaboom/extras/commands/CommandBroadcastVanilla.java index 78ea956b..c7782f33 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandBroadcastVanilla.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandBroadcastVanilla.java @@ -33,10 +33,10 @@ public boolean onCommand(final @Nonnull CommandSender sender, final Component senderName = sender.name(); final String input = String.join(" ", args); final Component component = LEGACY_COMPONENT_SERIALIZER.deserialize(input); - final Component broadcastComponent = Component.translatable("chat.type.admin") + final Component broadcastComponent = + Component.translatable("chat.type.admin", senderName, component) .decorate(TextDecoration.ITALIC) - .color(NamedTextColor.GRAY) - .args(senderName, component); + .color(NamedTextColor.GRAY); sender.sendMessage(component); diff --git a/src/main/java/pw/kaboom/extras/commands/CommandEnchantAll.java b/src/main/java/pw/kaboom/extras/commands/CommandEnchantAll.java index 70e64e2a..bd479164 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandEnchantAll.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandEnchantAll.java @@ -1,13 +1,17 @@ package pw.kaboom.extras.commands; +import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryKey; import net.kyori.adventure.text.Component; import org.bukkit.Material; +import org.bukkit.Registry; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; import javax.annotation.Nonnull; @@ -30,7 +34,9 @@ public boolean onCommand(final @Nonnull CommandSender sender, return true; } - for (Enchantment enchantment : Enchantment.values()) { + final Registry<@NotNull Enchantment> registry = RegistryAccess.registryAccess() + .getRegistry(RegistryKey.ENCHANTMENT); + for (Enchantment enchantment : registry) { item.addUnsafeEnchantment(enchantment, Short.MAX_VALUE); } player.sendMessage(Component diff --git a/src/main/java/pw/kaboom/extras/commands/CommandPing.java b/src/main/java/pw/kaboom/extras/commands/CommandPing.java index 7ef81183..bd4ba14f 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandPing.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandPing.java @@ -30,7 +30,7 @@ public boolean onCommand(final @Nonnull CommandSender sender, return true; } - final int ping = target.spigot().getPing(); + final int ping = target.getPing(); final int d = (int) Math.floor((float) ping / 100); NamedTextColor highlighting = NamedTextColor.WHITE; diff --git a/src/main/java/pw/kaboom/extras/modules/player/PlayerConnection.java b/src/main/java/pw/kaboom/extras/modules/player/PlayerConnection.java index 186ef211..41bb5feb 100644 --- a/src/main/java/pw/kaboom/extras/modules/player/PlayerConnection.java +++ b/src/main/java/pw/kaboom/extras/modules/player/PlayerConnection.java @@ -135,7 +135,7 @@ void onPlayerLogin(final PlayerLoginEvent event) { @EventHandler void onPlayerSpawn(final PlayerSpawnLocationEvent event) { if (RANDOMIZE_SPAWN - && event.getPlayer().getBedSpawnLocation() != event.getSpawnLocation()) { + && event.getPlayer().getRespawnLocation() != event.getSpawnLocation()) { final World world = event.getPlayer().getWorld(); final ThreadLocalRandom random = ThreadLocalRandom.current(); diff --git a/src/main/java/pw/kaboom/extras/modules/player/PlayerDamage.java b/src/main/java/pw/kaboom/extras/modules/player/PlayerDamage.java index 0e599600..f3c04bdf 100644 --- a/src/main/java/pw/kaboom/extras/modules/player/PlayerDamage.java +++ b/src/main/java/pw/kaboom/extras/modules/player/PlayerDamage.java @@ -104,8 +104,8 @@ void onPlayerDeath(final PlayerDeathEvent event) { player.setHealth(20); - if (player.getBedSpawnLocation() != null) { - player.teleportAsync(player.getBedSpawnLocation()); + if (player.getRespawnLocation() != null) { + player.teleportAsync(player.getRespawnLocation()); } else { final World world = Bukkit.getWorld("world"); player.teleportAsync(world.getSpawnLocation()); diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index af498ea9..2db20c4c 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: Extras main: pw.kaboom.extras.Main description: Plugin that adds extra functionality to the server. -api-version: '1.19' +api-version: '1.21' version: master commands: