diff --git a/api/src/main/java/net/momirealms/customcrops/api/core/item/WateringCanItem.java b/api/src/main/java/net/momirealms/customcrops/api/core/item/WateringCanItem.java index 95f9c04..f6bf596 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/core/item/WateringCanItem.java +++ b/api/src/main/java/net/momirealms/customcrops/api/core/item/WateringCanItem.java @@ -331,6 +331,30 @@ public class WateringCanItem extends AbstractCustomCropsItem { return InteractionResult.COMPLETE; } + // check the clicked block/furniture + for (FillMethod method : wateringCanConfig.fillMethods()) { + if (method.getID().equals(targetBlockID)) { + if (method.checkRequirements(context)) { + if (waterInCan >= wateringCanConfig.storage()) { + ActionManager.trigger(context, wateringCanConfig.fullActions()); + return InteractionResult.COMPLETE; + } + WateringCanFillEvent fillEvent = new WateringCanFillEvent(player, event.hand(), itemInHand, event.location(), wateringCanConfig, method); + if (EventUtils.fireAndCheckCancel(fillEvent)) + return InteractionResult.COMPLETE; + int current = Math.min(waterInCan + method.amountOfWater(), wateringCanConfig.storage()); + context.arg(ContextKeys.WATER_BAR, Optional.ofNullable(wateringCanConfig.waterBar()).map(bar -> bar.getWaterBar(current, wateringCanConfig.storage())).orElse("")); + context.arg(ContextKeys.STORAGE, wateringCanConfig.storage()); + context.arg(ContextKeys.CURRENT_WATER, current); + setCurrentWater(itemInHand, wateringCanConfig, waterInCan + method.amountOfWater(), context); + method.triggerActions(context); + ActionManager.trigger(context, wateringCanConfig.addWaterActions()); + } + return InteractionResult.COMPLETE; + } + } + + // the clicked block might be a block underwater, so we do raytracing to get the water (nearest fluid) RayTraceResult result = player.getWorld().rayTraceBlocks(player.getEyeLocation(), player.getLocation().getDirection(), 5, FluidCollisionMode.ALWAYS); if (result == null) return InteractionResult.COMPLETE; @@ -366,7 +390,8 @@ public class WateringCanItem extends AbstractCustomCropsItem { } } - // give it another try + // give it the last try, this time we don't use blockstate + // instead we use Bukkit Material Enum Names if (targetBlock.getBlockData() instanceof Waterlogged waterlogged && waterlogged.isWaterlogged()) { blockID = "WATER"; } else { diff --git a/api/src/main/java/net/momirealms/customcrops/api/core/world/WorldManager.java b/api/src/main/java/net/momirealms/customcrops/api/core/world/WorldManager.java index 63afd1b..bb757ba 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/core/world/WorldManager.java +++ b/api/src/main/java/net/momirealms/customcrops/api/core/world/WorldManager.java @@ -72,6 +72,12 @@ public interface WorldManager extends Reloadable { */ boolean unloadWorld(World world, boolean disabling); + /** + * Checks if mechanism is enabled for a certain world + * + * @param world world + * @return enabled or not + */ boolean isMechanicEnabled(World world); /** diff --git a/compatibility-oraxen-r2/src/main/java/net/momirealms/customcrops/bukkit/integration/custom/oraxen_r2/OraxenListener.java b/compatibility-oraxen-r2/src/main/java/net/momirealms/customcrops/bukkit/integration/custom/oraxen_r2/OraxenListener.java index 06401c4..284afe1 100644 --- a/compatibility-oraxen-r2/src/main/java/net/momirealms/customcrops/bukkit/integration/custom/oraxen_r2/OraxenListener.java +++ b/compatibility-oraxen-r2/src/main/java/net/momirealms/customcrops/bukkit/integration/custom/oraxen_r2/OraxenListener.java @@ -26,6 +26,7 @@ import io.th0rgal.oraxen.api.events.custom_block.stringblock.OraxenStringBlockPl import io.th0rgal.oraxen.api.events.furniture.OraxenFurnitureBreakEvent; import io.th0rgal.oraxen.api.events.furniture.OraxenFurnitureInteractEvent; import io.th0rgal.oraxen.api.events.furniture.OraxenFurniturePlaceEvent; +import io.th0rgal.oraxen.font.Glyph; import net.momirealms.customcrops.api.core.AbstractCustomEventListener; import net.momirealms.customcrops.api.core.AbstractItemManager; import org.bukkit.Material;