diff --git a/Changelog.txt b/Changelog.txt index 3eb574ec4..f3b117d01 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,5 +1,6 @@ Version 2.2.013 mcMMO now requires Java 21 (see notes) + Modified the RNG for dropping non-ore blocks from Blast Mining to yield about 50% of what was destroyed (API) Deprecated com.gmail.nossr50.mcMMO.getPlaceStore (API) Added com.gmail.nossr50.mcMMO.getUserBlockTracker (API) Added com.gmail.nossr50.mcMMO.getChunkManager diff --git a/pom.xml b/pom.xml index e713003b6..851f41b8a 100644 --- a/pom.xml +++ b/pom.xml @@ -75,7 +75,7 @@ maven-surefire-plugin - 3.0.0-M7 + 3.2.5 org.junit.jupiter:junit-jupiter @@ -85,7 +85,7 @@ maven-failsafe-plugin - 3.0.0-M7 + 3.2.5 org.junit.jupiter:junit-jupiter @@ -113,6 +113,7 @@ maven-assembly-plugin + 3.7.1 src/main/assembly/package.xml @@ -304,42 +305,42 @@ net.kyori adventure-text-serializer-gson - 4.16.0 + 4.17.0 net.kyori adventure-text-serializer-gson-legacy-impl - 4.16.0 + 4.17.0 net.kyori adventure-text-serializer-json - 4.16.0 + 4.17.0 net.kyori adventure-text-serializer-json-legacy-impl - 4.16.0 + 4.17.0 net.kyori adventure-api - 4.16.0 + 4.17.0 net.kyori adventure-nbt - 4.16.0 + 4.17.0 net.kyori adventure-key - 4.16.0 + 4.17.0 net.kyori adventure-platform-api - 4.3.2 + 4.3.3-SNAPSHOT net.kyori @@ -349,12 +350,12 @@ net.kyori adventure-platform-facet - 4.3.2 + 4.3.3-SNAPSHOT net.kyori adventure-platform-viaversion - 4.3.2 + 4.3.3-SNAPSHOT net.kyori @@ -364,12 +365,12 @@ org.apache.maven.scm maven-scm-provider-gitexe - 2.0.0-M1 + 2.1.0 org.bstats bstats-bukkit - 3.0.0 + 3.0.2 compile @@ -411,36 +412,36 @@ org.junit.jupiter junit-jupiter - 5.9.0 + 5.11.0-M2 test org.mockito mockito-core - 4.6.1 + 5.12.0 test org.mockito mockito-inline - 4.6.1 + 5.2.0 test org.apache.tomcat tomcat-jdbc - 10.1.0-M17 + 10.1.24 compile org.jetbrains annotations - 23.0.0 + 24.1.0 com.google.guava guava - 32.1.1-jre + 33.2.0-jre compile diff --git a/src/main/java/com/gmail/nossr50/commands/player/McrankCommand.java b/src/main/java/com/gmail/nossr50/commands/player/McrankCommand.java index e50dbac27..2902c7445 100644 --- a/src/main/java/com/gmail/nossr50/commands/player/McrankCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/player/McrankCommand.java @@ -3,7 +3,7 @@ package com.gmail.nossr50.commands.player; import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.mcMMO; -import com.gmail.nossr50.runnables.commands.McrankCommandAsyncTask; +import com.gmail.nossr50.runnables.commands.McRankCommandAsyncTask; import com.gmail.nossr50.util.MetadataConstants; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.commands.CommandUtils; @@ -111,7 +111,7 @@ public class McrankCommand implements TabExecutor { boolean useBoard = mcMMO.p.getGeneralConfig().getScoreboardsEnabled() && (sender instanceof Player) && (mcMMO.p.getGeneralConfig().getRankUseBoard()); boolean useChat = !useBoard || mcMMO.p.getGeneralConfig().getRankUseChat(); - mcMMO.p.getFoliaLib().getImpl().runAsync(new McrankCommandAsyncTask(playerName, sender, useBoard, useChat)); + mcMMO.p.getFoliaLib().getImpl().runAsync(new McRankCommandAsyncTask(playerName, sender, useBoard, useChat)); } private long getCDSeconds(McMMOPlayer mcMMOPlayer, long cooldownMillis) { diff --git a/src/main/java/com/gmail/nossr50/commands/player/MctopCommand.java b/src/main/java/com/gmail/nossr50/commands/player/MctopCommand.java index 86b1757e9..12e966a6c 100644 --- a/src/main/java/com/gmail/nossr50/commands/player/MctopCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/player/MctopCommand.java @@ -4,7 +4,7 @@ import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.datatypes.skills.PrimarySkillType; import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.mcMMO; -import com.gmail.nossr50.runnables.commands.MctopCommandAsyncTask; +import com.gmail.nossr50.runnables.commands.McTopCommandAsyncTask; import com.gmail.nossr50.util.MetadataConstants; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.commands.CommandUtils; @@ -115,7 +115,7 @@ public class MctopCommand implements TabExecutor { boolean useBoard = (sender instanceof Player) && (mcMMO.p.getGeneralConfig().getTopUseBoard()); boolean useChat = !useBoard || mcMMO.p.getGeneralConfig().getTopUseChat(); - mcMMO.p.getFoliaLib().getImpl().runAsync(new MctopCommandAsyncTask(page, skill, sender, useBoard, useChat)); + mcMMO.p.getFoliaLib().getImpl().runAsync(new McTopCommandAsyncTask(page, skill, sender, useBoard, useChat)); } private PrimarySkillType extractSkill(CommandSender sender, String skillName) { diff --git a/src/main/java/com/gmail/nossr50/config/mods/CustomEntityLegacyConfig.java b/src/main/java/com/gmail/nossr50/config/mods/CustomEntityLegacyConfig.java index 37244835c..99b3b0761 100644 --- a/src/main/java/com/gmail/nossr50/config/mods/CustomEntityLegacyConfig.java +++ b/src/main/java/com/gmail/nossr50/config/mods/CustomEntityLegacyConfig.java @@ -3,7 +3,6 @@ package com.gmail.nossr50.config.mods; import com.gmail.nossr50.config.LegacyConfigLoader; import com.gmail.nossr50.datatypes.mods.CustomEntity; import com.gmail.nossr50.mcMMO; -import org.apache.commons.lang.ClassUtils; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -30,7 +29,7 @@ public class CustomEntityLegacyConfig extends LegacyConfigLoader { String className = config.getString(entityName + ".Class", ""); try { - clazz = ClassUtils.getClass(className); + clazz = Class.forName(className); } catch (ClassNotFoundException e) { mcMMO.p.getLogger().warning("Invalid class (" + className + ") detected for " + entityName + "."); mcMMO.p.getLogger().warning("This custom entity may not function properly."); diff --git a/src/main/java/com/gmail/nossr50/database/FlatFileDataProcessor.java b/src/main/java/com/gmail/nossr50/database/FlatFileDataProcessor.java index e64deaae7..8f68b7bcf 100644 --- a/src/main/java/com/gmail/nossr50/database/FlatFileDataProcessor.java +++ b/src/main/java/com/gmail/nossr50/database/FlatFileDataProcessor.java @@ -300,7 +300,7 @@ public class FlatFileDataProcessor { //We add a trailing : as it is needed for some reason (is it?) //TODO: Is the trailing ":" actually necessary? - String fromSplit = org.apache.commons.lang.StringUtils.join(splitData, ":") + ":"; + String fromSplit = org.apache.commons.lang3.StringUtils.join(splitData, ":") + ":"; stringBuilder.append(fromSplit).append("\r\n"); } diff --git a/src/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java b/src/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java index 10dca3354..9cd09710d 100644 --- a/src/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java +++ b/src/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java @@ -234,7 +234,7 @@ public final class FlatFileDatabaseManager implements DatabaseManager { if (rewrite) { // Rewrite their data with a valid time character[OVERHAUL_LAST_LOGIN] = Long.toString(lastPlayed); - String newLine = org.apache.commons.lang.StringUtils.join(character, ":"); + String newLine = org.apache.commons.lang3.StringUtils.join(character, ":"); writer.append(newLine).append("\r\n"); } else { writer.append(line).append("\r\n"); @@ -905,7 +905,7 @@ public final class FlatFileDatabaseManager implements DatabaseManager { } character[UUID_INDEX] = fetchedUUIDs.remove(character[USERNAME_INDEX]).toString(); - line = org.apache.commons.lang.StringUtils.join(character, ":") + ":"; + line = org.apache.commons.lang3.StringUtils.join(character, ":") + ":"; } i++; diff --git a/src/main/java/com/gmail/nossr50/placeholders/PartyLeaderPlaceholder.java b/src/main/java/com/gmail/nossr50/placeholders/PartyLeaderPlaceholder.java index 3f753bed9..bd301b52d 100644 --- a/src/main/java/com/gmail/nossr50/placeholders/PartyLeaderPlaceholder.java +++ b/src/main/java/com/gmail/nossr50/placeholders/PartyLeaderPlaceholder.java @@ -1,6 +1,6 @@ package com.gmail.nossr50.placeholders; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.bukkit.entity.Player; public class PartyLeaderPlaceholder implements Placeholder { @@ -12,7 +12,7 @@ public class PartyLeaderPlaceholder implements Placeholder { @Override public String process(Player player, String params) { - return StringUtils.stripToEmpty(papiExpansion.getPartyLeader(player)); + return StringUtils.trimToEmpty(papiExpansion.getPartyLeader(player)); } @Override diff --git a/src/main/java/com/gmail/nossr50/placeholders/PartyNamePlaceholder.java b/src/main/java/com/gmail/nossr50/placeholders/PartyNamePlaceholder.java index 2cec030d6..e35346887 100644 --- a/src/main/java/com/gmail/nossr50/placeholders/PartyNamePlaceholder.java +++ b/src/main/java/com/gmail/nossr50/placeholders/PartyNamePlaceholder.java @@ -1,6 +1,6 @@ package com.gmail.nossr50.placeholders; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.bukkit.entity.Player; public class PartyNamePlaceholder implements Placeholder { @@ -12,7 +12,7 @@ public class PartyNamePlaceholder implements Placeholder { @Override public String process(Player player, String params) { - return StringUtils.stripToEmpty(papiExpansion.getPartyName(player)); + return StringUtils.trimToEmpty(papiExpansion.getPartyName(player)); } @Override diff --git a/src/main/java/com/gmail/nossr50/runnables/commands/McrankCommandAsyncTask.java b/src/main/java/com/gmail/nossr50/runnables/commands/McRankCommandAsyncTask.java similarity index 88% rename from src/main/java/com/gmail/nossr50/runnables/commands/McrankCommandAsyncTask.java rename to src/main/java/com/gmail/nossr50/runnables/commands/McRankCommandAsyncTask.java index 2897b4388..4b24b329a 100644 --- a/src/main/java/com/gmail/nossr50/runnables/commands/McrankCommandAsyncTask.java +++ b/src/main/java/com/gmail/nossr50/runnables/commands/McRankCommandAsyncTask.java @@ -3,18 +3,18 @@ package com.gmail.nossr50.runnables.commands; import com.gmail.nossr50.datatypes.skills.PrimarySkillType; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.util.CancellableRunnable; -import org.apache.commons.lang.Validate; +import org.apache.commons.lang3.Validate; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.util.Map; -public class McrankCommandAsyncTask extends CancellableRunnable { +public class McRankCommandAsyncTask extends CancellableRunnable { private final String playerName; private final CommandSender sender; private final boolean useBoard, useChat; - public McrankCommandAsyncTask(String playerName, CommandSender sender, boolean useBoard, boolean useChat) { + public McRankCommandAsyncTask(String playerName, CommandSender sender, boolean useBoard, boolean useChat) { Validate.isTrue(useBoard || useChat, "Attempted to start a rank retrieval with both board and chat off"); Validate.notNull(sender, "Attempted to start a rank retrieval with no recipient"); diff --git a/src/main/java/com/gmail/nossr50/runnables/commands/MctopCommandAsyncTask.java b/src/main/java/com/gmail/nossr50/runnables/commands/McTopCommandAsyncTask.java similarity index 89% rename from src/main/java/com/gmail/nossr50/runnables/commands/MctopCommandAsyncTask.java rename to src/main/java/com/gmail/nossr50/runnables/commands/McTopCommandAsyncTask.java index a343bc810..f0f0bc05e 100644 --- a/src/main/java/com/gmail/nossr50/runnables/commands/MctopCommandAsyncTask.java +++ b/src/main/java/com/gmail/nossr50/runnables/commands/McTopCommandAsyncTask.java @@ -4,19 +4,19 @@ import com.gmail.nossr50.datatypes.database.PlayerStat; import com.gmail.nossr50.datatypes.skills.PrimarySkillType; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.util.CancellableRunnable; -import org.apache.commons.lang.Validate; +import org.apache.commons.lang3.Validate; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.util.List; -public class MctopCommandAsyncTask extends CancellableRunnable { +public class McTopCommandAsyncTask extends CancellableRunnable { private final CommandSender sender; private final PrimarySkillType skill; private final int page; private final boolean useBoard, useChat; - public MctopCommandAsyncTask(int page, PrimarySkillType skill, CommandSender sender, boolean useBoard, boolean useChat) { + public McTopCommandAsyncTask(int page, PrimarySkillType skill, CommandSender sender, boolean useBoard, boolean useChat) { Validate.isTrue(useBoard || useChat, "Attempted to start a rank retrieval with both board and chat off"); Validate.notNull(sender, "Attempted to start a rank retrieval with no recipient"); diff --git a/src/main/java/com/gmail/nossr50/runnables/commands/MctopCommandDisplayTask.java b/src/main/java/com/gmail/nossr50/runnables/commands/MctopCommandDisplayTask.java index 7ed51f3ad..3cb06bff0 100644 --- a/src/main/java/com/gmail/nossr50/runnables/commands/MctopCommandDisplayTask.java +++ b/src/main/java/com/gmail/nossr50/runnables/commands/MctopCommandDisplayTask.java @@ -14,7 +14,7 @@ import org.bukkit.entity.Player; import java.util.List; /** - * Display the results of {@link MctopCommandAsyncTask} to the sender. + * Display the results of {@link McTopCommandAsyncTask} to the sender. */ public class MctopCommandDisplayTask extends CancellableRunnable { private final List userStats; diff --git a/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java b/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java index aaac5e7fc..3bb866cdd 100644 --- a/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java +++ b/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java @@ -13,10 +13,11 @@ import com.gmail.nossr50.runnables.skills.AbilityCooldownTask; import com.gmail.nossr50.skills.SkillManager; import com.gmail.nossr50.util.*; import com.gmail.nossr50.util.player.NotificationManager; +import com.gmail.nossr50.util.random.Probability; import com.gmail.nossr50.util.random.ProbabilityUtil; import com.gmail.nossr50.util.skills.RankUtils; import com.gmail.nossr50.util.skills.SkillUtils; -import org.apache.commons.lang.math.RandomUtils; +import org.apache.commons.lang3.RandomUtils; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockState; @@ -202,7 +203,7 @@ public class MiningManager extends SkillManager { if (isDropIllegal(blockState.getType())) continue; - if (RandomUtils.nextFloat() < debrisYield) { + if (Probability.ofPercent(50).evaluate()) { Misc.spawnItem(getPlayer(), Misc.getBlockCenter(blockState), new ItemStack(blockState.getType()), ItemSpawnReason.BLAST_MINING_DEBRIS_NON_ORES); // Initial block that would have been dropped } } diff --git a/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java b/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java index c6e5377fb..881ea31e4 100644 --- a/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java +++ b/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java @@ -18,7 +18,6 @@ import com.gmail.nossr50.util.player.UserManager; import com.gmail.nossr50.util.scoreboards.ScoreboardManager.SidebarType; import com.gmail.nossr50.util.skills.SkillTools; import com.tcoded.folialib.wrapper.task.WrappedTask; -import org.apache.commons.lang.Validate; import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.scoreboard.DisplaySlot; @@ -30,6 +29,8 @@ import org.jetbrains.annotations.NotNull; import java.util.List; import java.util.Map; +import static java.util.Objects.requireNonNull; + public class ScoreboardWrapper { public static final String SIDE_OBJECTIVE = "mcMMO_sideObjective"; public static final String POWER_OBJECTIVE = "mcMMO_powerObjective"; @@ -485,7 +486,7 @@ public class ScoreboardWrapper { break; case SKILL_BOARD: - Validate.notNull(targetSkill); + requireNonNull(targetSkill); if (!SkillTools.isChildSkill(targetSkill)) { int currentXP = mcMMOPlayer.getSkillXpLevel(targetSkill); diff --git a/src/main/java/com/gmail/nossr50/util/skills/ParticleEffectUtils.java b/src/main/java/com/gmail/nossr50/util/skills/ParticleEffectUtils.java index 7cd22a75f..c0e17bbe8 100644 --- a/src/main/java/com/gmail/nossr50/util/skills/ParticleEffectUtils.java +++ b/src/main/java/com/gmail/nossr50/util/skills/ParticleEffectUtils.java @@ -3,7 +3,7 @@ package com.gmail.nossr50.util.skills; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.util.sounds.SoundManager; import com.gmail.nossr50.util.sounds.SoundType; -import org.apache.commons.lang.math.RandomUtils; +import org.apache.commons.lang3.RandomUtils; import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; @@ -42,31 +42,22 @@ public final class ParticleEffectUtils { double offSetVal = 0.3D; - switch(RandomUtils.nextInt(10)) { - - case 0: - return new Location(world, x - offSetVal, y, z); - case 1: - return new Location(world, x + offSetVal, y, z); - case 2: - return new Location(world, x, y + offSetVal, z); - case 3: - return new Location(world, x, y - offSetVal, z); - case 4: Location locE = new Location(world, x, y, z + offSetVal); - return new Location(world, x, y, z - offSetVal); - case 5: - return new Location(world, x + offSetVal, y, z + offSetVal); - case 6: - return new Location(world, x - offSetVal, y, z - offSetVal); - case 7: - return new Location(world, x - offSetVal, y - offSetVal, z - offSetVal); - case 8: - return new Location(world, x + offSetVal, y - offSetVal, z + offSetVal); - case 9: - return new Location(world, x - offSetVal, y + offSetVal, z - offSetVal); - default: - return new Location(world, x + offSetVal, y + offSetVal, z - offSetVal); - } + return switch (RandomUtils.nextInt(0, 10)) { + case 0 -> new Location(world, x - offSetVal, y, z); + case 1 -> new Location(world, x + offSetVal, y, z); + case 2 -> new Location(world, x, y + offSetVal, z); + case 3 -> new Location(world, x, y - offSetVal, z); + case 4 -> { + Location locE = new Location(world, x, y, z + offSetVal); + yield new Location(world, x, y, z - offSetVal); + } + case 5 -> new Location(world, x + offSetVal, y, z + offSetVal); + case 6 -> new Location(world, x - offSetVal, y, z - offSetVal); + case 7 -> new Location(world, x - offSetVal, y - offSetVal, z - offSetVal); + case 8 -> new Location(world, x + offSetVal, y - offSetVal, z + offSetVal); + case 9 -> new Location(world, x - offSetVal, y + offSetVal, z - offSetVal); + default -> new Location(world, x + offSetVal, y + offSetVal, z - offSetVal); + }; } public static void playDodgeEffect(Player player) {