package com.xfestudio.mydimensionlord.platform;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.RegistryAccess;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.server.MinecraftServer;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.saveddata.SavedData;
import net.minecraft.world.level.storage.DimensionDataStorage;
import net.minecraftforge.server.ServerLifecycleHooks;
import java.util.function.Function;
import java.util.function.Supplier;
public final class PlatformData {
private PlatformData() {}
public static HolderLookup.Provider registries() {
MinecraftServer server = ServerLifecycleHooks.getCurrentServer();
return server == null ? RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY) : server.registryAccess();
}
public static HolderLookup.Provider registries(BlockEntity entity) {
return entity.getLevel() == null ? registries() : entity.getLevel().registryAccess();
}
public static CompoundTag saveStack(ItemStack stack) { return (CompoundTag) stack.saveOptional(registries()); }
public static ItemStack readStack(CompoundTag tag) { return ItemStack.parseOptional(registries(), tag); }
public static <T extends PortableSavedData> T savedData(DimensionDataStorage storage, String name,
Supplier<T> factory, Function<CompoundTag, T> loader) {
return storage.computeIfAbsent(new SavedData.Factory<>(factory, (tag, registries) -> loader.apply(tag)), name);
}
}
package com.xfestudio.mydimensionlord.platform;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.RegistryAccess;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.server.MinecraftServer;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.saveddata.SavedData;
import net.minecraft.world.level.storage.DimensionDataStorage;
import net.minecraftforge.server.ServerLifecycleHooks;
import java.util.function.Function;
import java.util.function.Supplier;
public final class PlatformData {
private PlatformData() {}
public static HolderLookup.Provider registries() {
MinecraftServer server = ServerLifecycleHooks.getCurrentServer();
return server == null ? RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY) : server.registryAccess();
}
public static HolderLookup.Provider registries(BlockEntity entity) {
return entity.getLevel() == null ? registries() : entity.getLevel().registryAccess();
}
public static CompoundTag saveStack(ItemStack stack) { return (CompoundTag) stack.saveOptional(registries()); }
public static ItemStack readStack(CompoundTag tag) { return ItemStack.parseOptional(registries(), tag); }
public static <T extends PortableSavedData> T savedData(DimensionDataStorage storage, String name,
Supplier<T> factory, Function<CompoundTag, T> loader) {
return storage.computeIfAbsent(new SavedData.Factory<>(factory, (tag, registries) -> loader.apply(tag)), name);
}
}