tk.itstake.steakgui.util.MenuFileHandler.java Source code

Java tutorial

Introduction

Here is the source code for tk.itstake.steakgui.util.MenuFileHandler.java

Source

/*
 * MenuFileHandler.java
 *
 * Copyright (c) 2015 ITSTAKE
 *
 * This program 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.
 *
 * This program 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 tk.itstake.steakgui.util;

import org.bukkit.Bukkit;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import tk.itstake.steakgui.SteakGUI;
import tk.itstake.steakgui.gui.GUIItem;
import tk.itstake.steakgui.gui.Menu;
import tk.itstake.steakgui.itemtask.ItemTask;
import tk.itstake.util.JSONUtil;
import tk.itstake.util.LanguageHandler;

import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;

/**
 * Created by bexco on 2015-07-26.
 */
public class MenuFileHandler {

    private static HashMap<String, Menu> loadedmenu = new HashMap<>();

    public static void saveMenu(Menu menu) {
        JSONObject menuConfig = new JSONObject();
        menuConfig.put("dummyhelp", new LanguageHandler().getLanguage("menufile.wannahelp"));
        menuConfig.put("title", menu.getTitle());
        menuConfig.put("size", menu.getSize());
        JSONObject slot = new JSONObject();
        for (Integer key : menu.getItemArray().keySet()) {
            GUIItem item = menu.getItemArray().get(key);
            JSONObject keyarray = new JSONObject();
            keyarray.put("perm", item.getPermission());
            JSONArray taskarray = new JSONArray();
            for (ItemTask task : item.getTasks()) {
                JSONObject itemTaskHash = ItemTaskConverter.convert(task);
                taskarray.add(itemTaskHash);
            }
            keyarray.put("task", taskarray);
            JSONObject itemStackHash = ItemStackConverter.convert(item.getItemStack());
            keyarray.put("item", itemStackHash);
            slot.put(key, keyarray);
        }
        menuConfig.put("slot", slot);
        Plugin plugin = Bukkit.getPluginManager().getPlugin("SteakGUI");
        File dataFolder = plugin.getDataFolder();
        if (dataFolder.exists() && dataFolder.isDirectory()) {
            dataFolder.mkdir();
        }
        File menuFolder = new File(dataFolder.toString() + File.separator + "menu");
        if (!menuFolder.exists() || !menuFolder.isDirectory()) {
            menuFolder.mkdir();
        }
        try {
            FileWriter fw = new FileWriter(
                    new File(menuFolder.toString() + File.separator + menu.getName() + ".json"));
            fw.write(JSONUtil.getPretty(menuConfig.toJSONString()));
            fw.flush();
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        loadMenu(menu.getName(), true);
    }

    public static ArrayList<String> listMenu() {
        Plugin plugin = Bukkit.getPluginManager().getPlugin("SteakGUI");
        File dataFolder = plugin.getDataFolder();
        if (dataFolder.exists() && dataFolder.isDirectory()) {
            dataFolder.mkdir();
        }
        File menuFolder = new File(dataFolder.toString() + File.separator + "menu");
        if (!menuFolder.exists() || !menuFolder.isDirectory()) {
            menuFolder.mkdir();
        }
        FilenameFilter jsonfilter = new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                if (name.endsWith(".json")) {
                    return true;
                } else {
                    return false;
                }
            }
        };
        ArrayList<String> listmenu = new ArrayList<>();
        for (File file : menuFolder.listFiles(jsonfilter)) {
            listmenu.add(file.getName().replace(".json", ""));
        }
        return listmenu;
    }

    public static void deleteMenu(String name) {
        Plugin plugin = Bukkit.getPluginManager().getPlugin("SteakGUI");
        File dataFolder = plugin.getDataFolder();
        if (dataFolder.exists() && dataFolder.isDirectory()) {
            dataFolder.mkdir();
        }
        File menuFolder = new File(dataFolder.toString() + File.separator + "menu");
        if (!menuFolder.exists() || !menuFolder.isDirectory()) {
            menuFolder.mkdir();
        }
        File menuFile = new File(menuFolder.toString() + File.separator + name + ".json");
        menuFile.delete();
    }

    public static Menu loadMenu(String name, boolean forcereload) {
        if (!loadedmenu.containsKey(name) || forcereload) {
            File dataFolder = SteakGUI.p.getDataFolder();
            if (!dataFolder.exists() || !dataFolder.isDirectory()) {
                dataFolder.mkdir();
            }
            File menuFolder = new File(dataFolder.toString() + File.separator + "menu");
            if (!menuFolder.exists() || !menuFolder.isDirectory()) {
                menuFolder.mkdir();
            }
            File menuFile = new File(menuFolder.toString() + File.separator + name + ".json");
            try {
                FileReader fr = new FileReader(menuFile);
                JSONParser jp = new JSONParser();
                JSONObject menujson = (JSONObject) jp.parse(fr);
                JSONObject slotarray = (JSONObject) menujson.get("slot");
                HashMap<Integer, GUIItem> slotmap = new HashMap<>();
                for (Object slot : slotarray.keySet()) {
                    JSONObject guiarray = (JSONObject) slotarray.get(slot);
                    ItemStack item = ItemStackConverter.convert((JSONObject) guiarray.get("item"));
                    ArrayList<ItemTask> taskarray = new ArrayList<>();
                    for (Object obj : ((JSONArray) guiarray.get("task"))) {
                        ItemTask task = ItemTaskConverter.convert((JSONObject) obj);
                        taskarray.add(task);
                    }

                    GUIItem guiitem = new GUIItem(item, (String) guiarray.get("perm"), taskarray);
                    slotmap.put(Integer.parseInt((String) slot), guiitem);
                }
                Menu menu = new Menu(name, (String) menujson.get("title"), (int) (long) menujson.get("size"),
                        slotmap);
                fr.close();
                loadedmenu.put(name, menu);
                return menu;
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (ParseException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        } else {
            return loadedmenu.get(name);
        }
    }

    public static Menu loadMenu(String name) {
        return loadMenu(name, false);
    }

    public static void reloadMenu() {
        loadedmenu = new HashMap<>();
    }

    public static boolean isMenu(String name) {
        File dataFolder = SteakGUI.p.getDataFolder();
        if (!dataFolder.exists() || !dataFolder.isDirectory()) {
            return false;
        }
        File menuFolder = new File(dataFolder.toString() + File.separator + "menu");
        if (!menuFolder.exists() || !menuFolder.isDirectory()) {
            return false;
        }
        File menuFile = new File(menuFolder.toString() + File.separator + name + ".json");
        if (menuFile.exists()) {
            return true;
        } else {
            return false;
        }
    }

}