generateLayout.java 4.56 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
79
80
81
82
83
84
85
                                }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);
                    }
                };
                t.run();
                return true;
            }

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

}