From f5fc7ba31e6222804caf8636bb2baa9677ba385d Mon Sep 17 00:00:00 2001 From: Xujiayao Date: Mon, 21 Mar 2022 23:58:36 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E5=86=99=E5=AE=8C=E6=88=90=E8=87=B3?= =?UTF-8?q?=E7=8E=A9=E5=AE=B6=E6=AD=BB=E4=BA=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mixins/MixinPlayerAdvancementTracker.java | 2 +- .../minecraft/mixins/MixinPlayerManager.java | 4 +-- .../mixins/MixinServerPlayerEntity.java | 33 +++++++++++++++++++ src/main/resources/mcdiscordchat.mixins.json | 3 +- 4 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 src/main/java/top/xujiayao/mcdiscordchat/minecraft/mixins/MixinServerPlayerEntity.java diff --git a/src/main/java/top/xujiayao/mcdiscordchat/minecraft/mixins/MixinPlayerAdvancementTracker.java b/src/main/java/top/xujiayao/mcdiscordchat/minecraft/mixins/MixinPlayerAdvancementTracker.java index d832daba..40f76172 100644 --- a/src/main/java/top/xujiayao/mcdiscordchat/minecraft/mixins/MixinPlayerAdvancementTracker.java +++ b/src/main/java/top/xujiayao/mcdiscordchat/minecraft/mixins/MixinPlayerAdvancementTracker.java @@ -19,7 +19,7 @@ public class MixinPlayerAdvancementTracker { @Shadow private ServerPlayerEntity owner; - @Inject(method = "grantCriterion", at = @At("RETURN")) + @Inject(method = "grantCriterion", at = @At("HEAD")) private void grantCriterion(Advancement advancement, String criterionName, CallbackInfoReturnable cir) { if (advancement.getDisplay() != null && advancement.getDisplay().shouldAnnounceToChat()) { switch (advancement.getDisplay().getFrame()) { diff --git a/src/main/java/top/xujiayao/mcdiscordchat/minecraft/mixins/MixinPlayerManager.java b/src/main/java/top/xujiayao/mcdiscordchat/minecraft/mixins/MixinPlayerManager.java index 526b09d3..8a54eeff 100644 --- a/src/main/java/top/xujiayao/mcdiscordchat/minecraft/mixins/MixinPlayerManager.java +++ b/src/main/java/top/xujiayao/mcdiscordchat/minecraft/mixins/MixinPlayerManager.java @@ -18,13 +18,13 @@ import static top.xujiayao.mcdiscordchat.Main.TEXTS; @Mixin(PlayerManager.class) public class MixinPlayerManager { - @Inject(method = "onPlayerConnect", at = @At("RETURN")) + @Inject(method = "onPlayerConnect", at = @At("HEAD")) private void onPlayerConnect(ClientConnection connection, ServerPlayerEntity player, CallbackInfo ci) { CHANNEL.sendMessage(TEXTS.joinServer() .replace("%playerName%", MarkdownSanitizer.escape(player.getEntityName()))).queue(); } - @Inject(method = "remove", at = @At("RETURN")) + @Inject(method = "remove", at = @At("HEAD")) private void remove(ServerPlayerEntity player, CallbackInfo ci) { CHANNEL.sendMessage(TEXTS.leftServer() .replace("%playerName%", MarkdownSanitizer.escape(player.getEntityName()))).queue(); diff --git a/src/main/java/top/xujiayao/mcdiscordchat/minecraft/mixins/MixinServerPlayerEntity.java b/src/main/java/top/xujiayao/mcdiscordchat/minecraft/mixins/MixinServerPlayerEntity.java new file mode 100644 index 00000000..2bd6160b --- /dev/null +++ b/src/main/java/top/xujiayao/mcdiscordchat/minecraft/mixins/MixinServerPlayerEntity.java @@ -0,0 +1,33 @@ +package top.xujiayao.mcdiscordchat.minecraft.mixins; + +import com.mojang.authlib.GameProfile; +import net.dv8tion.jda.api.utils.MarkdownSanitizer; +import net.minecraft.entity.damage.DamageSource; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import static top.xujiayao.mcdiscordchat.Main.CHANNEL; +import static top.xujiayao.mcdiscordchat.Main.TEXTS; + +/** + * @author Xujiayao + */ +@Mixin(ServerPlayerEntity.class) +public abstract class MixinServerPlayerEntity extends PlayerEntity { + + private MixinServerPlayerEntity(World world, BlockPos pos, float yaw, GameProfile profile) { + super(world, pos, yaw, profile); + } + + @Inject(method = "onDeath", at = @At("HEAD")) + private void onDeath(DamageSource source, CallbackInfo ci) { + CHANNEL.sendMessage(TEXTS.deathMessage() + .replace("%deathMessage%", MarkdownSanitizer.escape(getDamageTracker().getDeathMessage().getString()))).queue(); + } +} diff --git a/src/main/resources/mcdiscordchat.mixins.json b/src/main/resources/mcdiscordchat.mixins.json index ba0d034e..62e3df72 100644 --- a/src/main/resources/mcdiscordchat.mixins.json +++ b/src/main/resources/mcdiscordchat.mixins.json @@ -4,7 +4,8 @@ "compatibilityLevel": "JAVA_17", "mixins": [ "MixinPlayerManager", - "MixinPlayerAdvancementTracker" + "MixinPlayerAdvancementTracker", + "MixinServerPlayerEntity" ], "injectors": { "defaultRequire": 1