This commit is contained in:
embeddedt 2023-07-10 20:23:11 -04:00
parent 829994f5b5
commit bd351197b2
No known key found for this signature in database
GPG Key ID: A69433EC199B5613
3 changed files with 56 additions and 1 deletions

View File

@ -30,4 +30,5 @@ accessible field net/minecraft/server/MinecraftServer resources Lnet/minecraft/s
accessible class net/minecraft/server/MinecraftServer$ReloadableResources
accessible method net/minecraft/client/gui/screens/Screen addRenderableWidget (Lnet/minecraft/client/gui/components/events/GuiEventListener;)Lnet/minecraft/client/gui/components/events/GuiEventListener;
accessible field net/minecraft/client/KeyMapping ALL Ljava/util/Map;
accessible field net/minecraft/server/packs/resources/MultiPackResourceManager namespacedManagers Ljava/util/Map;
accessible field net/minecraft/server/packs/resources/MultiPackResourceManager namespacedManagers Ljava/util/Map;
accessible field net/minecraft/resources/RegistryOps registryAccess Lnet/minecraft/core/RegistryAccess;

View File

@ -0,0 +1,27 @@
package org.embeddedt.modernfix.forge.mixin.bugfix.removed_dimensions;
import com.mojang.datafixers.DataFixer;
import com.mojang.datafixers.util.Pair;
import com.mojang.serialization.Dynamic;
import com.mojang.serialization.DynamicOps;
import com.mojang.serialization.Lifecycle;
import net.minecraft.resources.RegistryOps;
import net.minecraft.world.level.levelgen.WorldGenSettings;
import net.minecraft.world.level.storage.LevelStorageSource;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(LevelStorageSource.class)
public class LevelStorageSourceMixin {
@Inject(method = "readWorldGenSettings", at = @At(value = "INVOKE", target = "Lcom/mojang/serialization/Codec;parse(Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/DataResult;"))
private static <T> void freezeRegistriesBeforeParsing(Dynamic<T> nbt, DataFixer fixer, int version, CallbackInfoReturnable<Pair<WorldGenSettings, Lifecycle>> cir) {
DynamicOps<T> var10 = nbt.getOps();
if (var10 instanceof RegistryOps<T> ops) {
ops.registryAccess.ownedRegistries().forEach((e) -> {
e.value().freeze();
});
}
}
}

View File

@ -0,0 +1,27 @@
package org.embeddedt.modernfix.forge.mixin.bugfix.removed_dimensions;
import com.google.gson.JsonElement;
import com.mojang.serialization.Codec;
import com.mojang.serialization.DataResult;
import com.mojang.serialization.DynamicOps;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
import net.minecraft.core.WritableRegistry;
import net.minecraft.resources.RegistryLoader;
import net.minecraft.resources.ResourceKey;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(RegistryLoader.class)
public class RegistryLoaderMixin {
@Inject(method = "overrideElementFromResources", at = @At(value = "INVOKE", target = "Lnet/minecraft/core/WritableRegistry;getOrCreateHolder(Lnet/minecraft/resources/ResourceKey;)Lnet/minecraft/core/Holder;", ordinal = 0), cancellable = true)
private <E> void handleErroringHolder(WritableRegistry<E> arg, ResourceKey<? extends Registry<E>> arg2, Codec<E> codec, ResourceKey<E> arg3, DynamicOps<JsonElement> dynamicOps, CallbackInfoReturnable<DataResult<Holder<E>>> cir) {
try {
arg.getOrCreateHolder(arg3);
} catch(RuntimeException e) {
cir.setReturnValue(DataResult.error("Missing holder for " + arg3));
}
}
}