下面列出了怎么用org.bukkit.block.banner.Pattern的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* @author Bkm016
*/
public static void setBanner(BannerMeta itemMeta, List<String> patterns) {
patterns.forEach(pattern -> {
String[] type = pattern.split(" ");
if (type.length == 1) {
try {
itemMeta.setBaseColor(DyeColor.valueOf(type[0].toUpperCase()));
} catch (Exception ignored) {
itemMeta.setBaseColor(DyeColor.BLACK);
}
} else if (type.length == 2) {
try {
itemMeta.addPattern(new Pattern(DyeColor.valueOf(type[0].toUpperCase()), PatternType.valueOf(type[1].toUpperCase())));
} catch (Exception e) {
itemMeta.addPattern(new Pattern(DyeColor.BLACK, PatternType.BASE));
}
}
});
}
@Override
public void applyTo(TileEntityBanner banner) {
super.applyTo(banner);
banner.baseColor = EnumDyeColor.byDyeDamage(base.getDyeData());
NBTTagList newPatterns = new NBTTagList();
for (Pattern p : patterns) {
NBTTagCompound compound = new NBTTagCompound();
compound.setInteger("Color", p.getColor().getDyeData());
compound.setString("Pattern", p.getPattern().getIdentifier());
newPatterns.appendTag(compound);
}
banner.patterns = newPatterns;
}
CraftMetaBanner(NBTTagCompound tag) {
super(tag);
if (!tag.hasKey("BlockEntityTag")) {
return;
}
NBTTagCompound entityTag = tag.getCompoundTag("BlockEntityTag");
base = entityTag.hasKey(BASE.NBT) ? DyeColor.getByDyeData((byte) entityTag.getInteger(BASE.NBT)) : null;
if (entityTag.hasKey(PATTERNS.NBT)) {
NBTTagList patterns = entityTag.getTagList(PATTERNS.NBT, CraftMagicNumbers.NBT.TAG_COMPOUND);
for (int i = 0; i < Math.min(patterns.tagCount(), 20); i++) {
NBTTagCompound p = patterns.getCompoundTagAt(i);
this.patterns.add(new Pattern(DyeColor.getByDyeData((byte) p.getInteger(COLOR.NBT)), PatternType.getByIdentifier(p.getString(PATTERN.NBT))));
}
}
}
CraftMetaBanner(Map<String, Object> map) {
super(map);
String baseStr = SerializableMeta.getString(map, BASE.BUKKIT, true);
if (baseStr != null) {
base = DyeColor.valueOf(baseStr);
}
Iterable<?> rawPatternList = SerializableMeta.getObject(Iterable.class, map, PATTERNS.BUKKIT, true);
if (rawPatternList == null) {
return;
}
for (Object obj : rawPatternList) {
if (!(obj instanceof Pattern)) {
throw new IllegalArgumentException("Object in pattern list is not valid. " + obj.getClass());
}
addPattern((Pattern) obj);
}
}
@Override
void applyToItem(NBTTagCompound tag) {
super.applyToItem(tag);
NBTTagCompound entityTag = new NBTTagCompound();
if (base != null) {
entityTag.setInteger(BASE.NBT, base.getDyeData());
}
NBTTagList newPatterns = new NBTTagList();
for (Pattern p : patterns) {
NBTTagCompound compound = new NBTTagCompound();
compound.setInteger(COLOR.NBT, p.getColor().getDyeData());
compound.setString(PATTERN.NBT, p.getPattern().getIdentifier());
newPatterns.appendTag(compound);
}
entityTag.setTag(PATTERNS.NBT, newPatterns);
tag.setTag("BlockEntityTag", entityTag);
}
public ItemBuilder addPattern(String stringPattern) {
try {
String[] split = stringPattern.split(":");
for (PatternType pattern : PatternType.values()) {
if (split[0].equalsIgnoreCase(pattern.name()) || split[0].equalsIgnoreCase(pattern.getIdentifier())) {
DyeColor color = getDyeColor(split[1]);
if (color != null) {
addPattern(new Pattern(color, pattern));
}
break;
}
}
} catch (Exception e) {
}
return this;
}
@Override
public void load(TileEntityBanner banner) {
super.load(banner);
base = DyeColor.getByDyeData((byte) banner.baseColor.getDyeDamage());
patterns = new ArrayList<Pattern>();
if (banner.patterns != null) {
for (int i = 0; i < banner.patterns.tagCount(); i++) {
NBTTagCompound p = (NBTTagCompound) banner.patterns.get(i);
patterns.add(new Pattern(DyeColor.getByDyeData((byte) p.getInteger("Color")), PatternType.getByIdentifier(p.getString("Pattern"))));
}
}
}
CraftMetaBanner(CraftMetaItem meta) {
super(meta);
if (!(meta instanceof CraftMetaBanner)) {
return;
}
CraftMetaBanner banner = (CraftMetaBanner) meta;
base = banner.base;
patterns = new ArrayList<Pattern>(banner.patterns);
}
@Test
void pattern() {
var first = new Pattern(RED, BORDER);
var second = new Pattern(RED, FLOWER);
BannerBuilder.of(WATER).self().patterns(first).patterns(Set.of(second));
verify(meta).addPattern(first);
verify(meta).addPattern(second);
}
/**
* A method to deserialize a BannerMeta object from a JSONObject. This method assumes that the JSONArrays containing
* the colors and pattern types are the same length.
*
* @param json The JSONObject of the BannerMeta to deserialize
* @return The BannerMeta
*/
public static BannerMeta getBannerMeta(JsonObject json) {
BannerMeta dummy = (BannerMeta) new ItemStack(Material.BANNER).getItemMeta();
if (json.has("base-color"))
dummy.setBaseColor(DyeColor.getByDyeData(Byte.parseByte("" + json.get("base-color"))));
JsonArray colors = json.getAsJsonArray("colors");
JsonArray patternTypes = json.getAsJsonArray("pattern-types");
for (int i = 0; i < colors.size() - 1; i++) {
dummy.addPattern(new Pattern(DyeColor.getByDyeData(Integer.valueOf(colors.get(i).getAsInt()).byteValue()),
PatternType.getByIdentifier(patternTypes.get(i).getAsString())));
}
return dummy;
}
/**
* Gets random banner meta
*
* @return banner meta
*/
public static BannerMeta getRandomMeta() {
if(ConfigManager.getServerVersion().isOlderThan(ConfigManager.ServerVersion.MINECRAFT_1_8_R2)) {
return null;
}
BannerMeta meta = (BannerMeta) Bukkit.getItemFactory().getItemMeta(CompatibilityUtils.Mat.WHITE_BANNER.get());
meta.setBaseColor(randomDyeColor());
for(int i = NumberUtils.randInt(0, PatternType.values().length) + 2; i > 0; i--) {
meta.addPattern(new Pattern(randomDyeColor(), randomPatternType()));
}
return meta;
}
/**
* Turns a banner into banner meta
*
* @param banner banner block
* @return banner meta
*/
public static BannerMeta getBannerMeta(Banner banner) {
if(ConfigManager.getServerVersion().isOlderThan(ConfigManager.ServerVersion.MINECRAFT_1_8_R2)) {
return null;
}
BannerMeta meta = (BannerMeta) Bukkit.getItemFactory().getItemMeta(CompatibilityUtils.Mat.WHITE_BANNER.get());
meta.setBaseColor(banner.getBaseColor());
for(Pattern pattern : banner.getPatterns()) {
meta.addPattern(pattern);
}
return meta;
}
@Override
public String serialize(BannerMeta bannerMeta) {
if(bannerMeta == null) {
return "";
}
StringBuilder builder = new StringBuilder();
builder.append((bannerMeta.getBaseColor() == null ? DyeColor.BLACK : bannerMeta.getBaseColor()).name());
if(bannerMeta.numberOfPatterns() > 0) {
builder.append(':');
}
int index = 1;
for(Pattern pattern : bannerMeta.getPatterns()) {
builder.append(pattern.getColor().name());
builder.append('-');
builder.append(pattern.getPattern().getIdentifier());
if(index < bannerMeta.numberOfPatterns()) {
builder.append("|");
}
index++;
}
return builder.toString();
}
/**
* A method to deserialize a BannerMeta object from a JSONObject. This method assumes that the JSONArrays containing
* the colors and pattern types are the same length.
*
* @param json The JSONObject of the BannerMeta to deserialize
* @return The BannerMeta
*/
public static BannerMeta getBannerMeta(JsonObject json) {
BannerMeta dummy = (BannerMeta) new ItemStack(Material.BANNER).getItemMeta();
if (json.has("base-color"))
dummy.setBaseColor(DyeColor.getByDyeData(Byte.parseByte("" + json.get("base-color"))));
JsonArray colors = json.getAsJsonArray("colors");
JsonArray patternTypes = json.getAsJsonArray("pattern-types");
for (int i = 0; i < colors.size() - 1; i++) {
dummy.addPattern(new Pattern(DyeColor.getByDyeData(Integer.valueOf(colors.get(i).getAsInt()).byteValue()),
PatternType.getByIdentifier(patternTypes.get(i).getAsString())));
}
return dummy;
}
public static List<Pattern> parseBannerPatternList(List<String> input) throws FormatException {
List<Pattern> patterns = new ArrayList<Pattern>();
for (String str : input) {
String[] split = str.split(":");
if (split.length != 2) {
throw new FormatException("it must be in the format \"pattern:color\".");
}
try {
patterns.add(new Pattern(parseDyeColor(split[1]), PatternType.valueOf(split[0].toUpperCase())));
} catch (IllegalArgumentException e) {
throw new FormatException("it must be a valid pattern type.");
}
}
return patterns;
}
@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 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) {
patterns.add(pattern);
}
@Override
public Pattern getPattern(int i) {
return patterns.get(i);
}
@Override
public Pattern removePattern(int i) {
return patterns.remove(i);
}
@Override
public void setPattern(int i, Pattern pattern) {
patterns.set(i, pattern);
}
public ItemBuilder banner(Pattern... patterns) {
if (itemMeta instanceof BannerMeta) {
java.util.Arrays.stream(patterns).forEach(pattern -> ((BannerMeta) itemMeta).addPattern(pattern));
}
return this;
}
public List<Pattern> getPatterns() {
return patterns;
}
public ItemBuilder addPattern(Pattern pattern) {
patterns.add(pattern);
return this;
}