mirror of
https://github.com/magefree/mage.git
synced 2025-12-24 20:41:58 -08:00
[plugins] Added plugins support to Mage.Client (jspf). Created Mage.Theme.Plugin. Please run Mage.Client/install_3d_party_libs.sh (.bat) once to put library to local maven repository.
This commit is contained in:
parent
4d6c70e390
commit
b356d2c7c1
22 changed files with 508 additions and 50 deletions
|
|
@ -37,23 +37,31 @@ package mage.client;
|
|||
import java.awt.Cursor;
|
||||
import java.awt.event.WindowAdapter;
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.io.File;
|
||||
import java.util.UUID;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.prefs.Preferences;
|
||||
|
||||
import javax.swing.Box;
|
||||
import javax.swing.JDesktopPane;
|
||||
import javax.swing.JLayeredPane;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.UIManager;
|
||||
|
||||
import mage.client.dialog.AboutDialog;
|
||||
import mage.client.dialog.CombatDialog;
|
||||
import mage.client.dialog.ConnectDialog;
|
||||
import mage.client.dialog.PickNumberDialog;
|
||||
import mage.client.plugins.impl.Plugins;
|
||||
import mage.client.remote.Session;
|
||||
import mage.client.util.EDTExceptionHandler;
|
||||
import mage.interfaces.plugin.ThemePlugin;
|
||||
import mage.util.Logging;
|
||||
import net.xeoh.plugins.base.PluginManager;
|
||||
import net.xeoh.plugins.base.impl.PluginManagerFactory;
|
||||
import net.xeoh.plugins.base.util.PluginManagerUtil;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -103,6 +111,7 @@ public class MageFrame extends javax.swing.JFrame {
|
|||
logger.log(Level.SEVERE, null, ex);
|
||||
}
|
||||
|
||||
Plugins.getInstance().loadPlugins();
|
||||
|
||||
initComponents();
|
||||
|
||||
|
|
@ -344,6 +353,7 @@ public class MageFrame extends javax.swing.JFrame {
|
|||
|
||||
private void exitApp() {
|
||||
session.disconnect();
|
||||
Plugins.getInstance().shutdown();
|
||||
dispose();
|
||||
System.exit(0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,13 +38,11 @@ import java.awt.BorderLayout;
|
|||
import java.awt.GridBagConstraints;
|
||||
import java.awt.event.ComponentAdapter;
|
||||
import java.awt.event.ComponentEvent;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JLayeredPane;
|
||||
import javax.swing.JOptionPane;
|
||||
|
|
@ -55,10 +53,10 @@ import mage.client.dialog.ExileZoneDialog;
|
|||
import mage.client.dialog.PickChoiceDialog;
|
||||
import mage.client.dialog.ShowCardsDialog;
|
||||
import mage.client.game.FeedbackPanel.FeedbackMode;
|
||||
import mage.client.plugins.impl.Plugins;
|
||||
import mage.client.remote.Session;
|
||||
import mage.client.util.Config;
|
||||
import mage.client.util.gui.ArrowBuilder;
|
||||
import mage.client.util.gui.ImagePanel;
|
||||
import mage.util.Logging;
|
||||
import mage.view.AbilityPickerView;
|
||||
import mage.view.CardsView;
|
||||
|
|
@ -86,8 +84,8 @@ public class GamePanel extends javax.swing.JPanel {
|
|||
|
||||
//FIXME: remove from here
|
||||
try {
|
||||
BufferedImage background = ImageIO.read(this.getClass().getResourceAsStream("/green.jpg"));
|
||||
ImagePanel bgPanel = new ImagePanel(background, ImagePanel.TILED);
|
||||
/*BufferedImage background = ImageIO.read(this.getClass().getResourceAsStream("/green.jpg"));
|
||||
ImagePanel bgPanel = new ImagePanel(background, ImagePanel.TILED);*/
|
||||
|
||||
// Override layout (I can't edit generated code)
|
||||
this.setLayout(new BorderLayout());
|
||||
|
|
@ -95,16 +93,11 @@ public class GamePanel extends javax.swing.JPanel {
|
|||
j.add(ArrowBuilder.getArrowsPanel(), JLayeredPane.MODAL_LAYER);
|
||||
j.setSize(1024,768);
|
||||
//j.setBorder(BorderFactory.createLineBorder(Color.green));
|
||||
//this.add(j);
|
||||
this.add(j);
|
||||
j.add(jSplitPane1, JLayeredPane.DEFAULT_LAYER);
|
||||
|
||||
jSplitPane1.setOpaque(false);
|
||||
pnlBattlefield.setOpaque(false);
|
||||
jPanel3.setOpaque(false);
|
||||
hand.setOpaque(false);
|
||||
chatPanel.setOpaque(false);
|
||||
bgPanel.add(j);
|
||||
this.add(bgPanel);
|
||||
Map<String, JComponent> ui = getUIComponents(j);
|
||||
Plugins.getInstance().updateGamePanel(ui);
|
||||
|
||||
// Enlarge jlayeredpane on resize
|
||||
addComponentListener(new ComponentAdapter(){
|
||||
|
|
@ -125,6 +118,20 @@ public class GamePanel extends javax.swing.JPanel {
|
|||
}
|
||||
}
|
||||
|
||||
private Map<String, JComponent> getUIComponents(JLayeredPane jLayeredPane) {
|
||||
Map<String, JComponent> components = new HashMap<String, JComponent>();
|
||||
|
||||
components.put("jSplitPane1", jSplitPane1);
|
||||
components.put("pnlBattlefield", pnlBattlefield);
|
||||
components.put("jPanel3", jPanel3);
|
||||
components.put("hand", hand);
|
||||
components.put("chatPanel", chatPanel);
|
||||
components.put("jLayeredPane", jLayeredPane);
|
||||
components.put("gamePanel", this);
|
||||
|
||||
return components;
|
||||
}
|
||||
|
||||
public void cleanUp() {
|
||||
MageFrame.getCombatDialog().hideDialog();
|
||||
MageFrame.getPickNumberDialog().hide();
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
package mage.client.plugins;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import javax.swing.JComponent;
|
||||
|
||||
public interface MagePlugins {
|
||||
void loadPlugins();
|
||||
void shutdown();
|
||||
void updateGamePanel(Map<String, JComponent> ui);
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
package mage.client.plugins.impl;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.swing.JComponent;
|
||||
|
||||
import mage.client.plugins.MagePlugins;
|
||||
import mage.client.util.Constants;
|
||||
import mage.interfaces.plugin.ThemePlugin;
|
||||
import mage.util.Logging;
|
||||
import net.xeoh.plugins.base.PluginManager;
|
||||
import net.xeoh.plugins.base.impl.PluginManagerFactory;
|
||||
import net.xeoh.plugins.base.util.PluginManagerUtil;
|
||||
|
||||
|
||||
public class Plugins implements MagePlugins {
|
||||
|
||||
private static final MagePlugins fINSTANCE = new Plugins();
|
||||
private static PluginManager pm;
|
||||
private final static Logger logger = Logging.getLogger(Plugins.class.getName());
|
||||
|
||||
public static MagePlugins getInstance() {
|
||||
return fINSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadPlugins() {
|
||||
logger.log(Level.INFO, "Loading plugins...");
|
||||
pm = PluginManagerFactory.createPluginManager();
|
||||
pm.addPluginsFrom(new File(Constants.PLUGINS_DIRECTORY).toURI());
|
||||
logger.log(Level.INFO, "Done.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void shutdown() {
|
||||
if (pm != null) pm.shutdown();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateGamePanel(Map<String, JComponent> ui) {
|
||||
PluginManagerUtil pmu = new PluginManagerUtil(pm);
|
||||
|
||||
for (ThemePlugin pl : pmu.getPlugins(ThemePlugin.class)) {
|
||||
pl.apply(ui);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -68,4 +68,6 @@ public final class Constants {
|
|||
public static final int DAMAGE_MAX_LEFT = 180;
|
||||
|
||||
public static final double SCALE_FACTOR = 0.5;
|
||||
|
||||
public static final String PLUGINS_DIRECTORY = "plugins/";
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue