Backport https://github.com/MinecraftForge/MinecraftForge/pull/8959 to 1.18
This commit is contained in:
parent
829994f5b5
commit
bd351197b2
|
|
@ -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;
|
||||
|
|
@ -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();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user