Skip to content
Snippets Groups Projects
ExamplePlugin.java 9.45 KiB
package de.griefed.serverpackcreatoraddonexample;

import de.griefed.serverpackcreator.ApplicationProperties;
import de.griefed.serverpackcreator.ConfigurationModel;
import de.griefed.serverpackcreator.plugins.serverpackhandler.PostGenExtension;
import de.griefed.serverpackcreator.plugins.serverpackhandler.PreZipExtension;
import de.griefed.serverpackcreator.plugins.serverpackhandler.PreGenExtension;
import de.griefed.serverpackcreator.plugins.swinggui.TabExtension;
import de.griefed.serverpackcreator.utilities.ConfigUtilities;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.pf4j.Extension;
import org.pf4j.Plugin;
import org.pf4j.PluginWrapper;

import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class ExamplePlugin extends Plugin {

    private static final Logger LOG_ADDONS = LogManager.getLogger("AddonsLogger");

    /*
        You should provide and read all these from the manifest.
                                                                    */
    public static final String NAME = "ServerPackCreatorExampleAddon";
    public static final String DESCRIPTION = "This is an example addon for ServerPackCreator showcasing all, currently 4, aspects of" +
            "ServerPackCreators addon functionality. In this example you see code which gets executed before a server pack is generated," +
            "code that gets executed after a server pack was generated but before the ZIP-archive is created, code that gets executed" +
            "after this ZIP-archive was created, as well as code adding a new tabbed pane to the GUI.";
    public static final String AUTHOR = "Griefed";
    public static final String VERSION = "0.0.1";

    public ExamplePlugin(PluginWrapper wrapper) {
        super(wrapper);
    }

    @Override
    public void start() {
        LOG_ADDONS.info("Starting ExamplePlugin...");
        LOG_ADDONS.info("This methods should prepare the environment for anything you want to do with it.");
        LOG_ADDONS.info("You could download some files. Create or replace some files. Basically you can do whatever you want.");
        /*
            Write all your preparation code here..
                                                    */
    }

    @Extension(ordinal = 1)
    public static class ExampleStartExtension implements PreGenExtension {

        @Override
        public void run(ApplicationProperties applicationProperties, ConfigurationModel configurationModel, String destination) throws Exception {
            LOG_ADDONS.info("This would run before a server pack generation.");
            LOG_ADDONS.info("Received destination: " + destination);
            LOG_ADDONS.info("We recieved the following configurationModel: " + configurationModel.toString());
            LOG_ADDONS.info("We received the following applicationProperties: " + applicationProperties.toString());
            StringUtils.upperCase("some text in lower case");
            //Create example file in server pack
            try {
            Files.createFile(Paths.get(String.format("%s/%s",destination, this.getClass().getSimpleName())));
            } catch (Exception ignored) {}
            /*
                Write all your pre-gen stuff here...
                                                        */
        }

        @Override
        public String getName() {
            return NAME;
        }

        @Override
        public String getDescription() {
            return DESCRIPTION;
        }

        @Override
        public String getAuthor() {
            return AUTHOR;
        }

        @Override
        public String getVersion() {
            return VERSION;
        }
    }

    @Extension(ordinal = 1)
    public static class ExampleCreatedExtension implements PreZipExtension {

        @Override
        public void run(ApplicationProperties applicationProperties, ConfigurationModel configurationModel, String destination) throws Exception {
            LOG_ADDONS.info("This would run after a server pack was generated, but BEFORE the ZIP-archive would be generated.");
            LOG_ADDONS.info("Received destination: " + destination);
            LOG_ADDONS.info("We recieved the following configurationModel: " + configurationModel.toString());
            LOG_ADDONS.info("We received the following applicationProperties: " + applicationProperties.toString());
            StringUtils.upperCase("some text in lower case");
            //Create example file in server pack
            try {
                FileUtils.createParentDirectories(new File(destination + "/some/folder/with/a/name"));
            } catch (Exception ex) {
                LOG_ADDONS.info("Error occurred creating parent directories.", ex);
            }

            new ConfigUtilities(null,null,null,applicationProperties, null, null)
                    .writeConfigToFile(configurationModel, new File(destination + "/serverpackcreator.conf"));
            /*
                Write all your post-gen-pre-zip stuff here...
                                                                 */
        }

        @Override
        public String getName() {
            return NAME;
        }

        @Override
        public String getDescription() {
            return DESCRIPTION;
        }

        @Override
        public String getAuthor() {
            return AUTHOR;
        }

        @Override
        public String getVersion() {
            return VERSION;
        }
    }

    @Extension(ordinal = 1)
    public static class ExampleArchiveExtension implements PostGenExtension {
        @Override
        public void run(ApplicationProperties applicationProperties, ConfigurationModel configurationModel, String destination) throws Exception {
            LOG_ADDONS.info("This would run after the server pack ZIP-archive was created.");
            LOG_ADDONS.info("Received destination: " + destination);
            LOG_ADDONS.info("We recieved the following configurationModel: " + configurationModel.toString());
            LOG_ADDONS.info("We received the following applicationProperties: " + applicationProperties.toString());
            //Create example file in server pack
            try {
                Files.createFile(Paths.get(String.format("%s/%s",destination, this.getClass().getSimpleName())));
            } catch (Exception ignored) {}

            /*
                Write all your post-archive stuff here...
                                                        */
        }

        @Override
        public String getName() {
            return NAME;
        }

        @Override
        public String getDescription() {
            return DESCRIPTION;
        }

        @Override
        public String getAuthor() {
            return AUTHOR;
        }

        @Override
        public String getVersion() {
            return VERSION;
        }
    }

    @Extension(ordinal = 1)
    public static class ExampleAddTabExtension extends JComponent implements TabExtension {

        @Override
        public JComponent getTab() {
            JComponent jComponent = new JPanel(false);
            jComponent.setLayout(new GridBagLayout());

            GridBagConstraints gridBagConstraints = new GridBagConstraints();
            gridBagConstraints.fill = GridBagConstraints.NONE;
            gridBagConstraints.anchor = GridBagConstraints.CENTER;
            gridBagConstraints.gridwidth = 1;
            gridBagConstraints.gridheight = 1;
            gridBagConstraints.weightx = 1;
            gridBagConstraints.weighty = 1;

            JLabel jLabel = new JLabel("This is a label");
            jLabel.setToolTipText("Some label tooltip");
            gridBagConstraints.gridx = 1;
            gridBagConstraints.gridy = 1;
            jComponent.add(jLabel, gridBagConstraints);

            JButton jButton = new JButton("Some button");
            jButton.setToolTipText("This could do anything");
            gridBagConstraints.gridx = 1;
            gridBagConstraints.gridy = 2;
            jComponent.add(jButton, gridBagConstraints);

            return jComponent;
        }

        @Override
        public Icon getTabIcon() {
            /*
             * other default icons can be:
             *   OptionPane.errorIcon
             *   OptionPane.warningIcon
             *   OptionPane.questionIcon
            */
            return UIManager.getIcon("OptionPane.informationIcon");
        }

        @Override
        public String getTabTitle() {
            return "Some title text";
        }

        @Override
        public String getTabTooltip() {
            return "Some tooltip text";
        }

        @Override
        public void run(ApplicationProperties applicationProperties, ConfigurationModel configurationModel, String destination) throws Exception {
            /*
                So far, the run(...) method for AddTab extensions never gets called.
                There is no point in writing code here with the intention of
                ServerPackCreator executing it.
                                                        */
        }

        @Override
        public String getName() {
            return NAME;
        }

        @Override
        public String getDescription() {
            return DESCRIPTION;
        }

        @Override
        public String getAuthor() {
            return AUTHOR;
        }

        @Override
        public String getVersion() {
            return VERSION;
        }
    }
}