package org.bukkit.craftbukkit.block;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.server.EnumColor;
import net.minecraft.server.NBTTagCompound;
import net.minecraft.server.NBTTagList;
import net.minecraft.server.TileEntityBanner;
import org.bukkit.DyeColor;
import org.bukkit.Material;
import org.bukkit.block.Banner;
import org.bukkit.block.Block;
import org.bukkit.block.banner.Pattern;
import org.bukkit.block.banner.PatternType;
import org.bukkit.craftbukkit.CraftWorld;
public class CraftBanner extends CraftBlockState implements Banner {
private final TileEntityBanner banner;
private DyeColor base;
private List<Pattern> patterns = new ArrayList<Pattern>();
public CraftBanner(final Block block) {
super(block);
CraftWorld world = (CraftWorld) block.getWorld();
banner = (TileEntityBanner) world.getTileEntityAt(getX(), getY(), getZ());
base = DyeColor.getByDyeData((byte) banner.color.getInvColorIndex());
if (banner.patterns != null) {
for (int i = 0; i < banner.patterns.size(); i++) {
NBTTagCompound p = banner.patterns.get(i);
patterns.add(new Pattern(DyeColor.getByDyeData((byte) p.getInt("Color")), PatternType.getByIdentifier(p.getString("Pattern"))));
}
}
}
public CraftBanner(final Material material, final TileEntityBanner te) {
super(material);
banner = te;
base = DyeColor.getByDyeData((byte) banner.color.getInvColorIndex());
if (banner.patterns != null) {
for (int i = 0; i < banner.patterns.size(); i++) {
NBTTagCompound p = banner.patterns.get(i);
patterns.add(new Pattern(DyeColor.getByDyeData((byte) p.getInt("Color")), PatternType.getByIdentifier(p.getString("Pattern"))));
}
}
}
@Override
public DyeColor getBaseColor() {
return this.base;
}
@Override
public void setBaseColor(DyeColor color) {
this.base = color;
}
@Override
public List<Pattern> getPatterns() {
return new ArrayList<Pattern>(patterns);
}
@Override
public void setPatterns(List<Pattern> patterns) {
this.patterns = new ArrayList<Pattern>(patterns);
}
@Override
public void addPattern(Pattern pattern) {
this.patterns.add(pattern);
}
@Override
public Pattern getPattern(int i) {
return this.patterns.get(i);
}
@Override
public Pattern removePattern(int i) {
return this.patterns.remove(i);
}
@Override
public void setPattern(int i, Pattern pattern) {
this.patterns.set(i, pattern);
}
@Override
public int numberOfPatterns() {
return patterns.size();
}
@Override
public boolean update(boolean force, boolean applyPhysics) {
boolean result = super.update(force, applyPhysics);
if (result) {
banner.color = EnumColor.fromInvColorIndex(base.getDyeData());
NBTTagList newPatterns = new NBTTagList();
for (Pattern p : patterns) {
NBTTagCompound compound = new NBTTagCompound();
compound.setInt("Color", p.getColor().getDyeData());
compound.setString("Pattern", p.getPattern().getIdentifier());
newPatterns.add(compound);
}
banner.patterns = newPatterns;
banner.update();
}
return result;
}
@Override
public TileEntityBanner getTileEntity() {
return banner;
}
}