diff --git a/build.gradle b/build.gradle index fe3d023..a15ec5f 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group = 'net.momirealms' -version = '3.2.2-hotfix3' +version = '3.2.3.1' repositories { mavenCentral() @@ -19,6 +19,8 @@ repositories { maven {name = "jitpack repo"; url = "https://jitpack.io"} maven {name = 'glaremasters repo'; url = 'https://repo.glaremasters.me/repository/towny/'} maven {name = 'bg-software repo'; url = 'https://repo.bg-software.com/repository/api/'} + maven {name = 'aswm repo'; url = 'https://repo.infernalsuite.com/repository/maven-snapshots/' } + maven {name = 'aswm repo'; url = 'https://repo.rapture.pw/repository/maven-releases/' } } dependencies { @@ -30,11 +32,12 @@ dependencies { compileOnly ('me.clip:placeholderapi:2.11.3') compileOnly ('com.github.LoneDev6:api-itemsadder:3.4.1-r4') compileOnly ('io.lumine:Mythic-Dist:5.0.3-SNAPSHOT') - //compileOnly ('com.willfp:EcoSkills:3.0.0-b2') + //compileOnly ('com.willfp:EcoSkills:3.0.0-b2') No read access compileOnly ('com.willfp:eco:6.60.0') compileOnly ('com.willfp:EcoJobs:3.13.0') compileOnly ('net.objecthunter:exp4j:0.4.8') compileOnly ('io.lumine:Mythic-Dist:5.2.1') + compileOnly ('com.infernalsuite.aswm:api:1.19.4-R0.1-SNAPSHOT') compileOnly fileTree (dir:'libs',includes:['*.jar']) implementation ('net.kyori:adventure-api:4.13.1') implementation ('net.kyori:adventure-platform-bukkit:4.3.0') diff --git a/src/main/java/net/momirealms/customcrops/api/object/action/JobXPImpl.java b/src/main/java/net/momirealms/customcrops/api/object/action/JobXPImpl.java index 0ddf8d5..d246600 100644 --- a/src/main/java/net/momirealms/customcrops/api/object/action/JobXPImpl.java +++ b/src/main/java/net/momirealms/customcrops/api/object/action/JobXPImpl.java @@ -24,13 +24,13 @@ import net.momirealms.customcrops.integration.JobInterface; import org.bukkit.entity.Player; import org.jetbrains.annotations.Nullable; -public record JobXPImpl(double amount, double chance) implements Action { +public record JobXPImpl(double amount, double chance, @Nullable String job) implements Action { @Override public void doOn(@Nullable Player player, @Nullable SimpleLocation cropLoc, ItemMode itemMode) { if (player == null || Math.random() > chance) return; JobInterface jobInterface = CustomCrops.getInstance().getIntegrationManager().getJobInterface(); if (jobInterface == null) return; - jobInterface.addXp(player, amount); + jobInterface.addXp(player, amount, job); } } diff --git a/src/main/java/net/momirealms/customcrops/api/object/basic/ConfigManager.java b/src/main/java/net/momirealms/customcrops/api/object/basic/ConfigManager.java index 9f5e24f..af80308 100644 --- a/src/main/java/net/momirealms/customcrops/api/object/basic/ConfigManager.java +++ b/src/main/java/net/momirealms/customcrops/api/object/basic/ConfigManager.java @@ -68,6 +68,7 @@ public class ConfigManager extends Function { public static boolean preventTrampling; public static boolean onlyInLoadedChunks; public static boolean enableCorruptionFixer; + public static boolean debugWorld; private final HashMap cropPerWorld; private final CustomCrops plugin; @@ -96,6 +97,7 @@ public class ConfigManager extends Function { lang = config.getString("lang"); debugScheduler = config.getBoolean("debug.log-scheduler", false); debugCorruption = config.getBoolean("debug.log-corruption-fixer", false); + debugWorld = config.getBoolean("debug.log-world-state", false); loadWorlds(Objects.requireNonNull(config.getConfigurationSection("worlds"))); loadOptimization(Objects.requireNonNull(config.getConfigurationSection("optimization"))); loadScheduleSystem(Objects.requireNonNull(config.getConfigurationSection("schedule-system"))); diff --git a/src/main/java/net/momirealms/customcrops/api/object/fertilizer/FertilizerManager.java b/src/main/java/net/momirealms/customcrops/api/object/fertilizer/FertilizerManager.java index 67e018e..c445716 100644 --- a/src/main/java/net/momirealms/customcrops/api/object/fertilizer/FertilizerManager.java +++ b/src/main/java/net/momirealms/customcrops/api/object/fertilizer/FertilizerManager.java @@ -123,7 +123,7 @@ public class FertilizerManager extends Function { public ArrayList> getChancePair(ConfigurationSection fertilizerSec) { ArrayList> pairs = new ArrayList<>(); - ConfigurationSection effectSec = fertilizerSec.getConfigurationSection("effects"); + ConfigurationSection effectSec = fertilizerSec.getConfigurationSection("chance"); if (effectSec == null) return new ArrayList<>(); for (String point : effectSec.getKeys(false)) { Pair pair = new Pair<>(effectSec.getDouble(point), Integer.parseInt(point)); diff --git a/src/main/java/net/momirealms/customcrops/api/object/requirement/JobLevelImpl.java b/src/main/java/net/momirealms/customcrops/api/object/requirement/JobLevelImpl.java index 8ddb31b..0edb2c1 100644 --- a/src/main/java/net/momirealms/customcrops/api/object/requirement/JobLevelImpl.java +++ b/src/main/java/net/momirealms/customcrops/api/object/requirement/JobLevelImpl.java @@ -24,17 +24,19 @@ import org.jetbrains.annotations.Nullable; public class JobLevelImpl extends AbstractRequirement implements Requirement { private final int level; + private final String jobName; - public JobLevelImpl(@Nullable String[] msg, int level) { + public JobLevelImpl(@Nullable String[] msg, int level, String jobName) { super(msg); this.level = level; + this.jobName = jobName; } @Override public boolean isConditionMet(CurrentState currentState) { JobInterface jobInterface = CustomCrops.getInstance().getIntegrationManager().getJobInterface(); if (jobInterface == null || currentState.getPlayer() == null) return true; - if (jobInterface.getLevel(currentState.getPlayer()) >= level) { + if (jobInterface.getLevel(currentState.getPlayer(), jobName) >= level) { return true; } notMetMessage(currentState.getPlayer()); diff --git a/src/main/java/net/momirealms/customcrops/api/object/world/SlimeWorldListener.java b/src/main/java/net/momirealms/customcrops/api/object/world/SlimeWorldListener.java new file mode 100644 index 0000000..7746d03 --- /dev/null +++ b/src/main/java/net/momirealms/customcrops/api/object/world/SlimeWorldListener.java @@ -0,0 +1,24 @@ +package net.momirealms.customcrops.api.object.world; + +import com.infernalsuite.aswm.api.events.LoadSlimeWorldEvent; +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +public class SlimeWorldListener implements Listener { + + private final WorldDataManager worldDataManager; + + public SlimeWorldListener(WorldDataManager worldDataManager) { + this.worldDataManager = worldDataManager; + } + + @EventHandler + public void onWorldLoad(LoadSlimeWorldEvent event) { + World world = Bukkit.getWorld(event.getSlimeWorld().getName()); + if (world != null) { + worldDataManager.loadWorld(world); + } + } +} diff --git a/src/main/java/net/momirealms/customcrops/api/object/world/WorldDataManager.java b/src/main/java/net/momirealms/customcrops/api/object/world/WorldDataManager.java index abf4512..ed56e86 100644 --- a/src/main/java/net/momirealms/customcrops/api/object/world/WorldDataManager.java +++ b/src/main/java/net/momirealms/customcrops/api/object/world/WorldDataManager.java @@ -25,6 +25,7 @@ import net.momirealms.customcrops.api.object.fertilizer.Fertilizer; import net.momirealms.customcrops.api.object.pot.Pot; import net.momirealms.customcrops.api.object.sprinkler.Sprinkler; import net.momirealms.customcrops.api.object.sprinkler.SprinklerConfig; +import net.momirealms.customcrops.api.util.AdventureUtils; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.World; @@ -38,16 +39,23 @@ public class WorldDataManager extends Function { private final ConcurrentHashMap worldMap; private final CustomCrops plugin; private final WorldListener worldListener; + private SlimeWorldListener slimeWorldListener; public WorldDataManager(CustomCrops plugin) { this.plugin = plugin; this.worldMap = new ConcurrentHashMap<>(); this.worldListener = new WorldListener(this); + try { + Class.forName("com.infernalsuite.aswm.api.world.SlimeWorld"); + this.slimeWorldListener = new SlimeWorldListener(this); + } catch (ClassNotFoundException ignored) { + } } @Override public void load() { Bukkit.getPluginManager().registerEvents(worldListener, plugin); + if (slimeWorldListener != null) Bukkit.getPluginManager().registerEvents(slimeWorldListener, plugin); for (CCWorld ccWorld : worldMap.values()) { ccWorld.load(); } @@ -56,6 +64,7 @@ public class WorldDataManager extends Function { @Override public void unload() { HandlerList.unregisterAll(worldListener); + if (slimeWorldListener != null) HandlerList.unregisterAll(slimeWorldListener); for (CCWorld ccWorld : worldMap.values()) { ccWorld.unload(); } @@ -71,18 +80,21 @@ public class WorldDataManager extends Function { } public void loadWorld(World world) { + if (ConfigManager.debugWorld) AdventureUtils.consoleMessage("World " + world.getName() + " is trying to load"); if (!isWorldAllowed(world)) return; CCWorld ccWorld = new CCWorld(world, plugin); ccWorld.init(); ccWorld.load(); ccWorld.onReachPoint(); worldMap.put(world.getName(), ccWorld); + if (ConfigManager.debugWorld) AdventureUtils.consoleMessage("World " + world.getName() + " is loaded"); } public void unloadWorld(World world) { CCWorld ccWorld = worldMap.remove(world.getName()); if (ccWorld != null) { ccWorld.disable(); + if (ConfigManager.debugWorld) AdventureUtils.consoleMessage("World " + world.getName() + " is unloaded"); } } diff --git a/src/main/java/net/momirealms/customcrops/api/util/ConfigUtils.java b/src/main/java/net/momirealms/customcrops/api/util/ConfigUtils.java index 6e5ba09..531b19d 100644 --- a/src/main/java/net/momirealms/customcrops/api/util/ConfigUtils.java +++ b/src/main/java/net/momirealms/customcrops/api/util/ConfigUtils.java @@ -217,7 +217,7 @@ public class ConfigUtils { case "permission" -> requirements.add(new PermissionImpl(msg, innerSec.getString("value"))); case "time" -> requirements.add(new TimeImpl(msg, innerSec.getStringList("value"))); case "skill-level" -> requirements.add(new SkillLevelImpl(msg, innerSec.getInt("value"))); - case "job-level" -> requirements.add(new JobLevelImpl(msg, innerSec.getInt("value"))); + case "job-level" -> requirements.add(new JobLevelImpl(msg, innerSec.getInt("value.level"), innerSec.getString("value.job"))); case "date" -> requirements.add(new DateImpl(msg, new HashSet<>(innerSec.getStringList("value")))); case "papi-condition" -> requirements.add(new CustomPapi(msg, Objects.requireNonNull(innerSec.getConfigurationSection("value")).getValues(false))); } @@ -261,8 +261,9 @@ public class ConfigUtils { actionSec.getDouble("chance", 1)) ); case "job-xp" -> actions.add(new JobXPImpl( - actionSec.getDouble("value"), - actionSec.getDouble("chance", 1)) + actionSec.getDouble("value.xp"), + actionSec.getDouble("chance", 1), + actionSec.getString("value.job")) ); case "sound" -> actions.add(new SoundActionImpl( actionSec.getString("value.source"), diff --git a/src/main/java/net/momirealms/customcrops/integration/IntegrationManager.java b/src/main/java/net/momirealms/customcrops/integration/IntegrationManager.java index 75ef29a..b68e4bd 100644 --- a/src/main/java/net/momirealms/customcrops/integration/IntegrationManager.java +++ b/src/main/java/net/momirealms/customcrops/integration/IntegrationManager.java @@ -24,6 +24,7 @@ import net.momirealms.customcrops.api.util.AdventureUtils; import net.momirealms.customcrops.api.util.ConfigUtils; import net.momirealms.customcrops.integration.item.DefaultImpl; import net.momirealms.customcrops.integration.item.MMOItemsItemImpl; +import net.momirealms.customcrops.integration.item.MythicMobsItemImpl; import net.momirealms.customcrops.integration.job.EcoJobsImpl; import net.momirealms.customcrops.integration.job.JobsRebornImpl; import net.momirealms.customcrops.integration.papi.PlaceholderManager; @@ -93,7 +94,7 @@ public class IntegrationManager extends Function { private void hookItems() { ArrayList itemInterfaceList = new ArrayList<>(); if (pluginManager.isPluginEnabled("MythicMobs")) { - itemInterfaceList.add(new MMOItemsItemImpl()); + itemInterfaceList.add(new MythicMobsItemImpl()); hookMessage("MythicMobs"); } if (pluginManager.isPluginEnabled("MMOItems")) { diff --git a/src/main/java/net/momirealms/customcrops/integration/JobInterface.java b/src/main/java/net/momirealms/customcrops/integration/JobInterface.java index a5a7d7b..a697cd0 100644 --- a/src/main/java/net/momirealms/customcrops/integration/JobInterface.java +++ b/src/main/java/net/momirealms/customcrops/integration/JobInterface.java @@ -18,8 +18,9 @@ package net.momirealms.customcrops.integration; import org.bukkit.entity.Player; +import org.jetbrains.annotations.Nullable; public interface JobInterface { - void addXp(Player player, double amount); - int getLevel(Player player); + void addXp(Player player, double amount, @Nullable String job); + int getLevel(Player player, @Nullable String job); } diff --git a/src/main/java/net/momirealms/customcrops/integration/job/EcoJobsImpl.java b/src/main/java/net/momirealms/customcrops/integration/job/EcoJobsImpl.java index b4dbac4..15d3529 100644 --- a/src/main/java/net/momirealms/customcrops/integration/job/EcoJobsImpl.java +++ b/src/main/java/net/momirealms/customcrops/integration/job/EcoJobsImpl.java @@ -21,13 +21,15 @@ import com.willfp.ecojobs.api.EcoJobsAPI; import com.willfp.ecojobs.jobs.Job; import net.momirealms.customcrops.integration.JobInterface; import org.bukkit.entity.Player; +import org.jetbrains.annotations.Nullable; public class EcoJobsImpl implements JobInterface { @Override - public void addXp(Player player, double amount) { + public void addXp(Player player, double amount, @Nullable String jobName) { + if (jobName == null) jobName = "farmer"; for (Job job : EcoJobsAPI.getActiveJobs(player)) { - if (job.getId().equals("farmer")) { + if (job.getId().equals(jobName)) { EcoJobsAPI.giveJobExperience(player, job, amount); break; } @@ -35,7 +37,7 @@ public class EcoJobsImpl implements JobInterface { } @Override - public int getLevel(Player player) { + public int getLevel(Player player, @Nullable String jobName) { // Job job = Jobs.getByID("farmer"); // if (job == null) return 0; // return EcoJobsAPI.getJobLevel(player, job); diff --git a/src/main/java/net/momirealms/customcrops/integration/job/JobsRebornImpl.java b/src/main/java/net/momirealms/customcrops/integration/job/JobsRebornImpl.java index 908e149..4010195 100644 --- a/src/main/java/net/momirealms/customcrops/integration/job/JobsRebornImpl.java +++ b/src/main/java/net/momirealms/customcrops/integration/job/JobsRebornImpl.java @@ -25,17 +25,19 @@ import net.momirealms.customcrops.integration.JobInterface; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.jetbrains.annotations.Nullable; import java.util.List; public class JobsRebornImpl implements JobInterface, Listener { @Override - public void addXp(Player player, double amount) { + public void addXp(Player player, double amount, String jobName) { + if (jobName == null) jobName = "Farmer"; JobsPlayer jobsPlayer = Jobs.getPlayerManager().getJobsPlayer(player); if (jobsPlayer != null) { List jobs = jobsPlayer.getJobProgression(); - Job job = Jobs.getJob("Farmer"); + Job job = Jobs.getJob(jobName); for (JobProgression progression : jobs) { if (progression.getJob().equals(job)) { progression.addExperience(amount); @@ -46,11 +48,12 @@ public class JobsRebornImpl implements JobInterface, Listener { } @Override - public int getLevel(Player player) { + public int getLevel(Player player, @Nullable String jobName) { + if (jobName == null) jobName = "Farmer"; JobsPlayer jobsPlayer = Jobs.getPlayerManager().getJobsPlayer(player); if (jobsPlayer != null) { List jobs = jobsPlayer.getJobProgression(); - Job job = Jobs.getJob("Farmer"); + Job job = Jobs.getJob(jobName); for (JobProgression progression : jobs) { if (progression.getJob().equals(job)) { return progression.getLevel(); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 355fc71..29c6b65 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,11 +1,12 @@ # Don't change -config-version: '32' +config-version: '33' # BStats metrics: true # Language: english / spanish / chinese / turkish lang: english # Debug debug: + log-world-state: false log-scheduler: false log-corruption-fixer: false