Skip to content

Commit f9e638f

Browse files
committed
Fixes and Improvements
+ Fixed sign showing up after the GUI is closed. + Added lombok (makes my life easier.) + Made async packet process sync (so it can interact with the world directly without the need of implementing your own solution or running up the task id number.)
1 parent 4c08772 commit f9e638f

File tree

5 files changed

+69
-10
lines changed

5 files changed

+69
-10
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,5 +70,11 @@
7070
<version>4.7.0</version>
7171
<scope>provided</scope>
7272
</dependency>
73+
<dependency>
74+
<groupId>org.projectlombok</groupId>
75+
<artifactId>lombok</artifactId>
76+
<version>RELEASE</version>
77+
<scope>compile</scope>
78+
</dependency>
7379
</dependencies>
7480
</project>
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package dev.pns.signapi;
2+
3+
import org.bukkit.Bukkit;
4+
import org.bukkit.plugin.java.JavaPlugin;
5+
6+
import java.util.ArrayList;
7+
import java.util.Iterator;
8+
import java.util.List;
9+
10+
public class Async2Sync {
11+
private final List<SignTask> signTasks = new ArrayList<>();
12+
13+
public Async2Sync(JavaPlugin plugin) {
14+
Bukkit.getScheduler().runTaskTimer(plugin, () -> {
15+
if (signTasks.isEmpty()) return;
16+
Iterator<SignTask> iterator = signTasks.iterator();
17+
while (iterator.hasNext()) {
18+
SignTask signTask = iterator.next();
19+
signTask.getPlayer().sendBlockChange(signTask.getBlock().getLocation(), signTask.getBlock().getBlockData());
20+
signTask.getOnClose().method(signTask.getPlayer(), signTask.getLines());
21+
iterator.remove();
22+
}
23+
}, 0, 1);
24+
}
25+
26+
public void add(SignTask signTask) {
27+
signTasks.add(signTask);
28+
}
29+
}

src/main/java/dev/pns/signapi/SignAPI.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.comphenix.protocol.ProtocolLibrary;
55
import com.comphenix.protocol.events.PacketAdapter;
66
import com.comphenix.protocol.events.PacketEvent;
7+
import org.bukkit.Bukkit;
78
import org.bukkit.plugin.java.JavaPlugin;
89

910
import java.util.HashMap;
@@ -12,19 +13,25 @@
1213
import java.util.UUID;
1314

1415
public class SignAPI {
15-
private final Map<UUID, SignGUI.onClose> openGUIs = new HashMap<>();
16+
private final Map<UUID, SignTask> openGUIs = new HashMap<>();
17+
private final Async2Sync async2Sync;
1618

1719
public SignAPI(JavaPlugin plugin) {
20+
async2Sync = new Async2Sync(plugin);
21+
1822
ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(plugin, PacketType.Play.Client.UPDATE_SIGN) {
1923
@Override
2024
public void onPacketReceiving(PacketEvent event) {
21-
UUID uuid = event.getPlayer().getUniqueId();
25+
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
26+
UUID uuid = event.getPlayer().getUniqueId();
27+
if (!openGUIs.containsKey(uuid)) return;
28+
29+
SignTask signTask = openGUIs.get(uuid);
30+
signTask.setLines(event.getPacket().getStringArrays().read(0));
2231

23-
if (!openGUIs.containsKey(uuid)) return;
24-
SignGUI.onClose closeEvent = openGUIs.get(uuid);
25-
26-
openGUIs.remove(uuid);
27-
closeEvent.method(event.getPlayer(), event.getPacket().getStringArrays().read(0));
32+
openGUIs.remove(uuid);
33+
async2Sync.add(signTask);
34+
}, 0);
2835
}
2936
});
3037
}

src/main/java/dev/pns/signapi/SignGUI.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
public class SignGUI {
1818
private final onClose onClose;
1919
private final List<String> text;
20-
private final Map<UUID, onClose> openGUIs;
20+
private final Map<UUID, SignTask> openGUIs;
2121
private final ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
2222

23-
public SignGUI(Map<UUID, onClose> openGUIs, List<String> text, onClose closeFunction) {
23+
public SignGUI(Map<UUID, SignTask> openGUIs, List<String> text, onClose closeFunction) {
2424
this.openGUIs = openGUIs;
2525
this.text = text;
2626
this.onClose = closeFunction;
@@ -59,7 +59,7 @@ public void open(Player player) {
5959
sendPacket(player, packet);
6060

6161
// Store the method to be called when the sign is closed
62-
openGUIs.put(player.getUniqueId(), onClose);
62+
openGUIs.put(player.getUniqueId(), new SignTask(player, onClose, player.getWorld().getBlockAt(bp.getX(), bp.getY(), bp.getZ())));
6363
}
6464

6565
public interface onClose {
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package dev.pns.signapi;
2+
3+
import lombok.Getter;
4+
import lombok.RequiredArgsConstructor;
5+
import lombok.Setter;
6+
import org.bukkit.block.Block;
7+
import org.bukkit.entity.Player;
8+
9+
@Getter
10+
@RequiredArgsConstructor
11+
public class SignTask {
12+
private final Player player;
13+
private final SignGUI.onClose onClose;
14+
private final Block block;
15+
@Setter
16+
private String[] lines;
17+
}

0 commit comments

Comments
 (0)