mirror of
https://github.com/songoda/EpicFarming.git
synced 2025-03-12 22:59:12 +01:00
refactor: Replace the logic in CropUtils with the new CompatibleCrop
This commit is contained in:
parent
8ff425aa18
commit
f47fa3b38a
@ -1,98 +1,24 @@
|
||||
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 com.craftaro.core.compatibility.crops.CompatibleCrop;
|
||||
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<XMaterial> 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;
|
||||
return CompatibleCrop.isCrop(crop) && CompatibleCrop.isCropFullyGrown(crop);
|
||||
}
|
||||
|
||||
public static void resetGrowthStage(Block crop) {
|
||||
if (crop == null) {
|
||||
if (!CompatibleCrop.isCrop(crop)) {
|
||||
return;
|
||||
}
|
||||
setGrowthStage(crop, 0);
|
||||
CompatibleCrop.resetCropAge(crop);
|
||||
}
|
||||
|
||||
public static void incrementGrowthStage(Block crop) {
|
||||
if (crop == null) {
|
||||
if (!CompatibleCrop.isCrop(crop)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!USE_LEGACY_IMPLEMENTATION) {
|
||||
setGrowthStage(crop, getGrowthStage(crop) + 1);
|
||||
return;
|
||||
}
|
||||
|
||||
Optional<XMaterial> 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<XMaterial> 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);
|
||||
}
|
||||
CompatibleCrop.incrementCropAge(crop);
|
||||
}
|
||||
}
|
||||
|
@ -1,37 +0,0 @@
|
||||
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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user