Skip to content

Commit 021bde2

Browse files
committed
Tell Sodium to keep animating sparks and Tiara wing textures
(fixes #4580)
1 parent 1cdc80e commit 021bde2

File tree

10 files changed

+74
-0
lines changed

10 files changed

+74
-0
lines changed

Fabric/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ dependencies {
134134

135135
modCompileOnly 'teamreborn:energy:3.0.0'
136136

137+
modCompileOnly('maven.modrinth:sodium:mc1.20.1-0.5.3') { transitive = false }
138+
137139
// modCompileOnly 'com.blamejared.crafttweaker:CraftTweaker-fabric-1.18.2:9.1.123'
138140

139141
modCompileOnly 'com.unascribed:ears-api:1.4.5'

Fabric/src/main/java/vazkii/botania/fabric/client/FabricClientXplatImpl.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package vazkii.botania.fabric.client;
22

3+
import com.google.common.base.Supplier;
4+
import com.google.common.base.Suppliers;
35
import com.mojang.blaze3d.vertex.PoseStack;
46

57
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
68
import net.minecraft.client.Minecraft;
79
import net.minecraft.client.renderer.ItemBlockRenderTypes;
810
import net.minecraft.client.renderer.MultiBufferSource;
911
import net.minecraft.client.renderer.texture.AbstractTexture;
12+
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
1013
import net.minecraft.client.resources.model.BakedModel;
1114
import net.minecraft.core.BlockPos;
1215
import net.minecraft.network.chat.Component;
@@ -22,8 +25,10 @@
2225
import vazkii.botania.api.BotaniaFabricClientCapabilities;
2326
import vazkii.botania.api.block.WandHUD;
2427
import vazkii.botania.api.item.TinyPotatoRenderCallback;
28+
import vazkii.botania.fabric.integration.sodium.SodiumHelper;
2529
import vazkii.botania.network.BotaniaPacket;
2630
import vazkii.botania.xplat.ClientXplatAbstractions;
31+
import vazkii.botania.xplat.XplatAbstractions;
2732

2833
public class FabricClientXplatImpl implements ClientXplatAbstractions {
2934
@Override
@@ -70,4 +75,14 @@ public void tessellateBlock(Level level, BlockState state, BlockPos pos, PoseSta
7075
brd.getModelRenderer().tesselateBlock(level, brd.getBlockModel(state), state, pos, ps,
7176
buffer, true, RandomSource.create(), state.getSeed(pos), overlay);
7277
}
78+
79+
@Override
80+
public void markSpriteActive(TextureAtlasSprite sprite) {
81+
if (sodiumLoaded.get()) {
82+
SodiumHelper.markSpriteActive(sprite);
83+
}
84+
}
85+
86+
private final Supplier<Boolean> sodiumLoaded = Suppliers.memoize(() -> XplatAbstractions.INSTANCE.isModLoaded("sodium")
87+
|| XplatAbstractions.INSTANCE.isModLoaded("embeddium"));
7388
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package vazkii.botania.fabric.integration.sodium;
2+
3+
import me.jellysquid.mods.sodium.client.render.texture.SpriteUtil;
4+
5+
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
6+
7+
public class SodiumHelper {
8+
9+
public static void markSpriteActive(TextureAtlasSprite sprite) {
10+
// this should work with both the actual Sodium and the Fabric backport of its Forge port Embeddium
11+
SpriteUtil.markSpriteActive(sprite);
12+
}
13+
}

Forge/build.gradle

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,13 @@ repositories {
3636
includeGroup "com.unascribed"
3737
}
3838
}
39+
maven {
40+
name = "Modrinth"
41+
url = "https://api.modrinth.com/maven" // for Sodium ports
42+
content {
43+
includeGroup "maven.modrinth"
44+
}
45+
}
3946
}
4047

4148
legacyForge {
@@ -98,6 +105,8 @@ dependencies {
98105

99106
modCompileOnly('com.unascribed:ears-api:1.4.5')
100107

108+
modCompileOnly('maven.modrinth:rubidium:0.7.0') { transitive = false }
109+
101110
compileOnly "org.jetbrains:annotations:24.0.1"
102111
}
103112

Forge/src/main/java/vazkii/botania/forge/client/ForgeClientXplatImpl.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package vazkii.botania.forge.client;
22

3+
import com.google.common.base.Supplier;
4+
import com.google.common.base.Suppliers;
35
import com.mojang.blaze3d.vertex.PoseStack;
46

57
import net.minecraft.client.Minecraft;
68
import net.minecraft.client.renderer.MultiBufferSource;
79
import net.minecraft.client.renderer.RenderType;
810
import net.minecraft.client.renderer.texture.AbstractTexture;
11+
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
912
import net.minecraft.client.resources.model.BakedModel;
1013
import net.minecraft.core.BlockPos;
1114
import net.minecraft.network.chat.Component;
@@ -23,9 +26,11 @@
2326
import vazkii.botania.api.block.WandHUD;
2427
import vazkii.botania.api.item.TinyPotatoRenderEvent;
2528
import vazkii.botania.forge.CapabilityUtil;
29+
import vazkii.botania.forge.integration.rubidium.RubidiumHelper;
2630
import vazkii.botania.forge.network.ForgePacketHandler;
2731
import vazkii.botania.network.BotaniaPacket;
2832
import vazkii.botania.xplat.ClientXplatAbstractions;
33+
import vazkii.botania.xplat.XplatAbstractions;
2934

3035
public class ForgeClientXplatImpl implements ClientXplatAbstractions {
3136
@Override
@@ -77,4 +82,13 @@ public void tessellateBlock(Level level, BlockState state, BlockPos pos, PoseSta
7782
state.getSeed(pos), overlay, modelData, type);
7883
}
7984
}
85+
86+
@Override
87+
public void markSpriteActive(TextureAtlasSprite sprite) {
88+
if (rubidiumLoaded.get()) {
89+
RubidiumHelper.markSpriteActive(sprite);
90+
}
91+
}
92+
93+
private final Supplier<Boolean> rubidiumLoaded = Suppliers.memoize(() -> XplatAbstractions.INSTANCE.isModLoaded("rubidium"));
8094
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package vazkii.botania.forge.integration.rubidium;
2+
3+
import me.jellysquid.mods.sodium.client.render.texture.SpriteUtil;
4+
5+
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
6+
7+
public class RubidiumHelper {
8+
9+
public static void markSpriteActive(TextureAtlasSprite sprite) {
10+
// this should work with all Sodium ports
11+
SpriteUtil.markSpriteActive(sprite);
12+
}
13+
}

Xplat/src/main/java/vazkii/botania/client/render/entity/BaseSparkRenderer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import vazkii.botania.common.entity.SparkBaseEntity;
2828
import vazkii.botania.common.helper.ColorHelper;
2929
import vazkii.botania.common.helper.VecHelper;
30+
import vazkii.botania.xplat.ClientXplatAbstractions;
3031

3132
import java.util.Objects;
3233
import java.util.Random;
@@ -52,6 +53,7 @@ public BaseSparkRenderer(EntityRendererProvider.Context ctx) {
5253
@Override
5354
public void render(@NotNull T tEntity, float yaw, float partialTicks, PoseStack ms, MultiBufferSource buffers, int light) {
5455
TextureAtlasSprite iicon = getBaseIcon(tEntity);
56+
ClientXplatAbstractions.instance().markSpriteActive(iicon);
5557

5658
ms.pushPose();
5759

Xplat/src/main/java/vazkii/botania/common/item/equipment/bauble/FlugelTiaraItem.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import vazkii.botania.common.item.CustomCreativeTabContents;
5353
import vazkii.botania.common.item.StoneOfTemperanceItem;
5454
import vazkii.botania.common.proxy.Proxy;
55+
import vazkii.botania.xplat.ClientXplatAbstractions;
5556

5657
import java.util.ArrayList;
5758
import java.util.Collections;
@@ -413,6 +414,7 @@ public void doRender(HumanoidModel<?> bipedModel, ItemStack stack, LivingEntity
413414
}
414415

415416
BakedModel model = MiscellaneousModels.INSTANCE.tiaraWingIcons[meta - 1];
417+
ClientXplatAbstractions.instance().markSpriteActive(model.getParticleIcon());
416418
boolean flying = living instanceof Player player && player.getAbilities().flying;
417419
float flap = 20F + (float) ((Math.sin((double) (living.tickCount + partialTicks) * (flying ? 0.4F : 0.2F)) + 0.5F) * (flying ? 30F : 5F));
418420

Xplat/src/main/java/vazkii/botania/xplat/ClientXplatAbstractions.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import net.minecraft.client.renderer.MultiBufferSource;
66
import net.minecraft.client.renderer.texture.AbstractTexture;
7+
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
78
import net.minecraft.client.resources.model.BakedModel;
89
import net.minecraft.core.BlockPos;
910
import net.minecraft.network.chat.Component;
@@ -43,6 +44,8 @@ public interface ClientXplatAbstractions {
4344
void setFilterSave(AbstractTexture texture, boolean filter, boolean mipmap);
4445
void restoreLastFilter(AbstractTexture texture);
4546
void tessellateBlock(Level level, BlockState state, BlockPos pos, PoseStack ps, MultiBufferSource buffers, int overlay);
47+
/** Marks an animated sprite as "active" for Sodium, if present. */
48+
void markSpriteActive(TextureAtlasSprite sprite);
4649

4750
ClientXplatAbstractions INSTANCE = ServiceUtil.findService(ClientXplatAbstractions.class, null);
4851

web/changelog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ of time the maintainers are able to spend on this effort. For the time being, up
2323
* Fix: Botania's Creative inventory tab no longer randomly shows up among the vanilla tabs
2424
* Fix: Rod of the Sea and Extrapolated Bucket may vanish when interacting with cauldrons
2525
* Fix: Partially reverted an internal change that needlessly caused an incompatibility with existing versions of ExtraBotany
26+
* Fix: Ensure spark textures and animated Tiara wings are animated in the presence of Sodium or its various Forge ports
2627

2728
---
2829

0 commit comments

Comments
 (0)