Skip to content

Commit f79cb09

Browse files
committed
small bugfix
1 parent d8d29a6 commit f79cb09

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

src/main/java/com/gregtechceu/gtceu/syncsystem/SyncDataHolder.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.jetbrains.annotations.NotNull;
1111

1212
import java.lang.invoke.MethodHandle;
13+
import java.lang.invoke.WrongMethodTypeException;
1314
import java.util.*;
1415

1516
/**
@@ -70,7 +71,7 @@ public CompoundTag serializeNBT(boolean writeClientFields, boolean fullSync) {
7071
Object result = field.nbtSaveModifiers[0].invoke(holder, new CompoundTag(), writeClientFields);
7172
tag.put(field.nbtSaveKey, (CompoundTag) result);
7273
} catch (Throwable e) {
73-
GTCEu.LOGGER.error("Error while invoking nbtSaveModifier for field {}", field.fieldName);
74+
GTCEu.LOGGER.error("Sync: Error while invoking nbtSaveModifier for field {}", field.fieldName);
7475
GTCEu.LOGGER.error(e.getMessage());
7576
return new CompoundTag();
7677
}
@@ -83,7 +84,7 @@ public CompoundTag serializeNBT(boolean writeClientFields, boolean fullSync) {
8384
try {
8485
nbtValue = (Tag) modifier.invoke(holder, nbtValue, writeClientFields);
8586
} catch (Throwable e) {
86-
GTCEu.LOGGER.error("Error while invoking nbtSaveModifier for field {}", field.fieldName);
87+
GTCEu.LOGGER.error("Sync: Error while invoking nbtSaveModifier for field {}", field.fieldName);
8788
GTCEu.LOGGER.error(e.getMessage());
8889
return new CompoundTag();
8990
}
@@ -106,7 +107,7 @@ public void deserializeNBT(CompoundTag tag, boolean readingClientFields) {
106107
try {
107108
field.nbtLoadModifiers[0].invoke(holder, tag, readingClientFields);
108109
} catch (Throwable e) {
109-
GTCEu.LOGGER.error("Error while invoking nbtLoadModifier for field {}", field.fieldName);
110+
GTCEu.LOGGER.error("Sync: Error while invoking nbtLoadModifier for field {}", field.fieldName);
110111
GTCEu.LOGGER.error(e.getMessage());
111112
return;
112113
}
@@ -120,7 +121,7 @@ public void deserializeNBT(CompoundTag tag, boolean readingClientFields) {
120121
try {
121122
modifier.invoke(holder, savedValue, readingClientFields);
122123
} catch (Throwable e) {
123-
GTCEu.LOGGER.error("Error while invoking nbtLoadModifier for field {}", field.fieldName);
124+
GTCEu.LOGGER.error("Sync: Error while invoking nbtLoadModifier for field {}", field.fieldName);
124125
GTCEu.LOGGER.error(e.getMessage());
125126
return;
126127
}
@@ -129,9 +130,12 @@ public void deserializeNBT(CompoundTag tag, boolean readingClientFields) {
129130
if (readingClientFields) {
130131
try {
131132
for (MethodHandle changeListenerHandle : field.changeListenerHandles) {
132-
changeListenerHandle.invoke();
133+
changeListenerHandle.invoke(holder);
133134
}
134135
} catch (Throwable e) {
136+
if (e instanceof WrongMethodTypeException) {
137+
throw new IllegalArgumentException("Invalid method signature for change listener for field %s %s".formatted(field.fieldName, holder.getClass().getCanonicalName()));
138+
}
135139
GTCEu.LOGGER.error("Sync: Error while invoking change listener for field {}", field.fieldName);
136140
GTCEu.LOGGER.error(e);
137141
}
@@ -201,13 +205,13 @@ private static void deserialiseField(ISyncManaged holder, ClassSyncData.FieldSyn
201205
field.handle.set(holder, transformer.deserializeNBT(savedValue, holder, null));
202206
}
203207
} catch (UnsupportedOperationException e) {
204-
GTCEu.LOGGER.error("Sync error: failed to perform VarHandle set: unsupported op {} {}",
208+
GTCEu.LOGGER.error("Sync: failed to perform VarHandle set: unsupported op {} {}",
205209
field.fieldName, field.handle.toString());
206210
}
207211
}
208212
} else if (field.isComplex && savedValue instanceof CompoundTag compound) {
209213
if (currentVal == null) {
210-
GTCEu.LOGGER.error("Sync error: ISyncManaged field was null, cannot instantiate {}",
214+
GTCEu.LOGGER.error("Sync: ISyncManaged field was null, cannot instantiate {}",
211215
field.fieldName);
212216
return;
213217
}

src/main/java/com/gregtechceu/gtceu/syncsystem/data_transformers/collections/ObjectArrayTransformer.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import net.minecraft.nbt.ListTag;
77
import net.minecraft.nbt.Tag;
88

9+
import java.util.Arrays;
10+
911
public class ObjectArrayTransformer<T> implements IValueTransformer<T[]> {
1012

1113
private final IValueTransformer<T> elementTransformer;
@@ -32,6 +34,10 @@ public Tag serializeNBT(T[] value, ISyncManaged holder) {
3234
public T[] deserializeNBT(Tag tag, ISyncManaged holder, T[] currentVal) {
3335
if (!(tag instanceof ListTag listTag)) throw new IllegalArgumentException("Expected ListTag");
3436

37+
if (listTag.size() != currentVal.length) {
38+
currentVal = Arrays.copyOf(currentVal, listTag.size());
39+
}
40+
3541
for (int i = 0; i < listTag.size(); i++) {
3642
if (elementTransformer.mustProvideObject())
3743
elementTransformer.deserializeNBT(listTag.get(i), null, currentVal[i]);

0 commit comments

Comments
 (0)