diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/stats/StatsCounterMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/stats/StatsCounterMixin.java index e79bfe9b3..79d835c60 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/stats/StatsCounterMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/stats/StatsCounterMixin.java @@ -1,5 +1,6 @@ package io.izzel.arclight.common.mixin.core.stats; +import io.izzel.arclight.common.mod.server.ArclightServer; import net.minecraft.stats.Stat; import net.minecraft.stats.StatsCounter; import net.minecraft.world.entity.player.Player; @@ -22,9 +23,15 @@ public abstract class StatsCounterMixin { @Inject(method = "increment", cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD, at = @At(value = "INVOKE", target = "Lnet/minecraft/stats/StatsCounter;setValue(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/stats/Stat;I)V")) public void arclight$statsIncl(Player player, Stat stat, int amount, CallbackInfo ci, int i) { - Cancellable cancellable = CraftEventFactory.handleStatisticsIncrease(player, stat, this.getValue(stat), i); - if (cancellable != null && cancellable.isCancelled()) { - ci.cancel(); - } + ArclightServer.executeOnMainThread(() -> { + // Bukkit apparently does not allow PlayerStatisticIncrementEvent to be triggered async. + // java.lang.IllegalStateException: PlayerStatisticIncrementEvent cannot be triggered asynchronously from another thread. + // at TRANSFORMER/arclight@1.0.1+8ec9529/org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:584) + // at TRANSFORMER/arclight@1.0.1+8ec9529/org.bukkit.craftbukkit.v1_21_R1.event.CraftEventFactory.handleStatisticsIncrease(CraftEventFactoryMixin.java:1568) + Cancellable cancellable = CraftEventFactory.handleStatisticsIncrease(player, stat, this.getValue(stat), i); + if (cancellable != null && cancellable.isCancelled()) { + ci.cancel(); + } + }); } }