Fix a ton of fabric impl bugs

This commit is contained in:
Zoe Gidiere 2024-10-10 16:49:40 -06:00
parent c78a984a11
commit 3033fbbf29
5 changed files with 66 additions and 29 deletions

View File

@ -1,8 +1,6 @@
package com.dfsek.terra.mod.util; package com.dfsek.terra.mod.util;
import com.google.common.collect.ImmutableMap;
import net.minecraft.registry.Registry; import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.registry.tag.TagGroupLoader.RegistryTags; import net.minecraft.registry.tag.TagGroupLoader.RegistryTags;
import net.minecraft.registry.tag.TagKey; import net.minecraft.registry.tag.TagKey;
@ -16,6 +14,7 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
public final class TagUtil { public final class TagUtil {
@ -26,10 +25,9 @@ public final class TagUtil {
} }
private static <T> Map<TagKey<T>, List<RegistryEntry<T>>> tagsToMutableMap(Registry<T> registry) { private static <T> Map<TagKey<T>, List<RegistryEntry<T>>> tagsToMutableMap(Registry<T> registry) {
return registry return registry.streamTags().collect(HashMap::new,
.streamTags().collect(HashMap::new, (map, tag) -> map.put(tag.getTag(), tag.stream().collect(Collectors.toList())),
(map, tag) -> map.put(tag.getTag(), new ArrayList<>()), HashMap::putAll);
HashMap::putAll);
} }
public static void registerWorldPresetTags(Registry<WorldPreset> registry) { public static void registerWorldPresetTags(Registry<WorldPreset> registry) {
@ -47,6 +45,13 @@ public final class TagUtil {
() -> logger.error("Preset {} does not exist!", id))); () -> logger.error("Preset {} does not exist!", id)));
registry.startTagReload(new RegistryTags<>(registry.getKey(), collect)).apply(); registry.startTagReload(new RegistryTags<>(registry.getKey(), collect)).apply();
if(logger.isDebugEnabled()) {
registry.streamEntries()
.map(e -> e.registryKey().getValue() + ": " +
e.streamTags().reduce("", (s, t) -> t.id() + ", " + s, String::concat))
.forEach(logger::debug);
}
} }
public static void registerBiomeTags(Registry<Biome> registry) { public static void registerBiomeTags(Registry<Biome> registry) {

View File

@ -0,0 +1,27 @@
package com.dfsek.terra.lifecycle.mixin.lifecycle;
import com.dfsek.terra.api.Platform;
import com.dfsek.terra.mod.CommonPlatform;
import com.dfsek.terra.mod.ModPlatform;
import net.minecraft.client.gui.screen.world.CreateWorldScreen;
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.CallbackInfo;
import static com.dfsek.terra.lifecycle.util.LifecycleUtil.initialized;
@Mixin(CreateWorldScreen.class)
public class CreateWorldScreenMixin {
@Inject(method = "onCloseScreen()V", at = @At("HEAD"))
public void onClose(CallbackInfo ci) {
ModPlatform platform = CommonPlatform.get();
platform.getRawConfigRegistry().clear();
initialized = false;
}
}

View File

@ -1,5 +1,8 @@
package com.dfsek.terra.lifecycle.mixin.lifecycle; package com.dfsek.terra.lifecycle.mixin.lifecycle;
import com.dfsek.terra.mod.CommonPlatform;
import com.dfsek.terra.mod.ModPlatform;
import com.mojang.datafixers.DataFixer; import com.mojang.datafixers.DataFixer;
import net.minecraft.resource.ResourcePackManager; import net.minecraft.resource.ResourcePackManager;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
@ -34,6 +37,8 @@ public class MinecraftServerMixin {
@Inject(method = "shutdown()V", at = @At("RETURN")) @Inject(method = "shutdown()V", at = @At("RETURN"))
private void injectShutdown(CallbackInfo ci) { private void injectShutdown(CallbackInfo ci) {
ModPlatform platform = CommonPlatform.get();
platform.getRawConfigRegistry().clear();
initialized = false; initialized = false;
} }
} }

View File

@ -39,8 +39,7 @@ public class RegistryLoaderMixin {
private static Logger LOGGER; private static Logger LOGGER;
@Redirect( @Redirect(
method = "load(Lnet/minecraft/registry/RegistryLoader$RegistryLoadable;Lnet/minecraft/registry/DynamicRegistryManager;" + method = "load(Lnet/minecraft/registry/RegistryLoader$RegistryLoadable;Ljava/util/List;Ljava/util/List;)Lnet/minecraft/registry/DynamicRegistryManager$Immutable;",
"Ljava/util/List;)Lnet/minecraft/registry/DynamicRegistryManager$Immutable;",
at = @At( at = @At(
value = "INVOKE", value = "INVOKE",
target = "Ljava/util/List;forEach(Ljava/util/function/Consumer;)V", target = "Ljava/util/List;forEach(Ljava/util/function/Consumer;)V",

View File

@ -1,23 +1,24 @@
{ {
"required": true, "required": true,
"minVersion": "0.8", "minVersion": "0.8",
"package": "com.dfsek.terra.lifecycle.mixin", "package": "com.dfsek.terra.lifecycle.mixin",
"compatibilityLevel": "JAVA_21", "compatibilityLevel": "JAVA_21",
"mixins": [ "mixins": [
"NoiseConfigMixin", "NoiseConfigMixin",
"RegistryEntryReferenceInvoker", "RegistryEntryReferenceInvoker",
"RegistryMixin", "RegistryMixin",
"SimpleRegistryMixin", "SimpleRegistryMixin",
"lifecycle.MinecraftServerMixin", "lifecycle.MinecraftServerMixin",
"lifecycle.RegistryLoaderMixin", "lifecycle.RegistryLoaderMixin",
"lifecycle.SaveLoadingMixin" "lifecycle.SaveLoadingMixin"
], ],
"client": [ "client": [
], "lifecycle.CreateWorldScreenMixin"
"server": [ ],
], "server": [
"injectors": { ],
"defaultRequire": 1 "injectors": {
}, "defaultRequire": 1
"refmap": "terra.lifecycle.refmap.json" },
"refmap": "terra.lifecycle.refmap.json"
} }