Package net.glowstone.block.blocktype

Source Code of net.glowstone.block.blocktype.BlockBanner

package net.glowstone.block.blocktype;

import net.glowstone.GlowChunk;
import net.glowstone.block.GlowBlock;
import net.glowstone.block.GlowBlockState;
import net.glowstone.block.entity.TEBanner;
import net.glowstone.block.entity.TileEntity;
import net.glowstone.block.state.GlowBanner;
import net.glowstone.entity.GlowPlayer;
import net.glowstone.util.nbt.CompoundTag;
import org.bukkit.BannerPattern;
import org.bukkit.DyeColor;
import org.bukkit.Material;
import org.bukkit.block.BlockFace;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BannerMeta;
import org.bukkit.material.Banner;
import org.bukkit.material.MaterialData;
import org.bukkit.util.Vector;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

public class BlockBanner extends BlockType {

    public BlockBanner() {
        setDrops(new ItemStack(Material.BANNER));
    }

    @Override
    public Collection<ItemStack> getDrops(GlowBlock block, ItemStack tool) {
        GlowBanner state = (GlowBanner) block.getState();
        ItemStack drop = new ItemStack(Material.BANNER, 1);
        BannerMeta meta = (BannerMeta) drop.getItemMeta();
        meta.setPattern(state.getPattern());
        drop.setItemMeta(meta);
        drop.setDurability(state.getBase().getDyeData());

        return Arrays.asList(drop);
    }

    @Override
    public TileEntity createTileEntity(GlowChunk chunk, int cx, int cy, int cz) {
        return new TEBanner(chunk.getBlock(cx, cy, cz));
    }

    @Override
    public void placeBlock(GlowPlayer player, GlowBlockState state, BlockFace face, ItemStack holding, Vector clickedLoc) {
        super.placeBlock(player, state, face, holding, clickedLoc);
        MaterialData data = state.getData();
        if (!(data instanceof Banner)) {
            warnMaterialData(Banner.class, data);
            return;
        }
        Banner banner = (Banner) data;
        if (banner.isWallBanner()) {
            banner.setFacingDirection(face);
        } else {
            banner.setFacingDirection(player.getFacing().getOppositeFace());
        }
    }

    @Override
    public void afterPlace(GlowPlayer player, GlowBlock block, ItemStack holding) {
        GlowBanner banner = (GlowBanner) block.getState();
        banner.setBase(DyeColor.getByDyeData((byte) holding.getDurability()));
        BannerMeta meta = (BannerMeta) holding.getItemMeta();
        banner.setPattern(meta.getPattern());
        banner.update();
    }

    public static List<CompoundTag> toNBT(BannerPattern pattern) {
        List<CompoundTag> patterns = new ArrayList<>();
        for (BannerPattern.BannerLayer layer : pattern.getLayers()) {
            CompoundTag layerTag = new CompoundTag();
            layerTag.putString("Pattern", layer.getTexture().getCode());
            layerTag.putInt("Color", layer.getColor().getDyeData());
            patterns.add(layerTag);
        }
        return patterns;
    }

    public static BannerPattern fromNBT(List<CompoundTag> tag) {
        BannerPattern.Builder builder = BannerPattern.builder();
        for (CompoundTag layer : tag) {
            BannerPattern.LayerTexture type = BannerPattern.LayerTexture.getByCode(layer.getString("Pattern"));
            DyeColor color = DyeColor.getByDyeData((byte) layer.getInt("Color"));
            builder.layer(type, color);
        }
        return builder.build();
    }

}
TOP

Related Classes of net.glowstone.block.blocktype.BlockBanner

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.