Skip to content

Commit

Permalink
Prepare 1.21.4
Browse files Browse the repository at this point in the history
  • Loading branch information
tr7zw committed Dec 1, 2024
1 parent 93aaad3 commit 0adf2f0
Show file tree
Hide file tree
Showing 8 changed files with 484 additions and 145 deletions.
387 changes: 333 additions & 54 deletions .github/workflows/tag.yml

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion gradle-compose.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
version: '0.0.2'
source: "https://github.com/tr7zw/ProcessedModTemplate/tree/master"
source: "https://github.com/tr7zw/ProcessedModTemplate/tree/dev1.21.4"
replacements:
name: "3d-Skin-Layers"
id: "skinlayers3d"
Expand Down
3 changes: 2 additions & 1 deletion settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"1.21-fabric",
"1.21.3-forge",
"1.21.3-neoforge",
"1.21.3-fabric"
"1.21.3-fabric",
"1.21.4-fabric"
]
}
12 changes: 10 additions & 2 deletions src/main/java/dev/tr7zw/skinlayers/SkullRendererCache.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,21 @@
import dev.tr7zw.skinlayers.accessor.SkullSettings;
import dev.tr7zw.skinlayers.api.Mesh;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack;
//#if MC >= 12104
import com.mojang.authlib.GameProfile;
//#else
//$$import net.minecraft.world.item.ItemStack;
//#endif

public class SkullRendererCache {

public static boolean renderNext = false;
public static SkullSettings lastSkull = null;
public static WeakHashMap<ItemStack, SkullSettings> itemCache = new WeakHashMap<>();
//#if MC >= 12104
public static WeakHashMap<GameProfile, SkullSettings> itemCache = new WeakHashMap<>();
//#else
//$$public static WeakHashMap<ItemStack, SkullSettings> itemCache = new WeakHashMap<>();
//#endif

public static class ItemSettings implements SkullSettings {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,54 +16,75 @@
import dev.tr7zw.skinlayers.SkinUtil;
import dev.tr7zw.skinlayers.SkullRendererCache.ItemSettings;
import dev.tr7zw.skinlayers.accessor.SkullSettings;
import dev.tr7zw.util.NMSHelper;
import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer;
import net.minecraft.client.renderer.MultiBufferSource;

import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;

import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.AbstractSkullBlock;
import net.minecraft.world.level.block.Block;

//spotless:off
//#if MC >= 11904
import net.minecraft.world.item.ItemDisplayContext;
//#else
//$$ import net.minecraft.client.renderer.block.model.ItemTransforms;
//#endif
//spotless:on
//#if MC >= 12104
import net.minecraft.client.renderer.special.SkullSpecialRenderer;
import net.minecraft.world.item.component.ResolvableProfile;

@Mixin(BlockEntityWithoutLevelRenderer.class)
@Mixin(SkullSpecialRenderer.class)
public class BlockEntityWithoutLevelRendererMixin {

@Inject(method = "renderByItem", at = @At("HEAD"))
// spotless:off
//#if MC >= 11904
public void renderByItem(ItemStack itemStack, ItemDisplayContext itemDisplayContext, PoseStack poseStack,
MultiBufferSource multiBufferSource, int i, int j, CallbackInfo info) {
//#else
//$$ public void renderByItem(ItemStack itemStack, ItemTransforms.TransformType transformType, PoseStack poseStack,
//$$ MultiBufferSource multiBufferSource, int i, int j, CallbackInfo info) {
//#endif
// spotless:on
if (!SkinLayersModBase.config.enableSkullsItems)
return;
Item item = itemStack.getItem();
if (item instanceof BlockItem) {
Block block = ((BlockItem) item).getBlock();
if (block instanceof AbstractSkullBlock) {
GameProfile gameProfile = NMSHelper.getGameProfile(itemStack);
if (gameProfile != null) {
lastSkull = (SkullSettings) itemCache.computeIfAbsent(itemStack, it -> new ItemSettings());
if (!lastSkull.initialized() && lastSkull.getHeadLayers() == null) {
SkinUtil.setup3dLayers(gameProfile, lastSkull);
}
renderNext = lastSkull.getHeadLayers() != null;
@Inject(method = "render", at = @At("HEAD"))
public void render(ResolvableProfile resolvableProfile, ItemDisplayContext itemDisplayContext, PoseStack poseStack,
MultiBufferSource multiBufferSource, int i, int j, boolean bl, CallbackInfo ci) {
if (SkinLayersModBase.config.enableSkullsItems && resolvableProfile.isResolved()) {
GameProfile gameProfile = resolvableProfile.gameProfile();
if (gameProfile != null) {
lastSkull = (SkullSettings) itemCache.computeIfAbsent(gameProfile, it -> new ItemSettings());
if (!lastSkull.initialized() && lastSkull.getHeadLayers() == null) {
SkinUtil.setup3dLayers(gameProfile, lastSkull);
}
renderNext = lastSkull.getHeadLayers() != null;
}
}
}

}
//#else
//$$import dev.tr7zw.util.NMSHelper;
//$$import net.minecraft.world.item.BlockItem;
//$$import net.minecraft.world.item.Item;
//$$
//$$import net.minecraft.world.item.ItemStack;
//$$import net.minecraft.world.level.block.AbstractSkullBlock;
//$$import net.minecraft.world.level.block.Block;
//$$import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer;
//$$@Mixin(BlockEntityWithoutLevelRenderer.class)
//$$public class BlockEntityWithoutLevelRendererMixin {
//$$
//$$ @Inject(method = "renderByItem", at = @At("HEAD"))
//$$ // spotless:off
//$$ //#if MC >= 11904
//$$ public void renderByItem(ItemStack itemStack, ItemDisplayContext itemDisplayContext, PoseStack poseStack,
//$$ MultiBufferSource multiBufferSource, int i, int j, CallbackInfo info) {
//$$ //#else
//$$ //$$ public void renderByItem(ItemStack itemStack, ItemTransforms.TransformType transformType, PoseStack poseStack,
//$$ //$$ MultiBufferSource multiBufferSource, int i, int j, CallbackInfo info) {
//$$ //#endif
//$$ // spotless:on
//$$ if (!SkinLayersModBase.config.enableSkullsItems)
//$$ return;
//$$ Item item = itemStack.getItem();
//$$ if (item instanceof BlockItem) {
//$$ Block block = ((BlockItem) item).getBlock();
//$$ if (block instanceof AbstractSkullBlock) {
//$$ GameProfile gameProfile = NMSHelper.getGameProfile(itemStack);
//$$ if (gameProfile != null) {
//$$ lastSkull = (SkullSettings) itemCache.computeIfAbsent(itemStack, it -> new ItemSettings());
//$$ if (!lastSkull.initialized() && lastSkull.getHeadLayers() == null) {
//$$ SkinUtil.setup3dLayers(gameProfile, lastSkull);
//$$ }
//$$ renderNext = lastSkull.getHeadLayers() != null;
//$$ }
//$$ }
//$$ }
//$$ }
//$$
//$$}
//#endif
62 changes: 41 additions & 21 deletions src/main/java/dev/tr7zw/skinlayers/mixin/CustomHeadLayerMixin.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,24 @@
import dev.tr7zw.skinlayers.SkinUtil;
import dev.tr7zw.skinlayers.SkullRendererCache.ItemSettings;
import dev.tr7zw.skinlayers.accessor.SkullSettings;
import dev.tr7zw.util.NMSHelper;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.EntityModel;
import net.minecraft.client.model.HeadedModel;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.entity.layers.CustomHeadLayer;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.AbstractSkullBlock;

//#if MC < 12104
//$$import com.mojang.authlib.GameProfile;
//$$import dev.tr7zw.skinlayers.SkinUtil;
//$$import dev.tr7zw.skinlayers.SkullRendererCache.ItemSettings;
//$$import dev.tr7zw.skinlayers.accessor.SkullSettings;
//$$import dev.tr7zw.util.NMSHelper;
//$$import net.minecraft.world.item.BlockItem;
//$$import net.minecraft.world.item.Item;
//$$import net.minecraft.world.item.ItemStack;
//$$import net.minecraft.world.level.block.AbstractSkullBlock;
//#endif

@Mixin(CustomHeadLayer.class)
public class CustomHeadLayerMixin<T extends LivingEntity, M extends EntityModel & HeadedModel> {
Expand All @@ -44,7 +51,18 @@ public void render(PoseStack poseStack, MultiBufferSource multiBufferSource, int
* SkinLayersModBase.config.renderDistanceLOD) {
return; // too far away
}
setupHeadRendering(livingEntityRenderState.headItem);
//#if MC >= 12104
if ((!livingEntityRenderState.headItem.isEmpty() || livingEntityRenderState.wornHeadType != null) && livingEntityRenderState.wornHeadProfile.isResolved()) {
GameProfile gameProfile = livingEntityRenderState.wornHeadProfile.gameProfile();
lastSkull = (SkullSettings) itemCache.computeIfAbsent(gameProfile, it -> new ItemSettings());
if (!lastSkull.initialized() && lastSkull.getHeadLayers() == null) {
SkinUtil.setup3dLayers(gameProfile, lastSkull);
}
renderNext = lastSkull.getHeadLayers() != null;
}
//#else
//$$setupHeadRendering(livingEntityRenderState.headItem);
//#endif
}
//#else
//$$ @SuppressWarnings("resource")
Expand All @@ -61,20 +79,22 @@ public void render(PoseStack poseStack, MultiBufferSource multiBufferSource, int
//#endif
//spotless:on

private void setupHeadRendering(ItemStack itemStack) {
if (!SkinLayersModBase.config.enableSkulls || itemStack.isEmpty())
return;
Item item = itemStack.getItem();
if (item instanceof BlockItem && ((BlockItem) item).getBlock() instanceof AbstractSkullBlock) {
GameProfile gameProfile = NMSHelper.getGameProfile(itemStack);
if (gameProfile != null) {
lastSkull = (SkullSettings) itemCache.computeIfAbsent(itemStack, it -> new ItemSettings());
if (!lastSkull.initialized() && lastSkull.getHeadLayers() == null) {
SkinUtil.setup3dLayers(gameProfile, lastSkull);
}
renderNext = lastSkull.getHeadLayers() != null;
}
}
}
//#if MC < 12104
//$$private void setupHeadRendering(ItemStack itemStack) {
//$$ if (!SkinLayersModBase.config.enableSkulls || itemStack.isEmpty())
//$$ return;
//$$ Item item = itemStack.getItem();
//$$ if (item instanceof BlockItem && ((BlockItem) item).getBlock() instanceof AbstractSkullBlock) {
//$$ GameProfile gameProfile = NMSHelper.getGameProfile(itemStack);
//$$ if (gameProfile != null) {
//$$ lastSkull = (SkullSettings) itemCache.computeIfAbsent(itemStack, it -> new ItemSettings());
//$$ if (!lastSkull.initialized() && lastSkull.getHeadLayers() == null) {
//$$ SkinUtil.setup3dLayers(gameProfile, lastSkull);
//$$ }
//$$ renderNext = lastSkull.getHeadLayers() != null;
//$$ }
//$$ }
//$$}
//#endif

}
70 changes: 40 additions & 30 deletions src/main/java/dev/tr7zw/skinlayers/mixin/HttpTextureMixin.java
Original file line number Diff line number Diff line change
@@ -1,36 +1,46 @@
package dev.tr7zw.skinlayers.mixin;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;

import com.mojang.blaze3d.platform.NativeImage;

import dev.tr7zw.skinlayers.accessor.HttpTextureAccessor;
import net.minecraft.client.renderer.texture.AbstractTexture;
import net.minecraft.client.renderer.texture.HttpTexture;

@Mixin(HttpTexture.class)
public abstract class HttpTextureMixin extends AbstractTexture implements HttpTextureAccessor {

@Shadow
private File file;

@Override
public NativeImage getImage() throws FileNotFoundException {
if (this.file != null && this.file.isFile()) {
FileInputStream fileInputStream = new FileInputStream(this.file);
NativeImage nativeImage = load(fileInputStream);
return nativeImage;
}
return null;
}

@Shadow
public abstract NativeImage load(InputStream inputStream);
import net.minecraft.client.Minecraft;

//#if MC >= 12104
@Mixin(Minecraft.class)
public abstract class HttpTextureMixin {
// Not a thing in 1.21.4+
}
//#else
//$$import java.io.File;
//$$import java.io.FileInputStream;
//$$import java.io.FileNotFoundException;
//$$import java.io.InputStream;
//$$
//$$import org.spongepowered.asm.mixin.Shadow;
//$$
//$$import com.mojang.blaze3d.platform.NativeImage;
//$$
//$$import dev.tr7zw.skinlayers.accessor.HttpTextureAccessor;
//$$import net.minecraft.client.renderer.texture.AbstractTexture;
//$$import net.minecraft.client.renderer.texture.HttpTexture;
//$$
//$$@Mixin(HttpTexture.class)
//$$public abstract class HttpTextureMixin extends AbstractTexture implements HttpTextureAccessor {
//$$
//$$ @Shadow
//$$ private File file;
//$$
//$$ @Override
//$$ public NativeImage getImage() throws FileNotFoundException {
//$$ if (this.file != null && this.file.isFile()) {
//$$ FileInputStream fileInputStream = new FileInputStream(this.file);
//$$ NativeImage nativeImage = load(fileInputStream);
//$$ return nativeImage;
//$$ }
//$$ return null;
//$$ }
//$$
//$$ @Shadow
//$$ public abstract NativeImage load(InputStream inputStream);
//$$
//$$}
//#endif
2 changes: 1 addition & 1 deletion versions/mainProject
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.21.3-fabric
1.21.4-fabric

0 comments on commit 0adf2f0

Please sign in to comment.