Skip to content

Commit 67c8313

Browse files
Nearly done
- Made moving the gui only if the user laves a specified angle - Added an hover and unhover event to let the user customize stuff when hovering over the buttons - Made the button text change if the user hovers it - Fixed a bug, where the click event could return null if it wasn't specified
1 parent cbe1ed5 commit 67c8313

File tree

9 files changed

+237
-42
lines changed

9 files changed

+237
-42
lines changed

src/main/java/de/littleprogrammer/guiapi/SimpleGui.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@
99
import org.bukkit.Location;
1010
import org.bukkit.entity.Player;
1111

12-
import java.util.HashMap;
13-
import java.util.Map;
14-
import java.util.UUID;
12+
import java.util.*;
1513

1614
public class SimpleGui {
1715

@@ -69,6 +67,7 @@ public SimpleGui open(Player player) {
6967
}
7068
this.player = player;
7169
GuiApi.getInstance().getGuis().put(player.getUniqueId(), this);
70+
centerLocation = new Location(player.getWorld(), 0, 0, 0);
7271

7372
for (Component component : components.values()) {
7473
component.spawn();
@@ -86,6 +85,14 @@ public Location getCenterLocation() {
8685
return centerLocation;
8786
}
8887

88+
public Player getPlayer() {
89+
return player;
90+
}
91+
92+
public List<Component> getComponents() {
93+
return new ArrayList<>(components.values());
94+
}
95+
8996
public boolean isOpen() {
9097
return open;
9198
}
@@ -94,6 +101,7 @@ public SimpleGui addButton(Button button) {
94101
if (buttons.size() < 3) {
95102
components.put(button.getUniqueId(), button);
96103
buttons.put(button.getUniqueId(), button);
104+
button.setGui(this);
97105
}
98106
return this;
99107
}
@@ -105,8 +113,4 @@ public SimpleGui addContent(Text content) {
105113
this.content = content;
106114
return this;
107115
}
108-
109-
public Player getPlayer() {
110-
return player;
111-
}
112116
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@
1111
public class SpawnCommand implements CommandExecutor {
1212
@Override
1313
public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) {
14-
Button button = new Button((Player) commandSender, "\uE001", "LcoalizedName", 1).onClick(event -> {
14+
Button button = new Button((Player) commandSender, "\uE001", "\uE002", "LcoalizedName", 1).onClick(event -> {
1515
event.getPlayer().sendMessage("You clicked a button1");
1616
});
1717

18-
Button button2 = new Button((Player) commandSender, "\uE001", "LcoalizedName", 2).onClick(event -> {
18+
Button button2 = new Button((Player) commandSender, "\uE001", "\uE002", "LcoalizedName", 2).onClick(event -> {
1919
event.getPlayer().sendMessage("You clicked a button2");
2020
});
2121

22-
Button button3 = new Button((Player) commandSender, "\uE001", "LcoalizedName", 3).onClick(event -> {
22+
Button button3 = new Button((Player) commandSender, "\uE001", "\uE002", "LcoalizedName", 3).onClick(event -> {
2323
event.getPlayer().sendMessage("You clicked a button3");
2424
});
2525

src/main/java/de/littleprogrammer/guiapi/components/Button.java

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import de.littleprogrammer.guiapi.GuiApi;
44
import de.littleprogrammer.guiapi.SimpleGui;
5+
import de.littleprogrammer.guiapi.customeEvents.HoverButtonEvent;
6+
import de.littleprogrammer.guiapi.customeEvents.UnHoverButtonEvent;
57
import de.littleprogrammer.guiapi.utils.Calculations;
68
import org.bukkit.Location;
79
import org.bukkit.entity.*;
@@ -16,17 +18,22 @@
1618
public class Button implements Component {
1719

1820
private String texture;
21+
private String hoverTexture;
1922
private String localizedName;
2023
private UUID uuid;
2124
private TextDisplay textDisplay;
2225
private Location location;
2326
private Player player;
2427
private Consumer<PlayerInteractEntityEvent> clickAction;
28+
private Consumer<HoverButtonEvent> hoverAction;
29+
private Consumer<UnHoverButtonEvent> unHoverAction;
2530
private int slot;
31+
private SimpleGui simpleGui;
2632

27-
public Button(Player player, String texture, String localizedName, int slot) {
33+
public Button(Player player, String texture, String hoverTexture, String localizedName, int slot) {
2834
this.player = player;
2935
this.texture = texture;
36+
this.hoverTexture = hoverTexture;
3037
this.localizedName = localizedName;
3138
this.slot = slot;
3239

@@ -63,7 +70,11 @@ public void remove() {
6370

6471
@Nonnull
6572
public Consumer<PlayerInteractEntityEvent> getClickAction() {
66-
return clickAction;
73+
if (clickAction != null) {
74+
return clickAction;
75+
} else {
76+
return (event -> {});
77+
}
6778
}
6879

6980
@Nonnull
@@ -72,19 +83,61 @@ public Button onClick(Consumer<PlayerInteractEntityEvent> clickAction) {
7283
return this;
7384
}
7485

86+
public Consumer<HoverButtonEvent> getHoverAction() {
87+
if (hoverAction != null) {
88+
return hoverAction;
89+
} else {
90+
return (event -> {});
91+
}
92+
}
93+
94+
public Button onHover(Consumer<HoverButtonEvent> hoverAction) {
95+
this.hoverAction = hoverAction;
96+
return this;
97+
}
98+
99+
public Consumer<UnHoverButtonEvent> getUnHoverAction() {
100+
if (unHoverAction != null) {
101+
return unHoverAction;
102+
} else {
103+
return (event -> {});
104+
}
105+
}
106+
107+
public Button onUnHover(Consumer<UnHoverButtonEvent> unHoverAction) {
108+
this.unHoverAction = unHoverAction;
109+
return this;
110+
}
111+
75112
public Entity getEntity() {
76113
return textDisplay;
77114
}
78115

79-
public Display getDisplay() {
116+
public TextDisplay getDisplay() {
80117
return textDisplay;
81118
}
82119

83120
public UUID getUniqueId() {
84121
return uuid;
85122
}
86123

124+
public SimpleGui getGui() {
125+
return simpleGui;
126+
}
127+
128+
public String getText() {
129+
return texture;
130+
}
131+
132+
public String getHoverText() {
133+
return hoverTexture;
134+
}
135+
87136
public int getSlot() {
88137
return slot;
89138
}
139+
140+
public void setGui(SimpleGui gui) {
141+
simpleGui = gui;
142+
}
90143
}

src/main/java/de/littleprogrammer/guiapi/components/Component.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package de.littleprogrammer.guiapi.components;
22

3+
import de.littleprogrammer.guiapi.SimpleGui;
34
import org.bukkit.entity.Display;
45
import org.bukkit.entity.Entity;
56
import org.bukkit.entity.Player;
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package de.littleprogrammer.guiapi.customeEvents;
2+
3+
import de.littleprogrammer.guiapi.SimpleGui;
4+
import de.littleprogrammer.guiapi.components.Button;
5+
import org.bukkit.entity.Player;
6+
import org.bukkit.event.Event;
7+
import org.bukkit.event.HandlerList;
8+
9+
public class HoverButtonEvent extends Event {
10+
private static final HandlerList HANDLERS = new HandlerList();
11+
12+
private final SimpleGui gui;
13+
private final Player player;
14+
private final Button button;
15+
private final String hoverText;
16+
private final String text;
17+
18+
public HoverButtonEvent(SimpleGui gui, Player player, Button button, String hoverText, String text) {
19+
this.gui = gui;
20+
this.player = player;
21+
this.button = button;
22+
this.hoverText = hoverText;
23+
this.text = text;
24+
25+
button.getDisplay().setText(hoverText);
26+
}
27+
28+
@Override
29+
public HandlerList getHandlers() {
30+
return HANDLERS;
31+
}
32+
33+
public static HandlerList getHandlerList() {
34+
return HANDLERS;
35+
}
36+
37+
public SimpleGui getGui() {
38+
return gui;
39+
}
40+
41+
public Player getPlayer() {
42+
return player;
43+
}
44+
45+
public Button getButton() {
46+
return button;
47+
}
48+
49+
public String getHoverText() {
50+
return hoverText;
51+
}
52+
53+
public String getText() {
54+
return text;
55+
}
56+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package de.littleprogrammer.guiapi.customeEvents;
2+
3+
import de.littleprogrammer.guiapi.SimpleGui;
4+
import de.littleprogrammer.guiapi.components.Button;
5+
import org.bukkit.entity.Player;
6+
import org.bukkit.event.Event;
7+
import org.bukkit.event.HandlerList;
8+
9+
public class UnHoverButtonEvent extends Event {
10+
private static final HandlerList HANDLERS = new HandlerList();
11+
12+
private final SimpleGui gui;
13+
private final Player player;
14+
private final Button button;
15+
private final String hoverText;
16+
private final String text;
17+
18+
public UnHoverButtonEvent(SimpleGui gui, Player player, Button button, String hoverText, String text) {
19+
this.gui = gui;
20+
this.player = player;
21+
this.button = button;
22+
this.hoverText = hoverText;
23+
this.text = text;
24+
25+
button.getDisplay().setText(text);
26+
}
27+
28+
@Override
29+
public HandlerList getHandlers() {
30+
return HANDLERS;
31+
}
32+
33+
public static HandlerList getHandlerList() {
34+
return HANDLERS;
35+
}
36+
37+
public SimpleGui getGui() {
38+
return gui;
39+
}
40+
41+
public Player getPlayer() {
42+
return player;
43+
}
44+
45+
public Button getButton() {
46+
return button;
47+
}
48+
49+
public String getHoverText() {
50+
return hoverText;
51+
}
52+
53+
public String getText() {
54+
return text;
55+
}
56+
}

src/main/java/de/littleprogrammer/guiapi/listeners/GuiEvents.java

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,38 +9,15 @@
99
import org.bukkit.entity.Entity;
1010
import org.bukkit.event.EventHandler;
1111
import org.bukkit.event.Listener;
12-
import org.bukkit.event.player.PlayerAnimationEvent;
1312
import org.bukkit.event.player.PlayerInteractEntityEvent;
13+
import org.bukkit.event.player.PlayerInteractEvent;
1414

1515
import java.util.UUID;
1616

1717
public class GuiEvents implements Listener {
1818

19-
@EventHandler(ignoreCancelled = true)
20-
public void onPlayerAnimation(PlayerAnimationEvent event) {
21-
final SimpleGui simpleGui = GuiApi.getInstance().getGUI(event.getPlayer());
22-
System.out.println("Fired click event");
23-
24-
if (simpleGui == null) return;
25-
26-
Entity awaitenEntity = null;
27-
for (Entity entity : event.getPlayer().getNearbyEntities(7, 7, 7)) {
28-
if (entity instanceof Display && entity.getCustomName() != null) {
29-
if (Calculations.playerLookingAtEntity(event.getPlayer(), entity)) {
30-
awaitenEntity = entity;
31-
break;
32-
}
33-
}
34-
}
35-
36-
if (awaitenEntity == null) { return; }
37-
38-
UUID uuid = UUID.fromString(awaitenEntity.getCustomName());
39-
Component component = simpleGui.getComponent(uuid);
40-
if (!(component instanceof Button)) return;
41-
42-
Button button = (Button) component;
43-
System.out.println("Click on button: " + button.getUniqueId());
44-
button.getClickAction().accept(new PlayerInteractEntityEvent(event.getPlayer(), button.getEntity()));
19+
@EventHandler
20+
public void onPlayerInteractEvent(PlayerInteractEvent event) {
21+
System.out.println(event.getAction());
4522
}
4623
}

0 commit comments

Comments
 (0)