/* * Copyright (C) 2016 eccentric_nz * * 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 me.eccentric_nz.TARDIS; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; import me.eccentric_nz.TARDIS.commands.TARDISCommandHelper; import me.eccentric_nz.TARDIS.commands.TARDISTravelCommands; import me.eccentric_nz.TARDIS.commands.admin.TARDISAdminCommands; import me.eccentric_nz.TARDIS.listeners.TARDISButtonListener; import me.eccentric_nz.TARDIS.listeners.TARDISRenderRoomListener; import me.eccentric_nz.TARDIS.listeners.TARDISScannerListener; import me.eccentric_nz.TARDIS.move.TARDISDoorClickListener; import me.eccentric_nz.TARDIS.move.TARDISDoorListener; import me.eccentric_nz.TARDIS.rooms.TARDISCondenserData; import me.eccentric_nz.TARDIS.sonic.TARDISSonicListener; import me.eccentric_nz.TARDIS.utility.TARDISUUIDCache; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; /** * Keeps instances of various classes, maps and lists for easy access in other * classes. * * @author eccentric_nz */ public class TARDISGeneralInstanceKeeper { private HashSet<Material> transparent = new HashSet<Material>(); private List<Block> doorPistons = new ArrayList<Block>(); private List<Integer> npcIDs = new ArrayList<Integer>(); private List<String> quotes = new ArrayList<String>(); private TARDISAdminCommands tardisAdminCommand; private TARDISButtonListener buttonListener; private TARDISDoorListener doorListener; private TARDISRenderRoomListener rendererListener; private TARDISScannerListener scannerListener; private TARDISSonicListener sonicListener; private TARDISTravelCommands tardisTravelCommand; private final HashMap<String, Double[]> gravityEastList = new HashMap<String, Double[]>(); private final HashMap<String, Double[]> gravityNorthList = new HashMap<String, Double[]>(); private final HashMap<String, Double[]> gravitySouthList = new HashMap<String, Double[]>(); private final HashMap<String, Double[]> gravityUpList = new HashMap<String, Double[]>(); private final HashMap<String, Double[]> gravityWestList = new HashMap<String, Double[]>(); private final HashMap<String, Integer> protectBlockMap = new HashMap<String, Integer>(); private final HashMap<UUID, TARDISCondenserData> roomCondenserData = new HashMap<UUID, TARDISCondenserData>(); private final List<Block> artronFurnaces = new ArrayList<Block>(); private final List<BlockFace> faces = Arrays.asList(BlockFace.NORTH, BlockFace.WEST, BlockFace.SOUTH, BlockFace.EAST); private final List<BlockFace> surrounding = Arrays.asList(BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.NORTH, BlockFace.NORTH_EAST, BlockFace.NORTH_WEST, BlockFace.SOUTH_EAST, BlockFace.SOUTH_WEST); private final List<Chunk> roomChunkList = new ArrayList<Chunk>(); private final List<Chunk> tardisChunkList = new ArrayList<Chunk>(); private final List<Chunk> railChunkList = new ArrayList<Chunk>(); private final List<Location> rechargers = new ArrayList<Location>(); private final List<Material> doors = Arrays.asList(Material.IRON_DOOR_BLOCK, Material.WOODEN_DOOR, Material.SPRUCE_DOOR, Material.BIRCH_DOOR, Material.ACACIA_DOOR, Material.JUNGLE_DOOR, Material.DARK_OAK_DOOR); private final List<Material> rails = Arrays.asList(Material.POWERED_RAIL, Material.RAILS, Material.DETECTOR_RAIL, Material.ACTIVATOR_RAIL); private final List<Material> goodNether = Arrays.asList(Material.NETHERRACK, Material.SOUL_SAND, Material.GLOWSTONE, Material.NETHER_BRICK, Material.NETHER_FENCE, Material.NETHER_BRICK_STAIRS); private final List<Material> interactables; private final List<String> gravityDownList = new ArrayList<String>(); private final List<String> roomArgs; private final List<String> sonicLamps = new ArrayList<String>(); private final List<String> sonicPistons = new ArrayList<String>(); private final List<String> sonicRails = new ArrayList<String>(); private final List<String> sonicWires = new ArrayList<String>(); private final TARDIS plugin; private final TARDISUUIDCache UUIDCache; private final YamlConfiguration pluginYAML; private long junkTime; private boolean junkTravelling = false; private Location junkDestination = null; private final List<UUID> junkTravellers = new ArrayList<UUID>(); public TARDISGeneralInstanceKeeper(TARDIS plugin) { this.plugin = plugin; this.roomArgs = buildRoomArgs(); this.transparent = buildTransparent(); this.UUIDCache = new TARDISUUIDCache(plugin); this.doorListener = new TARDISDoorListener(plugin); this.interactables = buildInteractables(); setRechargers(); InputStream is = plugin.getResource("plugin.yml"); InputStreamReader reader = new InputStreamReader(is); this.pluginYAML = new YamlConfiguration(); try { this.pluginYAML.load(reader); } catch (IOException ex) { Logger.getLogger(TARDISCommandHelper.class.getName()).log(Level.SEVERE, null, ex); } catch (InvalidConfigurationException ex) { Logger.getLogger(TARDISCommandHelper.class.getName()).log(Level.SEVERE, null, ex); } } public List<String> getQuotes() { return quotes; } public void setQuotes(ArrayList<String> quotes) { this.quotes = quotes; } public List<Block> getArtronFurnaces() { return artronFurnaces; } public List<BlockFace> getFaces() { return faces; } public List<BlockFace> getSurrounding() { return surrounding; } public List<Chunk> getTardisChunkList() { return tardisChunkList; } public List<Chunk> getRoomChunkList() { return roomChunkList; } public List<Chunk> getRailChunkList() { return railChunkList; } public List<Material> getDoors() { return doors; } public List<Material> getRails() { return rails; } public List<Material> getGoodNether() { return goodNether; } public HashMap<String, Double[]> getGravityUpList() { return gravityUpList; } public List<String> getGravityDownList() { return gravityDownList; } public HashMap<String, Double[]> getGravityNorthList() { return gravityNorthList; } public HashMap<String, Double[]> getGravityWestList() { return gravityWestList; } public HashMap<String, Double[]> getGravitySouthList() { return gravitySouthList; } public HashMap<String, Double[]> getGravityEastList() { return gravityEastList; } public HashMap<String, Integer> getProtectBlockMap() { return protectBlockMap; } public HashMap<UUID, TARDISCondenserData> getRoomCondenserData() { return roomCondenserData; } public List<Integer> getNpcIDs() { return npcIDs; } public void setNpcIDs(List<Integer> npcIDs) { this.npcIDs = npcIDs; } public List<Block> getDoorPistons() { return doorPistons; } public void setDoorPistons(List<Block> doorPistons) { this.doorPistons = doorPistons; } public TARDISAdminCommands getTardisAdminCommand() { return tardisAdminCommand; } public void setTardisAdminCommand(TARDISAdminCommands tardisAdminCommand) { this.tardisAdminCommand = tardisAdminCommand; } public TARDISButtonListener getButtonListener() { return buttonListener; } public void setButtonListener(TARDISButtonListener buttonListener) { this.buttonListener = buttonListener; } public TARDISDoorListener getDoorListener() { return doorListener; } public void setDoorListener(TARDISDoorClickListener doorListener) { this.doorListener = doorListener; } public TARDISRenderRoomListener getRendererListener() { return rendererListener; } public void setRendererListener(TARDISRenderRoomListener rendererListener) { this.rendererListener = rendererListener; } public TARDISScannerListener getScannerListener() { return scannerListener; } public void setScannerListener(TARDISScannerListener scannerListener) { this.scannerListener = scannerListener; } public TARDISSonicListener getSonicListener() { return sonicListener; } public void setSonicListener(TARDISSonicListener sonicListener) { this.sonicListener = sonicListener; } public TARDISTravelCommands getTardisTravelCommand() { return tardisTravelCommand; } public void setTardisTravelCommand(TARDISTravelCommands tardisTravelCommand) { this.tardisTravelCommand = tardisTravelCommand; } public TARDISUUIDCache getUUIDCache() { return UUIDCache; } public List<String> getRoomArgs() { return roomArgs; } public HashSet<Material> getTransparent() { return transparent; } public List<String> getSonicLamps() { return sonicLamps; } public List<String> getSonicPistons() { return sonicPistons; } public List<String> getSonicRails() { return sonicRails; } public List<String> getSonicWires() { return sonicWires; } public List<Location> getRechargers() { return rechargers; } public YamlConfiguration getPluginYAML() { return pluginYAML; } public long getJunkTime() { return junkTime; } public void setJunkTime(long junkTime) { this.junkTime = junkTime; } public boolean isJunkTravelling() { return junkTravelling; } public void setJunkTravelling(boolean junkTravelling) { this.junkTravelling = junkTravelling; } public Location getJunkDestination() { return junkDestination; } public void setJunkDestination(Location junkDestination) { this.junkDestination = junkDestination; } public List<UUID> getJunkTravellers() { return junkTravellers; } public List<Material> getInteractables() { return interactables; } private void setRechargers() { if (plugin.getConfig().isConfigurationSection("rechargers")) { Set<String> therechargers = plugin.getConfig().getConfigurationSection("rechargers").getKeys(false); for (String s : therechargers) { World w = plugin.getServer().getWorld(plugin.getConfig().getString("rechargers." + s + ".world")); int x = plugin.getConfig().getInt("rechargers." + s + ".x"); int y = plugin.getConfig().getInt("rechargers." + s + ".y"); int z = plugin.getConfig().getInt("rechargers." + s + ".z"); Location rc_loc = new Location(w, x, y, z); this.rechargers.add(rc_loc); } } } private HashSet<Material> buildTransparent() { HashSet<Material> trans = new HashSet<Material>(); // add transparent blocks trans.add(Material.AIR); trans.add(Material.DEAD_BUSH); trans.add(Material.DOUBLE_PLANT); trans.add(Material.END_ROD); trans.add(Material.IRON_FENCE); trans.add(Material.LONG_GRASS); trans.add(Material.REDSTONE_WIRE); trans.add(Material.SNOW); trans.add(Material.STATIONARY_WATER); trans.add(Material.VINE); trans.add(Material.WATER); return trans; } private List<String> buildRoomArgs() { List<String> rooms = new ArrayList<String>(); // rooms - only add if enabled in the config for (String r : plugin.getRoomsConfig().getConfigurationSection("rooms").getKeys(false)) { if (plugin.getRoomsConfig().getBoolean("rooms." + r + ".enabled")) { rooms.add(r); } } return rooms; } private List<Material> buildInteractables() { List<Material> interactables = new ArrayList<Material>(); interactables.add(Material.ACACIA_DOOR); interactables.add(Material.ACACIA_FENCE_GATE); interactables.add(Material.ANVIL); interactables.add(Material.BEACON); interactables.add(Material.BED_BLOCK); interactables.add(Material.BIRCH_DOOR); interactables.add(Material.BIRCH_FENCE_GATE); interactables.add(Material.BURNING_FURNACE); interactables.add(Material.CHEST); interactables.add(Material.DARK_OAK_DOOR); interactables.add(Material.DARK_OAK_FENCE_GATE); interactables.add(Material.DIODE_BLOCK_OFF); interactables.add(Material.DIODE_BLOCK_ON); interactables.add(Material.DISPENSER); interactables.add(Material.DROPPER); interactables.add(Material.ENDER_CHEST); interactables.add(Material.FENCE_GATE); interactables.add(Material.FURNACE); interactables.add(Material.GOLD_PLATE); interactables.add(Material.HOPPER); interactables.add(Material.IRON_DOOR_BLOCK); interactables.add(Material.IRON_PLATE); interactables.add(Material.IRON_TRAPDOOR); interactables.add(Material.JUKEBOX); interactables.add(Material.JUNGLE_DOOR); interactables.add(Material.JUNGLE_FENCE_GATE); interactables.add(Material.LEVER); interactables.add(Material.NOTE_BLOCK); interactables.add(Material.REDSTONE_COMPARATOR_OFF); interactables.add(Material.REDSTONE_COMPARATOR_ON); interactables.add(Material.SIGN); interactables.add(Material.SPRUCE_DOOR); interactables.add(Material.SPRUCE_FENCE_GATE); interactables.add(Material.STONE_BUTTON); interactables.add(Material.STONE_PLATE); interactables.add(Material.TRAPPED_CHEST); interactables.add(Material.TRAP_DOOR); interactables.add(Material.WALL_SIGN); interactables.add(Material.WOODEN_DOOR); interactables.add(Material.WOOD_BUTTON); interactables.add(Material.WOOD_PLATE); interactables.add(Material.WORKBENCH); return interactables; } }