diff --git a/build.gradle b/build.gradle index 6b30596..b39731d 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group = 'net.momirealms' -version = '2.0-r8-hotfix' +version = '2.0-r9' repositories { mavenCentral() diff --git a/src/main/java/net/momirealms/customcrops/api/event/CrowAttackEvent.java b/src/main/java/net/momirealms/customcrops/api/event/CrowAttackEvent.java index f4dd10c..e191ffc 100644 --- a/src/main/java/net/momirealms/customcrops/api/event/CrowAttackEvent.java +++ b/src/main/java/net/momirealms/customcrops/api/event/CrowAttackEvent.java @@ -23,15 +23,13 @@ import org.bukkit.event.Event; import org.bukkit.event.HandlerList; import org.jetbrains.annotations.NotNull; -public class CrowAttackEvent extends Event implements Cancellable { +public class CrowAttackEvent extends Event { private final Location location; - private boolean cancelled; private static final HandlerList handlers = new HandlerList(); public CrowAttackEvent(Location location) { this.location = location; - this.cancelled = false; } @Override @@ -39,16 +37,6 @@ public class CrowAttackEvent extends Event implements Cancellable { return handlers; } - @Override - public boolean isCancelled() { - return cancelled; - } - - @Override - public void setCancelled(boolean cancel) { - cancelled = cancel; - } - public Location getLocation() { return location; } diff --git a/src/main/java/net/momirealms/customcrops/config/MainConfig.java b/src/main/java/net/momirealms/customcrops/config/MainConfig.java index 2dd4f13..8c49085 100644 --- a/src/main/java/net/momirealms/customcrops/config/MainConfig.java +++ b/src/main/java/net/momirealms/customcrops/config/MainConfig.java @@ -116,6 +116,8 @@ public class MainConfig { public static boolean preventPlantVanilla; public static Material[] preventPlantVanillaArray; public static boolean enableConvert; + public static boolean enableSkillBonus; + public static double bonusPerLevel; public static HashMap vanilla2Crops; public static void load() { @@ -235,6 +237,9 @@ public class MainConfig { waterBarEmpty = config.getString("watering-can-lore.water-bar.empty", "뀁뀄"); waterBarRight = config.getString("watering-can-lore.water-bar.right", "뀁뀅"); + enableSkillBonus = config.getBoolean("mechanics.skill-bonus.enable", false); + bonusPerLevel = config.getDouble("mechanics.skill-bonus.bonus-per-level", 0.001); + rightHarvestVanilla = config.getBoolean("mechanics.vanilla-crops.right-click-harvest", false); preventPlantVanilla = config.getBoolean("mechanics.vanilla-crops.prevent-plant.enable", false); diff --git a/src/main/java/net/momirealms/customcrops/integrations/SkillXP.java b/src/main/java/net/momirealms/customcrops/integrations/SkillXP.java index 1868535..a5e14a9 100644 --- a/src/main/java/net/momirealms/customcrops/integrations/SkillXP.java +++ b/src/main/java/net/momirealms/customcrops/integrations/SkillXP.java @@ -23,4 +23,6 @@ public interface SkillXP { void addXp(Player player, double amount); + int getLevel(Player player); + } \ No newline at end of file diff --git a/src/main/java/net/momirealms/customcrops/integrations/skill/AureliumsHook.java b/src/main/java/net/momirealms/customcrops/integrations/skill/AureliumsHook.java index 920a915..eb429b9 100644 --- a/src/main/java/net/momirealms/customcrops/integrations/skill/AureliumsHook.java +++ b/src/main/java/net/momirealms/customcrops/integrations/skill/AureliumsHook.java @@ -32,4 +32,9 @@ public class AureliumsHook implements SkillXP { public void addXp(Player player, double amount) { leveler.addXp(player, skill, amount); } + + @Override + public int getLevel(Player player) { + return AureliumAPI.getSkillLevel(player, skill); + } } diff --git a/src/main/java/net/momirealms/customcrops/integrations/skill/EcoSkillsHook.java b/src/main/java/net/momirealms/customcrops/integrations/skill/EcoSkillsHook.java index f8fbfcd..0ef146e 100644 --- a/src/main/java/net/momirealms/customcrops/integrations/skill/EcoSkillsHook.java +++ b/src/main/java/net/momirealms/customcrops/integrations/skill/EcoSkillsHook.java @@ -28,4 +28,9 @@ public class EcoSkillsHook implements SkillXP { public void addXp(Player player, double amount) { EcoSkillsAPI.getInstance().giveSkillExperience(player, Skills.FARMING, amount); } + + @Override + public int getLevel(Player player) { + return EcoSkillsAPI.getInstance().getSkillLevel(player, Skills.FARMING); + } } diff --git a/src/main/java/net/momirealms/customcrops/integrations/skill/JobsRebornHook.java b/src/main/java/net/momirealms/customcrops/integrations/skill/JobsRebornHook.java index 0492ff9..6b62a6e 100644 --- a/src/main/java/net/momirealms/customcrops/integrations/skill/JobsRebornHook.java +++ b/src/main/java/net/momirealms/customcrops/integrations/skill/JobsRebornHook.java @@ -31,16 +31,27 @@ public class JobsRebornHook implements SkillXP { @Override public void addXp(Player player, double amount) { JobsPlayer jobsPlayer = Jobs.getPlayerManager().getJobsPlayer(player); - if (jobsPlayer != null) { List jobs = jobsPlayer.getJobProgression(); - Job job = Jobs.getJob("Farmer"); - for (JobProgression progression : jobs) if (progression.getJob().equals(job)){ progression.addExperience(amount); } } } + + @Override + public int getLevel(Player player) { + JobsPlayer jobsPlayer = Jobs.getPlayerManager().getJobsPlayer(player); + if (jobsPlayer != null) { + List jobs = jobsPlayer.getJobProgression(); + Job job = Jobs.getJob("Farmer"); + for (JobProgression progression : jobs) + if (progression.getJob().equals(job)){ + return progression.getLevel(); + } + } + return 0; + } } diff --git a/src/main/java/net/momirealms/customcrops/integrations/skill/MMOCoreHook.java b/src/main/java/net/momirealms/customcrops/integrations/skill/MMOCoreHook.java index 1914930..d48def2 100644 --- a/src/main/java/net/momirealms/customcrops/integrations/skill/MMOCoreHook.java +++ b/src/main/java/net/momirealms/customcrops/integrations/skill/MMOCoreHook.java @@ -29,4 +29,9 @@ public class MMOCoreHook implements SkillXP { Profession profession = MMOCore.plugin.professionManager.get("farming"); profession.giveExperience(MMOCore.plugin.dataProvider.getDataManager().get(player), amount, null ,EXPSource.OTHER); } + + @Override + public int getLevel(Player player) { + return 0; + } } diff --git a/src/main/java/net/momirealms/customcrops/integrations/skill/mcMMOHook.java b/src/main/java/net/momirealms/customcrops/integrations/skill/mcMMOHook.java index 9036c1b..a29ca9e 100644 --- a/src/main/java/net/momirealms/customcrops/integrations/skill/mcMMOHook.java +++ b/src/main/java/net/momirealms/customcrops/integrations/skill/mcMMOHook.java @@ -18,6 +18,7 @@ package net.momirealms.customcrops.integrations.skill; import com.gmail.nossr50.api.ExperienceAPI; +import com.gmail.nossr50.datatypes.skills.PrimarySkillType; import net.momirealms.customcrops.integrations.SkillXP; import org.bukkit.entity.Player; @@ -27,4 +28,9 @@ public class mcMMOHook implements SkillXP { public void addXp(Player player, double amount) { ExperienceAPI.addRawXP(player, "Herbalism", (float) amount, "UNKNOWN"); } + + @Override + public int getLevel(Player player) { + return ExperienceAPI.getLevel(player, PrimarySkillType.HERBALISM); + } } \ 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 3cd9323..14c417a 100644 --- a/src/main/java/net/momirealms/customcrops/managers/CropManager.java +++ b/src/main/java/net/momirealms/customcrops/managers/CropManager.java @@ -57,6 +57,7 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Future; import java.util.concurrent.ThreadLocalRandom; public class CropManager extends Function { @@ -364,10 +365,14 @@ public class CropManager extends Function { qualityRatio = qualityCrop.getQualityRatio(); } } + if (MainConfig.enableSkillBonus) { + double bonus_chance = MainConfig.skillXP.getLevel(player) * MainConfig.bonusPerLevel; + amount *= (bonus_chance + 1); + } dropQualityLoots(qualityLoot, amount, location.getBlock().getLocation(), qualityRatio); } OtherLoot[] otherLoots = crop.getOtherLoots(); - if (otherLoots != null) dropOtherLoots(otherLoots, location.getBlock().getLocation()); + if (otherLoots != null) dropOtherLoots(otherLoots, location.getBlock().getLocation(), player); } public void performActions(ActionInterface[] actions, Player player) { @@ -376,10 +381,14 @@ public class CropManager extends Function { } } - public void dropOtherLoots(OtherLoot[] otherLoots, Location location) { + public void dropOtherLoots(OtherLoot[] otherLoots, Location location, Player player) { for (OtherLoot otherLoot : otherLoots) { if (Math.random() < otherLoot.getChance()) { int random = ThreadLocalRandom.current().nextInt(otherLoot.getMin(), otherLoot.getMax() + 1); + if (MainConfig.enableSkillBonus) { + double bonus_chance = MainConfig.skillXP.getLevel(player) * MainConfig.bonusPerLevel; + random *= (bonus_chance + 1); + } ItemStack drop = getLoot(otherLoot.getItemID()); if (drop == null) continue; drop.setAmount(random); @@ -435,13 +444,9 @@ public class CropManager extends Function { public boolean crowJudge(Location location) { if (Math.random() < MainConfig.crowChance && !hasScarecrow(location)) { - CrowAttackEvent crowAttackEvent = new CrowAttackEvent(location); - Bukkit.getPluginManager().callEvent(crowAttackEvent); - if (crowAttackEvent.isCancelled()) { - return false; - } - Bukkit.getScheduler().runTask(CustomCrops.plugin, () -> { + CrowAttackEvent crowAttackEvent = new CrowAttackEvent(location); + Bukkit.getPluginManager().callEvent(crowAttackEvent); for (Player player : location.getNearbyPlayers(48)) { CrowTask crowTask = new CrowTask(player, location.clone().add(0.4,0,0.4), getArmorStandUtil()); crowTask.runTaskTimerAsynchronously(CustomCrops.plugin, 1, 1); diff --git a/src/main/java/net/momirealms/customcrops/managers/CustomWorld.java b/src/main/java/net/momirealms/customcrops/managers/CustomWorld.java index cce249f..a6f297f 100644 --- a/src/main/java/net/momirealms/customcrops/managers/CustomWorld.java +++ b/src/main/java/net/momirealms/customcrops/managers/CustomWorld.java @@ -203,6 +203,7 @@ public class CustomWorld { public void unloadSeason() { if (!SeasonConfig.enable) return; + if (MainConfig.realisticSeasonHook) return; JsonObject jsonObject = new JsonObject(); JsonPrimitive jsonPrimitive = new JsonPrimitive(SeasonUtils.getSeason(world).name()); jsonObject.add("season", jsonPrimitive); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 9780c79..802fda0 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,5 +1,5 @@ #Don't change -config-version: '14' +config-version: '15' # lang: english / spanish / chinese lang: english @@ -150,6 +150,11 @@ mechanics: POTATO: potato BEETROOT_SEEDS: beetroot + # This option requires a skill-plugin hook + # Which would increase the amount of crops player get + skill-bonus: + enable: false + bonus-per-level: 0.001 sounds: water-pot: