diff --git a/build.gradle.kts b/build.gradle.kts index deed49b..d761037 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ plugins { allprojects { project.group = "net.momirealms" - project.version = "3.3.1.12" + project.version = "3.3.1.13" apply() apply(plugin = "java") diff --git a/plugin/src/main/java/net/momirealms/customcrops/api/object/sprinkler/SprinklerConfig.java b/plugin/src/main/java/net/momirealms/customcrops/api/object/sprinkler/SprinklerConfig.java index 9951be1..fc0cba7 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/api/object/sprinkler/SprinklerConfig.java +++ b/plugin/src/main/java/net/momirealms/customcrops/api/object/sprinkler/SprinklerConfig.java @@ -40,6 +40,7 @@ public class SprinklerConfig { private final SprinklerAnimation sprinklerAnimation; private final Requirement[] requirements; private final int water; + private boolean infinite; public SprinklerConfig( String key, @@ -54,7 +55,8 @@ public class SprinklerConfig { @NotNull PassiveFillMethod[] passiveFillMethods, @Nullable WaterAmountHologram waterAmountHologram, SprinklerAnimation sprinklerAnimation, - @Nullable Requirement[] requirements + @Nullable Requirement[] requirements, + boolean infinite ) { this.key = key; this.storage = storage; @@ -69,6 +71,7 @@ public class SprinklerConfig { this.sprinklerAnimation = sprinklerAnimation; this.waterAmountHologram = waterAmountHologram; this.requirements = requirements; + this.infinite = infinite; } public String getKey() { @@ -127,6 +130,10 @@ public class SprinklerConfig { return water; } + public boolean isInfinite() { + return infinite; + } + @Nullable public Requirement[] getRequirements() { return requirements; diff --git a/plugin/src/main/java/net/momirealms/customcrops/api/object/sprinkler/SprinklerManager.java b/plugin/src/main/java/net/momirealms/customcrops/api/object/sprinkler/SprinklerManager.java index 8496ab5..00c9f5d 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/api/object/sprinkler/SprinklerManager.java +++ b/plugin/src/main/java/net/momirealms/customcrops/api/object/sprinkler/SprinklerManager.java @@ -130,8 +130,8 @@ public class SprinklerManager extends Function implements Listener { sprinklerSec.getDouble("animation.vertical-offset"), ItemMode.valueOf(sprinklerSec.getString("animation.type", "ARMOR_STAND").toUpperCase(Locale.ENGLISH)) ) : null, - ConfigUtils.getRequirementsWithMsg(sprinklerSec.getConfigurationSection("requirements")) - ); + ConfigUtils.getRequirementsWithMsg(sprinklerSec.getConfigurationSection("requirements")), + sprinklerSec.getBoolean("infinite", false)); this.itemToKey.put(threeD, key); if (twoD != null) this.itemToKey.put(twoD, key); this.sprinklerConfigMap.put(key, sprinklerConfig); diff --git a/plugin/src/main/java/net/momirealms/customcrops/api/object/world/CCWorld.java b/plugin/src/main/java/net/momirealms/customcrops/api/object/world/CCWorld.java index e114eea..97c05b5 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/api/object/world/CCWorld.java +++ b/plugin/src/main/java/net/momirealms/customcrops/api/object/world/CCWorld.java @@ -535,10 +535,12 @@ public class CCWorld extends Function { return; } - int water = sprinkler.getWater(); - sprinkler.setWater(--water); - if (water <= 0) { - removeSprinklerData(simpleLocation); + if (!sprinklerConfig.isInfinite()) { + int water = sprinkler.getWater(); + sprinkler.setWater(--water); + if (water <= 0) { + removeSprinklerData(simpleLocation); + } } SprinklerAnimation sprinklerAnimation = sprinklerConfig.getSprinklerAnimation(); diff --git a/plugin/src/main/java/net/momirealms/customcrops/customplugin/PlatformManager.java b/plugin/src/main/java/net/momirealms/customcrops/customplugin/PlatformManager.java index 00172e1..1e333af 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/customplugin/PlatformManager.java +++ b/plugin/src/main/java/net/momirealms/customcrops/customplugin/PlatformManager.java @@ -44,12 +44,14 @@ import net.momirealms.customcrops.api.object.wateringcan.WateringCanConfig; import net.momirealms.customcrops.api.object.world.SimpleLocation; import net.momirealms.customcrops.customplugin.itemsadder.ItemsAdderHandler; import net.momirealms.customcrops.customplugin.oraxen.OraxenHandler; +import net.momirealms.customcrops.helper.Log; import net.momirealms.customcrops.util.AdventureUtils; import net.momirealms.customcrops.util.RotationUtils; import net.momirealms.protectionlib.ProtectionLib; import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; +import org.bukkit.block.data.Waterlogged; import org.bukkit.entity.Entity; import org.bukkit.entity.ItemDisplay; import org.bukkit.entity.ItemFrame; @@ -543,6 +545,11 @@ public class PlatformManager extends Function { if (player.getGameMode() != GameMode.CREATIVE) item_in_hand.setAmount(item_in_hand.getAmount() - 1); CustomCrops.getInstance().getPlatformInterface().placeCustomItem(sprinkler_loc, sprinklerConfig.getThreeD(), sprinklerConfig.getItemMode()); + + if (sprinklerConfig.isInfinite()) { + plugin.getWorldDataManager().addWaterToSprinkler(SimpleLocation.getByBukkitLocation(location), -1, sprinklerConfig); + } + if (sprinklerConfig.getSound() != null) { AdventureUtils.playerSound(player, sprinklerConfig.getSound()); } @@ -1058,12 +1065,10 @@ public class PlatformManager extends Function { outer: { if (id != null && location != null) { - if (!ProtectionLib.canPlace(player, location)) return true; if (!wateringCanConfig.canUse(player, location)) return true; - for (PositiveFillMethod positiveFillMethod : wateringCanConfig.getPositiveFillMethods()) { if (positiveFillMethod.getId().equals(id)) { add = positiveFillMethod.getAmount(); @@ -1079,7 +1084,15 @@ public class PlatformManager extends Function { } List lineOfSight = player.getLineOfSight(null, 5); - List blockIds = lineOfSight.stream().map(block -> plugin.getPlatformInterface().getBlockID(block)).toList(); + List blockIds = lineOfSight.stream().map(block -> { + if (block == null) { + return "AIR"; + } + if (block.getBlockData() instanceof Waterlogged waterlogged && waterlogged.isWaterlogged()) { + return "WATER"; + } + return plugin.getPlatformInterface().getBlockID(block); + }).toList(); for (PositiveFillMethod positiveFillMethod : wateringCanConfig.getPositiveFillMethods()) { int index = 0; diff --git a/plugin/src/main/java/net/momirealms/customcrops/customplugin/oraxen/OraxenPluginImpl.java b/plugin/src/main/java/net/momirealms/customcrops/customplugin/oraxen/OraxenPluginImpl.java index d6a2999..e6c592f 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/customplugin/oraxen/OraxenPluginImpl.java +++ b/plugin/src/main/java/net/momirealms/customcrops/customplugin/oraxen/OraxenPluginImpl.java @@ -36,6 +36,7 @@ import net.momirealms.customcrops.customplugin.PlatformInterface; import net.momirealms.customcrops.util.AdventureUtils; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.Rotation; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.entity.Entity; @@ -88,17 +89,26 @@ public class OraxenPluginImpl implements PlatformInterface { @Nullable @Override public ItemDisplay placeItemDisplay(Location location, String id) { - FurnitureMechanic mechanic = (FurnitureMechanic) FurnitureFactory.getInstance().getMechanic(id); - if (mechanic == null) { - AdventureUtils.consoleMessage("[CustomCrops] Furniture not exists: " + id); - return null; - } - Entity entity = mechanic.place(location); +// FurnitureMechanic mechanic = (FurnitureMechanic) FurnitureFactory.getInstance().getMechanic(id); +// if (mechanic == null) { +// AdventureUtils.consoleMessage("[CustomCrops] Furniture not exists: " + id); +// return null; +// } +// Entity entity = mechanic.place(location); +// if (entity instanceof ItemDisplay itemDisplay) +// return itemDisplay; +// else { +// AdventureUtils.consoleMessage("[CustomCrops] ItemDisplay not exists: " + id); +// // use oraxen method to remove sub entities +// OraxenFurniture.remove(entity, null); +// return null; +// } + + Entity entity = OraxenFurniture.place(id, location, Rotation.NONE, BlockFace.UP); if (entity instanceof ItemDisplay itemDisplay) return itemDisplay; else { AdventureUtils.consoleMessage("[CustomCrops] ItemDisplay not exists: " + id); - // use oraxen method to remove sub entities OraxenFurniture.remove(entity, null); return null; }