11package com .cleanroommc .modularui .value .sync ;
22
3+ import com .cleanroommc .modularui .utils .ICopy ;
34import com .cleanroommc .modularui .utils .serialization .IByteBufAdapter ;
45import com .cleanroommc .modularui .utils .serialization .IByteBufDeserializer ;
56import com .cleanroommc .modularui .utils .serialization .IByteBufSerializer ;
@@ -22,43 +23,74 @@ public class GenericSyncValue<T> extends ValueSyncHandler<T> {
2223 private final IByteBufDeserializer <T > deserializer ;
2324 private final IByteBufSerializer <T > serializer ;
2425 private final IEquals <T > equals ;
26+ private final ICopy <T > copy ;
2527 private T cache ;
2628
2729 public GenericSyncValue (@ NotNull Supplier <T > getter ,
2830 @ Nullable Consumer <T > setter ,
2931 @ NotNull IByteBufAdapter <T > adapter ) {
30- this (getter , setter , adapter , adapter , adapter );
32+ this (getter , setter , adapter , adapter , adapter , null );
33+ }
34+
35+ public GenericSyncValue (@ NotNull Supplier <T > getter ,
36+ @ Nullable Consumer <T > setter ,
37+ @ NotNull IByteBufAdapter <T > adapter ,
38+ @ Nullable ICopy <T > copy ) {
39+ this (getter , setter , adapter , adapter , adapter , copy );
3140 }
3241
3342 public GenericSyncValue (@ NotNull Supplier <T > getter ,
3443 @ Nullable Consumer <T > setter ,
3544 @ NotNull IByteBufDeserializer <T > deserializer ,
3645 @ NotNull IByteBufSerializer <T > serializer ) {
37- this (getter , setter , deserializer , serializer , null );
46+ this (getter , setter , deserializer , serializer , null , null );
47+ }
48+
49+ public GenericSyncValue (@ NotNull Supplier <T > getter ,
50+ @ Nullable Consumer <T > setter ,
51+ @ NotNull IByteBufDeserializer <T > deserializer ,
52+ @ NotNull IByteBufSerializer <T > serializer ,
53+ @ Nullable ICopy <T > copy ) {
54+ this (getter , setter , deserializer , serializer , null , copy );
3855 }
3956
4057 public GenericSyncValue (@ NotNull Supplier <T > getter ,
4158 @ NotNull IByteBufAdapter <T > adapter ) {
42- this (getter , null , adapter , adapter , adapter );
59+ this (getter , null , adapter , adapter , adapter , null );
60+ }
61+
62+ public GenericSyncValue (@ NotNull Supplier <T > getter ,
63+ @ NotNull IByteBufAdapter <T > adapter ,
64+ @ Nullable ICopy <T > copy ) {
65+ this (getter , null , adapter , adapter , adapter , copy );
4366 }
4467
4568 public GenericSyncValue (@ NotNull Supplier <T > getter ,
4669 @ NotNull IByteBufDeserializer <T > deserializer ,
4770 @ NotNull IByteBufSerializer <T > serializer ) {
48- this (getter , null , deserializer , serializer , null );
71+ this (getter , null , deserializer , serializer , null , null );
72+ }
73+
74+ public GenericSyncValue (@ NotNull Supplier <T > getter ,
75+ @ NotNull IByteBufDeserializer <T > deserializer ,
76+ @ NotNull IByteBufSerializer <T > serializer ,
77+ @ Nullable ICopy <T > copy ) {
78+ this (getter , null , deserializer , serializer , null , copy );
4979 }
5080
5181 public GenericSyncValue (@ NotNull Supplier <T > getter ,
5282 @ Nullable Consumer <T > setter ,
5383 @ NotNull IByteBufDeserializer <T > deserializer ,
5484 @ NotNull IByteBufSerializer <T > serializer ,
55- @ Nullable IEquals <T > equals ) {
85+ @ Nullable IEquals <T > equals ,
86+ @ Nullable ICopy <T > copy ) {
5687 this .getter = Objects .requireNonNull (getter );
5788 this .cache = getter .get ();
5889 this .setter = setter ;
5990 this .deserializer = Objects .requireNonNull (deserializer );
6091 this .serializer = Objects .requireNonNull (serializer );
6192 this .equals = equals == null ? Objects ::equals : IEquals .wrapNullSafe (equals );
93+ this .copy = copy == null ? ICopy .ofSerializer (serializer , deserializer ) : copy ;
6294 }
6395
6496 @ Override
@@ -68,7 +100,7 @@ public T getValue() {
68100
69101 @ Override
70102 public void setValue (T value , boolean setSource , boolean sync ) {
71- this .cache = value ;
103+ this .cache = this . copy . createDeepCopy ( value ) ;
72104 if (setSource && this .setter != null ) {
73105 this .setter .accept (value );
74106 }
0 commit comments