Skip to content

Commit 63c2d36

Browse files
committed
split add and sync object packet
1 parent 1591509 commit 63c2d36

28 files changed

Lines changed: 500 additions & 360 deletions

src/main/java/de/srendi/advancedperipherals/client/smartglasses/OverlayObjectHolder.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,17 @@ public class OverlayObjectHolder {
1313

1414
public static Map<Integer, OverlayObject> objects = new ConcurrentHashMap<>();
1515

16-
public static void addOrUpdateObject(OverlayObject object) {
16+
public static OverlayObject getObject(int id) {
17+
return objects.get(id);
18+
}
19+
20+
public static void putObject(OverlayObject object) {
1721
objects.put(object.getId(), object);
1822
}
1923

20-
public static void addOrUpdateObjects(Collection<OverlayObject> objects) {
24+
public static void putObjects(Collection<OverlayObject> objects) {
2125
for (OverlayObject overlayObject : objects) {
22-
addOrUpdateObject(overlayObject);
26+
putObject(overlayObject);
2327
}
2428
}
2529

src/main/java/de/srendi/advancedperipherals/client/smartglasses/objects/threedim/TriangleRenderer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class TriangleRenderer implements IThreeDObjectRenderer<TriangleObject> {
2424
private static final RenderType TRIANGLE_TYPE = RenderType.create(
2525
"ap_overlay_triangle",
2626
DefaultVertexFormat.POSITION_COLOR,
27-
VertexFormat.Mode.TRIANGLE_STRIP,
27+
VertexFormat.Mode.TRIANGLES,
2828
1536,
2929
false,
3030
true,

src/main/java/de/srendi/advancedperipherals/client/smartglasses/objects/twodim/ItemRenderer.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.objects.two_dim.ItemObject;
44
import net.minecraft.client.DeltaTracker;
55
import net.minecraft.client.gui.GuiGraphics;
6-
import net.minecraft.core.registries.BuiltInRegistries;
76
import net.minecraft.world.item.Item;
87
import net.minecraft.world.item.ItemStack;
98

@@ -16,10 +15,7 @@ public void renderBatch(List<ItemObject> objects, GuiGraphics gui, DeltaTracker
1615
if (obj.item == null) {
1716
continue;
1817
}
19-
Item renderItem = BuiltInRegistries.ITEM.get(obj.item);
20-
if (renderItem == null) {
21-
continue;
22-
}
18+
Item renderItem = obj.item.value();
2319
int x = Math.round(obj.x), y = Math.round(obj.y);
2420
gui.pose().pushPose();
2521
gui.pose().rotateAround(obj.getRotation(), x + 8, y + 8, 150);

src/main/java/de/srendi/advancedperipherals/common/network/APNetworking.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import de.srendi.advancedperipherals.AdvancedPeripherals;
44
import de.srendi.advancedperipherals.common.network.toclient.KeyboardMouseCapturePacket;
55
import de.srendi.advancedperipherals.common.network.toclient.OverlayModuleClientRequestPacket;
6+
import de.srendi.advancedperipherals.common.network.toclient.RenderableObjectAddPacket;
7+
import de.srendi.advancedperipherals.common.network.toclient.RenderableObjectBulkAddPacket;
68
import de.srendi.advancedperipherals.common.network.toclient.RenderableObjectBulkSyncPacket;
79
import de.srendi.advancedperipherals.common.network.toclient.RenderableObjectClearPacket;
810
import de.srendi.advancedperipherals.common.network.toclient.RenderableObjectDeletePacket;
@@ -32,6 +34,8 @@ public class APNetworking {
3234
private static void init(PayloadRegistrar registrar) {
3335
registrar.playToClient(KeyboardMouseCapturePacket.TYPE, makeReader(KeyboardMouseCapturePacket::new), KeyboardMouseCapturePacket::handle);
3436
registrar.playToClient(OverlayModuleClientRequestPacket.TYPE, makeReader(OverlayModuleClientRequestPacket::new), OverlayModuleClientRequestPacket::handle);
37+
registrar.playToClient(RenderableObjectAddPacket.TYPE, makeReader(RenderableObjectAddPacket::new), RenderableObjectAddPacket::handle);
38+
registrar.playToClient(RenderableObjectBulkAddPacket.TYPE, makeReader(RenderableObjectBulkAddPacket::new), RenderableObjectBulkAddPacket::handle);
3539
registrar.playToClient(RenderableObjectBulkSyncPacket.TYPE, makeReader(RenderableObjectBulkSyncPacket::new), RenderableObjectBulkSyncPacket::handle);
3640
registrar.playToClient(RenderableObjectClearPacket.TYPE, makeReader(RenderableObjectClearPacket::new), RenderableObjectClearPacket::handle);
3741
registrar.playToClient(RenderableObjectDeletePacket.TYPE, makeReader(RenderableObjectDeletePacket::new), RenderableObjectDeletePacket::handle);
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package de.srendi.advancedperipherals.common.network.toclient;
2+
3+
import de.srendi.advancedperipherals.AdvancedPeripherals;
4+
import de.srendi.advancedperipherals.client.smartglasses.OverlayObjectHolder;
5+
import de.srendi.advancedperipherals.common.network.IAPPacket;
6+
import de.srendi.advancedperipherals.common.setup.APRegistries;
7+
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.OverlayObject;
8+
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.OverlayObjectType;
9+
import net.minecraft.core.Registry;
10+
import net.minecraft.network.RegistryFriendlyByteBuf;
11+
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
12+
import net.neoforged.neoforge.network.handling.IPayloadContext;
13+
14+
import java.util.UUID;
15+
16+
public class RenderableObjectAddPacket implements IAPPacket {
17+
18+
public static final CustomPacketPayload.Type<RenderableObjectAddPacket> TYPE = new Type<>(AdvancedPeripherals.getRL("renderable_object_add"));
19+
20+
private final UUID player;
21+
private final OverlayObject object;
22+
23+
public RenderableObjectAddPacket(UUID player, OverlayObject object) {
24+
this.player = player;
25+
this.object = object;
26+
}
27+
28+
public RenderableObjectAddPacket(RegistryFriendlyByteBuf buffer) {
29+
Registry<OverlayObjectType<?>> registry = buffer.registryAccess().registryOrThrow(APRegistries.OVERLAY_OBJECTS);
30+
this.player = buffer.readUUID();
31+
int typeId = buffer.readVarInt();
32+
this.object = registry.byIdOrThrow(typeId).createClient(this.player);
33+
this.object.decode(buffer);
34+
}
35+
36+
@Override
37+
public void handle(IPayloadContext context) {
38+
OverlayObjectHolder.putObject(this.object);
39+
}
40+
41+
@Override
42+
public void write(RegistryFriendlyByteBuf buffer) {
43+
Registry<OverlayObjectType<?>> registry = buffer.registryAccess().registryOrThrow(APRegistries.OVERLAY_OBJECTS);
44+
buffer.writeUUID(this.player);
45+
buffer.writeVarInt(registry.getIdOrThrow(this.object.getType()));
46+
object.encode(buffer);
47+
}
48+
49+
@Override
50+
public Type<? extends CustomPacketPayload> type() {
51+
return TYPE;
52+
}
53+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package de.srendi.advancedperipherals.common.network.toclient;
2+
3+
import de.srendi.advancedperipherals.AdvancedPeripherals;
4+
import de.srendi.advancedperipherals.client.smartglasses.OverlayObjectHolder;
5+
import de.srendi.advancedperipherals.common.network.IAPPacket;
6+
import de.srendi.advancedperipherals.common.setup.APRegistries;
7+
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.OverlayObject;
8+
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.OverlayObjectType;
9+
import net.minecraft.core.Registry;
10+
import net.minecraft.network.RegistryFriendlyByteBuf;
11+
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
12+
import net.neoforged.neoforge.network.handling.IPayloadContext;
13+
14+
import java.util.ArrayList;
15+
import java.util.Collection;
16+
import java.util.List;
17+
import java.util.UUID;
18+
19+
public class RenderableObjectBulkAddPacket implements IAPPacket {
20+
21+
public static final Type<RenderableObjectBulkAddPacket> TYPE = new Type<>(AdvancedPeripherals.getRL("renderable_object_bulk_add"));
22+
23+
private final UUID player;
24+
private final Collection<OverlayObject> objects;
25+
26+
public RenderableObjectBulkAddPacket(UUID player, Collection<OverlayObject> objects) {
27+
this.player = player;
28+
this.objects = objects;
29+
}
30+
31+
public RenderableObjectBulkAddPacket(RegistryFriendlyByteBuf buffer) {
32+
Registry<OverlayObjectType<?>> registry = buffer.registryAccess().registryOrThrow(APRegistries.OVERLAY_OBJECTS);
33+
this.player = buffer.readUUID();
34+
int size = buffer.readVarInt();
35+
List<OverlayObject> objects = new ArrayList<>();
36+
for (int i = 0; i < size; i++) {
37+
int typeId = buffer.readVarInt();
38+
OverlayObject object = registry.byIdOrThrow(typeId).createClient(this.player);
39+
object.decode(buffer);
40+
objects.add(object);
41+
}
42+
this.objects = objects;
43+
}
44+
45+
@Override
46+
public void handle(IPayloadContext context) {
47+
OverlayObjectHolder.putObjects(this.objects);
48+
}
49+
50+
@Override
51+
public void write(RegistryFriendlyByteBuf buffer) {
52+
Registry<OverlayObjectType<?>> registry = buffer.registryAccess().registryOrThrow(APRegistries.OVERLAY_OBJECTS);
53+
buffer.writeUUID(this.player);
54+
buffer.writeVarInt(this.objects.size());
55+
for (OverlayObject object : this.objects) {
56+
buffer.writeVarInt(registry.getIdOrThrow(object.getType()));
57+
object.encode(buffer);
58+
}
59+
}
60+
61+
@Override
62+
public Type<? extends CustomPacketPayload> type() {
63+
return TYPE;
64+
}
65+
}

src/main/java/de/srendi/advancedperipherals/common/network/toclient/RenderableObjectBulkSyncPacket.java

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,56 +6,69 @@
66
import de.srendi.advancedperipherals.common.setup.APRegistries;
77
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.OverlayObject;
88
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.OverlayObjectType;
9+
import io.netty.buffer.Unpooled;
910
import net.minecraft.core.Registry;
1011
import net.minecraft.network.RegistryFriendlyByteBuf;
1112
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
1213
import net.neoforged.neoforge.network.handling.IPayloadContext;
14+
import net.neoforged.neoforge.server.ServerLifecycleHooks;
15+
import org.apache.logging.log4j.Level;
1316

14-
import java.util.ArrayList;
1517
import java.util.Collection;
16-
import java.util.List;
1718
import java.util.UUID;
1819

1920
public class RenderableObjectBulkSyncPacket implements IAPPacket {
2021

2122
public static final Type<RenderableObjectBulkSyncPacket> TYPE = new Type<>(AdvancedPeripherals.getRL("renderable_object_bulk_sync"));
2223

2324
private final UUID player;
24-
private final Collection<OverlayObject> objects;
25+
private final int count;
26+
private final RegistryFriendlyByteBuf data;
2527

2628
public RenderableObjectBulkSyncPacket(UUID player, Collection<OverlayObject> objects) {
2729
this.player = player;
28-
this.objects = objects;
30+
this.count = objects.size();
31+
RegistryFriendlyByteBuf buf = new RegistryFriendlyByteBuf(Unpooled.buffer(), ServerLifecycleHooks.getCurrentServer().registryAccess());
32+
for (OverlayObject object : objects) {
33+
buf.writeVarInt(object.getId());
34+
object.encodeUpdated(buf);
35+
}
36+
this.data = buf;
2937
}
3038

3139
public RenderableObjectBulkSyncPacket(RegistryFriendlyByteBuf buffer) {
3240
Registry<OverlayObjectType<?>> registry = buffer.registryAccess().registryOrThrow(APRegistries.OVERLAY_OBJECTS);
3341
this.player = buffer.readUUID();
42+
this.count = buffer.readVarInt();
3443
int size = buffer.readVarInt();
35-
List<OverlayObject> objects = new ArrayList<>();
36-
for (int i = 0; i < size; i++) {
37-
int typeId = buffer.readVarInt();
38-
OverlayObject object = registry.byIdOrThrow(typeId).createClient(this.player);
39-
object.decode(buffer);
40-
objects.add(object);
41-
}
42-
this.objects = objects;
44+
this.data = new RegistryFriendlyByteBuf(Unpooled.buffer(size, size), buffer.registryAccess());
45+
buffer.readBytes(this.data, size);
4346
}
4447

4548
@Override
4649
public void handle(IPayloadContext context) {
47-
OverlayObjectHolder.addOrUpdateObjects(this.objects);
50+
context.enqueueWork(() -> {
51+
this.data.readerIndex(0);
52+
for (int i = 0; i < this.count; i++) {
53+
int id = this.data.readVarInt();
54+
OverlayObject object = OverlayObjectHolder.getObject(id);
55+
if (object == null) {
56+
AdvancedPeripherals.debug(Level.ERROR, "Received bulk update packet for unknown overlay object {}", id);
57+
return;
58+
}
59+
object.decodeUpdated(this.data);
60+
}
61+
});
4862
}
4963

5064
@Override
5165
public void write(RegistryFriendlyByteBuf buffer) {
5266
Registry<OverlayObjectType<?>> registry = buffer.registryAccess().registryOrThrow(APRegistries.OVERLAY_OBJECTS);
5367
buffer.writeUUID(this.player);
54-
buffer.writeVarInt(this.objects.size());
55-
for (OverlayObject object : this.objects) {
56-
buffer.writeVarInt(registry.getIdOrThrow(object.getType()));
57-
object.encode(buffer);
58-
}
68+
buffer.writeVarInt(this.count);
69+
this.data.readerIndex(0);
70+
buffer.writeVarInt(this.data.readableBytes());
71+
buffer.writeBytes(this.data);
5972
}
6073

6174
@Override

src/main/java/de/srendi/advancedperipherals/common/network/toclient/RenderableObjectSyncPacket.java

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
import de.srendi.advancedperipherals.AdvancedPeripherals;
44
import de.srendi.advancedperipherals.client.smartglasses.OverlayObjectHolder;
55
import de.srendi.advancedperipherals.common.network.IAPPacket;
6-
import de.srendi.advancedperipherals.common.setup.APRegistries;
76
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.OverlayObject;
8-
import de.srendi.advancedperipherals.common.smartglasses.modules.overlay.OverlayObjectType;
9-
import net.minecraft.core.Registry;
7+
import io.netty.buffer.Unpooled;
108
import net.minecraft.network.RegistryFriendlyByteBuf;
119
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
1210
import net.neoforged.neoforge.network.handling.IPayloadContext;
11+
import net.neoforged.neoforge.server.ServerLifecycleHooks;
12+
import org.apache.logging.log4j.Level;
1313

1414
import java.util.UUID;
1515

@@ -18,32 +18,45 @@ public class RenderableObjectSyncPacket implements IAPPacket {
1818
public static final CustomPacketPayload.Type<RenderableObjectSyncPacket> TYPE = new Type<>(AdvancedPeripherals.getRL("renderable_object_sync"));
1919

2020
private final UUID player;
21-
private final OverlayObject object;
21+
private final int id;
22+
private final RegistryFriendlyByteBuf data;
2223

2324
public RenderableObjectSyncPacket(UUID player, OverlayObject object) {
2425
this.player = player;
25-
this.object = object;
26+
this.id = object.getId();
27+
RegistryFriendlyByteBuf buf = new RegistryFriendlyByteBuf(Unpooled.buffer(), ServerLifecycleHooks.getCurrentServer().registryAccess());
28+
object.encodeUpdated(buf);
29+
this.data = buf;
2630
}
2731

2832
public RenderableObjectSyncPacket(RegistryFriendlyByteBuf buffer) {
29-
Registry<OverlayObjectType<?>> registry = buffer.registryAccess().registryOrThrow(APRegistries.OVERLAY_OBJECTS);
3033
this.player = buffer.readUUID();
31-
int typeId = buffer.readVarInt();
32-
this.object = registry.byIdOrThrow(typeId).createClient(this.player);
33-
this.object.decode(buffer);
34+
this.id = buffer.readVarInt();
35+
int size = buffer.readVarInt();
36+
this.data = new RegistryFriendlyByteBuf(Unpooled.buffer(size, size), buffer.registryAccess());
37+
buffer.readBytes(this.data, size);
3438
}
3539

3640
@Override
3741
public void handle(IPayloadContext context) {
38-
OverlayObjectHolder.addOrUpdateObject(this.object);
42+
OverlayObject object = OverlayObjectHolder.getObject(this.id);
43+
if (object == null) {
44+
AdvancedPeripherals.debug(Level.ERROR, "Received update packet for unknown overlay object {}", this.id);
45+
return;
46+
}
47+
context.enqueueWork(() -> {
48+
this.data.readerIndex(0);
49+
object.decodeUpdated(this.data);
50+
});
3951
}
4052

4153
@Override
4254
public void write(RegistryFriendlyByteBuf buffer) {
43-
Registry<OverlayObjectType<?>> registry = buffer.registryAccess().registryOrThrow(APRegistries.OVERLAY_OBJECTS);
4455
buffer.writeUUID(this.player);
45-
buffer.writeVarInt(registry.getIdOrThrow(this.object.getType()));
46-
object.encode(buffer);
56+
buffer.writeVarInt(this.id);
57+
this.data.readerIndex(0);
58+
buffer.writeVarInt(this.data.readableBytes());
59+
buffer.writeBytes(this.data);
4760
}
4861

4962
@Override

src/main/java/de/srendi/advancedperipherals/common/smartglasses/modules/overlay/OverlayGlassesFunctions.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,11 +171,11 @@ public final int update() {
171171

172172
@LuaFunction
173173
public final boolean autoUpdate() {
174-
return overlayModule.autoUpdate;
174+
return overlayModule.getAutoUpdate();
175175
}
176176

177177
@LuaFunction
178178
public final void setAutoUpdate(boolean autoUpdate) {
179-
overlayModule.autoUpdate = autoUpdate;
179+
overlayModule.setAutoUpdate(autoUpdate);
180180
}
181181
}

0 commit comments

Comments
 (0)