223 lines
13 KiB
Java
223 lines
13 KiB
Java
/*
|
|
* Copyright (c) 2017 univento.eu - All rights reserved
|
|
* You are not allowed to use, distribute or modify this code
|
|
*/
|
|
|
|
package eu.univento.core.api.blocks.banners;
|
|
|
|
import org.bukkit.DyeColor;
|
|
import org.bukkit.block.Banner;
|
|
import org.bukkit.block.banner.Pattern;
|
|
import org.bukkit.block.banner.PatternType;
|
|
|
|
import java.util.HashMap;
|
|
|
|
/**
|
|
* @author tschuliaehn
|
|
* @version 1.0
|
|
*/
|
|
|
|
public class ShapeRegistry {
|
|
private static HashMap<Character, Shape> shapes = new HashMap<>();
|
|
|
|
static {
|
|
shapes.put('A', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_TOP));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_LEFT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_RIGHT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_MIDDLE));
|
|
});
|
|
shapes.put('B', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_TOP));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_LEFT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_RIGHT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_MIDDLE));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_BOTTOM));
|
|
});
|
|
shapes.put('C', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_LEFT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_TOP));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_BOTTOM));
|
|
});
|
|
shapes.put('D', (banner, foreground, background) -> {
|
|
banner.setBaseColor(foreground);
|
|
banner.addPattern(new Pattern(background, PatternType.RHOMBUS_MIDDLE));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_TOP));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_BOTTOM));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_LEFT));
|
|
});
|
|
shapes.put('E', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_MIDDLE));
|
|
banner.addPattern(new Pattern(background, PatternType.STRIPE_RIGHT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_BOTTOM));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_TOP));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_LEFT));
|
|
});
|
|
shapes.put('F', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_MIDDLE));
|
|
banner.addPattern(new Pattern(background, PatternType.STRIPE_RIGHT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_LEFT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_TOP));
|
|
});
|
|
shapes.put('G', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_RIGHT));
|
|
banner.addPattern(new Pattern(background, PatternType.HALF_HORIZONTAL));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_BOTTOM));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_LEFT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_TOP));
|
|
});
|
|
shapes.put('H', (banner, foreground, background) -> {
|
|
banner.setBaseColor(foreground);
|
|
banner.addPattern(new Pattern(background, PatternType.STRIPE_TOP));
|
|
banner.addPattern(new Pattern(background, PatternType.STRIPE_BOTTOM));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_LEFT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_RIGHT));
|
|
});
|
|
shapes.put('I', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_BOTTOM));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_TOP));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_CENTER));
|
|
});
|
|
shapes.put('J', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_LEFT));
|
|
banner.addPattern(new Pattern(background, PatternType.HALF_HORIZONTAL));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_BOTTOM));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_RIGHT));
|
|
});
|
|
shapes.put('K', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_MIDDLE));
|
|
banner.addPattern(new Pattern(background, PatternType.STRIPE_RIGHT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_DOWNLEFT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_DOWNRIGHT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_LEFT));
|
|
});
|
|
shapes.put('L', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_LEFT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_BOTTOM));
|
|
});
|
|
shapes.put('M', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.TRIANGLE_TOP));
|
|
banner.addPattern(new Pattern(background, PatternType.CURLY_BORDER));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_LEFT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_RIGHT));
|
|
});
|
|
shapes.put('N', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_LEFT));
|
|
banner.addPattern(new Pattern(background, PatternType.TRIANGLE_TOP));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_RIGHT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_DOWNRIGHT));
|
|
});
|
|
shapes.put('O', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_TOP));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_RIGHT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_BOTTOM));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_LEFT));
|
|
});
|
|
shapes.put('P', (banner, foreground, background) -> {
|
|
banner.setBaseColor(foreground);
|
|
banner.addPattern(new Pattern(background, PatternType.HALF_HORIZONTAL));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_RIGHT));
|
|
banner.addPattern(new Pattern(background, PatternType.STRIPE_BOTTOM));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_TOP));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_LEFT));
|
|
});
|
|
shapes.put('Q', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_DOWNRIGHT));
|
|
banner.addPattern(new Pattern(background, PatternType.HALF_HORIZONTAL));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_LEFT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_BOTTOM));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_RIGHT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_TOP));
|
|
});
|
|
shapes.put('R', (banner, foreground, background) -> {
|
|
banner.setBaseColor(foreground);
|
|
banner.addPattern(new Pattern(background, PatternType.HALF_HORIZONTAL_MIRROR));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_DOWNRIGHT));
|
|
banner.addPattern(new Pattern(background, PatternType.HALF_VERTICAL));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_LEFT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_TOP));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_MIDDLE));
|
|
});
|
|
shapes.put('S', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.TRIANGLE_TOP));
|
|
banner.addPattern(new Pattern(foreground, PatternType.TRIANGLE_BOTTOM));
|
|
banner.addPattern(new Pattern(foreground, PatternType.SQUARE_TOP_RIGHT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.SQUARE_BOTTOM_LEFT));
|
|
banner.addPattern(new Pattern(background, PatternType.RHOMBUS_MIDDLE));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_DOWNRIGHT));
|
|
});
|
|
shapes.put('T', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_CENTER));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_TOP));
|
|
});
|
|
shapes.put('U', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_BOTTOM));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_RIGHT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_LEFT));
|
|
});
|
|
shapes.put('V', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_LEFT));
|
|
banner.addPattern(new Pattern(background, PatternType.TRIANGLE_BOTTOM));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_DOWNLEFT));
|
|
});
|
|
shapes.put('W', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.TRIANGLE_BOTTOM));
|
|
banner.addPattern(new Pattern(background, PatternType.CURLY_BORDER));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_RIGHT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_LEFT));
|
|
});
|
|
shapes.put('X', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_DOWNLEFT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_DOWNRIGHT));
|
|
});
|
|
shapes.put('Y', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_DOWNRIGHT));
|
|
banner.addPattern(new Pattern(background, PatternType.HALF_VERTICAL_MIRROR));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_DOWNLEFT));
|
|
});
|
|
shapes.put('Z', (banner, foreground, background) -> {
|
|
banner.setBaseColor(background);
|
|
banner.addPattern(new Pattern(foreground, PatternType.TRIANGLE_TOP));
|
|
banner.addPattern(new Pattern(foreground, PatternType.TRIANGLE_BOTTOM));
|
|
banner.addPattern(new Pattern(foreground, PatternType.SQUARE_TOP_LEFT));
|
|
banner.addPattern(new Pattern(foreground, PatternType.SQUARE_BOTTOM_RIGHT));
|
|
banner.addPattern(new Pattern(background, PatternType.RHOMBUS_MIDDLE));
|
|
banner.addPattern(new Pattern(foreground, PatternType.STRIPE_DOWNLEFT));
|
|
});
|
|
shapes.put(' ', (banner, foreground, background) -> banner.setBaseColor(background));
|
|
}
|
|
|
|
public static void addShape(Character character, Shape shape) {
|
|
shapes.put(character, shape);
|
|
}
|
|
|
|
public static void paint(char character, Banner banner, DyeColor foreground, DyeColor background) {
|
|
getShape(character).draw(banner, foreground, background);
|
|
}
|
|
|
|
public static Shape getShape(char character) {
|
|
return shapes.containsKey(character) ? shapes.get(character) : shapes.get(' ');
|
|
}
|
|
}
|