aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2024-11-03 01:24:24 +0100
committerLinnea Gräf <nea@nea.moe>2024-11-03 01:24:24 +0100
commite2677d6ee5c3f74d5f547ca48bf6641f047a2a1e (patch)
treefecc0322e48a399df7697da11adfb022d5641a6c
parent646843ba3b960ac48f9866b3640438d3cc1dafc4 (diff)
downloadFirmament-e2677d6ee5c3f74d5f547ca48bf6641f047a2a1e.tar.gz
Firmament-e2677d6ee5c3f74d5f547ca48bf6641f047a2a1e.tar.bz2
Firmament-e2677d6ee5c3f74d5f547ca48bf6641f047a2a1e.zip
1.21.3 WIP
-rw-r--r--build.gradle.kts54
-rw-r--r--gradle/libs.versions.toml42
-rw-r--r--src/compat/sodium/java/SodiumChunkReloader.kt2
-rw-r--r--src/compat/sodium/java/moe/nea/firmament/mixins/accessor/sodium/AccessorSodiumWorldRenderer.java8
-rw-r--r--src/compat/sodium/java/moe/nea/firmament/mixins/custommodels/PatchBlockModelInSodiumChunkGenerator.java4
-rw-r--r--src/main/java/moe/nea/firmament/mixins/CustomDurabilityBarPatch.java6
-rw-r--r--src/main/java/moe/nea/firmament/mixins/CustomModelBakerPatch.java49
-rw-r--r--src/main/java/moe/nea/firmament/mixins/CustomModelEventPatch.java18
-rw-r--r--src/main/java/moe/nea/firmament/mixins/CustomSkullTexturePatch.java9
-rw-r--r--src/main/java/moe/nea/firmament/mixins/DFUEntityIdFixPatch.java1
-rw-r--r--src/main/java/moe/nea/firmament/mixins/InjectCustomShaderPrograms.java31
-rw-r--r--src/main/java/moe/nea/firmament/mixins/MixinHandledScreen.java22
-rw-r--r--src/main/java/moe/nea/firmament/mixins/ReplaceTextColorInHandledScreen.java9
-rw-r--r--src/main/java/moe/nea/firmament/mixins/SlotUpdateListener.java8
-rw-r--r--src/main/java/moe/nea/firmament/mixins/WorldRenderLastEventPatch.java31
-rw-r--r--src/main/java/moe/nea/firmament/mixins/accessor/AccessorGameRenderer.java14
-rw-r--r--src/main/java/moe/nea/firmament/mixins/customgui/PatchHandledScreen.java24
-rw-r--r--src/main/java/moe/nea/firmament/mixins/custommodels/ApplyHeadModelInItemRenderer.java40
-rw-r--r--src/main/java/moe/nea/firmament/mixins/custommodels/GlobalModelOverridePatch.java18
-rw-r--r--src/main/java/moe/nea/firmament/mixins/custommodels/HeadModelReplacerPatch.java55
-rw-r--r--src/main/java/moe/nea/firmament/mixins/custommodels/ItemRendererTintContextPatch.java16
-rw-r--r--src/main/java/moe/nea/firmament/mixins/custommodels/JsonUnbakedModelDataHolder.java31
-rw-r--r--src/main/java/moe/nea/firmament/mixins/custommodels/PatchArmorTexture.java28
-rw-r--r--src/main/java/moe/nea/firmament/mixins/custommodels/PatchHeadFeatureRenderer.java45
-rw-r--r--src/main/java/moe/nea/firmament/mixins/custommodels/PatchLegacyArmorLayerSupport.java22
-rw-r--r--src/main/java/moe/nea/firmament/mixins/custommodels/PatchOverrideDeserializer.java46
-rw-r--r--src/main/java/moe/nea/firmament/mixins/custommodels/ReferenceCustomModelsPatch.java37
-rw-r--r--src/main/java/moe/nea/firmament/mixins/custommodels/TestForFirmamentOverridePredicatesPatch.java56
-rw-r--r--src/main/kotlin/events/BakeExtraModelsEvent.kt25
-rw-r--r--src/main/kotlin/events/CustomItemModelEvent.kt46
-rw-r--r--src/main/kotlin/events/FinalizeResourceManagerEvent.kt41
-rw-r--r--src/main/kotlin/events/IsSlotProtectedEvent.kt2
-rw-r--r--src/main/kotlin/events/RegisterCustomShadersEvent.kt24
-rw-r--r--src/main/kotlin/events/SlotRenderEvents.kt15
-rw-r--r--src/main/kotlin/features/chat/ChatLinks.kt3
-rw-r--r--src/main/kotlin/features/debug/DeveloperFeatures.kt4
-rw-r--r--src/main/kotlin/features/debug/PowerUserTools.kt17
-rw-r--r--src/main/kotlin/features/inventory/CraftingOverlay.kt2
-rw-r--r--src/main/kotlin/features/inventory/ItemRarityCosmetics.kt16
-rw-r--r--src/main/kotlin/features/inventory/PetFeatures.kt5
-rw-r--r--src/main/kotlin/features/inventory/SlotLocking.kt25
-rw-r--r--src/main/kotlin/features/inventory/buttons/InventoryButton.kt5
-rw-r--r--src/main/kotlin/features/inventory/buttons/InventoryButtonEditor.kt1
-rw-r--r--src/main/kotlin/features/inventory/storageoverlay/StorageBackingHandle.kt1
-rw-r--r--src/main/kotlin/features/inventory/storageoverlay/StorageOverlayScreen.kt7
-rw-r--r--src/main/kotlin/features/inventory/storageoverlay/StorageOverviewScreen.kt2
-rw-r--r--src/main/kotlin/features/mining/CommissionFeatures.kt8
-rw-r--r--src/main/kotlin/features/mining/HotmPresets.kt7
-rw-r--r--src/main/kotlin/features/texturepack/CustomBlockTextures.kt4
-rw-r--r--src/main/kotlin/features/texturepack/CustomGlobalArmorOverrides.kt213
-rw-r--r--src/main/kotlin/features/texturepack/CustomGlobalTextures.kt2
-rw-r--r--src/main/kotlin/features/world/Waypoints.kt499
-rw-r--r--src/main/kotlin/gui/BarComponent.kt182
-rw-r--r--src/main/kotlin/gui/entity/EntityRenderer.kt3
-rw-r--r--src/main/kotlin/gui/entity/FakeWorld.kt695
-rw-r--r--src/main/kotlin/gui/entity/ModifyHorse.kt11
-rw-r--r--src/main/kotlin/repo/RepoDownloadManager.kt2
-rw-r--r--src/main/kotlin/repo/RepoManager.kt6
-rw-r--r--src/main/kotlin/util/MC.kt2
-rw-r--r--src/main/kotlin/util/data/IDataHolder.kt112
-rw-r--r--src/main/kotlin/util/render/DrawContextExt.kt50
-rw-r--r--src/main/kotlin/util/render/FacingThePlayerContext.kt7
-rw-r--r--src/main/kotlin/util/render/FirmamentShaders.kt19
-rw-r--r--src/main/kotlin/util/render/RenderCircleProgress.kt140
-rw-r--r--src/main/kotlin/util/render/RenderInWorldContext.kt32
-rw-r--r--src/main/resources/assets/firmament/shaders/code/rendertype_lines.fsh (renamed from src/main/resources/assets/minecraft/shaders/core/firmament_rendertype_lines.fsh)0
-rw-r--r--src/main/resources/assets/firmament/shaders/code/rendertype_lines.json (renamed from src/main/resources/assets/minecraft/shaders/core/firmament_rendertype_lines.json)4
-rw-r--r--src/main/resources/assets/firmament/shaders/code/rendertype_lines.vsh (renamed from src/main/resources/assets/minecraft/shaders/core/firmament_rendertype_lines.vsh)0
-rw-r--r--src/main/resources/firmament.accesswidener3
-rw-r--r--src/main/resources/firmament.mixins.json13
70 files changed, 1432 insertions, 1549 deletions
diff --git a/build.gradle.kts b/build.gradle.kts
index 64d80fe..70f20f6 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -21,7 +21,9 @@ plugins {
alias(libs.plugins.kotlin.plugin.serialization)
alias(libs.plugins.kotlin.plugin.powerassert)
alias(libs.plugins.kotlin.plugin.ksp)
- alias(libs.plugins.loom)
+ // alias(libs.plugins.loom)
+ // TODO: use arch loom once they update to 1.8
+ id("fabric-loom") version "1.8.9"
id("com.github.johnrengelman.shadow") version "8.1.1"
id("moe.nea.licenseextractificator")
id("moe.nea.mc-auto-translations") version "0.0.1"
@@ -113,7 +115,7 @@ fun innerJarsOf(name: String, dependency: Dependency): Provider<FileTree> {
})
}
unpackAllJars { dependsOn(task) }
- println("Constructed innerJars task: ${project.files(task).asFileTree.toList().map {it to it.exists()}}")
+ println("Constructed innerJars task: ${project.files(task).asFileTree.toList().map { it to it.exists() }}")
return project.provider {
project.files(task).asFileTree
}
@@ -125,15 +127,32 @@ val collectTranslations by tasks.registering(CollectTranslations::class) {
}
val compatSourceSets: MutableSet<SourceSet> = mutableSetOf()
-fun createIsolatedSourceSet(name: String, path: String = "compat/$name"): SourceSet {
+fun createIsolatedSourceSet(name: String, path: String = "compat/$name", isEnabled: Boolean = true): SourceSet {
val ss = sourceSets.create(name) {
- this.java.setSrcDirs(listOf(layout.projectDirectory.dir("src/$path/java")))
- this.kotlin.setSrcDirs(listOf(layout.projectDirectory.dir("src/$path/java")))
+ if (isEnabled) {
+ this.java.setSrcDirs(listOf(layout.projectDirectory.dir("src/$path/java")))
+ this.kotlin.setSrcDirs(listOf(layout.projectDirectory.dir("src/$path/java")))
+ } else {
+ this.java.setSrcDirs(listOf<File>())
+ this.kotlin.setSrcDirs(listOf<File>())
+ }
}
- compatSourceSets.add(ss)
- loom.createRemapConfigurations(ss)
val mainSS = sourceSets.main.get()
val upperName = ss.name.capitalizeN()
+ afterEvaluate {
+ tasks.named("ksp${upperName}Kotlin", KspTaskJvm::class) {
+ this.options.add(SubpluginOption("apoption", "firmament.sourceset=${ss.name}"))
+ }
+ tasks.named("compile${upperName}Kotlin", KotlinCompile::class) {
+ this.enabled = isEnabled
+ }
+ tasks.named("compile${upperName}Java", JavaCompile::class) {
+ this.enabled = isEnabled
+ }
+ }
+ compatSourceSets.add(ss)
+ loom.createRemapConfigurations(ss)
+ if (!isEnabled) return ss
configurations {
(ss.implementationConfigurationName) {
extendsFrom(getByName(mainSS.compileClasspathConfigurationName))
@@ -148,11 +167,6 @@ fun createIsolatedSourceSet(name: String, path: String = "compat/$name"): Source
extendsFrom(ksp.get())
}
}
- afterEvaluate {
- tasks.named("ksp${upperName}Kotlin", KspTaskJvm::class) {
- this.options.add(SubpluginOption("apoption", "firmament.sourceset=${ss.name}"))
- }
- }
dependencies {
runtimeOnly(ss.output)
(ss.implementationConfigurationName)(sourceSets.main.get().output)
@@ -195,14 +209,16 @@ val nonModImplentation by configurations.creating {
}
-val configuredSourceSet = createIsolatedSourceSet("configured")
+val configuredSourceSet = createIsolatedSourceSet("configured",
+ isEnabled = false) // Wait for update (also low prio, because configured sucks)
val sodiumSourceSet = createIsolatedSourceSet("sodium")
-val citResewnSourceSet = createIsolatedSourceSet("citresewn")
+val citResewnSourceSet = createIsolatedSourceSet("citresewn", isEnabled = false) // TODO: Wait for update
val yaclSourceSet = createIsolatedSourceSet("yacl")
-val explosiveEnhancementSourceSet = createIsolatedSourceSet("explosiveEnhancement")
-val wildfireGenderSourceSet = createIsolatedSourceSet("wildfireGender")
+val explosiveEnhancementSourceSet = createIsolatedSourceSet("explosiveEnhancement", isEnabled = false) // TODO: wait for their port
+val wildfireGenderSourceSet = createIsolatedSourceSet("wildfireGender", isEnabled = false) // TODO: wait on their port
val modmenuSourceSet = createIsolatedSourceSet("modmenu")
-val reiSourceSet = createIsolatedSourceSet("rei")
+val reiSourceSet =
+ createIsolatedSourceSet("rei", isEnabled = false) // TODO: read through https://hackmd.io/@shedaniel/rei17_primer
dependencies {
// Minecraft dependencies
@@ -299,7 +315,7 @@ loom {
compatSourceSets.joinToString(File.pathSeparator) {
File(it.output.classesDirs.asPath).absolutePath
})
- property("mixin.debug", "true")
+ property("mixin.debug.export", "true")
parseEnvFile(file(".env")).forEach { (t, u) ->
environmentVariable(t, u)
@@ -360,7 +376,7 @@ tasks.shadowJar {
}
tasks.remapJar {
- injectAccessWidener.set(true)
+// injectAccessWidener.set(true)
inputFile.set(tasks.shadowJar.flatMap { it.archiveFile })
dependsOn(tasks.shadowJar)
archiveClassifier.set("")
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index c11d939..b25717e 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -3,36 +3,36 @@
# SPDX-License-Identifier: CC0-1.0
[versions]
-minecraft = "1.21"
+minecraft = "1.21.3"
# Update from https://kotlinlang.org/
-kotlin = "2.0.20"
+kotlin = "2.0.21"
# Update from https://github.com/google/ksp/releases
-kotlin_ksp = "2.0.20-1.0.24"
+kotlin_ksp = "2.0.21-1.0.26"
# Update from https://linkie.shedaniel.me/dependencies?loader=fabric
-fabric_loader = "0.16.3"
-fabric_api = "0.100.4+1.21"
-fabric_kotlin = "1.11.0+kotlin.2.0.0"
-yarn = "1.21+build.7"
-rei = "16.0.729"
-modmenu = "11.0.1"
-architectury = "13.0.3"
+fabric_loader = "0.16.9"
+fabric_api = "0.107.0+1.21.3"
+fabric_kotlin = "1.12.3+kotlin.2.0.21"
+yarn = "1.21.3+build.2"
+rei = "17.0.789"
+modmenu = "12.0.0-beta.1"
+architectury = "14.0.4"
# Update from https://maven.architectury.dev/dev/architectury/loom/dev.architectury.loom.gradle.plugin/
-loom = "1.7.412"
+loom = "1.7.414"
# Update from https://modrinth.com/mod/qolify/versions?l=fabric
qolify = "1.6.0-1.21.1"
# Update from https://modrinth.com/mod/sodium/versions?l=fabric
-sodium = "mc1.21-0.5.11"
+sodium = "mc1.21.3-0.6.0-beta.4-fabric"
# Update from https://modrinth.com/mod/freecam/versions?l=fabric
freecammod = "vomskVK3"
# Update from https://modrinth.com/mod/no-chat-reports/versions?l=fabric
-ncr = "Fabric-1.21-v2.8.0"
+ncr = "Fabric-1.21.3-v2.10.0"
# Update from https://modrinth.com/mod/female-gender/versions?l=fabric
femalegender = "kJmjQvAS"
@@ -49,7 +49,7 @@ citresewn = "1.2.0+1.21"
devauth = "1.2.0"
# Update from https://ktor.io/
-ktor = "2.3.12"
+ktor = "3.0.1"
# Update from https://repo.nea.moe/#/releases/moe/nea/neurepoparser
neurepoparser = "1.6.0"
@@ -58,10 +58,10 @@ neurepoparser = "1.6.0"
hotswap_agent = "1.4.2-SNAPSHOT"
# Update from https://github.com/LlamaLad7/MixinExtras/tags
-mixinextras = "0.3.5"
+mixinextras = "0.4.1"
jarvis = "1.1.3"
-nealisp = "1.0.0"
+nealisp = "1.1.0"
# Update from https://github.com/NotEnoughUpdates/MoulConfig/tags
moulconfig = "3.0.0-beta.15"
@@ -77,7 +77,7 @@ hypixelmodapi_fabric = "1.0.1+build.1+mc1.21"
manninghamMills = "2.4.1"
# Update from https://docs.isxander.dev/yet-another-config-lib/installing-yacl
-yacl = "3.5.0+1.21-fabric"
+yacl = "3.6.1+1.21.2-fabric"
# Update from https://maven.shedaniel.me/me/shedaniel/cloth/basic-math/0.6.1/
basicMath = "0.6.1"
@@ -120,10 +120,8 @@ basicMath = { module = "me.shedaniel.cloth:basic-math", version.ref = "basicMath
[bundles]
runtime_required = [
- "architectury_fabric",
- "rei_fabric",
- "notenoughanimations",
- "femalegender",
+# "rei_fabric",
+# "notenoughanimations",
"hypixelmodapi_fabric",
]
runtime_optional = [
@@ -132,7 +130,7 @@ runtime_optional = [
# "sodium",
# "qolify",
"ncr",
- "citresewn",
+# "citresewn",
]
[plugins]
diff --git a/src/compat/sodium/java/SodiumChunkReloader.kt b/src/compat/sodium/java/SodiumChunkReloader.kt
index 932c338..0256b88 100644
--- a/src/compat/sodium/java/SodiumChunkReloader.kt
+++ b/src/compat/sodium/java/SodiumChunkReloader.kt
@@ -1,6 +1,6 @@
package moe.nea.firmament.compat.sodium
-import me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer
+import net.caffeinemc.mods.sodium.client.render.SodiumWorldRenderer
import moe.nea.firmament.mixins.accessor.sodium.AccessorSodiumWorldRenderer
class SodiumChunkReloader : Runnable {
diff --git a/src/compat/sodium/java/moe/nea/firmament/mixins/accessor/sodium/AccessorSodiumWorldRenderer.java b/src/compat/sodium/java/moe/nea/firmament/mixins/accessor/sodium/AccessorSodiumWorldRenderer.java
index d585cbc..f75874d 100644
--- a/src/compat/sodium/java/moe/nea/firmament/mixins/accessor/sodium/AccessorSodiumWorldRenderer.java
+++ b/src/compat/sodium/java/moe/nea/firmament/mixins/accessor/sodium/AccessorSodiumWorldRenderer.java
@@ -1,7 +1,7 @@
package moe.nea.firmament.mixins.accessor.sodium;
-import me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer;
-import me.jellysquid.mods.sodium.client.render.chunk.RenderSectionManager;
+import net.caffeinemc.mods.sodium.client.render.SodiumWorldRenderer;
+import net.caffeinemc.mods.sodium.client.render.chunk.RenderSectionManager;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.gen.Accessor;
@@ -9,6 +9,6 @@ import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(SodiumWorldRenderer.class)
@Pseudo
public interface AccessorSodiumWorldRenderer {
- @Accessor(value = "renderSectionManager", remap = false)
- RenderSectionManager getRenderSectionManager_firmament();
+ @Accessor(value = "renderSectionManager", remap = false)
+ RenderSectionManager getRenderSectionManager_firmament();
}
diff --git a/src/compat/sodium/java/moe/nea/firmament/mixins/custommodels/PatchBlockModelInSodiumChunkGenerator.java b/src/compat/sodium/java/moe/nea/firmament/mixins/custommodels/PatchBlockModelInSodiumChunkGenerator.java
index 90f20bc..fe87310 100644
--- a/src/compat/sodium/java/moe/nea/firmament/mixins/custommodels/PatchBlockModelInSodiumChunkGenerator.java
+++ b/src/compat/sodium/java/moe/nea/firmament/mixins/custommodels/PatchBlockModelInSodiumChunkGenerator.java
@@ -3,8 +3,8 @@ package moe.nea.firmament.mixins.custommodels;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.llamalad7.mixinextras.sugar.Local;
-import me.jellysquid.mods.sodium.client.render.chunk.compile.tasks.ChunkBuilderMeshingTask;
import moe.nea.firmament.features.texturepack.CustomBlockTextures;
+import net.caffeinemc.mods.sodium.client.render.chunk.compile.tasks.ChunkBuilderMeshingTask;
import net.minecraft.block.BlockState;
import net.minecraft.client.render.block.BlockModels;
import net.minecraft.client.render.model.BakedModel;
@@ -15,7 +15,7 @@ import org.spongepowered.asm.mixin.injection.At;
@Mixin(ChunkBuilderMeshingTask.class)
public class PatchBlockModelInSodiumChunkGenerator {
@WrapOperation(
- method = "execute(Lme/jellysquid/mods/sodium/client/render/chunk/compile/ChunkBuildContext;Lme/jellysquid/mods/sodium/client/util/task/CancellationToken;)Lme/jellysquid/mods/sodium/client/render/chunk/compile/ChunkBuildOutput;",
+ method = "execute(Lnet/caffeinemc/mods/sodium/client/render/chunk/compile/ChunkBuildContext;Lnet/caffeinemc/mods/sodium/client/util/task/CancellationToken;)Lnet/caffeinemc/mods/sodium/client/render/chunk/compile/ChunkBuildOutput;",
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/block/BlockModels;getModel(Lnet/minecraft/block/BlockState;)Lnet/minecraft/client/render/model/BakedModel;"))
private BakedModel replaceBlockModel(BlockModels instance, BlockState state, Operation<BakedModel> original,
@Local(name = "blockPos") BlockPos.Mutable pos) {
diff --git a/src/main/java/moe/nea/firmament/mixins/CustomDurabilityBarPatch.java b/src/main/java/moe/nea/firmament/mixins/CustomDurabilityBarPatch.java
index 0f4d324..fde3580 100644
--- a/src/main/java/moe/nea/firmament/mixins/CustomDurabilityBarPatch.java
+++ b/src/main/java/moe/nea/firmament/mixins/CustomDurabilityBarPatch.java
@@ -14,7 +14,7 @@ import org.spongepowered.asm.mixin.injection.At;
@Mixin(DrawContext.class)
public class CustomDurabilityBarPatch {
@WrapOperation(
- method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V",
+ method = "drawItemBar",
at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;isItemBarVisible()Z")
)
private boolean onIsItemBarVisible(
@@ -29,7 +29,7 @@ public class CustomDurabilityBarPatch {
return barOverride.get() != null;
}
- @WrapOperation(method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V",
+ @WrapOperation(method = "drawItemBar",
at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getItemBarStep()I"))
private int overrideItemStep(
ItemStack instance, Operation<Integer> original,
@@ -40,7 +40,7 @@ public class CustomDurabilityBarPatch {
return original.call(instance);
}
- @WrapOperation(method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V",
+ @WrapOperation(method = "drawItemBar",
at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getItemBarColor()I"))
private int overrideItemColor(
ItemStack instance, Operation<Integer> original,
diff --git a/src/main/java/moe/nea/firmament/mixins/CustomModelBakerPatch.java b/src/main/java/moe/nea/firmament/mixins/CustomModelBakerPatch.java
deleted file mode 100644
index c1e359d..0000000
--- a/src/main/java/moe/nea/firmament/mixins/CustomModelBakerPatch.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package moe.nea.firmament.mixins;
-
-import moe.nea.firmament.events.BakeExtraModelsEvent;
-import net.minecraft.client.render.model.ModelLoader;
-import net.minecraft.client.render.model.UnbakedModel;
-import net.minecraft.client.util.Mode