Skip to content

Commit 47316b9

Browse files
committed
fix: Pride Totem doing tasks unsafely off-thread
Fixes #66
1 parent 340fb79 commit 47316b9

File tree

2 files changed

+27
-13
lines changed

2 files changed

+27
-13
lines changed

libs.versions.toml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ modmenu-badges = "2023.6.1"
3131
midnight-fabric = "1.6.9+1.21-fabric"
3232
midnight-neoforge = "1.6.9+1.21-neoforge"
3333

34+
uwrad-fabric = "1.1.0"
35+
uwrad-neoforge = "1.1.1+neoforge"
36+
3437
lib39 = "1.5.0-experimental7+1.20.1"
3538

3639
# Libraries
@@ -73,6 +76,9 @@ modmenu-badges = { module = "maven.modrinth:modmenu-badges-lib", version.ref = "
7376
midnight-fabric = { module = "maven.modrinth:midnightlib", version.ref = "midnight-fabric" }
7477
midnight-neoforge = { module = "maven.modrinth:midnightlib", version.ref = "midnight-neoforge" }
7578

79+
uwrad-fabric = { module = "maven.modrinth:uwrad", version.ref = "uwrad-fabric" }
80+
uwrad-neoforge = { module = "maven.modrinth:uwrad", version.ref = "uwrad-neoforge" }
81+
7682
lib39-ripple = { module = "com.unascribed:lib39-ripple", version.ref = "lib39" }
7783

7884
annotations = { module = "org.jetbrains:annotations", version.ref = "annotations" }
@@ -86,14 +92,14 @@ testng = { module = "org.testng:testng", version.ref = "testng" }
8692
fabric = ["fabric-loader", "fabric-api", "trinkets", "midnight-fabric"]
8793
fabric-bundle = ["modmenu-badges"]
8894
fabric-compile = ["mavapi"]
89-
fabric-runtime = ["emi-fabric"]
95+
fabric-runtime = ["emi-fabric", "uwrad-fabric"]
9096
fabric-client-runtime = ["modmenu"]
9197

9298
forge = ["curios"]
9399
forge-runtime = []
94100

95101
neoforge = ["midnight-neoforge"]
96-
neoforge-runtime = ["emi-neoforge"]
102+
neoforge-runtime = ["emi-neoforge", "uwrad-neoforge"]
97103

98104
common-compile = ["midnight-fabric"]
99105
common-bundle = ["mixin-squared"]

xplat/src/client/java/gay/pridecraft/joy/mixin/client/ClientPlayNetworkHandlerMixin.java

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import net.minecraft.network.packet.s2c.play.EntityStatusS2CPacket;
1515
import net.minecraft.sound.SoundEvents;
1616
import net.minecraft.util.Hand;
17+
import net.minecraft.world.World;
1718
import org.spongepowered.asm.mixin.Mixin;
1819
import org.spongepowered.asm.mixin.Shadow;
1920
import org.spongepowered.asm.mixin.Unique;
@@ -33,21 +34,28 @@ private static boolean modifyTotemOfUndyingAnimation(ItemStack instance, Item it
3334

3435
@Inject(at = @At("HEAD"), method = "onEntityStatus")
3536
private void onCustomEntityStatus(EntityStatusS2CPacket packet, CallbackInfo ci) {
36-
if (this.getWorld() == null) return;
37-
Entity entity = packet.getEntity(this.getWorld());
38-
if (entity == null) return;
37+
if (this.getWorld() == null || packet.getStatus() != 36) {
38+
return;
39+
}
3940

40-
int status = packet.getStatus();
41-
if (status != 36) return;
41+
final var client = MinecraftClient.getInstance();
4242

43-
MinecraftClient.getInstance().particleManager.addEmitter(entity, JoyParticles.TOTEM_OF_PRIDE_PARTICLE, 30);
43+
//noinspection ResultOfMethodCallIgnored - unnecessary
44+
client.submit(() -> {
45+
final World world = this.getWorld();
46+
final Entity entity = packet.getEntity(world);
47+
if (entity == null) {
48+
return;
49+
}
4450

45-
if (MinecraftClient.getInstance().world != null) {
46-
MinecraftClient.getInstance().world.playSound(entity.getX(), entity.getY(), entity.getZ(), SoundEvents.ITEM_TOTEM_USE, entity.getSoundCategory(), 1.0F, 1.0F, false);
47-
}
51+
client.particleManager.addEmitter(entity, JoyParticles.TOTEM_OF_PRIDE_PARTICLE, 30);
4852

49-
if (entity == MinecraftClient.getInstance().player)
50-
MinecraftClient.getInstance().gameRenderer.showFloatingItem(modifyTotem(MinecraftClient.getInstance().player));
53+
world.playSound(entity.getX(), entity.getY(), entity.getZ(), SoundEvents.ITEM_TOTEM_USE, entity.getSoundCategory(), 1.f, 1.f, false);
54+
55+
if (entity == client.player) {
56+
client.gameRenderer.showFloatingItem(modifyTotem(client.player));
57+
}
58+
});
5159
}
5260

5361
@Unique

0 commit comments

Comments
 (0)