mirror of
https://github.com/songoda/SongodaCore.git
synced 2024-11-25 11:35:34 +01:00
feat: Introduce CompatibleCrop class
At least EpicFarming and EpicAutomators can make good use of this class and get rid of code that relies on magic numbers and needs cross-version support.
This commit is contained in:
parent
b25dc736ce
commit
bdcc9bb0b9
@ -0,0 +1,85 @@
|
||||
package com.craftaro.core.compatibility.crops;
|
||||
|
||||
import com.craftaro.core.compatibility.CompatibleMaterial;
|
||||
import com.cryptomorin.xseries.XBlock;
|
||||
import com.cryptomorin.xseries.XMaterial;
|
||||
import org.bukkit.block.Block;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class CompatibleCrop {
|
||||
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 isCrop(@Nullable Block block) {
|
||||
if (block == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
XMaterial material = CompatibleMaterial.getMaterial(block.getType()).get();
|
||||
return isCrop(material);
|
||||
}
|
||||
|
||||
public static boolean isCrop(@Nullable XMaterial material) {
|
||||
return material != null && XBlock.isCrop(material);
|
||||
}
|
||||
|
||||
public static boolean isCropFullyGrown(@NotNull Block crop) {
|
||||
return getCropAge(crop) >= getCropMaxAge(crop);
|
||||
}
|
||||
|
||||
public static int getCropAge(@NotNull Block crop) {
|
||||
if (!USE_LEGACY_IMPLEMENTATION) {
|
||||
return CompatibleCropModern.getCropAge(crop);
|
||||
}
|
||||
return crop.getData();
|
||||
}
|
||||
|
||||
public static int getCropMaxAge(@NotNull Block crop) {
|
||||
if (!USE_LEGACY_IMPLEMENTATION) {
|
||||
return CompatibleCropModern.getCropMaxAge(crop);
|
||||
}
|
||||
|
||||
switch (CompatibleMaterial.getMaterial(crop.getType()).get()) {
|
||||
case BEETROOTS:
|
||||
case NETHER_WART:
|
||||
return 3;
|
||||
default:
|
||||
return 7;
|
||||
}
|
||||
}
|
||||
|
||||
public static void resetCropAge(@NotNull Block crop) {
|
||||
setCropAge(crop, 0);
|
||||
}
|
||||
|
||||
public static void incrementCropAge(@NotNull Block crop) {
|
||||
setCropAge(crop, getCropAge(crop) + 1);
|
||||
}
|
||||
|
||||
private static void setCropAge(Block block, int stage) {
|
||||
if (stage > getCropMaxAge(block)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!USE_LEGACY_IMPLEMENTATION) {
|
||||
CompatibleCropModern.setGrowthStage(block, stage);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
Block.class.getDeclaredMethod("setData", byte.class).invoke(block, (byte) stage);
|
||||
} catch (ReflectiveOperationException ex) {
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package com.craftaro.core.compatibility.crops;
|
||||
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.data.Ageable;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
|
||||
class CompatibleCropModern {
|
||||
static int getCropAge(Block block) {
|
||||
BlockData blockData = block.getBlockData();
|
||||
return ((Ageable) blockData).getAge();
|
||||
}
|
||||
|
||||
static int getCropMaxAge(Block block) {
|
||||
BlockData blockData = block.getBlockData();
|
||||
return ((Ageable) blockData).getMaximumAge();
|
||||
}
|
||||
|
||||
static void setGrowthStage(Block block, int stage) {
|
||||
Ageable blockData = (Ageable) block.getBlockData();
|
||||
blockData.setAge(stage);
|
||||
block.setBlockData(blockData);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user