feat: Allow loading armors from the 1.21.0 format
This commit is contained in:
@@ -145,6 +145,7 @@ object CustomGlobalArmorOverrides {
|
|||||||
null
|
null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
bakedOverrides.clear()
|
||||||
val associatedMap = overrides.flatMap { obj -> obj.itemIds.map { it to obj } }
|
val associatedMap = overrides.flatMap { obj -> obj.itemIds.map { it to obj } }
|
||||||
.toMap()
|
.toMap()
|
||||||
associatedMap.forEach { it.value.bake(manager) }
|
associatedMap.forEach { it.value.bake(manager) }
|
||||||
@@ -152,7 +153,6 @@ object CustomGlobalArmorOverrides {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun apply(prepared: Map<String, ArmorOverride>, manager: ResourceManager, profiler: Profiler) {
|
override fun apply(prepared: Map<String, ArmorOverride>, manager: ResourceManager, profiler: Profiler) {
|
||||||
bakedOverrides.clear()
|
|
||||||
overrides = prepared
|
overrides = prepared
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -160,11 +160,13 @@ object CustomGlobalArmorOverrides {
|
|||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun overrideArmor(itemStack: ItemStack, slot: EquipmentSlot): Optional<EquippableComponent> {
|
fun overrideArmor(itemStack: ItemStack, slot: EquipmentSlot): Optional<EquippableComponent> {
|
||||||
|
if (!CustomSkyBlockTextures.TConfig.enableArmorOverrides) return Optional.empty()
|
||||||
return overrideCache.invoke(itemStack, slot)
|
return overrideCache.invoke(itemStack, slot)
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun overrideArmorLayer(id: Identifier): EquipmentModel? {
|
fun overrideArmorLayer(id: Identifier): EquipmentModel? {
|
||||||
|
if (!CustomSkyBlockTextures.TConfig.enableArmorOverrides) return null
|
||||||
return bakedOverrides[id]
|
return bakedOverrides[id]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package moe.nea.firmament.features.texturepack
|
|||||||
import com.mojang.authlib.minecraft.MinecraftProfileTexture
|
import com.mojang.authlib.minecraft.MinecraftProfileTexture
|
||||||
import com.mojang.authlib.properties.Property
|
import com.mojang.authlib.properties.Property
|
||||||
import java.util.Optional
|
import java.util.Optional
|
||||||
import org.jetbrains.annotations.Nullable
|
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable
|
||||||
import kotlin.jvm.optionals.getOrNull
|
import kotlin.jvm.optionals.getOrNull
|
||||||
import net.minecraft.block.SkullBlock
|
import net.minecraft.block.SkullBlock
|
||||||
@@ -34,6 +33,7 @@ object CustomSkyBlockTextures : FirmamentFeature {
|
|||||||
val enableModelOverrides by toggle("model-overrides") { true }
|
val enableModelOverrides by toggle("model-overrides") { true }
|
||||||
val enableArmorOverrides by toggle("armor-overrides") { true }
|
val enableArmorOverrides by toggle("armor-overrides") { true }
|
||||||
val enableBlockOverrides by toggle("block-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 enableLegacyCIT by toggle("legacy-cit") { true }
|
||||||
val allowRecoloringUiText by toggle("recolor-text") { 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.injector.ModifyReturnValue;
|
||||||
import com.llamalad7.mixinextras.sugar.Local;
|
import com.llamalad7.mixinextras.sugar.Local;
|
||||||
import moe.nea.firmament.Firmament;
|
import moe.nea.firmament.Firmament;
|
||||||
|
import moe.nea.firmament.features.texturepack.CustomSkyBlockTextures;
|
||||||
import moe.nea.firmament.features.texturepack.PredicateModel;
|
import moe.nea.firmament.features.texturepack.PredicateModel;
|
||||||
import moe.nea.firmament.util.ErrorUtil;
|
import moe.nea.firmament.util.ErrorUtil;
|
||||||
import net.minecraft.client.item.ItemAsset;
|
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.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -46,6 +44,7 @@ public class SupplyFakeModelPatch {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static ItemAssetsLoader.Result supplyExtraModels(ResourceManager resourceManager, ItemAssetsLoader.Result oldModels) {
|
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());
|
Map<Identifier, ItemAsset> newModels = new HashMap<>(oldModels.contents());
|
||||||
var resources = resourceManager.findResources(
|
var resources = resourceManager.findResources(
|
||||||
"models/item",
|
"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.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": "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-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": "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.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",
|
"firmament.config.custom-skyblock-textures.recolor-text": "Allow packs to recolor text",
|
||||||
|
|||||||
Reference in New Issue
Block a user