From 9639dde2dfaad9409f35596d3ad58adc9494b786 Mon Sep 17 00:00:00 2001 From: Luna Date: Sat, 1 Jul 2023 20:44:59 -0300 Subject: [PATCH] Remove usage of deprecated APIs --- .../extras/commands/CommandConsole.java | 5 ++-- .../extras/commands/CommandUsername.java | 12 ++++----- .../extras/modules/block/BlockPhysics.java | 8 ------ .../modules/player/PlayerConnection.java | 26 +++++++++---------- .../extras/modules/player/PlayerDamage.java | 25 +++++++++++------- .../extras/modules/player/PlayerInteract.java | 4 --- .../extras/modules/player/PlayerTeleport.java | 11 +++++--- .../java/pw/kaboom/extras/util/Utility.java | 23 ++++++++++++++++ 8 files changed, 67 insertions(+), 47 deletions(-) diff --git a/src/main/java/pw/kaboom/extras/commands/CommandConsole.java b/src/main/java/pw/kaboom/extras/commands/CommandConsole.java index b487d73..aaeaead 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandConsole.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandConsole.java @@ -3,10 +3,10 @@ package pw.kaboom.extras.commands; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; +import pw.kaboom.extras.util.Utility; import javax.annotation.Nonnull; @@ -24,8 +24,7 @@ public final class CommandConsole implements CommandExecutor { Bukkit.dispatchCommand( Bukkit.getConsoleSender(), - "minecraft:say " + ChatColor.translateAlternateColorCodes( - '&', String.join(" ", args)) + "minecraft:say " + Utility.translateLegacyColors(String.join(" ", args)) ); return true; } diff --git a/src/main/java/pw/kaboom/extras/commands/CommandUsername.java b/src/main/java/pw/kaboom/extras/commands/CommandUsername.java index f42804a..f0274b5 100644 --- a/src/main/java/pw/kaboom/extras/commands/CommandUsername.java +++ b/src/main/java/pw/kaboom/extras/commands/CommandUsername.java @@ -4,11 +4,11 @@ import com.destroystokyo.paper.profile.PlayerProfile; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import pw.kaboom.extras.util.Utility; import javax.annotation.Nonnull; import java.util.HashMap; @@ -28,8 +28,7 @@ public final class CommandUsername implements CommandExecutor { return true; } - final String nameColor = ChatColor.translateAlternateColorCodes( - '&', String.join(" ", args)); + final String nameColor = Utility.translateLegacyColors(String.join(" ", args)); final String name = nameColor.substring(0, Math.min(16, nameColor.length())); final long millis = lastUsedMillis.getOrDefault(player, 0L); final long millisDifference = System.currentTimeMillis() - millis; @@ -61,10 +60,11 @@ public final class CommandUsername implements CommandExecutor { return true; } - final PlayerProfile profile = player.getPlayerProfile(); + // Preserve UUIDs, as changing them breaks clients + final PlayerProfile newProfile = Bukkit.createProfileExact(player.getUniqueId(), name); + newProfile.setProperties(player.getPlayerProfile().getProperties()); - profile.setName(name); // FIXME: Marked for removal - player.setPlayerProfile(profile); + player.setPlayerProfile(newProfile); lastUsedMillis.put(player, System.currentTimeMillis()); player.sendMessage( 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 4f1bbad..c7dc005 100644 --- a/src/main/java/pw/kaboom/extras/modules/block/BlockPhysics.java +++ b/src/main/java/pw/kaboom/extras/modules/block/BlockPhysics.java @@ -1,21 +1,13 @@ package pw.kaboom.extras.modules.block; -import java.util.HashSet; - import org.bukkit.Bukkit; import org.bukkit.Material; -import org.bukkit.block.BlockFace; import org.bukkit.entity.EntityType; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockFadeEvent; -import org.bukkit.event.block.BlockFormEvent; -import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.event.block.BlockRedstoneEvent; import org.bukkit.event.entity.EntityChangeBlockEvent; - -import com.destroystokyo.paper.event.block.BlockDestroyEvent; import org.bukkit.scheduler.BukkitScheduler; import pw.kaboom.extras.Main; 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 be42ea9..6f1ee1d 100644 --- a/src/main/java/pw/kaboom/extras/modules/player/PlayerConnection.java +++ b/src/main/java/pw/kaboom/extras/modules/player/PlayerConnection.java @@ -3,6 +3,8 @@ package pw.kaboom.extras.modules.player; import com.destroystokyo.paper.event.profile.PreLookupProfileEvent; import com.destroystokyo.paper.profile.ProfileProperty; import com.google.common.base.Charsets; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.title.Title; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Server; @@ -20,6 +22,7 @@ import pw.kaboom.extras.modules.server.ServerTabComplete; import pw.kaboom.extras.modules.player.skin.SkinManager; import pw.kaboom.extras.util.Utility; +import java.time.Duration; import java.util.HashSet; import java.util.UUID; import java.util.concurrent.ThreadLocalRandom; @@ -28,9 +31,9 @@ public final class PlayerConnection implements Listener { private static final FileConfiguration CONFIG = JavaPlugin.getPlugin(Main.class).getConfig(); private static final String TITLE = CONFIG.getString("playerJoinTitle"); private static final String SUBTITLE = CONFIG.getString("playerJoinSubtitle"); - private static final int FADE_IN = 10; - private static final int STAY = 160; - private static final int FADE_OUT = 5; + private static final Duration FADE_IN = Duration.ofMillis(50); + private static final Duration STAY = Duration.ofMillis(8000); + private static final Duration FADE_OUT = Duration.ofMillis(250); private static final boolean ENABLE_KICK = CONFIG.getBoolean("enableKick"); private static final boolean ENABLE_JOIN_RESTRICTIONS = CONFIG.getBoolean( @@ -46,7 +49,7 @@ public final class PlayerConnection implements Listener { if (player != null) { event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, - "A player with that username is already logged in"); + Component.text("A player with that username is already logged in")); } /*try { @@ -67,15 +70,12 @@ public final class PlayerConnection implements Listener { void onPlayerJoin(final PlayerJoinEvent event) { final Player player = event.getPlayer(); - if (TITLE != null - || SUBTITLE != null) { - player.sendTitle( - TITLE, - SUBTITLE, - FADE_IN, - STAY, - FADE_OUT - ); + if (TITLE != null || SUBTITLE != null) { + player.showTitle(Title.title( + Component.text(TITLE), + Component.text(SUBTITLE), + Title.Times.times(FADE_IN, STAY, FADE_OUT) + )); } ServerTabComplete.getLoginNameList().put(player.getUniqueId(), player.getName()); 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 6257d42..cf95d3f 100644 --- a/src/main/java/pw/kaboom/extras/modules/player/PlayerDamage.java +++ b/src/main/java/pw/kaboom/extras/modules/player/PlayerDamage.java @@ -2,6 +2,8 @@ package pw.kaboom.extras.modules.player; import org.bukkit.Bukkit; import org.bukkit.World; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeInstance; import org.bukkit.entity.EntityType; import org.bukkit.entity.ExperienceOrb; import org.bukkit.entity.HumanEntity; @@ -15,6 +17,7 @@ import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; +import pw.kaboom.extras.util.Utility; public final class PlayerDamage implements Listener { @EventHandler @@ -34,19 +37,17 @@ public final class PlayerDamage implements Listener { } } - @SuppressWarnings("deprecation") @EventHandler void onFoodLevelChange(final FoodLevelChangeEvent event) { final HumanEntity player = event.getEntity(); - - if (player.getMaxHealth() <= 0) { - player.setMaxHealth(Double.POSITIVE_INFINITY); + final AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH); + if (attribute == null) return; + if (attribute.getValue() <= 0) { + Utility.resetAttribute(attribute); player.setHealth(20); - player.setMaxHealth(20); } } - @SuppressWarnings("deprecation") @EventHandler void onPlayerDeath(final PlayerDeathEvent event) { final Player player = event.getEntity(); @@ -70,7 +71,11 @@ public final class PlayerDamage implements Listener { xp.setExperience(event.getDroppedExp()); } - player.setMaxHealth(20); + final AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH); + if (attribute != null) { + Utility.resetAttribute(attribute); + } + player.setHealth(20); if (player.getBedSpawnLocation() != null) { @@ -80,9 +85,11 @@ public final class PlayerDamage implements Listener { player.teleportAsync(world.getSpawnLocation()); } } catch (Exception exception) { - player.setMaxHealth(Double.POSITIVE_INFINITY); + final AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH); + if (attribute != null) { + Utility.resetAttribute(attribute); + } player.setHealth(20); - player.setMaxHealth(20); } player.setExp(event.getNewExp()); diff --git a/src/main/java/pw/kaboom/extras/modules/player/PlayerInteract.java b/src/main/java/pw/kaboom/extras/modules/player/PlayerInteract.java index f48c7be..b578604 100644 --- a/src/main/java/pw/kaboom/extras/modules/player/PlayerInteract.java +++ b/src/main/java/pw/kaboom/extras/modules/player/PlayerInteract.java @@ -1,13 +1,9 @@ package pw.kaboom.extras.modules.player; import org.bukkit.Material; -import org.bukkit.block.BlockState; -import org.bukkit.block.Sign; import org.bukkit.enchantments.Enchantment; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; 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 cf72dad..bc58b07 100644 --- a/src/main/java/pw/kaboom/extras/modules/player/PlayerTeleport.java +++ b/src/main/java/pw/kaboom/extras/modules/player/PlayerTeleport.java @@ -1,20 +1,23 @@ package pw.kaboom.extras.modules.player; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeInstance; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerChangedWorldEvent; -import org.bukkit.event.player.PlayerTeleportEvent; +import pw.kaboom.extras.util.Utility; public final class PlayerTeleport implements Listener { @EventHandler void onPlayerChangedWorld(final PlayerChangedWorldEvent event) { final Player player = event.getPlayer(); - if (player.getMaxHealth() <= 0) { - player.setMaxHealth(Double.POSITIVE_INFINITY); + final AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH); + if (attribute == null) return; + if (attribute.getValue() <= 0) { + Utility.resetAttribute(attribute); player.setHealth(20); - player.setMaxHealth(20); } } } diff --git a/src/main/java/pw/kaboom/extras/util/Utility.java b/src/main/java/pw/kaboom/extras/util/Utility.java index e10c9bb..ec56487 100644 --- a/src/main/java/pw/kaboom/extras/util/Utility.java +++ b/src/main/java/pw/kaboom/extras/util/Utility.java @@ -1,8 +1,11 @@ package pw.kaboom.extras.util; import org.bukkit.Bukkit; +import org.bukkit.attribute.AttributeInstance; +import org.bukkit.attribute.AttributeModifier; import org.bukkit.entity.Player; +import javax.annotation.Nonnull; import javax.annotation.Nullable; public final class Utility { @@ -13,4 +16,24 @@ public final class Utility { .findFirst() .orElse(null); } + + public static void resetAttribute(final AttributeInstance attribute) { + for (final AttributeModifier modifier: attribute.getModifiers()) { + attribute.removeModifier(modifier); + } + + attribute.setBaseValue(attribute.getDefaultValue()); + } + + // TODO: Support hex color codes, too (they aren't supported in Spigot either) + public static String translateLegacyColors(@Nonnull String text) { + char[] b = text.toCharArray(); + for (int i = 0; i < b.length - 1; i++) { + if (b[i] == '&' && "0123456789AaBbCcDdEeFfKkLlMmNnOoRrXx".indexOf(b[i + 1]) > -1) { + b[i] = '\u00a7'; + b[i + 1] = Character.toLowerCase(b[i + 1]); + } + } + return new String(b); + } }