generateLayout.java 4.61 KB
Newer Older
Florian Grabowski's avatar
Florian Grabowski committed
1
2
3
package de._82grfl1bif.KPI_Visualizer.commands;

import de._82grfl1bif.KPI_Visualizer.data.DataHolder;
4
import de._82grfl1bif.KPI_Visualizer.data.JsonParser;
Florian Grabowski's avatar
Florian Grabowski committed
5
6
7
import de._82grfl1bif.KPI_Visualizer.layouts.TreeMap.Rectangle;
import de._82grfl1bif.KPI_Visualizer.layouts.TreeMap.Row;
import de._82grfl1bif.KPI_Visualizer.layouts.TreeMap.SquarifiedTreemapLayout;
8
9
import de._82grfl1bif.KPI_Visualizer.structures.*;
import org.bukkit.Bukkit;
Florian Grabowski's avatar
Florian Grabowski committed
10
import org.bukkit.Location;
Florian Grabowski's avatar
Florian Grabowski committed
11
import org.bukkit.Material;
Florian Grabowski's avatar
Florian Grabowski committed
12
13
14
15
16
17
18
19
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
20
21
import java.awt.*;
import java.util.Map;
22
23
import java.util.logging.Level;

Florian Grabowski's avatar
Florian Grabowski committed
24
25
26
27
public class generateLayout implements CommandExecutor {

    @Override
    public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
Florian Grabowski's avatar
Florian Grabowski committed
28
        if (args.length < 2) {
29
30
31
            sender.sendMessage("please type or select the needed Arguments with tab.");
            return false;
        }
Florian Grabowski's avatar
Florian Grabowski committed
32
        sender.sendMessage("generating SimpleSquareLayout");
Florian Grabowski's avatar
Florian Grabowski committed
33
        Server server = sender.getServer();
Florian Grabowski's avatar
Florian Grabowski committed
34
        Builder builder = new Builder(server);
Florian Grabowski's avatar
Florian Grabowski committed
35
        Player player = server.getPlayer(sender.getName());
36
        JsonParser jsonParser = new JsonParser();
Florian Grabowski's avatar
Florian Grabowski committed
37
        if (!jsonParser.evalJson(args[0])) {
38
39
40
            sender.sendMessage("failed to parse Json");
            return false;
        }
Florian Grabowski's avatar
Florian Grabowski committed
41
        if (player != null) { //check if Player exists for getting Start coordinates.
42
            Location location = player.getLocation();
Florian Grabowski's avatar
Florian Grabowski committed
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
            if (args[1].equals("SquarifiedTreemap")) { //check 2. Argument whether to use SquarifiedTreemap or SimpleSquare Layout.
                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());
                                }
                                if(r.getHeight() >= 5 && r.getWidth() >= 5){
60

Florian Grabowski's avatar
Florian Grabowski committed
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
                                }else{
                                    Bukkit.getLogger().log(Level.SEVERE,"the rectangle is too small");
                                }
                            }
                        }
                    }
                };
                t.run();
                return true;
            } else {
                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);
79
                        builder.setLegend(location);
Florian Grabowski's avatar
Florian Grabowski committed
80
81
82
83
84
85
86
                    }
                };
                t.run();
                return true;
            }

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

}