From 0b0b99058ffd0505b1a6c09b74c5eaa5583c95e1 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Wed, 2 Oct 2024 17:29:43 +0200 Subject: [PATCH 1/2] fix: Replace usage of Core's deprecated BlockUtils Core's BlockUtils is planned to be removed as soon as possible --- .../levels/modules/ModuleAutoCollect.java | 12 +-- .../craftaro/epicfarming/tasks/FarmTask.java | 8 +- .../epicfarming/tasks/GrowthTask.java | 8 +- .../craftaro/epicfarming/utils/CropUtils.java | 98 +++++++++++++++++++ .../epicfarming/utils/CropUtilsModern.java | 37 +++++++ 5 files changed, 148 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/craftaro/epicfarming/utils/CropUtils.java create mode 100644 src/main/java/com/craftaro/epicfarming/utils/CropUtilsModern.java diff --git a/src/main/java/com/craftaro/epicfarming/farming/levels/modules/ModuleAutoCollect.java b/src/main/java/com/craftaro/epicfarming/farming/levels/modules/ModuleAutoCollect.java index a8dcf9b..781916d 100644 --- a/src/main/java/com/craftaro/epicfarming/farming/levels/modules/ModuleAutoCollect.java +++ b/src/main/java/com/craftaro/epicfarming/farming/levels/modules/ModuleAutoCollect.java @@ -2,14 +2,14 @@ import com.craftaro.core.compatibility.CompatibleMaterial; import com.craftaro.core.gui.GuiUtils; -import com.craftaro.third_party.com.cryptomorin.xseries.XBlock; -import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; -import com.craftaro.core.utils.BlockUtils; import com.craftaro.epicfarming.EpicFarming; import com.craftaro.epicfarming.boost.BoostData; import com.craftaro.epicfarming.farming.Farm; import com.craftaro.epicfarming.farming.FarmType; +import com.craftaro.epicfarming.utils.CropUtils; import com.craftaro.epicfarming.utils.Methods; +import com.craftaro.third_party.com.cryptomorin.xseries.XBlock; +import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import org.bukkit.Bukkit; import org.bukkit.DyeColor; import org.bukkit.Material; @@ -23,7 +23,6 @@ import org.bukkit.entity.Sheep; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; -import org.bukkit.material.Wool; import java.util.ArrayList; import java.util.Collection; @@ -66,10 +65,9 @@ public void runFinal(Farm farm, Collection entitiesAroundFarm, Lis private void collectCrops(Farm farm, List crops) { for (Block block : crops) { - if (BlockUtils.isCropFullyGrown(block) && isEnabled(farm) && doCropDrop(farm, CompatibleMaterial.getMaterial(block.getType()).get())) { + if (CropUtils.isFullyGrown(block) && isEnabled(farm) && doCropDrop(farm, CompatibleMaterial.getMaterial(block.getType()).get())) { if (farm.getLevel().isAutoReplant()) { - Bukkit.getScheduler().runTask(this.plugin, () -> - BlockUtils.resetGrowthStage(block)); + Bukkit.getScheduler().runTask(this.plugin, () -> CropUtils.resetGrowthStage(block)); continue; } Bukkit.getScheduler().runTask(this.plugin, () -> block.setType(Material.AIR)); diff --git a/src/main/java/com/craftaro/epicfarming/tasks/FarmTask.java b/src/main/java/com/craftaro/epicfarming/tasks/FarmTask.java index b5cd35b..4cd7ef2 100644 --- a/src/main/java/com/craftaro/epicfarming/tasks/FarmTask.java +++ b/src/main/java/com/craftaro/epicfarming/tasks/FarmTask.java @@ -2,14 +2,14 @@ import com.craftaro.core.compatibility.CompatibleMaterial; import com.craftaro.core.compatibility.ServerVersion; -import com.craftaro.third_party.com.cryptomorin.xseries.XBlock; -import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; -import com.craftaro.core.utils.BlockUtils; import com.craftaro.epicfarming.EpicFarming; import com.craftaro.epicfarming.farming.Crop; import com.craftaro.epicfarming.farming.Farm; import com.craftaro.epicfarming.farming.FarmType; import com.craftaro.epicfarming.settings.Settings; +import com.craftaro.epicfarming.utils.CropUtils; +import com.craftaro.third_party.com.cryptomorin.xseries.XBlock; +import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.Block; @@ -115,7 +115,7 @@ public void run() { if (farm.getFarmType() != FarmType.LIVESTOCK) { for (Block block : crops) { - if (!BlockUtils.isCropFullyGrown(block)) { + if (!CropUtils.isFullyGrown(block)) { // Add to GrowthTask growthTask.addLiveCrop(block.getLocation(), new Crop(block.getLocation(), farm)); } diff --git a/src/main/java/com/craftaro/epicfarming/tasks/GrowthTask.java b/src/main/java/com/craftaro/epicfarming/tasks/GrowthTask.java index fde55a3..9de3062 100644 --- a/src/main/java/com/craftaro/epicfarming/tasks/GrowthTask.java +++ b/src/main/java/com/craftaro/epicfarming/tasks/GrowthTask.java @@ -1,13 +1,13 @@ package com.craftaro.epicfarming.tasks; import com.craftaro.core.compatibility.CompatibleMaterial; -import com.craftaro.third_party.com.cryptomorin.xseries.XBlock; -import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; -import com.craftaro.core.utils.BlockUtils; import com.craftaro.epicfarming.EpicFarming; import com.craftaro.epicfarming.farming.Crop; import com.craftaro.epicfarming.farming.FarmType; import com.craftaro.epicfarming.settings.Settings; +import com.craftaro.epicfarming.utils.CropUtils; +import com.craftaro.third_party.com.cryptomorin.xseries.XBlock; +import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import org.bukkit.Location; import org.bukkit.scheduler.BukkitRunnable; @@ -52,7 +52,7 @@ public synchronized void run() { } } - BlockUtils.incrementGrowthStage(crop.getLocation().getBlock()); + CropUtils.incrementGrowthStage(crop.getLocation().getBlock()); crop.setTicksLived(1); } diff --git a/src/main/java/com/craftaro/epicfarming/utils/CropUtils.java b/src/main/java/com/craftaro/epicfarming/utils/CropUtils.java new file mode 100644 index 0000000..67c5290 --- /dev/null +++ b/src/main/java/com/craftaro/epicfarming/utils/CropUtils.java @@ -0,0 +1,98 @@ +package com.craftaro.epicfarming.utils; + +import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.epicfarming.EpicFarming; +import com.craftaro.third_party.com.cryptomorin.xseries.XBlock; +import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; +import org.bukkit.block.Block; + +import java.util.Optional; +import java.util.logging.Level; + +public class CropUtils { + private static final boolean USE_LEGACY_IMPLEMENTATION; + + static { + boolean useLegacy = false; + try { + Class.forName("org.bukkit.block.data.Ageable"); + } catch (ClassNotFoundException ignore) { + useLegacy = true; + } + USE_LEGACY_IMPLEMENTATION = useLegacy; + } + + public static boolean isFullyGrown(Block crop) { + if (crop == null) { + return false; + } + + if (!USE_LEGACY_IMPLEMENTATION) { + return CropUtilsModern.isFullyGrown(crop); + } + + Optional mat = CompatibleMaterial.getMaterial(crop.getType()); + if (!mat.isPresent() || !XBlock.isCrop(mat.get())) { + return false; + } + + int maxAge = (mat.get() == XMaterial.BEETROOTS || mat.get() == XMaterial.NETHER_WART) ? 3 : 7; + return crop.getData() >= maxAge; + } + + public static void resetGrowthStage(Block crop) { + if (crop == null) { + return; + } + setGrowthStage(crop, 0); + } + + public static void incrementGrowthStage(Block crop) { + if (crop == null) { + return; + } + + if (!USE_LEGACY_IMPLEMENTATION) { + setGrowthStage(crop, getGrowthStage(crop) + 1); + return; + } + + Optional mat = CompatibleMaterial.getMaterial(crop.getType()); + if (mat.isPresent() && XBlock.isCrop(mat.get()) && crop.getData() < (mat.get() == XMaterial.BEETROOTS || mat.get() == XMaterial.NETHER_WART ? 3 : 7)) { + try { + setGrowthStage(crop, getGrowthStage(crop) + 1); + } catch (Exception ex) { + EpicFarming.getInstance().getLogger().log(Level.SEVERE, "Unexpected method error", ex); + } + } + } + + private static int getGrowthStage(Block block) { + if (!USE_LEGACY_IMPLEMENTATION) { + return CropUtilsModern.getGrowthStage(block); + } + return block.getData(); + } + + private static void setGrowthStage(Block block, int stage) { + if (stage < 0) { + return; + } + + if (!USE_LEGACY_IMPLEMENTATION) { + CropUtilsModern.setGrowthStage(block, stage); + return; + } + + Optional mat = CompatibleMaterial.getMaterial(block.getType()); + if (!mat.isPresent() || !XBlock.isCrop(mat.get())) { + return; + } + + try { + Block.class.getDeclaredMethod("setData", byte.class).invoke(block, (byte) stage); + } catch (Exception ex) { + EpicFarming.getInstance().getLogger().log(Level.SEVERE, "Unexpected method error", ex); + } + } +} diff --git a/src/main/java/com/craftaro/epicfarming/utils/CropUtilsModern.java b/src/main/java/com/craftaro/epicfarming/utils/CropUtilsModern.java new file mode 100644 index 0000000..c72d4f7 --- /dev/null +++ b/src/main/java/com/craftaro/epicfarming/utils/CropUtilsModern.java @@ -0,0 +1,37 @@ +package com.craftaro.epicfarming.utils; + +import org.bukkit.block.Block; +import org.bukkit.block.data.Ageable; +import org.bukkit.block.data.BlockData; + +public class CropUtilsModern { + static boolean isFullyGrown(Block crop) { + BlockData data = crop.getBlockData(); + if (data instanceof Ageable) { + return ((Ageable) data).getAge() == ((Ageable) data).getMaximumAge(); + } + return false; + } + + static int getGrowthStage(Block block) { + if (!(block.getBlockData() instanceof Ageable)) { + return 0; + } + return ((Ageable) block.getBlockData()).getAge(); + } + + static void setGrowthStage(Block block, int stage) { + if (!(block.getBlockData() instanceof Ageable)) { + return; + } + + Ageable blockData = (Ageable) block.getBlockData(); + int max = blockData.getMaximumAge(); + if (stage > max) { + return; + } + + blockData.setAge(stage); + block.setBlockData(blockData); + } +} From afafb96396ca820cea3f0256d3bf7e6980151abb Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Wed, 2 Oct 2024 17:29:57 +0200 Subject: [PATCH 2/2] Release v.4.4.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index abe523f..9261368 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.craftaro EpicFarming - 4.4.0 + 4.4.1 EpicFarming Allow your players to grow crops faster, automatically replant, harvest and store crops and animal produce in the farm's inventory, as well as much more