diff --git a/build.gradle b/build.gradle index 343dfd5..e7b902b 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group = 'net.momirealms' -version = '2.2.1' +version = '2.2.2' repositories { mavenCentral() diff --git a/src/main/java/net/momirealms/customcrops/config/MainConfig.java b/src/main/java/net/momirealms/customcrops/config/MainConfig.java index 3a8f134..38e70ed 100644 --- a/src/main/java/net/momirealms/customcrops/config/MainConfig.java +++ b/src/main/java/net/momirealms/customcrops/config/MainConfig.java @@ -361,6 +361,13 @@ public class MainConfig { hookMessage("BentoBox"); } } + if (config.getBoolean("integration.IridiumSkyblock",false)){ + if (Bukkit.getPluginManager().getPlugin("IridiumSkyblock") == null) Log.warn("Failed to initialize IridiumSkyblock!"); + else { + antiGriefs.add(new IridiumSkyblockHook()); + hookMessage("IridiumSkyblock"); + } + } if (config.getBoolean("integration.AureliumSkills")) { if (Bukkit.getPluginManager().getPlugin("AureliumSkills") == null) Log.warn("Failed to initialize AureliumSkills!"); diff --git a/src/main/java/net/momirealms/customcrops/integrations/protection/IridiumSkyblockHook.java b/src/main/java/net/momirealms/customcrops/integrations/protection/IridiumSkyblockHook.java new file mode 100644 index 0000000..f64e359 --- /dev/null +++ b/src/main/java/net/momirealms/customcrops/integrations/protection/IridiumSkyblockHook.java @@ -0,0 +1,34 @@ +package net.momirealms.customcrops.integrations.protection; + +import com.iridium.iridiumskyblock.PermissionType; +import com.iridium.iridiumskyblock.api.IridiumSkyblockAPI; +import com.iridium.iridiumskyblock.database.Island; +import com.iridium.iridiumskyblock.database.User; +import net.momirealms.customcrops.integrations.AntiGrief; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +import java.util.Optional; + +public class IridiumSkyblockHook implements AntiGrief { + + private final IridiumSkyblockAPI api; + + public IridiumSkyblockHook() { + this.api = IridiumSkyblockAPI.getInstance(); + } + + @Override + public boolean canBreak(Location location, Player player) { + Optional island = api.getIslandViaLocation(location); + User user = api.getUser(player); + return island.map(value -> api.getIslandPermission(value, user, PermissionType.BLOCK_BREAK)).orElse(true); + } + + @Override + public boolean canPlace(Location location, Player player) { + Optional island = api.getIslandViaLocation(location); + User user = api.getUser(player); + return island.map(value -> api.getIslandPermission(value, user, PermissionType.BLOCK_PLACE)).orElse(true); + } +} diff --git a/src/main/java/net/momirealms/customcrops/managers/CropManager.java b/src/main/java/net/momirealms/customcrops/managers/CropManager.java index a912a80..3bdf4d0 100644 --- a/src/main/java/net/momirealms/customcrops/managers/CropManager.java +++ b/src/main/java/net/momirealms/customcrops/managers/CropManager.java @@ -287,6 +287,13 @@ public class CropManager extends Function { }); } + public void dry(Location potLoc) { + Bukkit.getScheduler().runTask(CustomCrops.plugin, () -> { + customInterface.removeBlock(potLoc); + customInterface.placeNoteBlock(potLoc, BasicItemConfig.dryPot); + }); + } + public void makePotWet(Location potLoc) { String potID = customInterface.getBlockID(potLoc); if (potID == null) return; @@ -485,6 +492,13 @@ public class CropManager extends Function { if (potID == null) return true; boolean certainGrow = potID.equals(BasicItemConfig.wetPot); + if (certainGrow && !hasWater(potLoc)) { + if (!(fertilizer instanceof RetainingSoil retainingSoil && Math.random() < retainingSoil.getChance())) { + dry(potLoc); + certainGrow = false; + } + } + if (MainConfig.dryMakesCropDead && !certainGrow && Math.random() < MainConfig.dryDeadChance) { Bukkit.getScheduler().runTask(CustomCrops.plugin, () -> { customInterface.removeBlock(location); @@ -506,6 +520,13 @@ public class CropManager extends Function { return false; } + private boolean hasWater(Location potLoc) { + World world = potLoc.getWorld(); + CustomWorld customWorld = customWorlds.get(world); + if (customWorld == null) return false; + return customWorld.isPotWet(potLoc); + } + public boolean itemFrameGrowJudge(Location location, GrowingCrop growingCrop) { Crop crop = CropConfig.CROPS.get(growingCrop.getType()); @@ -550,6 +571,13 @@ public class CropManager extends Function { if (potID == null) return true; boolean certainGrow = potID.equals(BasicItemConfig.wetPot); + if (certainGrow && !hasWater(potLoc)) { + if (!(fertilizer instanceof RetainingSoil retainingSoil && Math.random() < retainingSoil.getChance())) { + dry(potLoc); + certainGrow = false; + } + } + if (MainConfig.dryMakesCropDead && !certainGrow && Math.random() < MainConfig.dryDeadChance) { itemFrame.setItem(customInterface.getItemStack(BasicItemConfig.deadCrop), false); return true; diff --git a/src/main/java/net/momirealms/customcrops/managers/CustomWorld.java b/src/main/java/net/momirealms/customcrops/managers/CustomWorld.java index 16c80cb..3dac0f5 100644 --- a/src/main/java/net/momirealms/customcrops/managers/CustomWorld.java +++ b/src/main/java/net/momirealms/customcrops/managers/CustomWorld.java @@ -598,6 +598,7 @@ public class CustomWorld { watered.remove(MiscUtils.getSimpleLocation(potLoc)); } public void setPlayerWatered(Location potLoc) { + setPotWet(potLoc); playerWatered.add(MiscUtils.getSimpleLocation(potLoc)); } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 14bc0c7..4de9413 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,6 +1,6 @@ # Don't change # 请不要修改 -config-version: '20' +config-version: '21' metrics: true # lang: english / spanish / chinese lang: english @@ -18,6 +18,7 @@ integration: GriefPrevention: false CrashClaim: false BentoBox: false + IridiumSkyblock: false # Skill Xp # 技能经验 AureliumSkills: false diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index a0ae776..494a322 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -24,6 +24,7 @@ softdepend: - CrashClaim - RealisticSeasons - Jobs + - IridiumSkyblock commands: customcrops: usage: /customcrops