Помогите Топ игроков на frame (Java)

GameDoctorT

Участник
Баллы
31
Имя в Minecraft
GameDoctor
deleted
 
Последнее редактирование:
Здравствуйте! Видел много где новый вид оформления топа игроков. Это выглядит как несколько рамок в которых карты с картинками образуют общую картину на которой показан текстом топ игроков по определённому кол-ву статистики. Вот у меня вопрос - как сделать так же? Если такой плагин есть в интернете - пожалуйста, дайте ссылку. Если нет - помогите разработать, а именно дайте наводку вообще как это работает, желательно с примером в коде. Не нужны мне ваши ссылки на javadocs!!!
Тип это ?
https://www.spigotmc.org/resources/bannerboard.20435/
 
Вот те пример.
Код:
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.imageio.ImageIO;
import org.bukkit.entity.Player;
import org.bukkit.map.MapCanvas;
import org.bukkit.map.MapRenderer;
import org.bukkit.map.MapView;
import org.bukkit.map.MapView.Scale;

public class ImageRenderer extends MapRenderer {

    private BufferedImage picture;
    private boolean drawed = false;

    public ImageRenderer(MapView view, BufferedImage picture) {
        this.picture = picture;
        Iterator<MapRenderer> iter = view.getRenderers().iterator();
        while (iter.hasNext()) {
            view.removeRenderer(iter.next());
        }
    }

    @Override
    public void render(MapView view, MapCanvas canvas, Player player) {
        if (drawed) {
            return;
        }
        view.setScale(Scale.FARTHEST);
        canvas.drawImage(0, 0, picture);
        drawed = true;
    }

    public static BufferedImage load(File file) {
        try {
            BufferedImage image = ImageIO.read(file);
            return image;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    public static List<BufferedImage> create(BufferedImage image, int countW, int countH) {
        List<BufferedImage> list = new ArrayList<BufferedImage>();
        int width = 128 * countW;
        int height = 128 * countH;
        BufferedImage resize = resize(image, width, height);
        for (int y = 0; y < height; y += 128) {
            for (int x = 0; x < width; x += 128) {
                list.add(resize.getSubimage(x, y, 128, 128));
            }
        }
        return list;
    }

    private static BufferedImage resize(BufferedImage image, int width, int height) {
        Dimension size = new Dimension(width, height);
        BufferedImage resized = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = resized.createGraphics();
        g.drawImage(image, 0, 0, size.width, size.height, null);
        g.dispose();
        return resized;
    }
}
Код:
    public void setView(World world, ItemStack stack, BufferedImage image) {
        MapView view = Bukkit.createMap(world);
        view.addRenderer(new ImageRenderer(view, image));
        ItemMeta meta = stack.getItemMeta();
        MapMeta mapmeta = (MapMeta) meta;
        mapmeta.setMapView(view);
        stack.setItemMeta(meta);
    }
Код:
            List<BufferedImage> list = ImageRenderer.create(ImageRenderer.load(file), 4, 4);
            list.forEach(image -> {
                setView(world, (тут нужный стак и того 16 штук = (4*4)), image);
            });
Выдаст нарезанную картинку на 16 картин.
87354c4be6.jpg
 
Последнее редактирование:
Назад
Верх