IT FUCKING WORKS
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,17 @@ 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.
|
||||||
@@ -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
|
||||||
|
));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
17
src/main/java/com/smithy/CelestiumResourcePackProvider.java
Normal file
17
src/main/java/com/smithy/CelestiumResourcePackProvider.java
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
50
src/main/java/com/smithy/mixin/ResourcePackManagerMixin.java
Normal file
50
src/main/java/com/smithy/mixin/ResourcePackManagerMixin.java
Normal 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<>();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
|||||||
6
src/main/resources/resourcepacks/celestium/pack.mcmeta
Normal file
6
src/main/resources/resourcepacks/celestium/pack.mcmeta
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"pack": {
|
||||||
|
"pack_format": 15,
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user