forked from FabricMC/fabric
ensure deterministic registry population order, fixes blockstate ID desync
This commit is contained in:
parent
5c23a10db1
commit
9d17f13714
2 changed files with 16 additions and 7 deletions
|
@ -35,6 +35,10 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Mixin(IdRegistry.class)
|
@Mixin(IdRegistry.class)
|
||||||
public abstract class MixinIdRegistry<T> implements RemappableRegistry, ListenableRegistry<T>, RegistryListener<T> {
|
public abstract class MixinIdRegistry<T> implements RemappableRegistry, ListenableRegistry<T>, RegistryListener<T> {
|
||||||
@Shadow
|
@Shadow
|
||||||
|
@ -135,7 +139,10 @@ public abstract class MixinIdRegistry<T> implements RemappableRegistry, Listenab
|
||||||
idStore.clear();
|
idStore.clear();
|
||||||
nextId = 0;
|
nextId = 0;
|
||||||
|
|
||||||
for (Identifier identifier : idMap.keySet()) {
|
List<Identifier> idsInOrder = new ArrayList<>(idMap.keySet());
|
||||||
|
idsInOrder.sort(Comparator.comparingInt(idMap::getInt));
|
||||||
|
|
||||||
|
for (Identifier identifier : idsInOrder) {
|
||||||
int id = idMap.getInt(identifier);
|
int id = idMap.getInt(identifier);
|
||||||
T object = objectMap.get(identifier);
|
T object = objectMap.get(identifier);
|
||||||
if (object == null) {
|
if (object == null) {
|
||||||
|
|
|
@ -51,12 +51,14 @@ public final class RegistrySyncManager {
|
||||||
public static void receivePacket(PacketContext context, PacketByteBuf buf) {
|
public static void receivePacket(PacketContext context, PacketByteBuf buf) {
|
||||||
CompoundTag compound = buf.readCompoundTag();
|
CompoundTag compound = buf.readCompoundTag();
|
||||||
|
|
||||||
|
context.getTaskQueue().execute(() -> {
|
||||||
try {
|
try {
|
||||||
apply(compound, false);
|
apply(compound, false);
|
||||||
} catch (RemapException e) {
|
} catch (RemapException e) {
|
||||||
// TODO: log error properly
|
// TODO: log error properly
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CompoundTag toTag(boolean isClientSync) {
|
public static CompoundTag toTag(boolean isClientSync) {
|
||||||
|
|
Loading…
Reference in a new issue