Skip to content

Commit b75979b

Browse files
Redid nearly everything
- Changed the way the API will work later - Is now not a plugin anymore but just a gradle project - Added a class for GuiEvents - Moved some code around - Actually tried to do OOP - Added stuff to the GUI class to make it a gui
1 parent 9b0ea16 commit b75979b

File tree

9 files changed

+159
-66
lines changed

9 files changed

+159
-66
lines changed

build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ java {
3131
}
3232
}
3333

34+
jar {
35+
destinationDirectory.set(file("/Users/linusglimm/Desktop/mineopoly stuff/servers/spigotTest/plugins"))
36+
}
37+
3438
tasks.withType(JavaCompile).configureEach {
3539
options.encoding = 'UTF-8'
3640

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,32 @@
11
package de.littleprogrammer.guiapi;
22

3-
import de.littleprogrammer.guiapi.commands.SpawnButtonCommand;
4-
import de.littleprogrammer.guiapi.components.Button;
53
import de.littleprogrammer.guiapi.enums.ServerVersion;
6-
import de.littleprogrammer.guiapi.listeners.MoveListener;
7-
import org.bukkit.Bukkit;
8-
import org.bukkit.Server;
4+
import de.littleprogrammer.guiapi.listeners.GuiEvents;
5+
import org.bukkit.entity.Player;
6+
import org.bukkit.event.Listener;
97
import org.bukkit.plugin.java.JavaPlugin;
8+
import org.bukkit.scheduler.BukkitScheduler;
109

1110
import java.util.HashMap;
1211
import java.util.Map;
1312
import java.util.UUID;
1413

15-
public final class Api extends JavaPlugin {
14+
public final class Api {
1615

16+
private final JavaPlugin plugin;
1717
private static Api instance;
18-
private static ServerVersion version;
19-
private Map<UUID, Button> buttons = new HashMap<>();
18+
private ServerVersion version;
19+
private final Listener listener = new GuiEvents();
20+
private Map<UUID, GUI> guis = new HashMap<>();
2021

21-
@Override
22-
public void onEnable() {
23-
// Plugin startup logic
22+
private Api(JavaPlugin plugin) {
23+
this.plugin = plugin;
2424
instance = this;
25+
}
2526

26-
String secIndicator = Bukkit.getBukkitVersion().split("\\.")[1];
27-
String preTrdIndicator = Bukkit.getBukkitVersion().split("\\.")[2];
27+
public void init() {
28+
String secIndicator = plugin.getServer().getBukkitVersion().split("\\.")[1];
29+
String preTrdIndicator = plugin.getServer().getBukkitVersion().split("\\.")[2];
2830
String trdIndicator = preTrdIndicator.split("-")[0];
2931

3032
if (Integer.parseInt(secIndicator) == 20) {
@@ -41,16 +43,31 @@ public void onEnable() {
4143
}
4244
}
4345

44-
getCommand("spawnBtn").setExecutor(new SpawnButtonCommand());
45-
Bukkit.getPluginManager().registerEvents(new MoveListener(), this);
46+
this.plugin.getServer().getPluginManager().registerEvents(this.listener, this.plugin);
4647
}
4748

48-
@Override
49-
public void onDisable() {
50-
// Plugin shutdown logic
49+
public JavaPlugin getPlugin() {return this.plugin;}
50+
public static Api getInstance() {return instance;}
51+
public ServerVersion getVersion() {
52+
return version;
53+
}
54+
public static BukkitScheduler getScheduler() {
55+
return Api.getInstance().getPlugin().getServer().getScheduler();
5156
}
5257

53-
public static Api getInstance() { return instance; }
54-
public Map<UUID, Button> getButtons() { return buttons; }
55-
public static ServerVersion getVersion() { return version; }
58+
public GUI getGUI(UUID uuid) {
59+
return guis.get(uuid);
60+
}
61+
62+
public GUI getGUI(Player player) {
63+
return guis.get(player.getUniqueId());
64+
}
65+
66+
public Map<UUID, GUI> getGuis() {
67+
return guis;
68+
}
69+
70+
public Listener getListener() {
71+
return listener;
72+
}
5673
}
Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,54 @@
11
package de.littleprogrammer.guiapi;
22

3+
import de.littleprogrammer.guiapi.components.Button;
4+
import de.littleprogrammer.guiapi.components.Component;
5+
import de.littleprogrammer.guiapi.enums.ServerVersion;
6+
import de.littleprogrammer.guiapi.utils.Calculations;
7+
import de.littleprogrammer.guiapi.utils.TeleportInterpolator;
8+
import org.bukkit.Location;
9+
import org.bukkit.entity.Player;
10+
11+
import java.util.HashMap;
12+
import java.util.Map;
13+
import java.util.UUID;
14+
315
public class GUI {
416

5-
public GUI() {
17+
private final Player player;
18+
private final UUID uuid;
19+
private final Map<UUID, Component> components;
20+
21+
public GUI(Player player, String title, int gridWidth, int gridHeight) {
22+
this.player = player;
23+
this.uuid = player.getUniqueId();
24+
this.components = new HashMap<>();
25+
26+
Api.getInstance().getGuis().put(player.getUniqueId(), this);
27+
}
28+
29+
public void updatePosition(Location playerLoc) {
30+
Location location = Calculations.calculateInventoryLoc(playerLoc);
31+
32+
if (Api.getInstance().getVersion().equals(ServerVersion.PRE_1_20_2)) {
33+
for (Component component : components.values()) {
34+
TeleportInterpolator teleportInterpolator = new TeleportInterpolator(component.getEntity(), location, 5, 1);
35+
teleportInterpolator.startInterpolation();
36+
}
37+
} else {
38+
for (Component component : components.values()) {
39+
component.getDisplay().setTeleportDuration(5);
40+
component.getDisplay().teleport(location);
41+
}
42+
}
43+
}
44+
45+
public Component getComponent(UUID uuid) {
46+
return components.get(uuid);
47+
}
648

49+
public GUI addButton(String text, String localizedName) {
50+
Button button = new Button(this, this.player, text, localizedName);
51+
return this;
752
}
853

954
}

src/main/java/de/littleprogrammer/guiapi/commands/SpawnButtonCommand.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package de.littleprogrammer.guiapi.commands;
22

3-
import de.littleprogrammer.guiapi.components.Button;
3+
import de.littleprogrammer.guiapi.GUI;
44
import org.bukkit.command.Command;
55
import org.bukkit.command.CommandExecutor;
66
import org.bukkit.command.CommandSender;
@@ -9,9 +9,7 @@
99
public class SpawnButtonCommand implements CommandExecutor {
1010
@Override
1111
public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) {
12-
13-
new Button((Player) commandSender, "This is the \n text on the display", "localName");
14-
12+
new GUI((Player) commandSender, "Title", 1, 1).addButton("Button Text", "localNameHere");
1513

1614
return false;
1715
}
Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,63 @@
11
package de.littleprogrammer.guiapi.components;
22

33
import de.littleprogrammer.guiapi.Api;
4-
import de.littleprogrammer.guiapi.enums.ServerVersion;
4+
import de.littleprogrammer.guiapi.GUI;
55
import de.littleprogrammer.guiapi.utils.Calculations;
6-
import de.littleprogrammer.guiapi.utils.TeleportInterpolator;
76
import org.bukkit.Bukkit;
87
import org.bukkit.Location;
9-
import org.bukkit.entity.Display;
10-
import org.bukkit.entity.EntityType;
11-
import org.bukkit.entity.Player;
12-
import org.bukkit.entity.TextDisplay;
13-
import org.bukkit.event.EventHandler;
14-
import org.bukkit.event.Listener;
15-
import org.bukkit.event.player.PlayerMoveEvent;
16-
import org.bukkit.util.Transformation;
8+
import org.bukkit.entity.*;
9+
import org.bukkit.event.player.PlayerInteractEntityEvent;
1710

11+
import javax.annotation.Nonnull;
1812
import java.util.UUID;
13+
import java.util.function.Consumer;
1914

20-
public class Button implements Listener {
15+
public class Button implements Component {
2116

2217
private String texture;
2318
private String localizedName;
2419
private UUID uuid;
2520
private TextDisplay textDisplay;
2621
private Location location;
2722
private Player player;
23+
private Consumer<PlayerInteractEntityEvent> clickAction;
24+
private GUI gui;
2825

29-
public Button(Player player, String texture, String localizedName) {
26+
public Button(GUI gui, Player player, String texture, String localizedName) {
3027
this.player = player;
3128
this.texture = texture;
3229
this.localizedName = localizedName;
30+
this.gui = gui;
3331
uuid = UUID.randomUUID();
3432

3533
spawn();
3634
}
3735

3836
private void spawn() {
39-
Api.getInstance().getButtons().put(player.getUniqueId(), this);
40-
4137
textDisplay = (TextDisplay) player.getWorld().spawnEntity(Calculations.calculateInventoryLoc(player.getLocation()), EntityType.TEXT_DISPLAY);
4238
textDisplay.setText(texture);
4339
textDisplay.setGlowing(true);
4440
textDisplay.setBillboard(Display.Billboard.CENTER);
4541
textDisplay.setDisplayWidth(30);
4642
textDisplay.setDisplayHeight(30);
47-
Bukkit.getScheduler().runTaskLater(Api.getInstance(), () -> {
43+
}
44+
45+
@Nonnull
46+
public Consumer<PlayerInteractEntityEvent> getClickAction() {
47+
return clickAction;
48+
}
49+
50+
@Nonnull
51+
public Button onClick(Consumer<PlayerInteractEntityEvent> clickAction) {
52+
this.clickAction = clickAction;
53+
return this;
54+
}
4855

49-
}, 2);
56+
public Entity getEntity() {
57+
return textDisplay;
5058
}
5159

52-
public void updatePosition(Location playerLoc) {
53-
// textDisplay.setTeleportDuration(5);
54-
//
55-
location = Calculations.calculateInventoryLoc(playerLoc);
56-
// textDisplay.teleport(location);
57-
// textDisplay.setInterpolationDuration(5);
58-
// textDisplay.setInterpolationDelay(-1);
59-
// Transformation transformation = textDisplay.getTransformation();
60-
// transformation.getTranslation().set(location.toVector().subtract(textDisplay.getLocation().toVector()).toVector3f());
61-
// textDisplay.setTransformation(transformation);
62-
if (Api.getVersion().equals(ServerVersion.PRE_1_20_2)) {
63-
TeleportInterpolator teleportInterpolator = new TeleportInterpolator(textDisplay, location, 5, 1);
64-
teleportInterpolator.startInterpolation();
65-
} else {
66-
textDisplay.setTeleportDuration(5);
67-
textDisplay.teleport(location);
68-
}
60+
public Display getDisplay() {
61+
return textDisplay;
6962
}
7063
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package de.littleprogrammer.guiapi.components;
2+
3+
import org.bukkit.entity.Display;
4+
import org.bukkit.entity.Entity;
5+
6+
public interface Component {
7+
8+
public Entity getEntity();
9+
public Display getDisplay();
10+
11+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package de.littleprogrammer.guiapi.listeners;
2+
3+
import de.littleprogrammer.guiapi.Api;
4+
import de.littleprogrammer.guiapi.GUI;
5+
import de.littleprogrammer.guiapi.components.Button;
6+
import de.littleprogrammer.guiapi.components.Component;
7+
import org.bukkit.event.EventHandler;
8+
import org.bukkit.event.Listener;
9+
import org.bukkit.event.player.PlayerInteractEntityEvent;
10+
11+
import java.util.UUID;
12+
13+
public class GuiEvents implements Listener {
14+
15+
@EventHandler
16+
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
17+
final GUI gui = Api.getInstance().getGUI(event.getPlayer());
18+
19+
if (gui == null) return;
20+
21+
UUID uuid = event.getRightClicked().getUniqueId();
22+
Component component = gui.getComponent(uuid);
23+
if (!(component instanceof Button)) return;
24+
25+
((Button) component).getClickAction().accept(event);
26+
}
27+
}
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
package de.littleprogrammer.guiapi.listeners;
22

33
import de.littleprogrammer.guiapi.Api;
4+
import de.littleprogrammer.guiapi.GUI;
45
import org.bukkit.event.EventHandler;
56
import org.bukkit.event.Listener;
67
import org.bukkit.event.player.PlayerMoveEvent;
78

89
public class MoveListener implements Listener {
910
@EventHandler
1011
public void onPlayerMove(PlayerMoveEvent event) {
11-
if (Api.getInstance().getButtons().containsKey(event.getPlayer().getUniqueId())) {
12-
Api.getInstance().getButtons().get(event.getPlayer().getUniqueId()).updatePosition(event.getPlayer().getEyeLocation());
12+
if (Api.getInstance().getGuis().containsKey(event.getPlayer().getUniqueId())) {
13+
GUI gui = Api.getInstance().getGuis().get(event.getPlayer().getUniqueId());
14+
gui.updatePosition(event.getPlayer().getEyeLocation());
1315
}
1416
}
1517
}

src/main/java/de/littleprogrammer/guiapi/utils/TeleportInterpolator.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,6 @@
44
import org.bukkit.Bukkit;
55
import org.bukkit.Location;
66
import org.bukkit.entity.Entity;
7-
import org.bukkit.scheduler.BukkitTask;
8-
9-
import java.util.ArrayList;
10-
import java.util.List;
117

128
public class TeleportInterpolator {
139

@@ -43,7 +39,7 @@ public void startInterpolation() {
4339
}
4440

4541
private void teleportWithDelay(Location location, int delayTicks) {
46-
Bukkit.getScheduler().runTaskLater(Api.getInstance(), () -> {
42+
Api.getScheduler().runTaskLater(Api.getInstance().getPlugin(), () -> {
4743
entity.teleport(location);
4844
}, delayTicks);
4945
}

0 commit comments

Comments
 (0)