diff --git a/api/src/main/java/net/momirealms/customcrops/api/core/AbstractCustomEventListener.java b/api/src/main/java/net/momirealms/customcrops/api/core/AbstractCustomEventListener.java index e99e203..0f022f5 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/core/AbstractCustomEventListener.java +++ b/api/src/main/java/net/momirealms/customcrops/api/core/AbstractCustomEventListener.java @@ -232,7 +232,7 @@ public abstract class AbstractCustomEventListener implements Listener { Optional> optionalWorld = BukkitCustomCropsPlugin.getInstance().getWorldManager().getWorld(block.getWorld()); if (optionalWorld.isPresent()) { CustomCropsWorld world = optionalWorld.get(); - Optional optionalState = world.getBlockState(above); + Optional optionalState = world.getLoadedBlockState(above); if (optionalState.isPresent() && optionalState.get().type() instanceof CropBlock) { event.setCancelled(true); return; @@ -281,7 +281,8 @@ public abstract class AbstractCustomEventListener implements Listener { } CustomCropsWorld w = world.get(); for (Block block : event.getBlocks()) { - if (w.getBlockState(Pos3.from(block.getLocation())).isPresent()) { + Pos3 pos3 = Pos3.from(block.getLocation()); + if (w.getLoadedBlockState(pos3).isPresent()) { event.setCancelled(true); return; } @@ -296,7 +297,8 @@ public abstract class AbstractCustomEventListener implements Listener { } CustomCropsWorld w = world.get(); for (Block block : event.getBlocks()) { - if (w.getBlockState(Pos3.from(block.getLocation())).isPresent()) { + Pos3 pos3 = Pos3.from(block.getLocation()); + if (w.getLoadedBlockState(pos3).isPresent()) { event.setCancelled(true); return; } @@ -362,7 +364,7 @@ public abstract class AbstractCustomEventListener implements Listener { Block relative = block.getRelative(directional.getFacing()); Location location = relative.getLocation(); Pos3 pos3 = Pos3.from(location); - world.getBlockState(pos3).ifPresent(state -> { + world.getLoadedBlockState(pos3).ifPresent(state -> { if (state.type() instanceof CropBlock cropBlock) { ItemStack itemStack = event.getItem(); String itemID = itemManager.id(itemStack); diff --git a/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsWorld.java b/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsWorld.java index 798d91c..b0bf804 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsWorld.java +++ b/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsWorld.java @@ -163,6 +163,15 @@ public interface CustomCropsWorld { */ CustomCropsRegion[] loadedRegions(); + /** + * Gets the block state in a loaded chunk + * + * @param location location + * @return the optional block state + */ + @NotNull + Optional getLoadedBlockState(Pos3 location); + /** * Gets the block state at a specific location. * diff --git a/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsWorldImpl.java b/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsWorldImpl.java index cc46dc0..9228fa7 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsWorldImpl.java +++ b/api/src/main/java/net/momirealms/customcrops/api/core/world/CustomCropsWorldImpl.java @@ -147,6 +147,18 @@ public class CustomCropsWorldImpl implements CustomCropsWorld { return loadedRegions.values().toArray(new CustomCropsRegion[0]); } + @Override + public @NotNull Optional getLoadedBlockState(Pos3 location) { + ChunkPos pos = location.toChunkPos(); + Optional chunk = getLoadedChunk(pos); + if (chunk.isEmpty()) { + return Optional.empty(); + } else { + CustomCropsChunk customChunk = chunk.get(); + return customChunk.getBlockState(location); + } + } + @NotNull @Override public Optional getBlockState(Pos3 location) { diff --git a/compatibility-asp-r1/src/main/java/net/momirealms/customcrops/bukkit/integration/adaptor/asp_r1/SlimeWorldAdaptorR1.java b/compatibility-asp-r1/src/main/java/net/momirealms/customcrops/bukkit/integration/adaptor/asp_r1/SlimeWorldAdaptorR1.java index 1750ba8..f0e9ccc 100644 --- a/compatibility-asp-r1/src/main/java/net/momirealms/customcrops/bukkit/integration/adaptor/asp_r1/SlimeWorldAdaptorR1.java +++ b/compatibility-asp-r1/src/main/java/net/momirealms/customcrops/bukkit/integration/adaptor/asp_r1/SlimeWorldAdaptorR1.java @@ -28,7 +28,6 @@ import net.momirealms.customcrops.api.core.world.adaptor.AbstractWorldAdaptor; import net.momirealms.customcrops.api.util.StringUtils; import net.momirealms.customcrops.api.util.TagUtils; import net.momirealms.customcrops.common.helper.GsonHelper; -import net.momirealms.customcrops.common.plugin.CustomCropsPlugin; import net.momirealms.customcrops.common.util.Key; import org.bukkit.Bukkit; import org.bukkit.World; diff --git a/gradle.properties b/gradle.properties index bb2204d..409bc53 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ # Project settings # Rule: [major update].[feature update].[bug fix] -project_version=3.6.19 +project_version=3.6.20 config_version=42 project_group=net.momirealms