IT FUCKING WORKS
Some checks failed
build / build (17, ubuntu-22.04) (push) Failing after 21s
build / build (17, windows-2022) (push) Has been cancelled

This commit is contained in:
2025-12-13 14:14:08 +02:00
parent a66c2f694b
commit 68c65f4beb
38 changed files with 114 additions and 4 deletions

View File

@@ -9,7 +9,7 @@ yarn_mappings=1.20.1+build.9
loader_version=0.16.10 loader_version=0.16.10
# Mod Properties # Mod Properties
mod_version=0.0.3 mod_version=1.0.0
maven_group=com.smithy maven_group=com.smithy
archives_base_name=celestium archives_base_name=celestium

View File

@@ -4,16 +4,23 @@ import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.resource.ResourceManagerHelper; import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.resource.ResourcePackProfile;
import net.minecraft.resource.ResourcePackSource;
import net.minecraft.resource.ResourceType;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import java.nio.file.Path;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import net.fabricmc.fabric.api.resource.ResourcePackActivationType; import net.fabricmc.fabric.api.resource.ResourcePackActivationType;
import net.minecraft.resource.DirectoryResourcePack;
public class Celestium implements ModInitializer { public class Celestium implements ModInitializer {
// This logger is used to write text to the console and the log file. // This logger is used to write text to the console and the log file.
// It is considered best practice to use your mod id as the logger's name. // It is considered best practice to use your mod id as the logger's name.
// That way, it's clear which mod wrote info, warnings, and errors. // That way, it's clear which mod wrote info, warnings, and errors.
public static final Logger LOGGER = LoggerFactory.getLogger("celestium"); public static final Logger LOGGER = LoggerFactory.getLogger("celestium");
@Override @Override
public void onInitialize() { public void onInitialize() {
@@ -28,6 +35,21 @@ public class Celestium implements ModInitializer {
ResourcePackActivationType.ALWAYS_ENABLED ResourcePackActivationType.ALWAYS_ENABLED
); );
addPack("celestium");
LOGGER.info("beer!!!!!"); LOGGER.info("beer!!!!!");
} }
private static void addPack(String packName) {
Path resourcePath = FabricLoader.getInstance().getModContainer("celestium").get().findPath("resourcepacks/"+packName).get();
CelestiumResourcePackProvider.PACKS.add(ResourcePackProfile.create(
"celestium/" + packName.toLowerCase(),
Text.translatable("pack_name.tectonic."+packName),
false,
string -> new DirectoryResourcePack(resourcePath.getFileName().toString(), resourcePath, false),
ResourceType.SERVER_DATA,
ResourcePackProfile.InsertionPosition.TOP,
ResourcePackSource.BUILTIN
));
}
} }

View File

@@ -0,0 +1,17 @@
package com.smithy;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import net.minecraft.resource.ResourcePackProfile;
import net.minecraft.resource.ResourcePackProvider;
public class CelestiumResourcePackProvider implements ResourcePackProvider{
public static final List<ResourcePackProfile> PACKS = new ArrayList<>();
@Override
public void register(Consumer<ResourcePackProfile> consumer) {
PACKS.forEach(consumer);
}
}

View File

@@ -0,0 +1,13 @@
package com.smithy.mixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
import net.minecraft.resource.ResourceType;
import net.minecraft.resource.VanillaResourcePackProvider;
@Mixin(VanillaResourcePackProvider.class)
public interface BuiltInPackProviderAccessor {
@Accessor("type")
ResourceType getResourceType();
}

View File

@@ -0,0 +1,50 @@
package com.smithy.mixin;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import com.smithy.CelestiumResourcePackProvider;
import net.minecraft.resource.ResourcePackManager;
import net.minecraft.resource.ResourcePackProfile;
import net.minecraft.resource.ResourcePackProvider;
import net.minecraft.resource.ResourceType;
import net.minecraft.resource.VanillaResourcePackProvider;
@Mixin(value = ResourcePackManager.class, priority = 2000)
public class ResourcePackManagerMixin {
@Shadow
@Final
@Mutable
private Set<ResourcePackProvider> providers;
// fabric has a severe lack of builtin pack ordering, we load celestium packs from a separate provider
@Inject(method = "<init>", at = @At("RETURN"))
private void celestium$AddCelestiumSource(ResourcePackProvider[] packProviders, CallbackInfo ci) {
providers = new LinkedHashSet<>(providers);
for (ResourcePackProvider provider : providers) {
if (provider instanceof VanillaResourcePackProvider builtInProvider && ((BuiltInPackProviderAccessor)builtInProvider).getResourceType() == ResourceType.SERVER_DATA) {
providers.add(new CelestiumResourcePackProvider());
break;
}
}
}
// swap out TreeMap for LinkedHashMap to prevent ordering issues
@ModifyVariable(method = "providePackProfiles", at = @At("STORE"), ordinal = 0)
private Map<String, ResourcePackProfile> celestium$LinkedAvailableMap(Map<String, ResourcePackProfile> value) {
return new LinkedHashMap<>();
}
}

View File

@@ -3,7 +3,9 @@
"package": "com.smithy.mixin", "package": "com.smithy.mixin",
"compatibilityLevel": "JAVA_17", "compatibilityLevel": "JAVA_17",
"mixins": [ "mixins": [
"CelestiumMixin" "CelestiumMixin",
"BuiltInPackProviderAccessor",
"ResourcePackManagerMixin"
], ],
"injectors": { "injectors": {
"defaultRequire": 1 "defaultRequire": 1

View File

@@ -0,0 +1,6 @@
{
"pack": {
"pack_format": 15,
"description": ""
}
}