aboutsummaryrefslogtreecommitdiff
path: root/mod/src/main/java/moe/ymc/acron/s2c
diff options
context:
space:
mode:
Diffstat (limited to 'mod/src/main/java/moe/ymc/acron/s2c')
-rw-r--r--mod/src/main/java/moe/ymc/acron/s2c/Entity.java26
-rw-r--r--mod/src/main/java/moe/ymc/acron/s2c/Event.java4
-rw-r--r--mod/src/main/java/moe/ymc/acron/s2c/EventQueue.java28
-rw-r--r--mod/src/main/java/moe/ymc/acron/s2c/event/EventDisconnected.java12
-rw-r--r--mod/src/main/java/moe/ymc/acron/s2c/event/EventEntityDeath.java12
-rw-r--r--mod/src/main/java/moe/ymc/acron/s2c/event/EventLagging.java9
-rw-r--r--mod/src/main/java/moe/ymc/acron/s2c/event/EventPlayerJoined.java10
-rw-r--r--mod/src/main/java/moe/ymc/acron/s2c/event/EventPlayerMessage.java12
-rw-r--r--mod/src/main/java/moe/ymc/acron/s2c/response/EventCmdOut.java13
-rw-r--r--mod/src/main/java/moe/ymc/acron/s2c/response/EventCmdRes.java10
-rw-r--r--mod/src/main/java/moe/ymc/acron/s2c/response/EventError.java22
-rw-r--r--mod/src/main/java/moe/ymc/acron/s2c/response/EventOk.java8
12 files changed, 166 insertions, 0 deletions
diff --git a/mod/src/main/java/moe/ymc/acron/s2c/Entity.java b/mod/src/main/java/moe/ymc/acron/s2c/Entity.java
new file mode 100644
index 0000000..3e0add1
--- /dev/null
+++ b/mod/src/main/java/moe/ymc/acron/s2c/Entity.java
@@ -0,0 +1,26 @@
+package moe.ymc.acron.s2c;
+
+import com.google.gson.annotations.SerializedName;
+import com.mojang.authlib.GameProfile;
+import moe.ymc.acron.common.Vec3d;
+import moe.ymc.acron.common.WorldKey;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.UUID;
+
+public record Entity(@SerializedName("name") @NotNull String name,
+ @SerializedName("uuid") @NotNull UUID uuid,
+ @SerializedName("pos") @Nullable Vec3d pos,
+ @SerializedName("world") @Nullable WorldKey world) {
+ public Entity(@NotNull net.minecraft.entity.Entity entity) {
+ this(entity.getName().getString(),
+ entity.getUuid(),
+ new Vec3d(entity.getPos()),
+ WorldKey.create(entity.world.getRegistryKey().getValue()));
+ }
+
+ public Entity(@NotNull GameProfile profile) {
+ this(profile.getName(), profile.getId(), null, null);
+ }
+}
diff --git a/mod/src/main/java/moe/ymc/acron/s2c/Event.java b/mod/src/main/java/moe/ymc/acron/s2c/Event.java
new file mode 100644
index 0000000..1abc35c
--- /dev/null
+++ b/mod/src/main/java/moe/ymc/acron/s2c/Event.java
@@ -0,0 +1,4 @@
+package moe.ymc.acron.s2c;
+
+public interface Event {
+}
diff --git a/mod/src/main/java/moe/ymc/acron/s2c/EventQueue.java b/mod/src/main/java/moe/ymc/acron/s2c/EventQueue.java
new file mode 100644
index 0000000..8c470a1
--- /dev/null
+++ b/mod/src/main/java/moe/ymc/acron/s2c/EventQueue.java
@@ -0,0 +1,28 @@
+package moe.ymc.acron.s2c;
+
+import io.netty.channel.Channel;
+import io.netty.channel.group.ChannelGroup;
+import io.netty.channel.group.DefaultChannelGroup;
+import io.netty.util.concurrent.GlobalEventExecutor;
+import moe.ymc.acron.serialization.Serializer;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.jetbrains.annotations.NotNull;
+
+public class EventQueue {
+ private static final Logger LOGGER = LogManager.getLogger();
+
+ private static final ChannelGroup sMessageRecipients =
+ new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
+
+ public static void registerMessageRecipient(@NotNull Channel channel) {
+ sMessageRecipients.add(channel);
+ }
+
+ public static void enqueue(@NotNull Event message) {
+ LOGGER.debug("Enqueue: {} ({} channels)",
+ message,
+ sMessageRecipients.size());
+ sMessageRecipients.writeAndFlush(Serializer.serialize(message));
+ }
+}
diff --git a/mod/src/main/java/moe/ymc/acron/s2c/event/EventDisconnected.java b/mod/src/main/java/moe/ymc/acron/s2c/event/EventDisconnected.java
new file mode 100644
index 0000000..610fc58
--- /dev/null
+++ b/mod/src/main/java/moe/ymc/acron/s2c/event/EventDisconnected.java
@@ -0,0 +1,12 @@
+package moe.ymc.acron.s2c.event;
+
+import com.google.gson.annotations.SerializedName;
+import moe.ymc.acron.s2c.Entity;
+import moe.ymc.acron.s2c.Event;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public record EventDisconnected(@SerializedName("player") @Nullable Entity player,
+ @SerializedName("reason") @NotNull String reason)
+ implements Event {
+}
diff --git a/mod/src/main/java/moe/ymc/acron/s2c/event/EventEntityDeath.java b/mod/src/main/java/moe/ymc/acron/s2c/event/EventEntityDeath.java
new file mode 100644
index 0000000..4735241
--- /dev/null
+++ b/mod/src/main/java/moe/ymc/acron/s2c/event/EventEntityDeath.java
@@ -0,0 +1,12 @@
+package moe.ymc.acron.s2c.event;
+
+import com.google.gson.annotations.SerializedName;
+import moe.ymc.acron.s2c.Entity;
+import moe.ymc.acron.s2c.Event;
+import org.jetbrains.annotations.NotNull;
+
+// TODO: More detailed death report.
+public record EventEntityDeath(@SerializedName("entity") @NotNull Entity entity,
+ @SerializedName("message") @NotNull String message)
+ implements Event {
+}
diff --git a/mod/src/main/java/moe/ymc/acron/s2c/event/EventLagging.java b/mod/src/main/java/moe/ymc/acron/s2c/event/EventLagging.java
new file mode 100644
index 0000000..30974df
--- /dev/null
+++ b/mod/src/main/java/moe/ymc/acron/s2c/event/EventLagging.java
@@ -0,0 +1,9 @@
+package moe.ymc.acron.s2c.event;
+
+import com.google.gson.annotations.SerializedName;
+import moe.ymc.acron.s2c.Event;
+
+public record EventLagging(@SerializedName("ms") long ms,
+ @SerializedName("ticks") long ticks)
+ implements Event {
+}
diff --git a/mod/src/main/java/moe/ymc/acron/s2c/event/EventPlayerJoined.java b/mod/src/main/java/moe/ymc/acron/s2c/event/EventPlayerJoined.java
new file mode 100644
index 0000000..408680b
--- /dev/null
+++ b/mod/src/main/java/moe/ymc/acron/s2c/event/EventPlayerJoined.java
@@ -0,0 +1,10 @@
+package moe.ymc.acron.s2c.event;
+
+import com.google.gson.annotations.SerializedName;
+import moe.ymc.acron.s2c.Entity;
+import moe.ymc.acron.s2c.Event;
+import org.jetbrains.annotations.NotNull;
+
+public record EventPlayerJoined(@SerializedName("player") @NotNull Entity player)
+ implements Event {
+}
diff --git a/mod/src/main/java/moe/ymc/acron/s2c/event/EventPlayerMessage.java b/mod/src/main/java/moe/ymc/acron/s2c/event/EventPlayerMessage.java
new file mode 100644
index 0000000..2769493
--- /dev/null
+++ b/mod/src/main/java/moe/ymc/acron/s2c/event/EventPlayerMessage.java
@@ -0,0 +1,12 @@
+package moe.ymc.acron.s2c.event;
+
+import com.google.gson.annotations.SerializedName;
+import moe.ymc.acron.s2c.Entity;
+import moe.ymc.acron.s2c.Event;
+import org.jetbrains.annotations.NotNull;
+
+public record EventPlayerMessage(@SerializedName("player") @NotNull Entity player,
+ @SerializedName("text") @NotNull String text)
+ implements Event {
+
+}
diff --git a/mod/src/main/java/moe/ymc/acron/s2c/response/EventCmdOut.java b/mod/src/main/java/moe/ymc/acron/s2c/response/EventCmdOut.java
new file mode 100644
index 0000000..a4cb798
--- /dev/null
+++ b/mod/src/main/java/moe/ymc/acron/s2c/response/EventCmdOut.java
@@ -0,0 +1,13 @@
+package moe.ymc.acron.s2c.response;
+
+import com.google.gson.annotations.SerializedName;
+import moe.ymc.acron.s2c.Event;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.UUID;
+
+public record EventCmdOut(@SerializedName("id") int id,
+ @SerializedName("sender") @NotNull UUID sender,
+ @SerializedName("out") @NotNull String out)
+ implements Event {
+}
diff --git a/mod/src/main/java/moe/ymc/acron/s2c/response/EventCmdRes.java b/mod/src/main/java/moe/ymc/acron/s2c/response/EventCmdRes.java
new file mode 100644
index 0000000..8c1b6a9
--- /dev/null
+++ b/mod/src/main/java/moe/ymc/acron/s2c/response/EventCmdRes.java
@@ -0,0 +1,10 @@
+package moe.ymc.acron.s2c.response;
+
+import com.google.gson.annotations.SerializedName;
+import moe.ymc.acron.s2c.Event;
+
+public record EventCmdRes(@SerializedName("id") int id,
+ @SerializedName("success") boolean success,
+ @SerializedName("result") int result)
+ implements Event {
+}
diff --git a/mod/src/main/java/moe/ymc/acron/s2c/response/EventError.java b/mod/src/main/java/moe/ymc/acron/s2c/response/EventError.java
new file mode 100644
index 0000000..370e8f3
--- /dev/null
+++ b/mod/src/main/java/moe/ymc/acron/s2c/response/EventError.java
@@ -0,0 +1,22 @@
+package moe.ymc.acron.s2c.response;
+
+import com.google.gson.annotations.SerializedName;
+import moe.ymc.acron.s2c.Event;
+import org.jetbrains.annotations.Nullable;
+
+public record EventError(@SerializedName("id") int id,
+ @SerializedName("code") int code,
+ @SerializedName("message") @Nullable String message)
+ implements Event {
+ public enum Code {
+ SERVER_ERROR(500),
+ BAD_REQUEST(400),
+ FORBIDDEN(403)
+ ;
+
+ public final int value;
+ Code(int value) {
+ this.value = value;
+ }
+ }
+}
diff --git a/mod/src/main/java/moe/ymc/acron/s2c/response/EventOk.java b/mod/src/main/java/moe/ymc/acron/s2c/response/EventOk.java
new file mode 100644
index 0000000..eb8c82d
--- /dev/null
+++ b/mod/src/main/java/moe/ymc/acron/s2c/response/EventOk.java
@@ -0,0 +1,8 @@
+package moe.ymc.acron.s2c.response;
+
+import com.google.gson.annotations.SerializedName;
+import moe.ymc.acron.s2c.Event;
+
+public record EventOk(@SerializedName("id") int id)
+ implements Event {
+}