Skip to content

Commit

Permalink
Packet objects, bump versions, fix editor config
Browse files Browse the repository at this point in the history
  • Loading branch information
tal5 committed Jun 8, 2023
1 parent 7c44e1a commit ee73495
Show file tree
Hide file tree
Showing 13 changed files with 185 additions and 191 deletions.
10 changes: 3 additions & 7 deletions .editorconfig
Expand Up @@ -8,21 +8,17 @@ tab_width = 4
trim_trailing_whitespace = true

[*.gradle]
indent_style = tab
indent_style = space

[*.java]
indent_style = tab
indent_style = space

[*.json]
indent_style = space
indent_size = 2

[quilt.mod.json]
indent_style = tab
tab_width = 2

[*.toml]
indent_style = tab
indent_style = space
tab_width = 2

[*.properties]
Expand Down
6 changes: 3 additions & 3 deletions gradle.properties
Expand Up @@ -4,8 +4,8 @@ org.gradle.parallel = true

# Fabric Properties
minecraft_version=1.19.4
yarn_mappings=1.19.4+build.1
loader_version=0.14.18
yarn_mappings=1.19.4+build.2
loader_version=0.14.21

# Mod Properties
version = beta-1.0
Expand All @@ -14,7 +14,7 @@ maven_group = com.denizenscript
archives_base_name = clientizen

# Dependencies
fabric_version=0.76.0+1.19.4
fabric_version=0.83.0+1.19.4
libgui_version=7.1.0+1.19.4
denizencore_version=1.91.0-SNAPSHOT
snakeyaml_version=1.33
Expand Down
11 changes: 0 additions & 11 deletions src/main/java/com/denizenscript/clientizen/network/Channels.java

This file was deleted.

This file was deleted.

This file was deleted.

@@ -1,50 +1,54 @@
package com.denizenscript.clientizen.network;

import com.denizenscript.clientizen.Clientizen;
import com.denizenscript.clientizen.network.packets.ReceiveScriptsPacketIn;
import com.denizenscript.clientizen.network.packets.RunScriptPacketIn;
import com.denizenscript.clientizen.network.packets.SendConfirmationPacketOut;
import com.denizenscript.denizencore.utilities.CoreConfiguration;
import com.denizenscript.denizencore.utilities.debugging.Debug;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.util.Identifier;

public class NetworkManager {

public static void init() {
Debug.log("Initializing NetworkManager...");
ScriptNetworking.init();
registerInPacket(new ReceiveScriptsPacketIn());
registerInPacket(new RunScriptPacketIn());
}

public static void onConnect() {
debugNetwork("Sending join confirmation packet...");
send(Channels.SEND_CONFIRM, null);
send(new SendConfirmationPacketOut());
}

public static void registerInChannel(Identifier channel, ClientizenReceiver receiver) {
public static void registerInPacket(PacketIn packet) {
final Identifier channel = Clientizen.id(packet.getName());
if (!ClientPlayNetworking.registerGlobalReceiver(channel, (client, handler, buf, responseSender) -> {
debugNetwork("Received plugin message on channel " + channel);
receiver.receive(new DataDeserializer(buf));
packet.process(buf);
})) {
Debug.echoError("Tried registering plugin channel '" + channel + "', but it is already registered!");
Debug.echoError("Tried registering in packet on channel '" + channel + "', but a packet is already registered for that channel!");
}
}

public static void send(Identifier channel, DataSerializer serializer) {
public static void send(PacketOut packet) {
// TODO: re-add this check? doesn't work on ClientPlayConnectionEvents.JOIN, might be too early
// if (!ClientPlayNetworking.canSend(identifier)) {
// Debug.echoError("Cannot send to channel " + channel);
// return;
// }
debugNetwork("Sending message on channel " + channel);
ClientPlayNetworking.send(channel, serializer != null ? serializer.output : PacketByteBufs.empty());
debugNetwork("Sending message on channel " + packet.channel);
PacketByteBuf buf = PacketByteBufs.create();
packet.writeTo(buf);
ClientPlayNetworking.send(packet.channel, buf);
}

public static void debugNetwork(String debug) {
if (CoreConfiguration.debugExtraInfo) {
Debug.log(debug);
}
}

@FunctionalInterface
public interface ClientizenReceiver {
void receive(DataDeserializer message);
}
}
36 changes: 36 additions & 0 deletions src/main/java/com/denizenscript/clientizen/network/PacketIn.java
@@ -0,0 +1,36 @@
package com.denizenscript.clientizen.network;

import io.netty.buffer.ByteBuf;

import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;

public abstract class PacketIn {

public abstract void process(ByteBuf data);

public abstract String getName();

public static String readString(ByteBuf buf) {
byte[] bytes = new byte[buf.readInt()];
buf.readBytes(bytes);
return new String(bytes, StandardCharsets.UTF_8);
}

public static Map<String, String> readStringMap(ByteBuf buf) {
int size = buf.readInt();
Map<String, String> stringMap = new HashMap<>(size);
for (int i = 0; i < size; i++) {
String key = readString(buf);
String value = readString(buf);
stringMap.put(key, value);
}
return stringMap;
}

public static <T> T readNullable(ByteBuf buf, Function<ByteBuf, T> readMethod) {
return buf.readBoolean() ? readMethod.apply(buf) : null;
}
}
42 changes: 42 additions & 0 deletions src/main/java/com/denizenscript/clientizen/network/PacketOut.java
@@ -0,0 +1,42 @@
package com.denizenscript.clientizen.network;

import com.denizenscript.clientizen.Clientizen;
import io.netty.buffer.ByteBuf;
import net.minecraft.util.Identifier;

import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.function.BiConsumer;

public abstract class PacketOut {

public final Identifier channel = Clientizen.id(getName());

public void writeTo(ByteBuf buf) {} // Some packets may not send any data

public abstract String getName();

public static void writeString(ByteBuf buf, String str) {
byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
buf.writeInt(bytes.length);
buf.writeBytes(bytes);
}

public void writeStringMap(ByteBuf buf, Map<String, String> stringMap) {
buf.writeInt(stringMap.size());
for (Map.Entry<String, String> entry : stringMap.entrySet()) {
writeString(buf, entry.getKey());
writeString(buf, entry.getValue());
}
}

public <T> void writeNullable(ByteBuf buf, T object, BiConsumer<ByteBuf, T> writeMethod) {
if (object != null) {
buf.writeBoolean(true);
writeMethod.accept(buf, object);
}
else {
buf.writeBoolean(false);
}
}
}
@@ -0,0 +1,28 @@
package com.denizenscript.clientizen.network.packets;

import com.denizenscript.clientizen.network.PacketOut;
import io.netty.buffer.ByteBuf;

import java.util.Map;

public class FireEventPacketOut extends PacketOut {

public FireEventPacketOut(String id, Map<String, String> data) {
this.id = id;
this.data = data;
}

String id;
Map<String, String> data;

@Override
public void writeTo(ByteBuf buf) {
writeString(buf, id);
writeStringMap(buf, data);
}

@Override
public String getName() {
return "fire_event";
}
}
@@ -0,0 +1,29 @@
package com.denizenscript.clientizen.network.packets;

import com.denizenscript.clientizen.network.PacketIn;
import com.denizenscript.denizencore.DenizenCore;
import com.denizenscript.denizencore.scripts.ScriptHelper;
import com.denizenscript.denizencore.utilities.YamlConfiguration;
import io.netty.buffer.ByteBuf;

import java.util.Map;

public class ReceiveScriptsPacketIn extends PacketIn {

@Override
public void process(ByteBuf data) {
Map<String, String> scriptsMap = readStringMap(data);
DenizenCore.runOnMainThread(() -> {
ScriptHelper.buildAdditionalScripts.clear();
for (Map.Entry<String, String> entry : scriptsMap.entrySet()) {
ScriptHelper.buildAdditionalScripts.add(scripts -> scripts.add(YamlConfiguration.load(ScriptHelper.clearComments(entry.getKey(), entry.getValue(), true))));
}
DenizenCore.reloadScripts(true, null);
});
}

@Override
public String getName() {
return "set_scripts";
}
}

0 comments on commit ee73495

Please sign in to comment.