Skip to content

Commit

Permalink
Compat!
Browse files Browse the repository at this point in the history
  • Loading branch information
enjarai committed Jun 20, 2023
1 parent c69c2b5 commit 8409df1
Show file tree
Hide file tree
Showing 6 changed files with 197 additions and 3 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
- Marked compatible with 1.20.1
- Fixed compatibility with Wildfire's Female Gender Mod's breastplate rendering.
- Switched `fabric` dependency to `fabric-api` to be clearer to users.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ yarn_mappings=1.20+build.1
loader_version=0.14.21

# Mod Properties
mod_version = 1.6.5
mod_version = 1.6.6
maven_group = nl.enjarai
archives_base_name = show-me-your-skin

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package nl.enjarai.showmeyourskin.compat.wildfire_gender;

import nl.enjarai.cicada.api.compat.CompatMixinPlugin;

import java.util.Set;

public class WildfireGenderMixinPlugin implements CompatMixinPlugin {
@Override
public Set<String> getRequiredMods() {
return Set.of("wildfire_gender");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
package nl.enjarai.showmeyourskin.compat.wildfire_gender.mixin;

import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.llamalad7.mixinextras.sugar.Local;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.TexturedRenderLayers;
import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.item.ItemRenderer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ArmorItem;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Identifier;
import nl.enjarai.showmeyourskin.client.ModRenderLayers;
import nl.enjarai.showmeyourskin.config.HideableEquipment;
import nl.enjarai.showmeyourskin.config.ModConfig;
import nl.enjarai.showmeyourskin.util.ArmorContext;
import nl.enjarai.showmeyourskin.util.MixinContext;
import org.spongepowered.asm.mixin.Dynamic;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyArg;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Pseudo
@Mixin(targets = "com.wildfire.render.GenderLayer")
public abstract class GenderLayerMixin {
@Dynamic
@Inject(
method = "Lcom/wildfire/render/GenderLayer;renderVanillaLikeBreastArmor(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/item/ArmorItem;Lnet/minecraft/item/ItemStack;IZ)V",
at = @At("HEAD"),
cancellable = true
)
private void showmeyourskin$cancelBreastArmorRendering(PlayerEntity player, MatrixStack matrixStack,
VertexConsumerProvider vertexConsumerProvider,
ArmorItem armorItem, ItemStack armorStack,
int packedLightIn, boolean left, CallbackInfo ci) {
if (ModConfig.INSTANCE.getApplicablePieceTransparency(player.getUuid(), HideableEquipment.CHEST) <= 0) {
ci.cancel();
} else {
MixinContext.ARMOR.setContext(new ArmorContext(HideableEquipment.CHEST, player));
}
}

@Dynamic
@ModifyExpressionValue(
method = "Lcom/wildfire/render/GenderLayer;renderVanillaLikeBreastArmor(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/item/ArmorItem;Lnet/minecraft/item/ItemStack;IZ)V",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/item/ItemStack;hasGlint()Z"
)
)
private boolean showmeyourskin$modifyBreastArmorGlint(boolean original, @Local(argsOnly = true) PlayerEntity player) {
return original && ModConfig.INSTANCE.getApplicableGlintTransparency(player.getUuid(), HideableEquipment.CHEST) > 0;
}

@Dynamic
@WrapOperation(
method = "Lcom/wildfire/render/GenderLayer;renderVanillaLikeBreastArmor(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/item/ArmorItem;Lnet/minecraft/item/ItemStack;IZ)V",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/render/item/ItemRenderer;getArmorGlintConsumer(Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/client/render/RenderLayer;ZZ)Lnet/minecraft/client/render/VertexConsumer;"
),
require = 2
)
private VertexConsumer showmeyourskin$enableBreastArmorTransparency1(VertexConsumerProvider vertexConsumerProvider,
RenderLayer renderLayer, boolean solid,
boolean hasGlint, Operation<VertexConsumer> original,
@Local(argsOnly = true) PlayerEntity player) {
var transparency = ModConfig.INSTANCE.getApplicablePieceTransparency(player.getUuid(), HideableEquipment.CHEST);
if (transparency < 1) {
return ItemRenderer.getDirectItemGlintConsumer(vertexConsumerProvider, renderLayer, solid, hasGlint);
}

return original.call(vertexConsumerProvider, renderLayer, solid, hasGlint);
}

@Dynamic
@WrapOperation(
method = "Lcom/wildfire/render/GenderLayer;renderVanillaLikeBreastArmor(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/item/ArmorItem;Lnet/minecraft/item/ItemStack;IZ)V",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/render/RenderLayer;getArmorCutoutNoCull(Lnet/minecraft/util/Identifier;)Lnet/minecraft/client/render/RenderLayer;"
),
require = 2
)
private RenderLayer showmeyourskin$enableBreastArmorTransparency2(Identifier texture, Operation<RenderLayer> original,
@Local(argsOnly = true) PlayerEntity player) {
var transparency = ModConfig.INSTANCE.getApplicablePieceTransparency(player.getUuid(), HideableEquipment.CHEST);
if (transparency < 1) {
return RenderLayer.getEntityTranslucent(texture);
}

return original.call(texture);
}

@Dynamic
@ModifyArg(
method = "Lcom/wildfire/render/GenderLayer;renderVanillaLikeBreastArmor(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/item/ArmorItem;Lnet/minecraft/item/ItemStack;IZ)V",
at = @At(
value = "INVOKE",
target = "Lcom/wildfire/render/GenderLayer;renderBox(Lcom/wildfire/render/WildfireModelRenderer$ModelBox;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;IIFFFF)V"
),
index = 8,
require = 2
)
private float showmeyourskin$applyBreastArmorTransparency(float original, @Local(argsOnly = true) PlayerEntity player) {
var transparency = ModConfig.INSTANCE.getApplicablePieceTransparency(player.getUuid(), HideableEquipment.CHEST);
if (transparency < 1) {
return transparency;
}

return original;
}

@Dynamic
@ModifyArg(
method = "Lcom/wildfire/render/GenderLayer;renderArmorTrim(Lnet/minecraft/item/ArmorMaterial;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/item/trim/ArmorTrim;ZZ)V",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/texture/Sprite;getTextureSpecificVertexConsumer(Lnet/minecraft/client/render/VertexConsumer;)Lnet/minecraft/client/render/VertexConsumer;"
)
)
private VertexConsumer showmeyourskin$enableBreastArmorTrimTransparency(VertexConsumer original, @Local(argsOnly = true) VertexConsumerProvider vertexConsumers) {
var ctx = MixinContext.ARMOR.getContext();

if (ctx != null && ctx.shouldModify()) {
var t = ctx.getApplicableTrimTransparency();

if (t < 1) {
return vertexConsumers.getBuffer(ModRenderLayers.ARMOR_TRANSLUCENT_NO_CULL.apply(TexturedRenderLayers.ARMOR_TRIMS_ATLAS_TEXTURE));
}
}

return original;
}

@Dynamic
@ModifyArg(
method = "Lcom/wildfire/render/GenderLayer;renderArmorTrim(Lnet/minecraft/item/ArmorMaterial;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/item/trim/ArmorTrim;ZZ)V",
at = @At(
value = "INVOKE",
target = "Lcom/wildfire/render/GenderLayer;renderBox(Lcom/wildfire/render/WildfireModelRenderer$ModelBox;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;IIFFFF)V"
),
index = 8
)
private float showmeyourskin$applyBreastArmorTrimTransparency(float original) {
var ctx = MixinContext.ARMOR.getContext();

if (ctx != null && ctx.shouldModify()) {
var t = ctx.getApplicableTrimTransparency();

if (t < 1) {
return t;
}
}

return original;
}
}
3 changes: 2 additions & 1 deletion src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,13 @@
},
"mixins": [
"showmeyourskin.mixins.json",
"showmeyourskin.compat.wildfire_gender.mixins.json",
"showmeyourskin.compat.elytratrinket.mixins.json"
],
"accessWidener" : "showmeyourskin.accesswidener",

"depends": {
"fabric": "*",
"fabric-api": "*",
"minecraft": ">=1.20- <1.20.2-",
"cicada": "*",
"cardinal-components-base": "*",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"required": true,
"minVersion": "0.8",
"package": "nl.enjarai.showmeyourskin.compat.wildfire_gender.mixin",
"plugin": "nl.enjarai.showmeyourskin.compat.wildfire_gender.WildfireGenderMixinPlugin",
"compatibilityLevel": "JAVA_17",
"mixins": [
],
"client": [
"GenderLayerMixin"
],
"injectors": {
"defaultRequire": 1
}
}

0 comments on commit 8409df1

Please sign in to comment.