feat: Allow loading armors from the 1.21.0 format
This commit is contained in:
@@ -145,6 +145,7 @@ object CustomGlobalArmorOverrides {
|
||||
null
|
||||
}
|
||||
}
|
||||
bakedOverrides.clear()
|
||||
val associatedMap = overrides.flatMap { obj -> obj.itemIds.map { it to obj } }
|
||||
.toMap()
|
||||
associatedMap.forEach { it.value.bake(manager) }
|
||||
@@ -152,7 +153,6 @@ object CustomGlobalArmorOverrides {
|
||||
}
|
||||
|
||||
override fun apply(prepared: Map<String, ArmorOverride>, manager: ResourceManager, profiler: Profiler) {
|
||||
bakedOverrides.clear()
|
||||
overrides = prepared
|
||||
}
|
||||
})
|
||||
@@ -160,11 +160,13 @@ object CustomGlobalArmorOverrides {
|
||||
|
||||
@JvmStatic
|
||||
fun overrideArmor(itemStack: ItemStack, slot: EquipmentSlot): Optional<EquippableComponent> {
|
||||
if (!CustomSkyBlockTextures.TConfig.enableArmorOverrides) return Optional.empty()
|
||||
return overrideCache.invoke(itemStack, slot)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun overrideArmorLayer(id: Identifier): EquipmentModel? {
|
||||
if (!CustomSkyBlockTextures.TConfig.enableArmorOverrides) return null
|
||||
return bakedOverrides[id]
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ package moe.nea.firmament.features.texturepack
|
||||
import com.mojang.authlib.minecraft.MinecraftProfileTexture
|
||||
import com.mojang.authlib.properties.Property
|
||||
import java.util.Optional
|
||||
import org.jetbrains.annotations.Nullable
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable
|
||||
import kotlin.jvm.optionals.getOrNull
|
||||
import net.minecraft.block.SkullBlock
|
||||
@@ -34,6 +33,7 @@ object CustomSkyBlockTextures : FirmamentFeature {
|
||||
val enableModelOverrides by toggle("model-overrides") { true }
|
||||
val enableArmorOverrides by toggle("armor-overrides") { true }
|
||||
val enableBlockOverrides by toggle("block-overrides") { true }
|
||||
val enableLegacyMinecraftCompat by toggle("legacy-minecraft-path-support") { true }
|
||||
val enableLegacyCIT by toggle("legacy-cit") { true }
|
||||
val allowRecoloringUiText by toggle("recolor-text") { true }
|
||||
}
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
package moe.nea.firmament.mixins.custommodels;
|
||||
|
||||
|
||||
import moe.nea.firmament.features.texturepack.CustomSkyBlockTextures;
|
||||
import moe.nea.firmament.util.MC;
|
||||
import net.minecraft.client.render.entity.equipment.EquipmentModel;
|
||||
import net.minecraft.util.Identifier;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
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.callback.CallbackInfoReturnable;
|
||||
|
||||
@Mixin(EquipmentModel.Layer.class)
|
||||
public class PatchLegacyTexturePathsIntoArmorLayers {
|
||||
@Shadow
|
||||
@Final
|
||||
private Identifier textureId;
|
||||
|
||||
@Inject(method = "getFullTextureId", at = @At("HEAD"), cancellable = true)
|
||||
private void replaceWith1201TextureIfExists(EquipmentModel.LayerType layerType, CallbackInfoReturnable<Identifier> cir) {
|
||||
if (!CustomSkyBlockTextures.TConfig.INSTANCE.getEnableLegacyMinecraftCompat())
|
||||
return;
|
||||
var resourceManager = MC.INSTANCE.getResourceManager();
|
||||
// legacy format: "assets/{identifier.namespace}/textures/models/armor/{identifier.path}_layer_{isLegs ? 2 : 1}{suffix}.png"
|
||||
// suffix is sadly not available to us here. this means leather armor will look a bit shite
|
||||
var legacyIdentifier = this.textureId.withPath((textureName) -> {
|
||||
String var10000 = layerType.asString();
|
||||
return "textures/models/armor/" + textureName + "_layer_" +
|
||||
(layerType == EquipmentModel.LayerType.HUMANOID_LEGGINGS ? 2 : 1)
|
||||
+ ".png";
|
||||
});
|
||||
if (resourceManager.getResource(legacyIdentifier).isPresent()) {
|
||||
cir.setReturnValue(legacyIdentifier);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import com.google.gson.JsonObject;
|
||||
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
|
||||
import com.llamalad7.mixinextras.sugar.Local;
|
||||
import moe.nea.firmament.Firmament;
|
||||
import moe.nea.firmament.features.texturepack.CustomSkyBlockTextures;
|
||||
import moe.nea.firmament.features.texturepack.PredicateModel;
|
||||
import moe.nea.firmament.util.ErrorUtil;
|
||||
import net.minecraft.client.item.ItemAsset;
|
||||
@@ -17,10 +18,7 @@ import net.minecraft.util.Identifier;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -46,6 +44,7 @@ public class SupplyFakeModelPatch {
|
||||
}
|
||||
|
||||
private static ItemAssetsLoader.Result supplyExtraModels(ResourceManager resourceManager, ItemAssetsLoader.Result oldModels) {
|
||||
if (!CustomSkyBlockTextures.TConfig.INSTANCE.getEnableLegacyMinecraftCompat()) return oldModels;
|
||||
Map<Identifier, ItemAsset> newModels = new HashMap<>(oldModels.contents());
|
||||
var resources = resourceManager.findResources(
|
||||
"models/item",
|
||||
|
||||
@@ -81,6 +81,8 @@
|
||||
"firmament.config.custom-skyblock-textures.enabled.description": "Allow replacing items for texture packs. Turning this off does not disable custom predicates",
|
||||
"firmament.config.custom-skyblock-textures.legacy-cit": "Enable legacy CIT Resewn compat",
|
||||
"firmament.config.custom-skyblock-textures.legacy-cit.description": "Allow CIT resewn texture packs written for 1.20.4 to be loaded on newer versions.",
|
||||
"firmament.config.custom-skyblock-textures.legacy-minecraft-path-support": "Enable Legacy Paths",
|
||||
"firmament.config.custom-skyblock-textures.legacy-minecraft-path-support.description": "Allow texture packs to load textures from some legacy paths. I.e.: Allows loading 1.21.0 armor textures on 1.21.4.",
|
||||
"firmament.config.custom-skyblock-textures.model-overrides": "Enable model overrides/predicates",
|
||||
"firmament.config.custom-skyblock-textures.model-overrides.description": "Enable Firmament's model predicates. This will apply to vanilla models as well, if that vanilla model has Firmament predicates.",
|
||||
"firmament.config.custom-skyblock-textures.recolor-text": "Allow packs to recolor text",
|
||||
|
||||
Reference in New Issue
Block a user