diff --git a/build.gradle b/build.gradle index c0ce6e7..6b30596 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group = 'net.momirealms' -version = '2.0-r7' +version = '2.0-r8-hotfix' 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 a46e253..2dd4f13 100644 --- a/src/main/java/net/momirealms/customcrops/config/MainConfig.java +++ b/src/main/java/net/momirealms/customcrops/config/MainConfig.java @@ -106,6 +106,11 @@ public class MainConfig { public static String[] summerMsg; public static String[] autumnMsg; public static String[] winterMsg; + public static boolean enableSeasonChangeCmd; + public static String[] winterCmd; + public static String[] springCmd; + public static String[] summerCmd; + public static String[] autumnCmd; public static String worldFolder; public static boolean rightHarvestVanilla; public static boolean preventPlantVanilla; @@ -174,6 +179,11 @@ public class MainConfig { summerMsg = config.getStringList("season-broadcast.summer").toArray(new String[0]); autumnMsg = config.getStringList("season-broadcast.autumn").toArray(new String[0]); winterMsg = config.getStringList("season-broadcast.winter").toArray(new String[0]); + enableSeasonChangeCmd = config.getBoolean("season-change-command.enable", false); + springCmd = config.getStringList("season-change-command.spring").toArray(new String[0]); + summerCmd = config.getStringList("season-change-command.summer").toArray(new String[0]); + autumnCmd = config.getStringList("season-change-command.autumn").toArray(new String[0]); + winterCmd = config.getStringList("season-change-command.winter").toArray(new String[0]); try { boneMealSuccess = Particle.valueOf(config.getString("mechanics.bone-meal.success-particle", "VILLAGER_HAPPY")); @@ -314,7 +324,7 @@ public class MainConfig { else {skillXP = new EcoSkillsHook();} } if (config.getBoolean("integration.JobsReborn")) { - if (Bukkit.getPluginManager().getPlugin("JobsReborn") == null) Log.warn("Failed to initialize JobsReborn!"); + if (Bukkit.getPluginManager().getPlugin("Jobs") == null) Log.warn("Failed to initialize JobsReborn!"); else {skillXP = new JobsRebornHook();} } realisticSeasonHook = false; diff --git a/src/main/java/net/momirealms/customcrops/integrations/customplugin/itemsadder/ItemsAdderWireHandler.java b/src/main/java/net/momirealms/customcrops/integrations/customplugin/itemsadder/ItemsAdderWireHandler.java index 2456e7d..fe6061c 100644 --- a/src/main/java/net/momirealms/customcrops/integrations/customplugin/itemsadder/ItemsAdderWireHandler.java +++ b/src/main/java/net/momirealms/customcrops/integrations/customplugin/itemsadder/ItemsAdderWireHandler.java @@ -301,7 +301,7 @@ public class ItemsAdderWireHandler extends ItemsAdderHandler { event.setCancelled(true); CustomBlock.place(namespacedId, location); if (player.getGameMode() != GameMode.CREATIVE) - CustomBlock.byAlreadyPlaced(location.getBlock()).getLoot().forEach(itemStack -> location.getWorld().dropItem(location.clone().add(0.5,0.2,0.5), itemStack)); + CustomBlock.byAlreadyPlaced(location.getBlock()).getLoot().forEach(itemStack -> location.getWorld().dropItemNaturally(location, itemStack)); CustomBlock.remove(location); } diff --git a/src/main/java/net/momirealms/customcrops/integrations/season/InternalSeason.java b/src/main/java/net/momirealms/customcrops/integrations/season/InternalSeason.java index f3c12bf..640630f 100644 --- a/src/main/java/net/momirealms/customcrops/integrations/season/InternalSeason.java +++ b/src/main/java/net/momirealms/customcrops/integrations/season/InternalSeason.java @@ -96,35 +96,57 @@ public class InternalSeason extends Function implements SeasonInterface { return; } CCSeason oldSeason = seasonHashMap.put(world, season); - if (!MainConfig.enableSeasonBroadcast) return; + if (!MainConfig.enableSeasonBroadcast && !MainConfig.enableSeasonChangeCmd) return; if (oldSeason == null) return; // season changed if (oldSeason != season) { - Collection players; - if (MainConfig.syncSeason) players = Bukkit.getOnlinePlayers(); - else players = world.getPlayers(); + if (MainConfig.enableSeasonBroadcast) { + Collection players; + if (MainConfig.syncSeason) players = Bukkit.getOnlinePlayers(); + else players = world.getPlayers(); - switch (season) { - case SPRING -> players.forEach(player -> { - for (String msg : MainConfig.springMsg) { - AdventureUtil.playerMessage(player, msg); + switch (season) { + case SPRING -> players.forEach(player -> { + for (String msg : MainConfig.springMsg) { + AdventureUtil.playerMessage(player, msg); + } + }); + case SUMMER -> players.forEach(player -> { + for (String msg : MainConfig.summerMsg) { + AdventureUtil.playerMessage(player, msg); + } + }); + case AUTUMN -> players.forEach(player -> { + for (String msg : MainConfig.autumnMsg) { + AdventureUtil.playerMessage(player, msg); + } + }); + case WINTER -> players.forEach(player -> { + for (String msg : MainConfig.winterMsg) { + AdventureUtil.playerMessage(player, msg); + } + }); + } + } + if (MainConfig.enableSeasonChangeCmd) { + switch (season) { + case SPRING -> { + for (String cmd : MainConfig.springCmd) + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), cmd); } - }); - case SUMMER -> players.forEach(player -> { - for (String msg : MainConfig.summerMsg) { - AdventureUtil.playerMessage(player, msg); + case SUMMER -> { + for (String cmd : MainConfig.summerCmd) + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), cmd); } - }); - case AUTUMN -> players.forEach(player -> { - for (String msg : MainConfig.autumnMsg) { - AdventureUtil.playerMessage(player, msg); + case AUTUMN -> { + for (String cmd : MainConfig.autumnCmd) + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), cmd); } - }); - case WINTER -> players.forEach(player -> { - for (String msg : MainConfig.winterMsg) { - AdventureUtil.playerMessage(player, msg); + case WINTER -> { + for (String cmd : MainConfig.winterCmd) + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), cmd); } - }); + } } } } diff --git a/src/main/java/net/momirealms/customcrops/managers/CropManager.java b/src/main/java/net/momirealms/customcrops/managers/CropManager.java index a1fb03b..3cd9323 100644 --- a/src/main/java/net/momirealms/customcrops/managers/CropManager.java +++ b/src/main/java/net/momirealms/customcrops/managers/CropManager.java @@ -88,6 +88,9 @@ public class CropManager extends Function { this.worldListener = new WorldListener(this); this.armorStandUtil = new ArmorStandUtil(this); + Bukkit.getPluginManager().registerEvents(itemSpawnListener, CustomCrops.plugin); + Bukkit.getPluginManager().registerEvents(worldListener, CustomCrops.plugin); + loadMode(); loadSeason(); loadPacket(); @@ -408,7 +411,9 @@ public class CropManager extends Function { } } + @Nullable private ItemStack getLoot(String id) { + if (id == null) return null; if (MiscUtils.isVanillaItem(id)) return new ItemStack(Material.valueOf(id)); else return customInterface.getItemStack(id); } diff --git a/src/main/java/net/momirealms/customcrops/managers/listener/WorldListener.java b/src/main/java/net/momirealms/customcrops/managers/listener/WorldListener.java index f7040ad..aaa30aa 100644 --- a/src/main/java/net/momirealms/customcrops/managers/listener/WorldListener.java +++ b/src/main/java/net/momirealms/customcrops/managers/listener/WorldListener.java @@ -26,7 +26,7 @@ import org.bukkit.event.world.WorldUnloadEvent; public record WorldListener(CropManager cropManager) implements Listener { @EventHandler - public void onWorldUnload(WorldLoadEvent event) { + public void onWorldLoad(WorldLoadEvent event) { cropManager.onWorldLoad(event.getWorld()); } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index b81174f..9780c79 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,5 +1,5 @@ #Don't change -config-version: '13' +config-version: '14' # lang: english / spanish / chinese lang: english @@ -99,7 +99,7 @@ mechanics: # Season would not affect ripe crops(for better performance and friendly player's experience) season: enable: true - # If you want all the worlds share the same season + # If you want all the worlds to share the same season sync-seasons: enable: false world: world @@ -192,7 +192,7 @@ sounds: # Hologram information hologram: - # Pot infomation + # Fertilizer infomation fertilizer-info: enable: true y-offset: 0.8 @@ -233,6 +233,10 @@ season-broadcast: winter: - '<#87CEFA>Winter is coming!' +season-change-command: + enable: false + spring: + - 'say spring is coming!' watering-can-lore: