From 84ed09d35a5bb2dcda65fb9a47609a7b475be80a Mon Sep 17 00:00:00 2001 From: Xiao-MoMi <70987828+Xiao-MoMi@users.noreply.github.com> Date: Tue, 14 Mar 2023 21:10:31 +0800 Subject: [PATCH] 2.2.7.1 --- build.gradle | 2 +- .../momirealms/customcrops/CustomCrops.java | 8 +--- .../customcrops/api/utils/SeasonUtils.java | 1 - .../customcrops/api/utils/WorldUtils.java | 30 ------------ .../commands/AbstractSubCommand.java | 8 ++-- .../customcrops/config/MainConfig.java | 39 --------------- .../customcrops/helper/VersionHelper.java | 47 ++++++++++++++++++- .../customplugin/oraxen/OraxenHook.java | 2 +- .../integrations/papi/SeasonPapi.java | 12 ++--- .../protection/WorldGuardHook.java | 23 ++------- .../integrations/season/InternalSeason.java | 9 ++-- .../customcrops/managers/CropManager.java | 20 ++++---- .../customcrops/managers/timer/TimerTask.java | 18 ++++--- src/main/resources/plugin.yml | 1 + 14 files changed, 93 insertions(+), 127 deletions(-) diff --git a/build.gradle b/build.gradle index 26966c9..aaeb889 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group = 'net.momirealms' -version = '2.2.6-hotfix' +version = '2.2.7.1' repositories { mavenCentral() diff --git a/src/main/java/net/momirealms/customcrops/CustomCrops.java b/src/main/java/net/momirealms/customcrops/CustomCrops.java index fc01e3f..00e06b1 100644 --- a/src/main/java/net/momirealms/customcrops/CustomCrops.java +++ b/src/main/java/net/momirealms/customcrops/CustomCrops.java @@ -81,14 +81,9 @@ public final class CustomCrops extends JavaPlugin { public void onEnable() { adventure = BukkitAudiences.create(plugin); protocolManager = ProtocolLibrary.getProtocolManager(); + this.versionHelper = new VersionHelper(this); AdventureUtil.consoleMessage("[CustomCrops] Running on " + Bukkit.getVersion()); - - MinecraftVersion.disableBStats(); - MinecraftVersion.disablePackageWarning(); - MinecraftVersion.disableUpdateCheck(); - MinecraftVersion.getVersion(); VersionChecker.hideOk = true; - if (Bukkit.getPluginManager().getPlugin("ItemsAdder") != null) { MainConfig.customPlugin = "itemsadder"; AdventureUtil.consoleMessage("[CustomCrops] Custom Item Plugin Platform: <#BA55D3>ItemsAdder"); @@ -110,7 +105,6 @@ public final class CustomCrops extends JavaPlugin { Objects.requireNonNull(Bukkit.getPluginCommand("customcrops")).setTabCompleter(pluginCommand); this.cropManager = new CropManager(); - this.versionHelper = new VersionHelper(); if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { this.placeholderManager = new PlaceholderManager(); diff --git a/src/main/java/net/momirealms/customcrops/api/utils/SeasonUtils.java b/src/main/java/net/momirealms/customcrops/api/utils/SeasonUtils.java index 2cb0c5e..66218ea 100644 --- a/src/main/java/net/momirealms/customcrops/api/utils/SeasonUtils.java +++ b/src/main/java/net/momirealms/customcrops/api/utils/SeasonUtils.java @@ -63,7 +63,6 @@ public class SeasonUtils { case AUTUMN -> MessageConfig.autumn; case WINTER -> MessageConfig.winter; case UNKNOWN -> "Error"; - default -> throw new IllegalStateException("Unexpected value: " + season); }; } } diff --git a/src/main/java/net/momirealms/customcrops/api/utils/WorldUtils.java b/src/main/java/net/momirealms/customcrops/api/utils/WorldUtils.java index 8829c07..c4a4fce 100644 --- a/src/main/java/net/momirealms/customcrops/api/utils/WorldUtils.java +++ b/src/main/java/net/momirealms/customcrops/api/utils/WorldUtils.java @@ -42,34 +42,4 @@ public class WorldUtils { public static void unloadCropWorld(World world, boolean sync) { CustomCrops.plugin.getCropManager().onWorldUnload(world, sync); } - - /** - * Add a world to the world list - * @param world world - */ - public static void addWorldToWorldList(World world) { - MainConfig.worldList.add(world); - MainConfig.worlds = MainConfig.worldList.toArray(new World[0]); - } - - /** - * Remove a world from world list - * @param world world - * @return success or not - */ - public static boolean removeWorldFromWorldList(World world) { - boolean success = MainConfig.worldList.remove(world); - if (success) { - MainConfig.worlds = MainConfig.worldList.toArray(new World[0]); - } - return success; - } - - /** - * get the world list - * @return world list - */ - public static List getWorldList() { - return MainConfig.worldList; - } } diff --git a/src/main/java/net/momirealms/customcrops/commands/AbstractSubCommand.java b/src/main/java/net/momirealms/customcrops/commands/AbstractSubCommand.java index d716394..059cd21 100644 --- a/src/main/java/net/momirealms/customcrops/commands/AbstractSubCommand.java +++ b/src/main/java/net/momirealms/customcrops/commands/AbstractSubCommand.java @@ -87,11 +87,11 @@ public abstract class AbstractSubCommand implements SubCommand { } public List getWorlds(List args) { - List worlds = MainConfig.getWorldsList(); + List worlds = MainConfig.getWorldNameList(); List worldNames = new ArrayList<>(); - for (World world : worlds) { - if (world.getName().startsWith(args.get(0))) { - worldNames.add(world.getName()); + for (String world : worlds) { + if (world.startsWith(args.get(0))) { + worldNames.add(world); } } return worldNames; diff --git a/src/main/java/net/momirealms/customcrops/config/MainConfig.java b/src/main/java/net/momirealms/customcrops/config/MainConfig.java index c1fff3e..cac9c47 100644 --- a/src/main/java/net/momirealms/customcrops/config/MainConfig.java +++ b/src/main/java/net/momirealms/customcrops/config/MainConfig.java @@ -38,9 +38,6 @@ import java.util.List; public class MainConfig { - public static World[] worlds; - public static String[] worldNames; - public static List worldList; public static List worldNameList; public static boolean whiteOrBlack; public static boolean dropLootsInAllWorlds; @@ -138,21 +135,7 @@ public class MainConfig { whiteOrBlack = config.getString("worlds.mode","whitelist").equals("whitelist"); worldNameList = config.getStringList("worlds.list"); - worlds = new World[worldNameList.size()]; - for (int i = 0; i < worldNameList.size(); i++) { - if (Bukkit.getWorld(worldNameList.get(i)) != null) { - worlds[i] = Bukkit.getWorld(worldNameList.get(i)); - } - } - worldList = new ArrayList<>(); - for (World world : worlds) { - if (world == null) continue; - worldList.add(world); - } - - worlds = worldList.toArray(new World[0]); - worldNames = worldNameList.toArray(new String[0]); worldFolder = StringUtils.replace(config.getString("worlds.worlds-folder",""), "\\", File.separator); cropMode = config.getString("mechanics.crops-mode", "tripwire").equals("tripwire"); @@ -404,28 +387,6 @@ public class MainConfig { } } - public static World[] getWorldsArray() { - if (MainConfig.whiteOrBlack) { - return worlds; - } - else { - List worldList = new ArrayList<>(Bukkit.getWorlds()); - worldList.removeAll(MainConfig.worldList); - return worldList.toArray(new World[0]); - } - } - - public static List getWorldsList() { - if (MainConfig.whiteOrBlack) { - return worldList; - } - else { - List worldList = new ArrayList<>(Bukkit.getWorlds()); - worldList.removeAll(MainConfig.worldList); - return worldList; - } - } - public static List getWorldNameList() { if (whiteOrBlack) { return worldNameList; diff --git a/src/main/java/net/momirealms/customcrops/helper/VersionHelper.java b/src/main/java/net/momirealms/customcrops/helper/VersionHelper.java index 7666897..05ee555 100644 --- a/src/main/java/net/momirealms/customcrops/helper/VersionHelper.java +++ b/src/main/java/net/momirealms/customcrops/helper/VersionHelper.java @@ -1,15 +1,27 @@ package net.momirealms.customcrops.helper; +import de.tr7zw.changeme.nbtapi.utils.MinecraftVersion; +import de.tr7zw.changeme.nbtapi.utils.VersionChecker; +import net.momirealms.customcrops.CustomCrops; import org.bukkit.Bukkit; +import java.lang.reflect.Field; + public class VersionHelper { private boolean isNewerThan1_19_R2; private String version; + private final CustomCrops plugin; + + public VersionHelper(CustomCrops plugin) { + this.plugin = plugin; + isVersionNewerThan1_19_R2(); + disableUseLessInfo(); + } public boolean isVersionNewerThan1_19_R2() { if (version == null) { - version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; + version = plugin.getServer().getClass().getPackage().getName().split("\\.")[3]; String[] split = version.split("_"); int main_ver = Integer.parseInt(split[1]); if (main_ver >= 20) isNewerThan1_19_R2 = true; @@ -18,4 +30,37 @@ public class VersionHelper { } return isNewerThan1_19_R2; } + + private void disableUseLessInfo() { + MinecraftVersion.disableBStats(); + MinecraftVersion.disableUpdateCheck(); + VersionChecker.hideOk = true; + try { + Field field = MinecraftVersion.class.getDeclaredField("version"); + field.setAccessible(true); + MinecraftVersion minecraftVersion; + try { + minecraftVersion = MinecraftVersion.valueOf(version.replace("v", "MC")); + } catch (IllegalArgumentException ex) { + minecraftVersion = MinecraftVersion.UNKNOWN; + } + field.set(MinecraftVersion.class, minecraftVersion); + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException(e); + } + boolean hasGsonSupport; + try { + Class.forName("com.google.gson.Gson"); + hasGsonSupport = true; + } catch (Exception ex) { + hasGsonSupport = false; + } + try { + Field field= MinecraftVersion.class.getDeclaredField("hasGsonSupport"); + field.setAccessible(true); + field.set(Boolean.class, hasGsonSupport); + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/main/java/net/momirealms/customcrops/integrations/customplugin/oraxen/OraxenHook.java b/src/main/java/net/momirealms/customcrops/integrations/customplugin/oraxen/OraxenHook.java index 745a505..461e073 100644 --- a/src/main/java/net/momirealms/customcrops/integrations/customplugin/oraxen/OraxenHook.java +++ b/src/main/java/net/momirealms/customcrops/integrations/customplugin/oraxen/OraxenHook.java @@ -95,7 +95,7 @@ public class OraxenHook implements CustomInterface { @Nullable public ItemFrame placeFurniture(Location location, String id) { FurnitureMechanic mechanic = (FurnitureMechanic) FurnitureFactory.getInstance().getMechanic(id); - return mechanic.place(Rotation.NONE, 0, BlockFace.UP, location, null); + return mechanic.place(Rotation.NONE, 0, BlockFace.UP, location); } @Override diff --git a/src/main/java/net/momirealms/customcrops/integrations/papi/SeasonPapi.java b/src/main/java/net/momirealms/customcrops/integrations/papi/SeasonPapi.java index 1d1a03b..caad426 100644 --- a/src/main/java/net/momirealms/customcrops/integrations/papi/SeasonPapi.java +++ b/src/main/java/net/momirealms/customcrops/integrations/papi/SeasonPapi.java @@ -56,38 +56,38 @@ public class SeasonPapi extends PlaceholderExpansion { if (!SeasonConfig.enable) return MessageConfig.seasonDisabled; switch (params) { case "current" -> { - if (!MainConfig.getWorldsList().contains(player.getWorld())) return MessageConfig.noSeason; + if (!MainConfig.getWorldNameList().contains(player.getWorld().getName())) return MessageConfig.noSeason; return getSeasonText(player.getWorld()); } case "days_left" -> { if (!SeasonConfig.auto) return MessageConfig.autoSeasonDisabled; - if (!MainConfig.getWorldsList().contains(player.getWorld())) return MessageConfig.noSeason; + if (!MainConfig.getWorldNameList().contains(player.getWorld().getName())) return MessageConfig.noSeason; return String.valueOf(SeasonConfig.duration - ((int) ((player.getWorld().getFullTime() / 24000L) % (SeasonConfig.duration * 4)) % SeasonConfig.duration)); } case "days_gone" -> { if (!SeasonConfig.auto) return MessageConfig.autoSeasonDisabled; - if (!MainConfig.getWorldsList().contains(player.getWorld())) return MessageConfig.noSeason; + if (!MainConfig.getWorldNameList().contains(player.getWorld().getName())) return MessageConfig.noSeason; return String.valueOf((int) ((player.getWorld().getFullTime() / 24000L) % (SeasonConfig.duration * 4)) % SeasonConfig.duration + 1); } default -> { if (params.startsWith("current_")) { World world = Bukkit.getWorld(params.substring(8)); if (world == null) return MessageConfig.noSeason; - if (!MainConfig.getWorldsList().contains(world)) return MessageConfig.noSeason; + if (!MainConfig.getWorldNameList().contains(world.getName())) return MessageConfig.noSeason; return getSeasonText(world); } if (params.startsWith("days_left_")) { if (!SeasonConfig.auto) return MessageConfig.autoSeasonDisabled; World world = Bukkit.getWorld(params.substring(10)); if (world == null) return MessageConfig.noSeason; - if (!MainConfig.getWorldsList().contains(world)) return MessageConfig.noSeason; + if (!MainConfig.getWorldNameList().contains(world.getName())) return MessageConfig.noSeason; return String.valueOf(SeasonConfig.duration - ((int) ((world.getFullTime() / 24000L) % (SeasonConfig.duration * 4)) % SeasonConfig.duration)); } if (params.startsWith("days_gone_")) { if (!SeasonConfig.auto) return MessageConfig.autoSeasonDisabled; World world = Bukkit.getWorld(params.substring(10)); if (world == null) return MessageConfig.noSeason; - if (!MainConfig.getWorldsList().contains(world)) return MessageConfig.noSeason; + if (!MainConfig.getWorldNameList().contains(world.getName())) return MessageConfig.noSeason; return String.valueOf((int) ((world.getFullTime() / 24000L) % (SeasonConfig.duration * 4)) % SeasonConfig.duration + 1); } } diff --git a/src/main/java/net/momirealms/customcrops/integrations/protection/WorldGuardHook.java b/src/main/java/net/momirealms/customcrops/integrations/protection/WorldGuardHook.java index 260836f..3b6bb4f 100644 --- a/src/main/java/net/momirealms/customcrops/integrations/protection/WorldGuardHook.java +++ b/src/main/java/net/momirealms/customcrops/integrations/protection/WorldGuardHook.java @@ -58,31 +58,16 @@ public class WorldGuardHook implements CCAntiGrief { @Override public boolean canPlace(Location location, Player player) { LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player); - World world = BukkitAdapter.adapt(location.getWorld()); WorldGuardPlatform platform = WorldGuard.getInstance().getPlatform(); - if (hasRegion(world, BukkitAdapter.asBlockVector(location))){ - RegionQuery query = platform.getRegionContainer().createQuery(); - return query.testBuild(BukkitAdapter.adapt(location), localPlayer, PLACE_FLAG); - } - else return true; + RegionQuery query = platform.getRegionContainer().createQuery(); + return query.testBuild(BukkitAdapter.adapt(location), localPlayer, PLACE_FLAG); } @Override public boolean canBreak(Location location, Player player) { LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player); - World world = BukkitAdapter.adapt(location.getWorld()); WorldGuardPlatform platform = WorldGuard.getInstance().getPlatform(); - if (hasRegion(world, BukkitAdapter.asBlockVector(location))){ - RegionQuery query = platform.getRegionContainer().createQuery(); - return query.testBuild(BukkitAdapter.adapt(location), localPlayer, HARVEST_FLAG); - } - else return true; - } - - private boolean hasRegion(World world, BlockVector3 vector){ - RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer(); - RegionManager regionManager = container.get(world); - if (regionManager == null) return true; - return regionManager.getApplicableRegions(vector).size() > 0; + RegionQuery query = platform.getRegionContainer().createQuery(); + return query.testBuild(BukkitAdapter.adapt(location), localPlayer, HARVEST_FLAG); } } \ No newline at end of file diff --git a/src/main/java/net/momirealms/customcrops/integrations/season/InternalSeason.java b/src/main/java/net/momirealms/customcrops/integrations/season/InternalSeason.java index 306baab..8bc44e6 100644 --- a/src/main/java/net/momirealms/customcrops/integrations/season/InternalSeason.java +++ b/src/main/java/net/momirealms/customcrops/integrations/season/InternalSeason.java @@ -158,9 +158,12 @@ public class InternalSeason extends Function implements SeasonInterface { @Override public void run() { if (!SeasonConfig.auto) return; - for (World world : MainConfig.getWorldsArray()) { - if (world.getTime() < 100) { - setSeason(countSeason(world), world); + for (String world_name : MainConfig.getWorldNameList()) { + World world = Bukkit.getWorld(world_name); + if (world != null) { + if (world.getTime() < 100) { + setSeason(countSeason(world), world); + } } } } diff --git a/src/main/java/net/momirealms/customcrops/managers/CropManager.java b/src/main/java/net/momirealms/customcrops/managers/CropManager.java index da6d505..71c4536 100644 --- a/src/main/java/net/momirealms/customcrops/managers/CropManager.java +++ b/src/main/java/net/momirealms/customcrops/managers/CropManager.java @@ -23,6 +23,7 @@ import net.momirealms.customcrops.api.event.CropHarvestEvent; import net.momirealms.customcrops.api.event.CrowAttackEvent; import net.momirealms.customcrops.api.utils.CCSeason; import net.momirealms.customcrops.config.*; +import net.momirealms.customcrops.helper.Log; import net.momirealms.customcrops.integrations.customplugin.CustomInterface; import net.momirealms.customcrops.integrations.customplugin.HandlerP; import net.momirealms.customcrops.integrations.customplugin.itemsadder.ItemsAdderFrameHandler; @@ -47,6 +48,7 @@ import net.momirealms.customcrops.utils.ArmorStandUtil; import net.momirealms.customcrops.utils.FurnitureUtil; import net.momirealms.customcrops.utils.MiscUtils; import org.bukkit.*; +import org.bukkit.block.Block; import org.bukkit.entity.Item; import org.bukkit.entity.ItemFrame; import org.bukkit.entity.Player; @@ -54,6 +56,7 @@ import org.bukkit.event.HandlerList; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; +import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ThreadLocalRandom; @@ -492,13 +495,15 @@ public class CropManager extends Function { return true; } - if (MainConfig.enableCrow && crowJudge(location)) return true; + if (MainConfig.enableCrow && crowJudge(location)) { + return true; + } String potID = customInterface.getBlockID(potLoc); if (potID == null) return true; boolean certainGrow = potID.equals(BasicItemConfig.wetPot); - if (certainGrow && !hasWater(potLoc)) { + if (certainGrow && !hasWater(potLoc.getBlock())) { if (!(fertilizer instanceof RetainingSoil retainingSoil && Math.random() < retainingSoil.getChance())) { dry(potLoc); certainGrow = false; @@ -526,11 +531,10 @@ public class CropManager extends Function { return false; } - private boolean hasWater(Location potLoc) { - World world = potLoc.getWorld(); - CustomWorld customWorld = customWorlds.get(world); - if (customWorld == null) return false; - return customWorld.isPotWet(potLoc); + private boolean hasWater(Block block) { + return Optional.ofNullable(customWorlds.get(block.getWorld())) + .map(customWorld -> customWorld.isPotWet(block.getLocation())) + .orElse(false); } public boolean itemFrameGrowJudge(Location location, GrowingCrop growingCrop) { @@ -577,7 +581,7 @@ public class CropManager extends Function { if (potID == null) return true; boolean certainGrow = potID.equals(BasicItemConfig.wetPot); - if (certainGrow && !hasWater(potLoc)) { + if (certainGrow && !hasWater(potLoc.getBlock())) { if (!(fertilizer instanceof RetainingSoil retainingSoil && Math.random() < retainingSoil.getChance())) { dry(potLoc); certainGrow = false; diff --git a/src/main/java/net/momirealms/customcrops/managers/timer/TimerTask.java b/src/main/java/net/momirealms/customcrops/managers/timer/TimerTask.java index 44b0758..7e79722 100644 --- a/src/main/java/net/momirealms/customcrops/managers/timer/TimerTask.java +++ b/src/main/java/net/momirealms/customcrops/managers/timer/TimerTask.java @@ -19,6 +19,7 @@ package net.momirealms.customcrops.managers.timer; import net.momirealms.customcrops.config.MainConfig; import net.momirealms.customcrops.managers.CropManager; +import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.scheduler.BukkitRunnable; @@ -33,13 +34,16 @@ public class TimerTask extends BukkitRunnable { @Override public void run() { if (!MainConfig.autoGrow) return; - for (World world : MainConfig.getWorldsList()) { - long time = world.getTime(); - if (time > 900 && time < 1001) { - cropManager.grow(world, MainConfig.timeToGrow, MainConfig.timeToWork, MainConfig.timeToDry, false, false); - } - if (time > 0 && time < 101) { - cropManager.saveData(world); + for (String worldName : MainConfig.getWorldNameList()) { + World world = Bukkit.getWorld(worldName); + if (world != null) { + long time = world.getTime(); + if (time > 900 && time < 1001) { + cropManager.grow(world, MainConfig.timeToGrow, MainConfig.timeToWork, MainConfig.timeToDry, false, false); + } + if (time > 0 && time < 101) { + cropManager.saveData(world); + } } } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index b67731d..b24409f 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -26,6 +26,7 @@ softdepend: - Lands - GriefPrevention - CrashClaim + - BentoBox commands: customcrops: usage: /customcrops