Skip to content

Commit 876c504

Browse files
committed
it's working
1 parent f5023f4 commit 876c504

File tree

8 files changed

+81
-42
lines changed

8 files changed

+81
-42
lines changed

build.gradle

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
plugins {
22
id 'java'
33
id 'xyz.jpenilla.run-paper' version '2.1.0'
4+
id 'com.github.breadmoirai.github-release' version '2.4.1'
45
}
56

67
group = 'simpleclient-api'
7-
version = '0.0.1-dev'
8+
version = '0.0.2'
89

910
repositories {
1011
mavenCentral()
@@ -30,4 +31,23 @@ tasks {
3031

3132
tasks.withType(JavaCompile).configureEach {
3233
it.options.release.set 17
34+
}
35+
36+
githubRelease {
37+
token System.getenv('GITHUB_TOKEN') == null ? '' : System.getenv('GITHUB_TOKEN')
38+
owner 'SimpleClientDevelopment'
39+
repo 'SimpleClientAPI'
40+
tagName version
41+
targetCommitish 'main'
42+
releaseName version
43+
generateReleaseNotes false
44+
body file('changelog.md').text.replace('%version%', version)
45+
draft false
46+
prerelease version.startsWith('0') || version.endsWith('-snapshot') || version.endsWith('-alpha') || version.endsWith('-beta') || version.endsWith('-dev')
47+
releaseAssets files("build/libs/${archivesBaseName}-${version}.jar")
48+
allowUploadToExisting.set false
49+
overwrite true
50+
dryRun false
51+
apiEndpoint 'https://api.github.com'
52+
client
3353
}

changelog.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
## SimpleClient API %version%
2+
- Working server API to enable/disable Legacy PvP

src/main/java/simpleclient/api/SimpleClientAPI.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import org.bukkit.Bukkit;
66
import org.bukkit.entity.Player;
77
import org.bukkit.plugin.Plugin;
8+
import simpleclient.api.network.NetworkHelper;
89

910
import java.util.HashSet;
1011
import java.util.Set;
@@ -37,18 +38,12 @@ public static boolean isLegacyPvPEnabled() {
3738

3839
public static void setLegacyPvPEnabled(boolean enabled) {
3940
legacyPvPEnabled = enabled;
40-
Plugin plugin = SimpleClientAPIMain.getPlugin();
4141
if (!enabled) {
4242
blockingPlayers.removeIf(blocker -> {
43-
ByteArrayDataOutput out = ByteStreams.newDataOutput();
44-
out.writeByte(3);
45-
out.writeUTF(blocker.getUniqueId().toString());
46-
byte[] data = out.toByteArray();
47-
simpleClientPlayers.forEach(p -> p.sendPluginMessage(plugin, "simpleclient:legacypvp", data));
43+
simpleClientPlayers.forEach(p -> NetworkHelper.sendBlockingPlayer(p, blocker, false));
4844
return true;
4945
});
5046
}
51-
byte[] data = new byte[] {(byte) (enabled ? 0 : 1)};
52-
Bukkit.getOnlinePlayers().forEach(p -> p.sendPluginMessage(plugin, "simpleclient:legacypvp", data));
47+
simpleClientPlayers.forEach(p -> NetworkHelper.sendLegacyPvPEnabled(p, enabled));
5348
}
5449
}

src/main/java/simpleclient/api/SimpleClientAPIMain.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,25 @@
22

33
import org.bukkit.Bukkit;
44
import org.bukkit.plugin.java.JavaPlugin;
5+
import simpleclient.api.listener.ConnectionListener;
6+
import simpleclient.api.listener.HandshakeMessageListener;
57
import simpleclient.api.listener.LegacyPvPMessageListener;
68

79
public final class SimpleClientAPIMain extends JavaPlugin {
810
private static SimpleClientAPIMain plugin;
911

12+
@Override
13+
public void onLoad() {
14+
plugin = this;
15+
}
16+
1017
@Override
1118
public void onEnable() {
1219
Bukkit.getMessenger().registerOutgoingPluginChannel(this, "simpleclient:handshake");
13-
Bukkit.getMessenger().registerIncomingPluginChannel(this, "simpleclient:handshake", new LegacyPvPMessageListener());
20+
Bukkit.getMessenger().registerIncomingPluginChannel(this, "simpleclient:handshake", new HandshakeMessageListener());
1421
Bukkit.getMessenger().registerOutgoingPluginChannel(this, "simpleclient:legacypvp");
1522
Bukkit.getMessenger().registerIncomingPluginChannel(this, "simpleclient:legacypvp", new LegacyPvPMessageListener());
23+
Bukkit.getPluginManager().registerEvents(new ConnectionListener(), this);
1624
}
1725

1826
@Override

src/main/java/simpleclient/api/listener/ConnectionListener.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package simpleclient.api.listener;
22

3-
import com.google.common.io.ByteArrayDataOutput;
4-
import com.google.common.io.ByteStreams;
3+
import org.bukkit.Bukkit;
54
import org.bukkit.entity.Player;
65
import org.bukkit.event.EventHandler;
76
import org.bukkit.event.Listener;
@@ -10,25 +9,25 @@
109
import org.bukkit.event.player.PlayerQuitEvent;
1110
import simpleclient.api.SimpleClientAPI;
1211
import simpleclient.api.SimpleClientAPIMain;
12+
import simpleclient.api.network.NetworkHelper;
1313

1414
public class ConnectionListener implements Listener {
1515
@EventHandler
1616
public void onJoin(PlayerJoinEvent e) {
1717
Player p = e.getPlayer();
18-
for (Player blocker : SimpleClientAPI.getBlockingPlayers()) {
19-
ByteArrayDataOutput out = ByteStreams.newDataOutput();
20-
out.writeByte(2);
21-
out.writeUTF(blocker.getUniqueId().toString());
22-
byte[] data = out.toByteArray();
23-
p.sendPluginMessage(SimpleClientAPIMain.getPlugin(), "simpleclient:legacypvp", data);
24-
}
18+
Bukkit.getScheduler().runTaskLater(SimpleClientAPIMain.getPlugin(), () -> {
19+
if (SimpleClientAPI.isUsingSimpleClient(p)) {
20+
NetworkHelper.sendLegacyPvPEnabled(p, SimpleClientAPI.isLegacyPvPEnabled());
21+
NetworkHelper.sendBlockingPlayers(p);
22+
}
23+
}, 20);
2524
}
2625

2726
@EventHandler
2827
public void onQuit(PlayerQuitEvent e) {
2928
Player p = e.getPlayer();
3029
if (SimpleClientAPI.isUsingSimpleClient(p)) {
31-
p.sendPluginMessage(SimpleClientAPIMain.getPlugin(), "simpleclient:legacypvp", new byte[] {1});
30+
NetworkHelper.sendLegacyPvPEnabled(p, false);
3231
SimpleClientAPI.getSimpleClientPlayers().remove(p);
3332
}
3433
}
@@ -37,7 +36,7 @@ public void onQuit(PlayerQuitEvent e) {
3736
public void onKick(PlayerKickEvent e) {
3837
Player p = e.getPlayer();
3938
if (SimpleClientAPI.isUsingSimpleClient(p)) {
40-
p.sendPluginMessage(SimpleClientAPIMain.getPlugin(), "simpleclient:legacypvp", new byte[] {1});
39+
NetworkHelper.sendLegacyPvPEnabled(p, false);
4140
SimpleClientAPI.getSimpleClientPlayers().remove(p);
4241
}
4342
}
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package simpleclient.api.listener;
22

3+
import com.google.common.io.ByteArrayDataOutput;
4+
import com.google.common.io.ByteStreams;
35
import org.bukkit.entity.Player;
46
import org.bukkit.plugin.messaging.PluginMessageListener;
57
import org.jetbrains.annotations.NotNull;
@@ -13,21 +15,19 @@ public void onPluginMessageReceived(@NotNull String channel, @NotNull Player pla
1315
String clientVersion = new String(message);
1416
if (compareVersions(SimpleClientAPI.MIN_SUPPORTED_VERSION, clientVersion)) {
1517
SimpleClientAPI.getSimpleClientPlayers().add(player);
16-
byte[] data = new byte[] {(byte) (SimpleClientAPI.isLegacyPvPEnabled() ? 0 : 1)};
17-
player.sendPluginMessage(SimpleClientAPIMain.getPlugin(), "simpleclient:legacypvp", data);
1818
}
1919
}
2020
}
2121

2222
private boolean compareVersions(String serverVersionName, String clientVersionName) {
23-
String[] serverVersion = serverVersionName.split(".");
24-
String[] clientVersion = clientVersionName.split(".");
25-
for (int i = 0, j = Math.min(serverVersion.length, clientVersion.length); i <= j; i++) {
23+
String[] serverVersion = serverVersionName.split("\\.");
24+
String[] clientVersion = clientVersionName.split("\\.");
25+
for (int i = 0, j = Math.min(serverVersion.length, clientVersion.length); i < j; i++) {
2626
int serverVersionPart = Integer.parseInt(serverVersion[i]);
2727
int clientVersionPart = Integer.parseInt(clientVersion[i]);
2828
if (clientVersionPart > serverVersionPart) return true;
2929
if (clientVersionPart < serverVersionPart) return false;
3030
}
31-
return clientVersion.length > serverVersion.length;
31+
return clientVersion.length >= serverVersion.length;
3232
}
3333
}

src/main/java/simpleclient/api/listener/LegacyPvPMessageListener.java

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,24 @@
11
package simpleclient.api.listener;
22

3-
import com.google.common.io.ByteArrayDataOutput;
4-
import com.google.common.io.ByteStreams;
53
import org.bukkit.entity.Player;
6-
import org.bukkit.plugin.Plugin;
74
import org.bukkit.plugin.messaging.PluginMessageListener;
85
import org.jetbrains.annotations.NotNull;
96
import simpleclient.api.SimpleClientAPI;
10-
import simpleclient.api.SimpleClientAPIMain;
7+
import simpleclient.api.network.NetworkHelper;
118

129
public class LegacyPvPMessageListener implements PluginMessageListener {
1310
@Override
1411
public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, byte[] message) {
15-
Plugin plugin = SimpleClientAPIMain.getPlugin();
1612
if (channel.equals("simpleclient:legacypvp")) {
1713
SimpleClientAPI.getSimpleClientPlayers().add(player);
1814
if (message.length >= 1) {
1915
if (message[0] == 0) {
2016
SimpleClientAPI.getBlockingPlayers().add(player);
21-
ByteArrayDataOutput out = ByteStreams.newDataOutput();
22-
out.writeByte(2);
23-
out.writeUTF(player.getUniqueId().toString());
24-
byte[] data = out.toByteArray();
25-
SimpleClientAPI.getSimpleClientPlayers().forEach(p -> p.sendPluginMessage(plugin, "simpleclient:legacypvp", data));
17+
SimpleClientAPI.getSimpleClientPlayers().forEach(p -> NetworkHelper.sendBlockingPlayer(p, player, true));
2618
}
2719
if (message[0] == 1) {
2820
SimpleClientAPI.getBlockingPlayers().remove(player);
29-
ByteArrayDataOutput out = ByteStreams.newDataOutput();
30-
out.writeByte(3);
31-
out.writeUTF(player.getUniqueId().toString());
32-
byte[] data = out.toByteArray();
33-
SimpleClientAPI.getSimpleClientPlayers().forEach(p -> p.sendPluginMessage(plugin, "simpleclient:legacypvp", data));
21+
SimpleClientAPI.getSimpleClientPlayers().forEach(p -> NetworkHelper.sendBlockingPlayer(p, player, false));
3422
}
3523
}
3624
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package simpleclient.api.network;
2+
3+
import com.google.common.io.ByteArrayDataOutput;
4+
import com.google.common.io.ByteStreams;
5+
import org.bukkit.entity.Player;
6+
import simpleclient.api.SimpleClientAPI;
7+
import simpleclient.api.SimpleClientAPIMain;
8+
9+
public class NetworkHelper {
10+
public static void sendLegacyPvPEnabled(Player p, boolean enabled) {
11+
byte[] data = new byte[] {(byte) (enabled ? 0 : 1)};
12+
p.sendPluginMessage(SimpleClientAPIMain.getPlugin(), "simpleclient:legacypvp", data);
13+
}
14+
15+
public static void sendBlockingPlayer(Player p, Player blocker, boolean blocking) {
16+
ByteArrayDataOutput out = ByteStreams.newDataOutput();
17+
out.writeByte(blocking ? 2 : 3);
18+
out.writeLong(blocker.getUniqueId().getMostSignificantBits());
19+
out.writeLong(blocker.getUniqueId().getLeastSignificantBits());
20+
byte[] data = out.toByteArray();
21+
p.sendPluginMessage(SimpleClientAPIMain.getPlugin(), "simpleclient:legacypvp", data);
22+
}
23+
24+
public static void sendBlockingPlayers(Player p) {
25+
SimpleClientAPI.getBlockingPlayers().forEach(blocker -> sendBlockingPlayer(p, blocker, true));
26+
}
27+
}

0 commit comments

Comments
 (0)