Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make sure the plugin waits until all the plugins are fully initialized. #164

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@ local.properties
*.iml
.idea
dependency-reduced-pom.xml
desktop.ini
desktop.ini
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> 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<String> 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() {
Expand Down Expand Up @@ -224,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();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<Material> 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;
Expand Down Expand Up @@ -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);
}
}
}