diff --git a/CHANGELOG.md b/CHANGELOG.md index 570ec79..fbaa31e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Containers remaining open by vanished players in certain conditions - Pressure plates remaining pressed by vanished players in certain conditions +- Vanished players blocking merchant (villager / wandering trader) trading ## [1.5.6] - 2024-06-20 ### Added diff --git a/src/main/java/me/drex/vanish/mixin/AbstractVillagerMixin.java b/src/main/java/me/drex/vanish/mixin/AbstractVillagerMixin.java new file mode 100644 index 0000000..ae9b395 --- /dev/null +++ b/src/main/java/me/drex/vanish/mixin/AbstractVillagerMixin.java @@ -0,0 +1,35 @@ +package me.drex.vanish.mixin; + +import com.llamalad7.mixinextras.injector.ModifyReturnValue; +import me.drex.vanish.api.VanishAPI; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.npc.AbstractVillager; +import net.minecraft.world.entity.player.Player; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(AbstractVillager.class) +public class AbstractVillagerMixin { + @Shadow + private @Nullable Player tradingPlayer; + + @ModifyReturnValue(method = "isTrading", at = @At("RETURN")) + private boolean vanish_allowTradingIfVanished(boolean original) { + if (original) { + assert this.tradingPlayer != null; + return !VanishAPI.isVanished(this.tradingPlayer); + } + return false; + } + + @Inject(method = "setTradingPlayer", at = @At("HEAD")) + private void vanish_closeVanishedPlayerTradeScreen(Player player, CallbackInfo ci) { + if (player != null && this.tradingPlayer instanceof ServerPlayer serverPlayer) { + serverPlayer.closeContainer(); + } + } +} diff --git a/src/main/resources/vanish.mixins.json b/src/main/resources/vanish.mixins.json index b4fbfbe..abc082f 100644 --- a/src/main/resources/vanish.mixins.json +++ b/src/main/resources/vanish.mixins.json @@ -8,6 +8,7 @@ "defaultRequire": 1 }, "mixins": [ + "AbstractVillagerMixin", "CommandSourceStackMixin", "ContainerMixin", "ContainerOpenersCountMixin",