Skip to content

Commit e724249

Browse files
feat: Started impl new octopus sdk
1 parent 911eb3a commit e724249

22 files changed

+1033
-158
lines changed

api/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
dependencies {
2-
compileOnlyApi("studio.o7:octopus-plugin-api:0.1.1")
2+
compileOnlyApi("studio.o7:octopus-plugin-api:1.0.0")
33
}
44

55
information {

api/src/main/java/studio/o7/cheetah/plugin/api/cluster/ProxyClusterCollection.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,5 @@
77

88
public interface ProxyClusterCollection extends Collection<ProxyCluster> {
99

10-
default Optional<ProxyCluster> getById(@NonNull String id) {
11-
return stream()
12-
.filter(cluster -> cluster.getId().equalsIgnoreCase(id))
13-
.findAny();
14-
}
10+
Optional<ProxyCluster> getById(@NonNull String id);
1511
}

api/src/main/java/studio/o7/cheetah/plugin/api/events/ProxyPreTransferEvent.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@ public final class ProxyPreTransferEvent extends ProxyPlayerEvent {
2424

2525
private boolean denied = true;
2626

27-
public ProxyPreTransferEvent(@NonNull ProxyPlayer player, @NonNull InetSocketAddress originalAddr, @NonNull InetSocketAddress targetAddr) {
27+
public ProxyPreTransferEvent(@NonNull ProxyPlayer player, @NonNull InetSocketAddress originalAddr, @NonNull InetSocketAddress targetAddr, boolean denied) {
2828
super(player);
2929
this.originalAddr = originalAddr;
3030
this.targetAddr = targetAddr;
31+
this.denied = denied;
3132
}
3233

3334
@Override

api/src/main/java/studio/o7/cheetah/plugin/api/events/ProxyResourcePackStatusEvent.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,11 @@ public final class ProxyResourcePackStatusEvent extends ProxyPlayerEvent {
2828

2929
private boolean overrideKick = false;
3030

31-
public ProxyResourcePackStatusEvent(@NonNull ProxyPlayer player, @NonNull PackStatus status, @NonNull ResourcePackInfo info) {
31+
public ProxyResourcePackStatusEvent(@NonNull ProxyPlayer player, @NonNull PackStatus status, @NonNull ResourcePackInfo info, boolean overrideKick) {
3232
super(player);
3333
this.status = status;
3434
this.info = info;
35+
this.overrideKick = overrideKick;
3536
}
3637

3738
@Override

api/src/main/java/studio/o7/cheetah/plugin/api/player/ProxyPlayerCollection.java

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,9 @@
88

99
public interface ProxyPlayerCollection extends Collection<ProxyPlayer> {
1010

11-
default Optional<ProxyPlayer> getByName(@NonNull String username) {
12-
return stream()
13-
.filter(player -> player.getUsername().equalsIgnoreCase(username))
14-
.findAny();
15-
}
11+
Optional<ProxyPlayer> getByName(@NonNull String username);
1612

17-
default Optional<ProxyPlayer> getByUuid(@NonNull UUID uuid) {
18-
return stream()
19-
.filter(player -> player.getUniqueId().equals(uuid))
20-
.findAny();
21-
}
13+
Optional<ProxyPlayer> getByUniqueId(@NonNull UUID uuid);
2214

23-
default Optional<ProxyPlayer> getByXboxUniqueId(@NonNull String xuid) {
24-
return stream()
25-
.filter(player -> player.getXboxUniqueId().orElse("").equalsIgnoreCase(xuid))
26-
.findAny();
27-
}
15+
Optional<ProxyPlayer> getByXboxUniqueId(@NonNull String xuid);
2816
}

api/src/main/java/studio/o7/cheetah/plugin/api/server/ProxyServerCollection.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,5 @@
77

88
public interface ProxyServerCollection extends Collection<ProxyServer> {
99

10-
default Optional<ProxyServer> getById(@NonNull String id) {
11-
return stream()
12-
.filter(server -> server.getId().equalsIgnoreCase(id))
13-
.findAny();
14-
}
10+
Optional<ProxyServer> getById(@NonNull String id);
1511
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,75 @@
11
package studio.o7.cheetah.plugin.api.utils;
22

3+
import org.jetbrains.annotations.NotNull;
4+
import org.jetbrains.annotations.Nullable;
5+
6+
import java.util.Collection;
37
import java.util.Map;
8+
import java.util.Set;
49

510
public interface Labels extends Map<String, String> {
611

12+
static Labels fromMap(Map<String, String> map) {
13+
return new Labels() {
14+
@Override
15+
public int size() {
16+
return map.size();
17+
}
18+
19+
@Override
20+
public boolean isEmpty() {
21+
return map.isEmpty();
22+
}
23+
24+
@Override
25+
public boolean containsKey(Object key) {
26+
return map.containsKey(key);
27+
}
28+
29+
@Override
30+
public boolean containsValue(Object value) {
31+
return map.containsValue(value);
32+
}
33+
34+
@Override
35+
public String get(Object key) {
36+
return map.get(key);
37+
}
38+
39+
@Override
40+
public @Nullable String put(String key, String value) {
41+
return map.put(key, value);
42+
}
43+
44+
@Override
45+
public String remove(Object key) {
46+
return map.remove(key);
47+
}
48+
49+
@Override
50+
public void putAll(@NotNull Map<? extends String, ? extends String> m) {
51+
map.putAll(m);
52+
}
53+
54+
@Override
55+
public void clear() {
56+
map.clear();
57+
}
58+
59+
@Override
60+
public @NotNull Set<String> keySet() {
61+
return map.keySet();
62+
}
63+
64+
@Override
65+
public @NotNull Collection<String> values() {
66+
return map.values();
67+
}
68+
69+
@Override
70+
public @NotNull Set<Entry<String, String>> entrySet() {
71+
return map.entrySet();
72+
}
73+
};
74+
}
775
}

plugin/src/main/java/studio/o7/cheetah/plugin/CheetahImpl.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,27 @@
44
import studio.o7.cheetah.plugin.api.cluster.ProxyClusterCollection;
55
import studio.o7.cheetah.plugin.api.player.ProxyPlayerCollection;
66
import studio.o7.cheetah.plugin.api.server.ProxyServerCollection;
7+
import studio.o7.cheetah.plugin.cluster.ClusterCollectionImpl;
8+
import studio.o7.cheetah.plugin.player.PlayerCollectionImpl;
9+
import studio.o7.cheetah.plugin.server.ServerCollectionImpl;
710

811
public class CheetahImpl implements Cheetah {
12+
public static final PlayerCollectionImpl PLAYER_COLLECTION = new PlayerCollectionImpl();
13+
public static final ServerCollectionImpl SERVER_COLLECTION = new ServerCollectionImpl();
14+
public static final ClusterCollectionImpl CLUSTER_COLLECTION = new ClusterCollectionImpl();
915

1016
@Override
1117
public ProxyPlayerCollection getPlayers() {
12-
return null;
18+
return PLAYER_COLLECTION;
1319
}
1420

1521
@Override
1622
public ProxyServerCollection getServers() {
17-
return null;
23+
return SERVER_COLLECTION;
1824
}
1925

2026
@Override
2127
public ProxyClusterCollection getClusters() {
22-
return null;
28+
return CLUSTER_COLLECTION;
2329
}
2430
}

plugin/src/main/java/studio/o7/cheetah/plugin/CheetahPlugin.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.papermc.paper.plugin.lifecycle.event.LifecycleEventManager;
44
import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents;
55
import lombok.Getter;
6+
import org.bukkit.Bukkit;
67
import org.bukkit.event.HandlerList;
78
import org.bukkit.plugin.Plugin;
89
import org.bukkit.plugin.java.JavaPlugin;
@@ -21,6 +22,11 @@ public CheetahPlugin() {
2122
@Override
2223
public void onEnable() {
2324
cheetah = new CheetahImpl();
25+
26+
var pm = Bukkit.getPluginManager();
27+
28+
pm.registerEvents(CheetahImpl.PLAYER_COLLECTION, this);
29+
2430
LifecycleEventManager<@NotNull Plugin> lifecycleManager = getLifecycleManager();
2531

2632
lifecycleManager.registerEventHandler(LifecycleEvents.COMMANDS, commands -> {
Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
package studio.o7.cheetah.plugin.cluster;
2+
3+
import com.google.protobuf.Struct;
4+
import it.unimi.dsi.fastutil.objects.ObjectArraySet;
5+
import lombok.Getter;
6+
import lombok.NonNull;
7+
import lombok.SneakyThrows;
8+
import org.bukkit.Bukkit;
9+
import org.bukkit.plugin.java.JavaPlugin;
10+
import org.jetbrains.annotations.NotNull;
11+
import studio.o7.cheetah.plugin.CheetahPlugin;
12+
import studio.o7.cheetah.plugin.api.cluster.ProxyCluster;
13+
import studio.o7.cheetah.plugin.api.cluster.ProxyClusterCollection;
14+
import studio.o7.octopus.plugin.api.Octopus;
15+
import studio.o7.octopus.plugin.api.listener.Listener;
16+
17+
import java.io.IOException;
18+
import java.lang.ref.WeakReference;
19+
import java.util.Collection;
20+
import java.util.Iterator;
21+
import java.util.Optional;
22+
import java.util.Set;
23+
24+
public final class ClusterCollectionImpl implements ProxyClusterCollection {
25+
private static final Set<ClusterHolder> HOLDERS = new ObjectArraySet<>();
26+
27+
public ClusterCollectionImpl() {
28+
var plugin = JavaPlugin.getPlugin(CheetahPlugin.class);
29+
Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, task ->
30+
new ObjectArraySet<>(HOLDERS).forEach(ClusterHolder::gc), 20, 100);
31+
var listener = new Listener("cheetah.cluster.*", 0) {
32+
@SneakyThrows
33+
@Override
34+
public void onCall(studio.o7.octopus.sdk.gen.api.v1.@NonNull Object obj) {
35+
var cluster = ClusterImpl.create(obj.getData());
36+
var holder = getByID(cluster.getId());
37+
if (holder == null) return;
38+
var clusterRef = holder.clusterRef.get();
39+
if (clusterRef == null) {
40+
holder.gc();
41+
return;
42+
}
43+
ClusterImpl.update(clusterRef, obj.getData());
44+
}
45+
};
46+
Octopus.get().registerListener(listener);
47+
}
48+
49+
@Getter
50+
private static final class ClusterHolder {
51+
private final WeakReference<ClusterImpl> clusterRef;
52+
53+
private ClusterHolder(@NonNull Struct struct) throws IOException {
54+
var cluster = ClusterImpl.create(struct);
55+
this.clusterRef = new WeakReference<>(cluster);
56+
}
57+
58+
private void gc() {
59+
if (clusterRef.get() != null) return;
60+
HOLDERS.remove(this);
61+
}
62+
63+
private Optional<ProxyCluster> get() {
64+
return Optional.ofNullable(clusterRef.get());
65+
}
66+
}
67+
68+
private static ClusterHolder query(@NonNull String id) {
69+
return Octopus.get().get("cheetah.cluster." + id)
70+
.stream()
71+
.map(entry -> {
72+
try {
73+
return new ClusterHolder(entry.getObject().getData());
74+
} catch (Exception exception) {
75+
throw new RuntimeException(exception);
76+
}
77+
}).findAny().orElse(null);
78+
}
79+
80+
private static ClusterHolder getByID(@NonNull String id) {
81+
return HOLDERS.stream()
82+
.filter(holder -> {
83+
if (holder.get().isEmpty()) return false;
84+
return holder.get().get().getId().equals(id);
85+
}).findAny().orElse(null);
86+
}
87+
88+
private static Collection<ProxyCluster> liveClusters() {
89+
return HOLDERS.stream()
90+
.map(ClusterHolder::get)
91+
.flatMap(Optional::stream)
92+
.toList();
93+
}
94+
95+
@Override
96+
public Optional<ProxyCluster> getById(@NonNull String id) {
97+
var holder = getByID(id);
98+
if (holder == null) {
99+
var newHolder = query(id);
100+
HOLDERS.add(newHolder);
101+
return newHolder.get();
102+
}
103+
return holder.get();
104+
}
105+
106+
@Override
107+
public int size() {
108+
return HOLDERS.size();
109+
}
110+
111+
@Override
112+
public boolean isEmpty() {
113+
return HOLDERS.isEmpty();
114+
}
115+
116+
@Override
117+
public boolean contains(Object o) {
118+
return liveClusters().contains(o);
119+
}
120+
121+
@Override
122+
public @NotNull Iterator<ProxyCluster> iterator() {
123+
return liveClusters().iterator();
124+
}
125+
126+
@Override
127+
public @NotNull Object @NotNull [] toArray() {
128+
return liveClusters().toArray();
129+
}
130+
131+
@Override
132+
public @NotNull <T> T @NotNull [] toArray(@NotNull T @NotNull [] a) {
133+
return liveClusters().toArray(a);
134+
}
135+
136+
@Override
137+
public boolean containsAll(@NotNull Collection<?> c) {
138+
return liveClusters().containsAll(c);
139+
}
140+
141+
@Override
142+
public boolean add(ProxyCluster proxyCluster) {
143+
throw new UnsupportedOperationException("Immutable collection");
144+
}
145+
146+
@Override
147+
public boolean remove(Object o) {
148+
throw new UnsupportedOperationException("Immutable collection");
149+
}
150+
151+
@Override
152+
public boolean addAll(@NotNull Collection<? extends ProxyCluster> c) {
153+
throw new UnsupportedOperationException("Immutable collection");
154+
}
155+
156+
@Override
157+
public boolean removeAll(@NotNull Collection<?> c) {
158+
throw new UnsupportedOperationException("Immutable collection");
159+
}
160+
161+
@Override
162+
public boolean retainAll(@NotNull Collection<?> c) {
163+
throw new UnsupportedOperationException("Immutable collection");
164+
}
165+
166+
@Override
167+
public void clear() {
168+
throw new UnsupportedOperationException("Immutable collection");
169+
}
170+
}

0 commit comments

Comments
 (0)