/* * This file is part of BukkitBridge. * * Copyright (c) 2012 Spout LLC <http://www.spout.org/> * BukkitBridge is licensed under the GNU General Public License. * * BukkitBridge is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * BukkitBridge is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.spout.bridge; import org.bukkit.Bukkit; import org.bukkit.plugin.PluginLoadOrder; import org.spout.api.Server; import org.spout.api.data.DataProvider; import org.spout.api.event.Cause; import org.spout.api.event.cause.PluginCause; import org.spout.api.plugin.Plugin; import org.spout.api.scheduler.TaskPriority; import org.spout.bridge.bukkit.BridgeServer; import org.spout.bridge.listener.BlockListener; import org.spout.bridge.listener.EntityListener; import org.spout.bridge.listener.PlayerListener; import org.spout.bridge.listener.WorldListener; /** * Bridge redirects Bukkit method calls to the Spout API, allowing Bukkit plugins to run on Spout. */ public class BukkitBridgePlugin extends Plugin { private static BukkitBridgePlugin instance; private static Cause<Plugin> pluginCause; private WorldListener worldListener; private PlayerListener playerListener; private EntityListener entityListener; private BlockListener blockListener; private final DataProvider dataProvider = new DataProvider(); @Override public void onEnable() { instance = this; final BridgeServer server = new BridgeServer((Server) getEngine(), this); // Set the Bukkit singleton. Bukkit.setServer(server); server.loadPlugins(); getEngine().getLogger().info("Enabling pre-world Bukkit plugins"); server.enablePlugins(PluginLoadOrder.STARTUP); worldListener = new WorldListener(this); playerListener = new PlayerListener(this); entityListener = new EntityListener(this); blockListener = new BlockListener(this); pluginCause = new PluginCause(this); getEngine().getEventManager().registerEvents(dataProvider, this); getEngine().getScheduler().scheduleSyncDelayedTask(this, new LoadPluginsTask(), 2, TaskPriority.NORMAL); getLogger().info("enabled. Version: (" + server.getVersion() + " | Bukkit: " + server.getBukkitVersion() + ")"); } @Override public void onDisable() { getLogger().info("disabled."); } public WorldListener getWorldListener() { return worldListener; } public PlayerListener getPlayerListener() { return playerListener; } public EntityListener getEntityListener() { return entityListener; } public BlockListener getBlockListener() { return blockListener; } public DataProvider getDataProvider() { return dataProvider; } public static BukkitBridgePlugin getInstance() { return instance; } public static Cause<Plugin> getCause() { return pluginCause; } private static class LoadPluginsTask implements Runnable { @Override public void run() { getInstance().getEngine().getLogger().info("Enabling post-world Bukkit plugins"); ((BridgeServer) Bukkit.getServer()).enablePlugins(PluginLoadOrder.POSTWORLD); } } }