From 54890793c1862e33fa19025bfb79073ddeff8295 Mon Sep 17 00:00:00 2001 From: Kyrobi Date: Mon, 16 Sep 2024 10:51:55 -0500 Subject: [PATCH 1/5] Make sure the plugin waits until all the plugins are fully initialized. There are issues where ARM will try to load before FastAsyncWorldEdit has fully initialized. When this happens, ARM will no longer recognized existing created shops. --- .gitignore | 8 +++- .../alex9849/arm/AdvancedRegionMarket.java | 37 ++++++++++--------- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index 65ae1efd..5dc6919c 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,10 @@ local.properties *.iml .idea dependency-reduced-pom.xml -desktop.ini \ No newline at end of file +desktop.ini +/advancedregionmarket +/arminterface +/mc1-14adapter +/mc1-20adapter +/we7adapter +/wg7adapter diff --git a/advancedregionmarket/src/main/java/net/alex9849/arm/AdvancedRegionMarket.java b/advancedregionmarket/src/main/java/net/alex9849/arm/AdvancedRegionMarket.java index 721a51ae..5da5d595 100644 --- a/advancedregionmarket/src/main/java/net/alex9849/arm/AdvancedRegionMarket.java +++ b/advancedregionmarket/src/main/java/net/alex9849/arm/AdvancedRegionMarket.java @@ -109,23 +109,26 @@ public static AdvancedRegionMarket getInstance() { } public void onEnable() { - Reader pluginYmlReader = Objects.requireNonNull(getTextResource("plugin.yml")); - YamlConfiguration pluginYml = YamlConfiguration.loadConfiguration(pluginYmlReader); - //This is a workaround to make shure that this plugin is loaded after the last world has been loaded. - boolean doStartupWorkaround = false; - List softdependCheckPlugins = Arrays.asList("MultiWorld", "Multiverse-Core"); - for (String pluginName : softdependCheckPlugins) { - Plugin plugin = Bukkit.getPluginManager().getPlugin(pluginName); - doStartupWorkaround |= plugin != null && !plugin.isEnabled(); - } - if (doStartupWorkaround) { - getLogger().log(Level.WARNING, "It looks like one of these plugins is installed, but not loaded yet:\n" + - String.join(", ", softdependCheckPlugins) + "\n" + - "In order to keep ARM working it scheduled its own enabling code to the end of the startup process as fallback!\n"); - Bukkit.getScheduler().scheduleSyncDelayedTask(this, this::startup, 1); - } else { - startup(); - } + + Bukkit.getScheduler().runTask(this, ()->{ + Reader pluginYmlReader = Objects.requireNonNull(getTextResource("plugin.yml")); + YamlConfiguration pluginYml = YamlConfiguration.loadConfiguration(pluginYmlReader); + //This is a workaround to make shure that this plugin is loaded after the last world has been loaded. + boolean doStartupWorkaround = false; + List softdependCheckPlugins = Arrays.asList("MultiWorld", "Multiverse-Core"); + for (String pluginName : softdependCheckPlugins) { + Plugin plugin = Bukkit.getPluginManager().getPlugin(pluginName); + doStartupWorkaround |= plugin != null && !plugin.isEnabled(); + } + if (doStartupWorkaround) { + getLogger().log(Level.WARNING, "It looks like one of these plugins is installed, but not loaded yet:\n" + + String.join(", ", softdependCheckPlugins) + "\n" + + "In order to keep ARM working it scheduled its own enabling code to the end of the startup process as fallback!\n"); + Bukkit.getScheduler().scheduleSyncDelayedTask(this, this::startup, 1); + } else { + startup(); + } + }); } public void startup() { From 2cff31a546d7ef0e9d1d6ce381860001bfb68e87 Mon Sep 17 00:00:00 2001 From: Kyrobi Date: Mon, 16 Sep 2024 10:53:57 -0500 Subject: [PATCH 2/5] Update .gitignore --- .gitignore | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.gitignore b/.gitignore index 5dc6919c..c48b912f 100644 --- a/.gitignore +++ b/.gitignore @@ -16,10 +16,3 @@ local.properties *.iml .idea dependency-reduced-pom.xml -desktop.ini -/advancedregionmarket -/arminterface -/mc1-14adapter -/mc1-20adapter -/we7adapter -/wg7adapter From 2767992e87373efe688ce901d3d345bee57f3e83 Mon Sep 17 00:00:00 2001 From: Kyrobi Date: Mon, 16 Sep 2024 10:55:48 -0500 Subject: [PATCH 3/5] Update .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c48b912f..dee62b9c 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ local.properties *.iml .idea dependency-reduced-pom.xml +desktop.ini From dbde6857cfeacb915f4f2c2680a3df12ab13ce6c Mon Sep 17 00:00:00 2001 From: Kyrobi Date: Mon, 16 Sep 2024 11:04:03 -0500 Subject: [PATCH 4/5] Slow down repeating task to improve performance We don't need to check the signs every tick. From my testing, 40 ticks is working without any issues. --- .../src/main/java/net/alex9849/arm/AdvancedRegionMarket.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/advancedregionmarket/src/main/java/net/alex9849/arm/AdvancedRegionMarket.java b/advancedregionmarket/src/main/java/net/alex9849/arm/AdvancedRegionMarket.java index 5da5d595..4c91f79b 100644 --- a/advancedregionmarket/src/main/java/net/alex9849/arm/AdvancedRegionMarket.java +++ b/advancedregionmarket/src/main/java/net/alex9849/arm/AdvancedRegionMarket.java @@ -227,7 +227,7 @@ public void startup() { loadInactivityExpirationGroups(); this.presetPatternManager = new PresetPatternManager(new File(this.getDataFolder() + "/presets.yml")); this.getRegionManager().setTabCompleteRegions(getConfig().getBoolean("Other.CompleteRegionsOnTabComplete")); - Bukkit.getScheduler().scheduleSyncRepeatingTask(this, () -> this.getRegionManager().doTick(), 1, 1); + Bukkit.getScheduler().scheduleSyncRepeatingTask(this, () -> this.getRegionManager().doTick(), 1, 40); this.loadCommands(); From b036680cf6245f7f1377fb30de8e57fb999eabb6 Mon Sep 17 00:00:00 2001 From: Kyrobi Date: Mon, 16 Sep 2024 12:35:36 -0500 Subject: [PATCH 5/5] Optimize sign lookup --- .../handler/listener/SignModifyListener.java | 48 ++++++++++++++----- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/advancedregionmarket/src/main/java/net/alex9849/arm/handler/listener/SignModifyListener.java b/advancedregionmarket/src/main/java/net/alex9849/arm/handler/listener/SignModifyListener.java index ec8a536f..cf0bfb15 100644 --- a/advancedregionmarket/src/main/java/net/alex9849/arm/handler/listener/SignModifyListener.java +++ b/advancedregionmarket/src/main/java/net/alex9849/arm/handler/listener/SignModifyListener.java @@ -19,10 +19,8 @@ import net.alex9849.arm.regions.price.ContractPrice; import net.alex9849.arm.regions.price.Price; import net.alex9849.arm.regions.price.RentPrice; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.World; +import org.bukkit.*; +import org.bukkit.block.Block; import org.bukkit.block.Sign; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -35,12 +33,37 @@ import java.util.ArrayList; import java.util.List; +import java.util.Set; public class SignModifyListener implements Listener { private static final String SELLPRICE_LINE_REGEX = "[0-9]+"; private static final String RENTPRICE_LINE_REGEX = "[0-9]+(;|:)[0-9]+(s|m|h|d)(;|:)[0-9]+(s|m|h|d)"; private static final String CONTRACTPRICE_LINE_REGEX = "[0-9]+(;|:)[0-9]+(s|m|h|d)"; + private static final Set signs = Set.of( + Material.ACACIA_HANGING_SIGN, Material.ACACIA_SIGN, Material.ACACIA_WALL_HANGING_SIGN, Material.ACACIA_WALL_SIGN, + + Material.BAMBOO_HANGING_SIGN, Material.BAMBOO_SIGN, Material.BAMBOO_WALL_HANGING_SIGN, Material.BAMBOO_WALL_SIGN, + + Material.BIRCH_HANGING_SIGN, Material.BIRCH_SIGN, Material.BIRCH_WALL_HANGING_SIGN, Material.BIRCH_WALL_SIGN, + + Material.CHERRY_HANGING_SIGN, Material.CHERRY_SIGN, Material.CHERRY_WALL_HANGING_SIGN, Material.CHERRY_WALL_SIGN, + + Material.CRIMSON_HANGING_SIGN, Material.CRIMSON_SIGN, Material.CRIMSON_WALL_HANGING_SIGN, Material.CRIMSON_WALL_SIGN, + + Material.DARK_OAK_HANGING_SIGN, Material.DARK_OAK_SIGN, Material.DARK_OAK_WALL_HANGING_SIGN, Material.DARK_OAK_WALL_SIGN, + + Material.JUNGLE_HANGING_SIGN, Material.JUNGLE_SIGN, Material.JUNGLE_WALL_HANGING_SIGN, Material.JUNGLE_WALL_SIGN, + + Material.MANGROVE_HANGING_SIGN, Material.MANGROVE_SIGN, Material.MANGROVE_WALL_HANGING_SIGN, Material.MANGROVE_WALL_SIGN, + + Material.OAK_HANGING_SIGN, Material.OAK_SIGN, Material.OAK_WALL_HANGING_SIGN, Material.OAK_WALL_SIGN, + + Material.SPRUCE_HANGING_SIGN, Material.SPRUCE_SIGN, Material.SPRUCE_WALL_HANGING_SIGN, Material.SPRUCE_WALL_SIGN, + + Material.WARPED_HANGING_SIGN, Material.WARPED_SIGN, Material.WARPED_WALL_HANGING_SIGN, Material.WARPED_WALL_SIGN + ); + private static Price parseSellPrice(String priceLine, CommandSender sender) throws InputException { AutoPrice autoPrice = AutoPrice.getAutoprice(priceLine); Price price = null; @@ -304,14 +327,17 @@ private void removeSignAndSendMessages(Region region, Location signLoc, Player p } } - @EventHandler - public void protectSignPhysics(BlockPhysicsEvent sign) { + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public void protectSignPhysics(BlockPhysicsEvent event) { + Block block = event.getBlock(); + + if(!signs.contains(block.getType())){ + return; + } + AdvancedRegionMarket plugin = AdvancedRegionMarket.getInstance(); - if (plugin.getMaterialFinder().getSignMaterials().contains(sign.getBlock().getType())) { - if (plugin.getRegionManager().getRegion((Sign) sign.getBlock().getState()) != null) { - sign.setCancelled(true); - return; - } + if (plugin.getRegionManager().getRegion((Sign) block.getState()) != null) { + event.setCancelled(true); } } }