use core crop block functions

This commit is contained in:
jascotty2 2019-09-11 17:01:56 -05:00
parent f59cf66635
commit a993d8f85a
3 changed files with 16 additions and 137 deletions

View File

@ -1,19 +1,18 @@
package com.songoda.epicfarming.tasks;
import com.songoda.core.compatibility.CompatibleMaterial;
import com.songoda.core.utils.BlockUtils;
import com.songoda.epicfarming.EpicFarming;
import com.songoda.epicfarming.boost.BoostData;
import com.songoda.epicfarming.farming.Crop;
import com.songoda.epicfarming.farming.Farm;
import com.songoda.epicfarming.utils.CropType;
import com.songoda.epicfarming.utils.Methods;
import org.bukkit.CropState;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.material.Crops;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.List;
@ -50,18 +49,16 @@ public class FarmTask extends BukkitRunnable {
for (Block block : getCrops(farm, true)) {
if (!CropType.isCrop(block.getType())) continue;
Crops crop = (Crops) block.getState().getData();
// Add to GrowthTask
plugin.getGrowthTask().addLiveCrop(block.getLocation(), new Crop(block.getLocation(), farm));
if (!farm.getLevel().isAutoHarvest()
|| !crop.getState().equals(CropState.RIPE)) continue;
if (!farm.getLevel().isAutoHarvest() || BlockUtils.isCropFullyGrown(block)) continue;
if (!doDrop(farm, block.getType())) continue main;
if (farm.getLevel().isAutoReplant()) {
CropType.replant(block);
BlockUtils.resetGrowthStage(block);
continue;
}
block.setType(Material.AIR);
@ -124,8 +121,9 @@ public class FarmTask extends BukkitRunnable {
for (int fy = -2; fy <= 1; fy++) {
for (int fz = -radius; fz <= radius; fz++) {
Block b2 = block.getWorld().getBlockAt(bx + fx, by + fy, bz + fz);
CompatibleMaterial mat = CompatibleMaterial.getMaterial(b2.getType());
if (!(b2.getState().getData() instanceof Crops)) continue;
if (!mat.isCrop()) continue;
if (add) {
farm.addCachedCrop(b2);

View File

@ -1,14 +1,10 @@
package com.songoda.epicfarming.tasks;
import com.songoda.core.utils.BlockUtils;
import com.songoda.epicfarming.EpicFarming;
import com.songoda.epicfarming.farming.Crop;
import com.songoda.epicfarming.utils.CropHandler;
import com.songoda.epicfarming.utils.CropType;
import org.bukkit.CropState;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.BlockState;
import org.bukkit.material.Crops;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.*;
@ -58,8 +54,7 @@ public class GrowthTask extends BukkitRunnable {
if (rand != cap - 1 && crop.getTicksLived() != cap / 2) continue;
}
CropType.grow(crop);
BlockUtils.incrementGrowthStage(crop.getLocation().getBlock());
crop.setTicksLived(1);
}

View File

@ -1,13 +1,7 @@
package com.songoda.epicfarming.utils;
import com.songoda.core.compatibility.CompatibleMaterial;
import com.songoda.core.compatibility.ServerVersion;
import com.songoda.epicfarming.farming.Crop;
import org.bukkit.CropState;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.material.Crops;
public enum CropType {
@ -23,19 +17,18 @@ public enum CropType {
PUMPKIN_STEM("Pumpkin", CompatibleMaterial.PUMPKIN_STEM, CompatibleMaterial.PUMPKIN, CompatibleMaterial.PUMPKIN_SEEDS),
NETHER_WARTS("Nether Wart", CompatibleMaterial.NETHER_WART_BLOCK, CompatibleMaterial.NETHER_WART, CompatibleMaterial.NETHER_WART);
NETHER_WARTS("Nether Wart", CompatibleMaterial.NETHER_WART, CompatibleMaterial.NETHER_WART, CompatibleMaterial.NETHER_WART);
private final String name;
private final CompatibleMaterial yieldMaterial, blockMaterial, seedMaterial;
private final Material yieldMaterial, blockMaterial, seedMaterial;
CropType(String name, CompatibleMaterial blockMaterial, CompatibleMaterial yieldMaterial, CompatibleMaterial seedMaterial) {
this.name = name;
this.blockMaterial = blockMaterial;
this.seedMaterial = seedMaterial;
this.yieldMaterial = yieldMaterial;
this.blockMaterial = blockMaterial.getBlockMaterial();
this.seedMaterial = seedMaterial.getMaterial();
this.yieldMaterial = yieldMaterial.getMaterial();
}
/**
* Get the friendly name of the crop
*
@ -51,7 +44,7 @@ public enum CropType {
* @return the represented blockMaterial
*/
public Material getBlockMaterial() {
return blockMaterial.getMaterial();
return blockMaterial;
}
/**
@ -60,7 +53,7 @@ public enum CropType {
* @return the represented yieldMaterial
*/
public Material getYieldMaterial() {
return yieldMaterial.getMaterial();
return yieldMaterial;
}
/**
@ -69,7 +62,7 @@ public enum CropType {
* @return the represented seed blockMaterial
*/
public Material getSeedMaterial() {
return seedMaterial.getMaterial();
return seedMaterial;
}
/**
@ -118,111 +111,4 @@ public enum CropType {
return CropType.isCrop(material);
}
/**
* Checks if a crop is at its max growth stage
*
* @param block The crop block to check
* @return True if the crop is at its max growth stage, otherwise false
*/
public static boolean isMaxGrowthStage(Block block) {
if (!isGrowableCrop(block.getType()))
throw new IllegalArgumentException("Block given was not a valid crop");
return block.getData() >= getMaxGrowthStage(block.getType());
}
/**
* Gets the max growth stage for the given material
*
* @param material The material of the crop
* @return The max growth stage of the given crop type
*/
public static int getMaxGrowthStage(Material material) {
if (!isGrowableCrop(material))
throw new IllegalArgumentException("Block given was not a valid crop");
if (material.equals(CompatibleMaterial.BEETROOTS.getMaterial()))
return 3;
return 7;
}
/**
* Grows a crop by 1 growth stage
*
* @param crop The crop to grow
*/
public static void grow(Crop crop) {
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) {
BlockState cropState = crop.getLocation().getBlock().getState();
Crops cropData = (Crops) cropState.getData();
Material material = crop.getLocation().getBlock().getType();
switch (cropData.getState()) {
case SEEDED:
if (material == Material.BEETROOTS)
cropData.setState(CropState.VERY_SMALL);
else
cropData.setState(CropState.GERMINATED);
break;
case GERMINATED:
cropData.setState(CropState.VERY_SMALL);
break;
case VERY_SMALL:
cropData.setState(CropState.SMALL);
break;
case SMALL:
cropData.setState(CropState.MEDIUM);
break;
case MEDIUM:
cropData.setState(CropState.TALL);
break;
case TALL:
cropData.setState(CropState.VERY_TALL);
break;
case VERY_TALL:
cropData.setState(CropState.RIPE);
break;
case RIPE:
break;
}
cropState.setData(cropData);
cropState.update();
crop.setTicksLived(1);
return;
}
Block block = crop.getLocation().getBlock();
if (!isGrowableCrop(block.getType()))
throw new IllegalArgumentException("Block given was not a valid crop");
byte data = block.getData();
if (isMaxGrowthStage(block))
return;
block.setData((byte) (data + 1));
}
/**
* Sets a crop's growth back to stage 0
*
* @param block The crop block to set
*/
public static void replant(Block block) {
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) {
BlockState cropState = block.getState();
Crops cropData = (Crops) cropState.getData();
cropData.setState(CropState.SEEDED);
cropState.setData(cropData);
cropState.update();
return;
}
if (!isGrowableCrop(block.getType()))
throw new IllegalArgumentException("Block given was not a valid crop");
block.setData((byte) 0);
}
}