Skip to content

Commit 102eeac

Browse files
committed
Merge remote-tracking branch 'origin/1.21.6/dev' into 1.21.10/dev
2 parents 7b15afb + 2defd9c commit 102eeac

5 files changed

Lines changed: 100 additions & 9 deletions

File tree

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package me.pepperbell.continuity.client.mixin;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
import org.jetbrains.annotations.Nullable;
7+
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.Unique;
9+
import org.spongepowered.asm.mixin.injection.At;
10+
import org.spongepowered.asm.mixin.injection.Inject;
11+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
12+
13+
import com.llamalad7.mixinextras.sugar.Local;
14+
15+
import me.pepperbell.continuity.client.config.ContinuityConfig;
16+
import me.pepperbell.continuity.client.mixinterface.SpriteExtension;
17+
import me.pepperbell.continuity.client.util.QuadUtil;
18+
import net.minecraft.client.item.ItemModelManager;
19+
import net.minecraft.client.render.item.ItemRenderState;
20+
import net.minecraft.client.render.item.model.BasicItemModel;
21+
import net.minecraft.client.render.item.tint.TintSource;
22+
import net.minecraft.client.render.model.BakedQuad;
23+
import net.minecraft.client.render.model.ModelSettings;
24+
import net.minecraft.client.texture.Sprite;
25+
import net.minecraft.client.world.ClientWorld;
26+
import net.minecraft.item.ItemDisplayContext;
27+
import net.minecraft.item.ItemStack;
28+
import net.minecraft.util.HeldItemContext;
29+
30+
@Mixin(BasicItemModel.class)
31+
abstract class BasicItemModelMixin {
32+
@Unique
33+
private static final Object EMISSIVE_GEOMETRY_MARKER = new Object();
34+
35+
@Unique
36+
@Nullable
37+
private List<BakedQuad> emissiveQuads;
38+
@Unique
39+
private boolean emissiveAnimated = false;
40+
41+
@Inject(method = "<init>(Ljava/util/List;Ljava/util/List;Lnet/minecraft/client/render/model/ModelSettings;)V", at = @At("RETURN"))
42+
private void onReturnInit(List<TintSource> tints, List<BakedQuad> quads, ModelSettings settings, CallbackInfo ci) {
43+
for (BakedQuad quad : quads) {
44+
Sprite emissiveSprite = ((SpriteExtension) quad.sprite()).continuity$getEmissiveSprite();
45+
if (emissiveSprite != null) {
46+
int[] emissiveVertexData = quad.vertexData().clone();
47+
QuadUtil.interpolate(emissiveVertexData, quad.sprite(), emissiveSprite);
48+
BakedQuad emissiveQuad = new BakedQuad(emissiveVertexData, quad.tintIndex(), quad.face(), emissiveSprite, false, 15);
49+
50+
if (emissiveQuads == null) {
51+
emissiveQuads = new ArrayList<>();
52+
}
53+
emissiveQuads.add(emissiveQuad);
54+
55+
if (emissiveSprite.getContents().isAnimated()) {
56+
emissiveAnimated = true;
57+
}
58+
}
59+
}
60+
}
61+
62+
@Inject(method = "update(Lnet/minecraft/client/render/item/ItemRenderState;Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/item/ItemModelManager;Lnet/minecraft/item/ItemDisplayContext;Lnet/minecraft/client/world/ClientWorld;Lnet/minecraft/util/HeldItemContext;I)V", at = @At(value = "INVOKE", target = "java/util/List.addAll(Ljava/util/Collection;)Z", remap = false, shift = At.Shift.AFTER))
63+
private void afterAddVanillaQuads(ItemRenderState state, ItemStack stack, ItemModelManager resolver, ItemDisplayContext displayContext, @Nullable ClientWorld world, @Nullable HeldItemContext heldItemContext, int seed, CallbackInfo ci, @Local ItemRenderState.LayerRenderState layerRenderState) {
64+
if (emissiveQuads != null && ContinuityConfig.INSTANCE.emissiveTextures.get()) {
65+
layerRenderState.getQuads().addAll(emissiveQuads);
66+
state.addModelKey(EMISSIVE_GEOMETRY_MARKER);
67+
68+
if (emissiveAnimated) {
69+
state.markAnimated();
70+
}
71+
}
72+
}
73+
}

src/main/java/me/pepperbell/continuity/client/util/QuadUtil.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,23 @@ public static void interpolate(MutableQuadView quad, Sprite oldSprite, Sprite ne
2727
}
2828
}
2929

30+
public static void interpolate(int[] vertexData, Sprite oldSprite, Sprite newSprite) {
31+
float oldMinU = oldSprite.getMinU();
32+
float oldMinV = oldSprite.getMinV();
33+
float newMinU = newSprite.getMinU();
34+
float newMinV = newSprite.getMinV();
35+
float uFactor = (newSprite.getMaxU() - newMinU) / (oldSprite.getMaxU() - oldMinU);
36+
float vFactor = (newSprite.getMaxV() - newMinV) / (oldSprite.getMaxV() - oldMinV);
37+
for (int i = 0; i < 4; i++) {
38+
float u = Float.intBitsToFloat(vertexData[i * 8 + 4]);
39+
float v = Float.intBitsToFloat(vertexData[i * 8 + 5]);
40+
u = newMinU + (u - oldMinU) * uFactor;
41+
v = newMinV + (v - oldMinV) * vFactor;
42+
vertexData[i * 8 + 4] = Float.floatToRawIntBits(u);
43+
vertexData[i * 8 + 5] = Float.floatToRawIntBits(v);
44+
}
45+
}
46+
3047
public static void assignLerpedUvs(MutableQuadView quad, Sprite sprite) {
3148
float delta = sprite.getUvScaleDelta();
3249
float centerU = (sprite.getMinU() + sprite.getMaxU()) * 0.5f;

src/main/resources/assets/continuity/lang/ko_kr.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{
22
"options.continuity.title": "Continuity 설정",
3-
"options.continuity.connected_textures": "연결된 텍스쳐",
4-
"options.continuity.connected_textures.tooltip": "블록의 연결된 텍스쳐를 활성화 하거나 비활성화 합니다.",
5-
"options.continuity.emissive_textures": "빛나는 텍스쳐",
6-
"options.continuity.emissive_textures.tooltip": "블록 및 아이템 모델의 빛나는 텍스쳐를 활성화 하거나 비활성화 합니다.",
7-
"options.continuity.custom_block_layers": "블록 레이어",
8-
"options.continuity.custom_block_layers.tooltip": "블록 레이어 사용자화를 활성화 하거나 비활성화 합니다.",
3+
"options.continuity.connected_textures": "연결된 텍스처",
4+
"options.continuity.connected_textures.tooltip": "블록에 대한 연결된 텍스처를 활성화하거나 비활성화합니다.",
5+
"options.continuity.emissive_textures": "빛나는 텍스처",
6+
"options.continuity.emissive_textures.tooltip": "블록 및 아이템 모델에 대한 빛나는 텍스처를 활성화하거나 비활성화합니다.",
7+
"options.continuity.custom_block_layers": "사용자 지정 블록 레이어",
8+
"options.continuity.custom_block_layers.tooltip": "사용자 지정 블록 레이어를 활성화하거나 비활성화합니다.",
99
"resourcePack.continuity.default.name": "기본 Continuity 텍스처",
1010
"resourcePack.continuity.default.description": "유리, 사암, 책장",
1111
"resourcePack.continuity.glass_pane_culling_fix.name": "유리판 컬링 수정",
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
22
"options.continuity.title": "کونفيݢوراسي Continuity",
33
"options.continuity.connected_textures": "تيکستور برسامبوڠ",
4-
"options.continuity.connected_textures.tooltip": "دايکن اتاو ڽهدايکن تيکستور يڠ دسامبوڠکن اونتوق بلوک.",
4+
"options.continuity.connected_textures.tooltip": "داياکن اتاو ڽهداياکن تيکستور يڠ برسامبوڠ اونتوق بلوک.",
55
"options.continuity.emissive_textures": "تيکستور ايميسيف",
6-
"options.continuity.emissive_textures.tooltip": "دايکن اتاو ڽهدايکن تيکستور ايميسيف اونتوق موديل بلوک دان اءيتم.",
6+
"options.continuity.emissive_textures.tooltip": "داياکن اتاو ڽهدايکن تيکستور ايميسيف اونتوق موديل بلوک دان اٴيتم.",
77
"options.continuity.custom_block_layers": "لاڤيسن بلوک ترسواي",
8-
"options.continuity.custom_block_layers.tooltip": "دايکن اتاو ڽهدايکن لاڤيسن بلوک ترسواي."
8+
"options.continuity.custom_block_layers.tooltip": "داياکن اتاو ڽهداياکن لاڤيسن بلوک ترسواي."
99
}

src/main/resources/continuity.mixins.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"client": [
77
"AtlasLoaderMixin",
88
"AtlasManagerMixin",
9+
"BasicItemModelMixin",
910
"LifecycledResourceManagerImplMixin",
1011
"RenderLayersMixin",
1112
"SpriteLoaderMixin",

0 commit comments

Comments
 (0)