diff --git a/src/main/java/net/momirealms/customcrops/api/crop/Crop.java b/src/main/java/net/momirealms/customcrops/api/crop/Crop.java index bbdebbd..54fdfc8 100644 --- a/src/main/java/net/momirealms/customcrops/api/crop/Crop.java +++ b/src/main/java/net/momirealms/customcrops/api/crop/Crop.java @@ -26,21 +26,21 @@ import net.momirealms.customcrops.objects.requirements.RequirementInterface; public interface Crop { - public CCSeason[] getSeasons(); + CCSeason[] getSeasons(); - public RequirementInterface[] getRequirements(); + RequirementInterface[] getRequirements(); - public String getReturnStage(); + String getReturnStage(); - public QualityLoot getQualityLoot(); + QualityLoot getQualityLoot(); - public GiganticCrop getGiganticCrop(); + GiganticCrop getGiganticCrop(); - public double getSkillXP(); + double getSkillXP(); - public OtherLoot[] getOtherLoots(); + OtherLoot[] getOtherLoots(); - public ActionInterface[] getActions(); + ActionInterface[] getActions(); - public String getKey(); + String getKey(); } diff --git a/src/main/java/net/momirealms/customcrops/api/utils/CropUtils.java b/src/main/java/net/momirealms/customcrops/api/utils/CropUtils.java index 0936161..ecf7227 100644 --- a/src/main/java/net/momirealms/customcrops/api/utils/CropUtils.java +++ b/src/main/java/net/momirealms/customcrops/api/utils/CropUtils.java @@ -23,6 +23,11 @@ import org.jetbrains.annotations.Nullable; public class CropUtils { + /** + * get a crop config + * @param crop crop + * @return crop config + */ @Nullable public static Crop getCrop(String crop) { return CropConfig.CROPS.get(crop); diff --git a/src/main/java/net/momirealms/customcrops/api/utils/SeasonUtils.java b/src/main/java/net/momirealms/customcrops/api/utils/SeasonUtils.java index b00c71b..545c170 100644 --- a/src/main/java/net/momirealms/customcrops/api/utils/SeasonUtils.java +++ b/src/main/java/net/momirealms/customcrops/api/utils/SeasonUtils.java @@ -24,15 +24,29 @@ import org.jetbrains.annotations.NotNull; public class SeasonUtils { + /** + * Set season for a specified world + * @param world world + * @param season season + */ public static void setSeason(World world, CCSeason season) { CustomCrops.plugin.getCropManager().getSeasonAPI().setSeason(season, world); } + /** + * return a world's season, if it has no season, it would return a new season + * @param world world + * @return season + */ @NotNull public static CCSeason getSeason(World world) { return CustomCrops.plugin.getCropManager().getSeasonAPI().getSeason(world); } + /** + * remove a world's season data from cache + * @param world world + */ public static void unloadSeason(World world) { CustomCrops.plugin.getCropManager().getSeasonAPI().unloadWorld(world); } diff --git a/src/main/java/net/momirealms/customcrops/api/utils/WorldUtils.java b/src/main/java/net/momirealms/customcrops/api/utils/WorldUtils.java new file mode 100644 index 0000000..617c8bc --- /dev/null +++ b/src/main/java/net/momirealms/customcrops/api/utils/WorldUtils.java @@ -0,0 +1,24 @@ +package net.momirealms.customcrops.api.utils; + +import net.momirealms.customcrops.CustomCrops; +import org.bukkit.World; + +public class WorldUtils { + + /** + * load a world's crop data + * @param world world + */ + public static void loadCropWorld(World world) { + CustomCrops.plugin.getCropManager().onWorldLoad(world); + } + + /** + * unload a world's crop data + * @param world world + * @param disable whether the server is stopping + */ + public static void unloadCropWorld(World world, boolean disable) { + CustomCrops.plugin.getCropManager().onWorldUnload(world, disable); + } +} diff --git a/src/main/java/net/momirealms/customcrops/config/MainConfig.java b/src/main/java/net/momirealms/customcrops/config/MainConfig.java index 677fa7e..92a6420 100644 --- a/src/main/java/net/momirealms/customcrops/config/MainConfig.java +++ b/src/main/java/net/momirealms/customcrops/config/MainConfig.java @@ -21,6 +21,7 @@ import net.momirealms.customcrops.helper.Log; import net.momirealms.customcrops.integrations.AntiGrief; import net.momirealms.customcrops.integrations.SkillXP; import net.momirealms.customcrops.integrations.protection.*; +import net.momirealms.customcrops.integrations.skill.*; import net.momirealms.customcrops.objects.QualityRatio; import net.momirealms.customcrops.utils.AdventureUtil; import org.apache.commons.lang.StringUtils; @@ -135,6 +136,8 @@ public class MainConfig { enableParticles = !config.getBoolean("optimization.disable-water-particles", false); enableAnimations = !config.getBoolean("optimization.disable-sprinkler-animation", false); + realisticSeasonHook = config.getBoolean("integration.RealisticSeasons"); + try { boneMealSuccess = Particle.valueOf(config.getString("mechanics.success-particle", "VILLAGER_HAPPY")); } @@ -214,6 +217,27 @@ public class MainConfig { if (Bukkit.getPluginManager().getPlugin("BentoBox") == null) Log.warn("Failed to initialize BentoBox!"); else {antiGriefs.add(new BentoBoxHook());hookMessage("BentoBox");} } + + if (config.getBoolean("integration.AureliumSkills")) { + if (Bukkit.getPluginManager().getPlugin("AureliumSkills") == null) Log.warn("Failed to initialize AureliumSkills!"); + else {skillXP = new AureliumsHook();} + } + if (config.getBoolean("integration.mcMMO")) { + if (Bukkit.getPluginManager().getPlugin("mcMMO") == null) Log.warn("Failed to initialize mcMMO!"); + else {skillXP = new mcMMOHook();} + } + if (config.getBoolean("integration.MMOCore")) { + if (Bukkit.getPluginManager().getPlugin("MMOCore") == null) Log.warn("Failed to initialize MMOCore!"); + else {skillXP = new MMOCoreHook();} + } + if (config.getBoolean("integration.EcoSkills")) { + if (Bukkit.getPluginManager().getPlugin("EcoSkills") == null) Log.warn("Failed to initialize EcoSkills!"); + else {skillXP = new EcoSkillsHook();} + } + if (config.getBoolean("integration.JobsReborn")) { + if (Bukkit.getPluginManager().getPlugin("JobsReborn") == null) Log.warn("Failed to initialize JobsReborn!"); + else {skillXP = new JobsRebornHook();} + } } public static World[] getWorldsArray() { diff --git a/src/main/java/net/momirealms/customcrops/integrations/papi/SeasonPapi.java b/src/main/java/net/momirealms/customcrops/integrations/papi/SeasonPapi.java index ff89c18..8d50b7e 100644 --- a/src/main/java/net/momirealms/customcrops/integrations/papi/SeasonPapi.java +++ b/src/main/java/net/momirealms/customcrops/integrations/papi/SeasonPapi.java @@ -56,7 +56,7 @@ public class SeasonPapi extends PlaceholderExpansion { if (!SeasonConfig.enable) return MessageConfig.seasonDisabled; switch (params) { case "current" -> { - if (!MainConfig.getWorldsList().contains(player.getWorld())) return MessageConfig.autoSeasonDisabled; + if (!MainConfig.getWorldsList().contains(player.getWorld())) return MessageConfig.noSeason; return getSeasonText(player.getWorld()); } case "days_left" -> { @@ -73,7 +73,7 @@ public class SeasonPapi extends PlaceholderExpansion { if (params.startsWith("current_")) { World world = Bukkit.getWorld(params.substring(8)); if (world == null) return MessageConfig.noSeason; - if (!MainConfig.getWorldsList().contains(world)) return MessageConfig.autoSeasonDisabled; + if (!MainConfig.getWorldsList().contains(world)) return MessageConfig.noSeason; return getSeasonText(world); } if (params.startsWith("days_left_")) { diff --git a/src/main/java/net/momirealms/customcrops/integrations/season/RealisticSeasonsHook.java b/src/main/java/net/momirealms/customcrops/integrations/season/RealisticSeasonsHook.java index cfb4fef..1ffbc92 100644 --- a/src/main/java/net/momirealms/customcrops/integrations/season/RealisticSeasonsHook.java +++ b/src/main/java/net/momirealms/customcrops/integrations/season/RealisticSeasonsHook.java @@ -19,9 +19,11 @@ package net.momirealms.customcrops.integrations.season; import me.casperge.realisticseasons.api.SeasonsAPI; import net.momirealms.customcrops.Function; +import net.momirealms.customcrops.config.MainConfig; import org.bukkit.World; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.mozilla.javascript.tools.jsc.Main; public class RealisticSeasonsHook extends Function implements SeasonInterface { @@ -46,7 +48,7 @@ public class RealisticSeasonsHook extends Function implements SeasonInterface { return false; } } - return false; + return true; } @Override @@ -61,29 +63,26 @@ public class RealisticSeasonsHook extends Function implements SeasonInterface { @Override @NotNull public CCSeason getSeason(World world){ - switch (api.getSeason(world)){ - case SPRING -> {return CCSeason.SPRING;} - case SUMMER -> {return CCSeason.SUMMER;} - case WINTER -> {return CCSeason.WINTER;} - case FALL -> {return CCSeason.AUTUMN;} + if (!MainConfig.syncSeason) { + switch (api.getSeason(world)){ + case SPRING -> {return CCSeason.SPRING;} + case SUMMER -> {return CCSeason.SUMMER;} + case WINTER -> {return CCSeason.WINTER;} + case FALL -> {return CCSeason.AUTUMN;} + } + } + else { + switch (api.getSeason(MainConfig.syncWorld)){ + case SPRING -> {return CCSeason.SPRING;} + case SUMMER -> {return CCSeason.SUMMER;} + case WINTER -> {return CCSeason.WINTER;} + case FALL -> {return CCSeason.AUTUMN;} + } } return CCSeason.UNKNOWN; } - /** - * Set season for RealisticSeasons - * @param season season - * @param world world - */ @Override public void setSeason(CCSeason season, World world) { - me.casperge.realisticseasons.season.Season rsSeason = switch (season) { - case SPRING -> me.casperge.realisticseasons.season.Season.SPRING; - case SUMMER -> me.casperge.realisticseasons.season.Season.SUMMER; - case AUTUMN -> me.casperge.realisticseasons.season.Season.FALL; - case WINTER -> me.casperge.realisticseasons.season.Season.WINTER; - default -> throw new IllegalStateException("Unexpected value: " + season); - }; - api.setSeason(world, rsSeason); } } \ No newline at end of file diff --git a/src/main/java/net/momirealms/customcrops/managers/CropManager.java b/src/main/java/net/momirealms/customcrops/managers/CropManager.java index 4ffc6f2..04b933a 100644 --- a/src/main/java/net/momirealms/customcrops/managers/CropManager.java +++ b/src/main/java/net/momirealms/customcrops/managers/CropManager.java @@ -121,6 +121,8 @@ public class CropManager extends Function { else seasonInterface = new InternalSeason(); } + seasonInterface.load(); + //load Worlds for (World world : Bukkit.getWorlds()) { onWorldLoad(world); diff --git a/src/main/java/net/momirealms/customcrops/managers/CustomWorld.java b/src/main/java/net/momirealms/customcrops/managers/CustomWorld.java index 55387a7..64a1cc2 100644 --- a/src/main/java/net/momirealms/customcrops/managers/CustomWorld.java +++ b/src/main/java/net/momirealms/customcrops/managers/CustomWorld.java @@ -84,6 +84,10 @@ public class CustomWorld { public void unload(boolean disable) { if (disable) { unloadData(); + for (BukkitTask task : tasksCache) { + task.cancel(); + } + tasksCache.clear(); } else { Bukkit.getScheduler().runTaskAsynchronously(CustomCrops.plugin, () -> { diff --git a/src/main/resources/crops_itemsadder.yml b/src/main/resources/crops_itemsadder.yml index 8918e16..4aedc23 100644 --- a/src/main/resources/crops_itemsadder.yml +++ b/src/main/resources/crops_itemsadder.yml @@ -129,4 +129,4 @@ corn: 3: customcrops:corn_golden_star season: - Summer - - Autumn + - Autumn \ No newline at end of file