/******************************************************************************* * This file is part of ASkyBlock. * * ASkyBlock 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. * * ASkyBlock 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 ASkyBlock. If not, see <http://www.gnu.org/licenses/>. *******************************************************************************/ package com.wasteofplastic.askyblock.schematics; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.bukkit.DyeColor; import org.bukkit.block.Banner; import org.bukkit.block.Block; import org.bukkit.block.banner.Pattern; import org.bukkit.block.banner.PatternType; import com.wasteofplastic.org.jnbt.CompoundTag; import com.wasteofplastic.org.jnbt.IntTag; import com.wasteofplastic.org.jnbt.ListTag; import com.wasteofplastic.org.jnbt.StringTag; import com.wasteofplastic.org.jnbt.Tag; /** * This class describes banners and is used in schematic importing * * @author tastybento * */ public class BannerBlock { private DyeColor bannerBaseColor; private List<Pattern> bannerPattern; private static HashMap<String, PatternType> patternKey; // bs, mc, cr, drs, dls, hhb, mr, hh, sc, gru, ss, gra, ts, ms, tt // bts, tr, tts, sku, cre, tl, vhr, vh, bo, cbo, bri // ss, tt static { patternKey = new HashMap<String, PatternType>(); patternKey.put("", PatternType.BASE); patternKey.put("bo", PatternType.BORDER); patternKey.put("bri", PatternType.BRICKS); patternKey.put("mc", PatternType.CIRCLE_MIDDLE); patternKey.put("cre", PatternType.CREEPER); patternKey.put("cr", PatternType.CROSS); patternKey.put("cbo", PatternType.CURLY_BORDER); patternKey.put("ld", PatternType.DIAGONAL_LEFT); patternKey.put("lud", PatternType.DIAGONAL_LEFT_MIRROR); patternKey.put("rd", PatternType.DIAGONAL_RIGHT); patternKey.put("rud", PatternType.DIAGONAL_RIGHT_MIRROR); patternKey.put("flo", PatternType.FLOWER); patternKey.put("gra", PatternType.GRADIENT); patternKey.put("gru", PatternType.GRADIENT_UP); patternKey.put("hh", PatternType.HALF_HORIZONTAL); patternKey.put("hhb", PatternType.HALF_HORIZONTAL_MIRROR); patternKey.put("vh", PatternType.HALF_VERTICAL); patternKey.put("vhr", PatternType.HALF_VERTICAL_MIRROR); patternKey.put("moj", PatternType.MOJANG); patternKey.put("mr", PatternType.RHOMBUS_MIDDLE); patternKey.put("sku", PatternType.SKULL); patternKey.put("bl", PatternType.SQUARE_BOTTOM_LEFT); patternKey.put("br", PatternType.SQUARE_BOTTOM_RIGHT); patternKey.put("tl", PatternType.SQUARE_TOP_LEFT); patternKey.put("tr", PatternType.SQUARE_TOP_RIGHT); patternKey.put("sc", PatternType.STRAIGHT_CROSS); patternKey.put("bs", PatternType.STRIPE_BOTTOM); patternKey.put("ms", PatternType.STRIPE_CENTER); patternKey.put("dls", PatternType.STRIPE_DOWNLEFT); patternKey.put("drs", PatternType.STRIPE_DOWNRIGHT); patternKey.put("ls", PatternType.STRIPE_LEFT); patternKey.put("ms", PatternType.STRIPE_MIDDLE); patternKey.put("rs", PatternType.STRIPE_RIGHT); patternKey.put("ss", PatternType.STRIPE_SMALL); patternKey.put("ts", PatternType.STRIPE_TOP); patternKey.put("bt", PatternType.TRIANGLE_BOTTOM); patternKey.put("tt", PatternType.TRIANGLE_TOP); patternKey.put("bts", PatternType.TRIANGLES_BOTTOM); patternKey.put("tts", PatternType.TRIANGLES_TOP); } public boolean set(Block block) { Banner banner = (Banner) block.getState(); banner.setBaseColor(bannerBaseColor); banner.setPatterns(bannerPattern); banner.update(); return true; } @SuppressWarnings("deprecation") public boolean prep(Map<String, Tag> tileData) { // Format for banner is: // Patterns = List of patterns // id = String "BannerBlock" // Base = Int color // Then the location // z = Int // y = Int // x = Int try { // Do the base color int baseColor = 15 - ((IntTag) tileData.get("Base")).getValue(); // //ASkyBlock.getPlugin().getLogger().info("Base value = " + // baseColor); // baseColor green = 10 bannerBaseColor = DyeColor.getByDyeData((byte) baseColor); // Do the patterns (no idea if this will work or not) bannerPattern = new ArrayList<Pattern>(); ListTag patterns = (ListTag) tileData.get("Patterns"); if (patterns != null) { for (Tag pattern : patterns.getValue()) { // ASkyBlock.getPlugin().getLogger().info("pattern = " + // pattern); // Translate pattern to PatternType if (pattern instanceof CompoundTag) { CompoundTag patternColor = (CompoundTag) pattern; // The tag is made up of pattern (String) and color // (int) Map<String, Tag> patternValue = patternColor.getValue(); StringTag mark = (StringTag) patternValue.get("Pattern"); Integer markColor = 15 - ((IntTag) patternValue.get("Color")).getValue(); // ASkyBlock.getPlugin().getLogger().info("mark = " + // mark.getValue()); // ASkyBlock.getPlugin().getLogger().info("color = " + // markColor); DyeColor dColor = DyeColor.getByDyeData(markColor.byteValue()); // ASkyBlock.getPlugin().getLogger().info(" dye color = " // + dColor.toString()); if (patternKey.containsKey(mark.getValue())) { Pattern newPattern = new Pattern(dColor, patternKey.get(mark.getValue())); bannerPattern.add(newPattern); } } } } } catch (Exception e) { e.printStackTrace(); } return true; } }