GenerateLayout.java 4.58 KB
Newer Older
Florian Grabowski's avatar
Florian Grabowski committed
1
package de._82grfl1bif.kpiVisualizer.commands;
Florian Grabowski's avatar
Florian Grabowski committed
2

Florian Grabowski's avatar
Florian Grabowski committed
3
4
5
6
7
8
9
10
11
import de._82grfl1bif.kpiVisualizer.data.DataHolder;
import de._82grfl1bif.kpiVisualizer.data.JsonParser;
import de._82grfl1bif.kpiVisualizer.layouts.treeMap.Rectangle;
import de._82grfl1bif.kpiVisualizer.layouts.treeMap.Row;
import de._82grfl1bif.kpiVisualizer.layouts.treeMap.SquarifiedTreemapLayout;
import de._82grfl1bif.kpiVisualizer.structures.Builder;
import de._82grfl1bif.kpiVisualizer.structures.Building;
import de._82grfl1bif.kpiVisualizer.structures.Foundation;
import de._82grfl1bif.kpiVisualizer.structures.Structure;
12
import org.bukkit.Bukkit;
Florian Grabowski's avatar
Florian Grabowski committed
13
import org.bukkit.Location;
Florian Grabowski's avatar
Florian Grabowski committed
14
import org.bukkit.Material;
Florian Grabowski's avatar
Florian Grabowski committed
15
16
17
18
19
20
21
22
import org.bukkit.Server;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.jetbrains.annotations.NotNull;

Florian Grabowski's avatar
Florian Grabowski committed
23
24
import java.awt.*;
import java.util.Map;
25
26
import java.util.logging.Level;

Florian Grabowski's avatar
Florian Grabowski committed
27
public class GenerateLayout implements CommandExecutor {
Florian Grabowski's avatar
Florian Grabowski committed
28
29
30

    @Override
    public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
Florian Grabowski's avatar
Florian Grabowski committed
31
        if (args.length < 2) {
32
33
34
            sender.sendMessage("please type or select the needed Arguments with tab.");
            return false;
        }
Florian Grabowski's avatar
Florian Grabowski committed
35
        Server server = sender.getServer();
Florian Grabowski's avatar
Florian Grabowski committed
36
        Builder builder = new Builder(server);
Florian Grabowski's avatar
Florian Grabowski committed
37
        Player player = server.getPlayer(sender.getName());
38
        JsonParser jsonParser = new JsonParser();
Florian Grabowski's avatar
Florian Grabowski committed
39
        if (!jsonParser.evalJson(args[0])) {
40
41
42
            sender.sendMessage("failed to parse Json");
            return false;
        }
Florian Grabowski's avatar
Florian Grabowski committed
43
        if (player != null) { //check if Player exists for getting Start coordinates.
44
            Location location = player.getLocation();
Florian Grabowski's avatar
Florian Grabowski committed
45
            if (args[1].equals("SquarifiedTreemap")) { //check 2. Argument whether to use SquarifiedTreemap or SimpleSquare Layout.
Florian Grabowski's avatar
Florian Grabowski committed
46
                sender.sendMessage("generating SquarifiedTreemapLayout");
Florian Grabowski's avatar
Florian Grabowski committed
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
                BukkitRunnable t = new BukkitRunnable() {
                    @Override
                    public void run() {
                        SquarifiedTreemapLayout squarifiedTreemapLayout = new SquarifiedTreemapLayout();
                        squarifiedTreemapLayout.generateLayout(DataHolder.foundation, new Rectangle(DataHolder.foundation.getArea(), Math.sqrt(DataHolder.foundation.getArea()), new Point(0, 0)));
                        builder.setFoundation(location,(int)Math.round(Math.sqrt(DataHolder.foundation.getArea())),(int)Math.round(Math.sqrt(DataHolder.foundation.getArea())), Material.COBBLESTONE);
                        for (Row row : squarifiedTreemapLayout.getRows()) {
                            for (Map.Entry<Rectangle, Structure> entry : row.getRectangles().entrySet()) {
                                Rectangle r = entry.getKey();
                                Structure s = entry.getValue();
                                if(s.getClass() == Foundation.class){
                                    builder.setFoundation(location.clone().add(r.getOrigin().x,s.getDepth(),r.getOrigin().y),(int)(r.getWidth()),(int)(r.getHeight()),s.getMaterial());
                                }else{
                                    builder.fillQube(location.clone().add(r.getOrigin().x,s.getDepth()+100,r.getOrigin().y),(int)(r.getWidth()),((Building)s).getHeight(),(int)(r.getHeight()),s.getMaterial());
                                }
                            }
                        }
                    }
                };
                t.run();
            } else {
Florian Grabowski's avatar
Florian Grabowski committed
68
                sender.sendMessage("generating SimpleSquareLayout");
Florian Grabowski's avatar
Florian Grabowski committed
69
70
71
72
73
74
75
76
                BukkitRunnable t = new BukkitRunnable() {
                    @Override
                    public void run() {
                        DataHolder.foundation.setLocation(location);
                        DataHolder.foundation.organizeFoundation();
                        DataHolder.foundation.correctAllLocations(location);
                        builder.setFoundation(DataHolder.foundation.getLocation().clone().add(0, DataHolder.foundation.getDepth(), 0), DataHolder.foundation.getWidth().x, DataHolder.foundation.getWidth().x, DataHolder.foundation.getMaterial());
                        builder.setAllChildren(DataHolder.foundation);
77
                        builder.setLegend(location);
Florian Grabowski's avatar
Florian Grabowski committed
78
79
80
81
                    }
                };
                t.run();
            }
Florian Grabowski's avatar
Florian Grabowski committed
82
            return true;
Florian Grabowski's avatar
Florian Grabowski committed
83
84

        } else {
85
86
            Bukkit.getLogger().log(Level.SEVERE, "Kein Spieler gefunden.");
            return false;
Florian Grabowski's avatar
Florian Grabowski committed
87
88
89
90
        }
    }

}