Core/src/main/java/eu/univento/core/api/blocks/banners/ShapeRegistry.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(' ');
}
}