mirror of
https://github.com/webbukkit/dynmap.git
synced 2025-02-16 11:51:58 +01:00
Support delaying dynmap start to allow Spout blocks to be registered
This commit is contained in:
parent
1603015631
commit
827f18b8e0
@ -49,6 +49,7 @@ import org.bukkit.event.player.PlayerChatEvent;
|
|||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.event.player.PlayerMoveEvent;
|
import org.bukkit.event.player.PlayerMoveEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
import org.bukkit.event.server.PluginEnableEvent;
|
||||||
import org.bukkit.event.world.ChunkPopulateEvent;
|
import org.bukkit.event.world.ChunkPopulateEvent;
|
||||||
import org.bukkit.event.world.SpawnChangeEvent;
|
import org.bukkit.event.world.SpawnChangeEvent;
|
||||||
import org.bukkit.event.world.StructureGrowEvent;
|
import org.bukkit.event.world.StructureGrowEvent;
|
||||||
@ -100,6 +101,7 @@ public class DynmapPlugin extends JavaPlugin implements DynmapAPI {
|
|||||||
public SpoutPluginBlocks spb;
|
public SpoutPluginBlocks spb;
|
||||||
public PluginManager pm;
|
public PluginManager pm;
|
||||||
private Metrics metrics;
|
private Metrics metrics;
|
||||||
|
private BukkitEnableCoreCallback enabCoreCB = new BukkitEnableCoreCallback();
|
||||||
|
|
||||||
private class BukkitEnableCoreCallback extends DynmapCore.EnableCoreCallbacks {
|
private class BukkitEnableCoreCallback extends DynmapCore.EnableCoreCallbacks {
|
||||||
@Override
|
@Override
|
||||||
@ -109,8 +111,9 @@ public class DynmapPlugin extends JavaPlugin implements DynmapAPI {
|
|||||||
if(core.configuration.getBoolean("spout/enabled", true)) {
|
if(core.configuration.getBoolean("spout/enabled", true)) {
|
||||||
has_spout = true;
|
has_spout = true;
|
||||||
Log.info("Detected Spout");
|
Log.info("Detected Spout");
|
||||||
spb = new SpoutPluginBlocks();
|
if(spb == null) {
|
||||||
spb.processSpoutBlocks(DynmapPlugin.this, core);
|
spb = new SpoutPluginBlocks(DynmapPlugin.this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Log.info("Detected Spout - Support Disabled");
|
Log.info("Detected Spout - Support Disabled");
|
||||||
@ -618,8 +621,46 @@ public class DynmapPlugin extends JavaPlugin implements DynmapAPI {
|
|||||||
core.setDataFolder(dataDirectory);
|
core.setDataFolder(dataDirectory);
|
||||||
core.setServer(new BukkitServer());
|
core.setServer(new BukkitServer());
|
||||||
|
|
||||||
|
/* Load configuration */
|
||||||
|
if(!core.initConfiguration(enabCoreCB)) {
|
||||||
|
this.setEnabled(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/* See if we need to wait before enabling core */
|
||||||
|
if(!readyToEnable()) {
|
||||||
|
Listener pl = new Listener() {
|
||||||
|
@EventHandler(priority=EventPriority.MONITOR)
|
||||||
|
public void onPluginEnabled(PluginEnableEvent evt) {
|
||||||
|
if (!readyToEnable()) {
|
||||||
|
spb.markPluginEnabled(evt.getPlugin());
|
||||||
|
if (readyToEnable()) { /* If we;re ready now, finish enable */
|
||||||
|
doEnable(); /* Finish enable */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
pm.registerEvents(pl, this);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
doEnable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean readyToEnable() {
|
||||||
|
if (spb != null) {
|
||||||
|
return spb.isReady();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void doEnable() {
|
||||||
|
/* Prep spout support, if needed */
|
||||||
|
if(spb != null) {
|
||||||
|
spb.processSpoutBlocks(this, core);
|
||||||
|
}
|
||||||
|
|
||||||
/* Enable core */
|
/* Enable core */
|
||||||
if(!core.enableCore(new BukkitEnableCoreCallback())) {
|
if(!core.enableCore(enabCoreCB)) {
|
||||||
this.setEnabled(false);
|
this.setEnabled(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import java.lang.reflect.Field;
|
|||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
@ -33,6 +34,28 @@ import org.getspout.spoutapi.material.MaterialData;
|
|||||||
public class SpoutPluginBlocks {
|
public class SpoutPluginBlocks {
|
||||||
private Field textXPosField; /* float[][] textXPos */
|
private Field textXPosField; /* float[][] textXPos */
|
||||||
private Field textYPosField; /* float[][] textYPos */
|
private Field textYPosField; /* float[][] textYPos */
|
||||||
|
private HashSet<String> plugins_pending = new HashSet<String>();
|
||||||
|
|
||||||
|
public SpoutPluginBlocks(Plugin plugin) {
|
||||||
|
/* First, see if any spout plugins that need to be enabled */
|
||||||
|
for(Plugin p : plugin.getServer().getPluginManager().getPlugins()) {
|
||||||
|
List<String> dep = p.getDescription().getDepend();
|
||||||
|
if((dep != null) && (dep.contains("Spout"))) {
|
||||||
|
Log.info("Found Spout plugin: " + p.getName());
|
||||||
|
if(p.isEnabled() == false) {
|
||||||
|
plugins_pending.add(p.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isReady() {
|
||||||
|
return plugins_pending.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void markPluginEnabled(Plugin p) {
|
||||||
|
plugins_pending.remove(p.getName());
|
||||||
|
}
|
||||||
|
|
||||||
private boolean initSpoutAccess() {
|
private boolean initSpoutAccess() {
|
||||||
boolean success = false;
|
boolean success = false;
|
||||||
@ -73,17 +96,6 @@ public class SpoutPluginBlocks {
|
|||||||
|
|
||||||
/* Process spout blocks - return true if something changed */
|
/* Process spout blocks - return true if something changed */
|
||||||
public boolean processSpoutBlocks(DynmapPlugin plugin, DynmapCore core) {
|
public boolean processSpoutBlocks(DynmapPlugin plugin, DynmapCore core) {
|
||||||
/* First, see if any spout plugins that need to be enabled */
|
|
||||||
for(Plugin p : plugin.getServer().getPluginManager().getPlugins()) {
|
|
||||||
List<String> dep = p.getDescription().getDepend();
|
|
||||||
if((dep != null) && (dep.contains("Spout"))) {
|
|
||||||
Log.info("Found Spout plugin: " + p.getName());
|
|
||||||
if(p.isEnabled() == false) {
|
|
||||||
plugin.getPluginLoader().enablePlugin(p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
File datadir = core.getDataFolder();
|
File datadir = core.getDataFolder();
|
||||||
if(textYPosField == null) {
|
if(textYPosField == null) {
|
||||||
if(initSpoutAccess() == false)
|
if(initSpoutAccess() == false)
|
||||||
|
Loading…
Reference in New Issue
Block a user