IT FUCKING WORKS
This commit is contained in:
@@ -9,7 +9,7 @@ yarn_mappings=1.20.1+build.9
|
||||
loader_version=0.16.10
|
||||
|
||||
# Mod Properties
|
||||
mod_version=0.0.3
|
||||
mod_version=1.0.0
|
||||
maven_group=com.smithy
|
||||
archives_base_name=celestium
|
||||
|
||||
|
||||
@@ -4,16 +4,23 @@ import net.fabricmc.api.ModInitializer;
|
||||
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
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 java.nio.file.Path;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import net.fabricmc.fabric.api.resource.ResourcePackActivationType;
|
||||
import net.minecraft.resource.DirectoryResourcePack;
|
||||
|
||||
public class Celestium implements ModInitializer {
|
||||
// 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.
|
||||
// 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
|
||||
public void onInitialize() {
|
||||
@@ -28,6 +35,21 @@ public class Celestium implements ModInitializer {
|
||||
ResourcePackActivationType.ALWAYS_ENABLED
|
||||
);
|
||||
|
||||
addPack("celestium");
|
||||
|
||||
|
||||
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",
|
||||
"compatibilityLevel": "JAVA_17",
|
||||
"mixins": [
|
||||
"CelestiumMixin"
|
||||
"CelestiumMixin",
|
||||
"BuiltInPackProviderAccessor",
|
||||
"ResourcePackManagerMixin"
|
||||
],
|
||||
"injectors": {
|
||||
"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