/* * Copyright 2014 eccentric_nz. */ package me.eccentric_nz.TARDIS.schematic; import java.util.HashMap; import java.util.Map; import java.util.UUID; import me.eccentric_nz.TARDIS.JSON.JSONArray; import me.eccentric_nz.TARDIS.JSON.JSONObject; import me.eccentric_nz.TARDIS.TARDIS; import static me.eccentric_nz.TARDIS.schematic.TARDISBannerSetter.setBanners; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.entity.Player; /** * * @author eccentric_nz */ public class TARDISSchematicPaster { private final TARDIS plugin; private final Player player; HashMap<Block, Byte> postRedstoneTorches = new HashMap<Block, Byte>(); HashMap<Block, JSONObject> postStandingBanners = new HashMap<Block, JSONObject>(); HashMap<Block, JSONObject> postWallBanners = new HashMap<Block, JSONObject>(); public TARDISSchematicPaster(TARDIS plugin, Player player) { this.plugin = plugin; this.player = player; } @SuppressWarnings("deprecation") public boolean paste() { UUID uuid = player.getUniqueId(); if (!plugin.getTrackerKeeper().getPastes().containsKey(uuid)) { player.sendMessage(plugin.getPluginName() + "No schematic loaded! " + ChatColor.GREEN + "/ts load [name]"); return true; } JSONObject obj = plugin.getTrackerKeeper().getPastes().get(uuid); // get dimensions JSONObject d = (JSONObject) obj.get("dimensions"); int hei = d.getInt("height"); int wid = d.getInt("width"); int len = d.getInt("length"); // get start location JSONObject r = (JSONObject) obj.get("relative"); int rx = r.getInt("x"); int ry = r.getInt("y"); int rz = r.getInt("z"); int x = player.getLocation().getBlockX() - rx; int y = player.getLocation().getBlockY() - ry; int z = player.getLocation().getBlockZ() - rz; World world = player.getWorld(); // get input array JSONArray arr = (JSONArray) obj.get("input"); // loop like crazy for (int h = 0; h < hei; h++) { JSONArray level = (JSONArray) arr.get(h); for (int w = 0; w < wid; w++) { JSONArray row = (JSONArray) level.get(w); for (int l = 0; l < len; l++) { JSONObject col = (JSONObject) row.get(l); Material m = Material.valueOf((String) col.get("type")); byte b = col.getByte("data"); Block block = world.getBlockAt(x + w, y + h, z + l); if (m.equals(Material.REDSTONE_TORCH_ON)) { postRedstoneTorches.put(block, b); } else if (m.equals(Material.STANDING_BANNER) || m.equals(Material.WALL_BANNER)) { JSONObject state = col.optJSONObject("banner"); if (state != null) { if (m.equals(Material.STANDING_BANNER)) { postStandingBanners.put(block, state); } else { postWallBanners.put(block, state); } } } else { block.setType(m); block.setData(b, true); } } } } for (Map.Entry<Block, Byte> entry : postRedstoneTorches.entrySet()) { Block prtb = entry.getKey(); byte ptdata = entry.getValue(); prtb.setTypeIdAndData(76, ptdata, true); } setBanners(176, postStandingBanners); setBanners(177, postWallBanners); return true; } }