diff --git a/gradle.properties b/gradle.properties index ab62482..913bd6c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -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 diff --git a/src/main/java/com/smithy/Celestium.java b/src/main/java/com/smithy/Celestium.java index 98c111f..f27f44c 100644 --- a/src/main/java/com/smithy/Celestium.java +++ b/src/main/java/com/smithy/Celestium.java @@ -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!!!!!"); } -} \ No newline at end of file + 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 + )); + } +} diff --git a/src/main/java/com/smithy/CelestiumResourcePackProvider.java b/src/main/java/com/smithy/CelestiumResourcePackProvider.java new file mode 100644 index 0000000..f1dd18d --- /dev/null +++ b/src/main/java/com/smithy/CelestiumResourcePackProvider.java @@ -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 PACKS = new ArrayList<>(); + + @Override + public void register(Consumer consumer) { + PACKS.forEach(consumer); + } +} diff --git a/src/main/java/com/smithy/mixin/BuiltInPackProviderAccessor.java b/src/main/java/com/smithy/mixin/BuiltInPackProviderAccessor.java new file mode 100644 index 0000000..b083c54 --- /dev/null +++ b/src/main/java/com/smithy/mixin/BuiltInPackProviderAccessor.java @@ -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(); +} diff --git a/src/main/java/com/smithy/mixin/ResourcePackManagerMixin.java b/src/main/java/com/smithy/mixin/ResourcePackManagerMixin.java new file mode 100644 index 0000000..03636c2 --- /dev/null +++ b/src/main/java/com/smithy/mixin/ResourcePackManagerMixin.java @@ -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 providers; + + // fabric has a severe lack of builtin pack ordering, we load celestium packs from a separate provider + @Inject(method = "", 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 celestium$LinkedAvailableMap(Map value) { + return new LinkedHashMap<>(); + } +} diff --git a/src/main/resources/celestium.mixins.json b/src/main/resources/celestium.mixins.json index 2c8493b..37b513c 100644 --- a/src/main/resources/celestium.mixins.json +++ b/src/main/resources/celestium.mixins.json @@ -3,7 +3,9 @@ "package": "com.smithy.mixin", "compatibilityLevel": "JAVA_17", "mixins": [ - "CelestiumMixin" + "CelestiumMixin", + "BuiltInPackProviderAccessor", + "ResourcePackManagerMixin" ], "injectors": { "defaultRequire": 1 diff --git a/src/main/resources/data/ad_astra/dimension_type/earth_orbit.json b/src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/earth_orbit.json similarity index 100% rename from src/main/resources/data/ad_astra/dimension_type/earth_orbit.json rename to src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/earth_orbit.json diff --git a/src/main/resources/data/ad_astra/dimension_type/glacio.json b/src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/glacio.json similarity index 100% rename from src/main/resources/data/ad_astra/dimension_type/glacio.json rename to src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/glacio.json diff --git a/src/main/resources/data/ad_astra/dimension_type/glacio_orbit.json b/src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/glacio_orbit.json similarity index 100% rename from src/main/resources/data/ad_astra/dimension_type/glacio_orbit.json rename to src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/glacio_orbit.json diff --git a/src/main/resources/data/ad_astra/dimension_type/mars.json b/src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/mars.json similarity index 100% rename from src/main/resources/data/ad_astra/dimension_type/mars.json rename to src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/mars.json diff --git a/src/main/resources/data/ad_astra/dimension_type/mars_orbit.json b/src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/mars_orbit.json similarity index 100% rename from src/main/resources/data/ad_astra/dimension_type/mars_orbit.json rename to src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/mars_orbit.json diff --git a/src/main/resources/data/ad_astra/dimension_type/mercury.json b/src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/mercury.json similarity index 100% rename from src/main/resources/data/ad_astra/dimension_type/mercury.json rename to src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/mercury.json diff --git a/src/main/resources/data/ad_astra/dimension_type/mercury_orbit.json b/src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/mercury_orbit.json similarity index 100% rename from src/main/resources/data/ad_astra/dimension_type/mercury_orbit.json rename to src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/mercury_orbit.json diff --git a/src/main/resources/data/ad_astra/dimension_type/moon.json b/src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/moon.json similarity index 100% rename from src/main/resources/data/ad_astra/dimension_type/moon.json rename to src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/moon.json diff --git a/src/main/resources/data/ad_astra/dimension_type/moon_orbit.json b/src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/moon_orbit.json similarity index 100% rename from src/main/resources/data/ad_astra/dimension_type/moon_orbit.json rename to src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/moon_orbit.json diff --git a/src/main/resources/data/ad_astra/dimension_type/venus.json b/src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/venus.json similarity index 100% rename from src/main/resources/data/ad_astra/dimension_type/venus.json rename to src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/venus.json diff --git a/src/main/resources/data/ad_astra/dimension_type/venus_orbit.json b/src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/venus_orbit.json similarity index 100% rename from src/main/resources/data/ad_astra/dimension_type/venus_orbit.json rename to src/main/resources/resourcepacks/celestium/data/ad_astra/dimension_type/venus_orbit.json diff --git a/src/main/resources/data/celestium/functions/cookies.mcfunction b/src/main/resources/resourcepacks/celestium/data/celestium/functions/cookies.mcfunction similarity index 100% rename from src/main/resources/data/celestium/functions/cookies.mcfunction rename to src/main/resources/resourcepacks/celestium/data/celestium/functions/cookies.mcfunction diff --git a/src/main/resources/data/celestium/functions/fishy.mcfunction b/src/main/resources/resourcepacks/celestium/data/celestium/functions/fishy.mcfunction similarity index 100% rename from src/main/resources/data/celestium/functions/fishy.mcfunction rename to src/main/resources/resourcepacks/celestium/data/celestium/functions/fishy.mcfunction diff --git a/src/main/resources/data/celestium/functions/freecash.mcfunction b/src/main/resources/resourcepacks/celestium/data/celestium/functions/freecash.mcfunction similarity index 100% rename from src/main/resources/data/celestium/functions/freecash.mcfunction rename to src/main/resources/resourcepacks/celestium/data/celestium/functions/freecash.mcfunction diff --git a/src/main/resources/data/celestium/functions/gamer.mcfunction b/src/main/resources/resourcepacks/celestium/data/celestium/functions/gamer.mcfunction similarity index 100% rename from src/main/resources/data/celestium/functions/gamer.mcfunction rename to src/main/resources/resourcepacks/celestium/data/celestium/functions/gamer.mcfunction diff --git a/src/main/resources/data/celestium/functions/lies.mcfunction b/src/main/resources/resourcepacks/celestium/data/celestium/functions/lies.mcfunction similarity index 100% rename from src/main/resources/data/celestium/functions/lies.mcfunction rename to src/main/resources/resourcepacks/celestium/data/celestium/functions/lies.mcfunction diff --git a/src/main/resources/data/celestium/functions/loop.mcfunction b/src/main/resources/resourcepacks/celestium/data/celestium/functions/loop.mcfunction similarity index 100% rename from src/main/resources/data/celestium/functions/loop.mcfunction rename to src/main/resources/resourcepacks/celestium/data/celestium/functions/loop.mcfunction diff --git a/src/main/resources/data/celestium/functions/norush.mcfunction b/src/main/resources/resourcepacks/celestium/data/celestium/functions/norush.mcfunction similarity index 100% rename from src/main/resources/data/celestium/functions/norush.mcfunction rename to src/main/resources/resourcepacks/celestium/data/celestium/functions/norush.mcfunction diff --git a/src/main/resources/data/celestium/functions/rain.mcfunction b/src/main/resources/resourcepacks/celestium/data/celestium/functions/rain.mcfunction similarity index 100% rename from src/main/resources/data/celestium/functions/rain.mcfunction rename to src/main/resources/resourcepacks/celestium/data/celestium/functions/rain.mcfunction diff --git a/src/main/resources/data/celestium/functions/rushtime.mcfunction b/src/main/resources/resourcepacks/celestium/data/celestium/functions/rushtime.mcfunction similarity index 100% rename from src/main/resources/data/celestium/functions/rushtime.mcfunction rename to src/main/resources/resourcepacks/celestium/data/celestium/functions/rushtime.mcfunction diff --git a/src/main/resources/data/celestium/functions/sight.mcfunction b/src/main/resources/resourcepacks/celestium/data/celestium/functions/sight.mcfunction similarity index 100% rename from src/main/resources/data/celestium/functions/sight.mcfunction rename to src/main/resources/resourcepacks/celestium/data/celestium/functions/sight.mcfunction diff --git a/src/main/resources/data/celestium/functions/steaks.mcfunction b/src/main/resources/resourcepacks/celestium/data/celestium/functions/steaks.mcfunction similarity index 100% rename from src/main/resources/data/celestium/functions/steaks.mcfunction rename to src/main/resources/resourcepacks/celestium/data/celestium/functions/steaks.mcfunction diff --git a/src/main/resources/data/celestium/functions/time.mcfunction b/src/main/resources/resourcepacks/celestium/data/celestium/functions/time.mcfunction similarity index 100% rename from src/main/resources/data/celestium/functions/time.mcfunction rename to src/main/resources/resourcepacks/celestium/data/celestium/functions/time.mcfunction diff --git a/src/main/resources/data/celestium/recipes/amethyst_shard.json b/src/main/resources/resourcepacks/celestium/data/celestium/recipes/amethyst_shard.json similarity index 100% rename from src/main/resources/data/celestium/recipes/amethyst_shard.json rename to src/main/resources/resourcepacks/celestium/data/celestium/recipes/amethyst_shard.json diff --git a/src/main/resources/data/createdeco/recipes/copper_support.json b/src/main/resources/resourcepacks/celestium/data/createdeco/recipes/copper_support.json similarity index 100% rename from src/main/resources/data/createdeco/recipes/copper_support.json rename to src/main/resources/resourcepacks/celestium/data/createdeco/recipes/copper_support.json diff --git a/src/main/resources/data/minecraft/dimension_type/overworld.json b/src/main/resources/resourcepacks/celestium/data/minecraft/dimension_type/overworld.json similarity index 100% rename from src/main/resources/data/minecraft/dimension_type/overworld.json rename to src/main/resources/resourcepacks/celestium/data/minecraft/dimension_type/overworld.json diff --git a/src/main/resources/data/minecraft/dimension_type/overworld_caves.json b/src/main/resources/resourcepacks/celestium/data/minecraft/dimension_type/overworld_caves.json similarity index 100% rename from src/main/resources/data/minecraft/dimension_type/overworld_caves.json rename to src/main/resources/resourcepacks/celestium/data/minecraft/dimension_type/overworld_caves.json diff --git a/src/main/resources/data/minecraft/dimension_type/the_end.json b/src/main/resources/resourcepacks/celestium/data/minecraft/dimension_type/the_end.json similarity index 100% rename from src/main/resources/data/minecraft/dimension_type/the_end.json rename to src/main/resources/resourcepacks/celestium/data/minecraft/dimension_type/the_end.json diff --git a/src/main/resources/data/minecraft/dimension_type/the_nether.json b/src/main/resources/resourcepacks/celestium/data/minecraft/dimension_type/the_nether.json similarity index 100% rename from src/main/resources/data/minecraft/dimension_type/the_nether.json rename to src/main/resources/resourcepacks/celestium/data/minecraft/dimension_type/the_nether.json diff --git a/src/main/resources/data/minecraft/recipes/chain.json b/src/main/resources/resourcepacks/celestium/data/minecraft/recipes/chain.json similarity index 100% rename from src/main/resources/data/minecraft/recipes/chain.json rename to src/main/resources/resourcepacks/celestium/data/minecraft/recipes/chain.json diff --git a/src/main/resources/data/tardis_refined/recipes/amethyst_screwdriver.json b/src/main/resources/resourcepacks/celestium/data/tardis_refined/recipes/amethyst_screwdriver.json similarity index 100% rename from src/main/resources/data/tardis_refined/recipes/amethyst_screwdriver.json rename to src/main/resources/resourcepacks/celestium/data/tardis_refined/recipes/amethyst_screwdriver.json diff --git a/src/main/resources/resourcepacks/celestium/pack.mcmeta b/src/main/resources/resourcepacks/celestium/pack.mcmeta new file mode 100644 index 0000000..4fe3b8f --- /dev/null +++ b/src/main/resources/resourcepacks/celestium/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "pack_format": 15, + "description": "" + } +} \ No newline at end of file