我尝试过使用mixin,但它似乎根本无法运行,以下是我的代码,
import net.minecraft.entity.damage.DamageSource;
import net.minecraft.entity.player.PlayerEntity;
import net.spamta.pvpoverhaul.PvPOverhaul;
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 net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.Text;
@Mixin(PlayerEntity.class)
public class GearKeeper {
@Inject(method="onDeath", at=@At("TAIL"))
private void died(DamageSource damageSource, CallbackInfo info){
PvPOverhaul.LOGGER.info(damageSource.getName().toString());
PlayerEntity player = (PlayerEntity) (Object) this;
sendDeathMessageToAllPlayers(player);
}
private void sendDeathMessageToAllPlayers(PlayerEntity player) {
MinecraftServer server = player.getServer();
if (server != null) {
server.getPlayerManager().getPlayerList().forEach(serverPlayer -> {
serverPlayer.sendMessage(Text.literal(player.getName().toString() + " has perished!"), false);
});
}
}
}
尝试检测玩家是否被杀,并期望它说“Piglin Brute”或当时杀死我的任何内容,但它最终没有记录任何内容。
import net.minecraft.entity.damage.DamageSource;
import net.minecraft.entity.player.PlayerEntity;
import net.spamta.pvpoverhaul.PvPOverhaul;
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 net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.Text;
@Mixin(PlayerEntity.class)
public class GearKeeper {
@Inject(method="onDeath", at=@At("TAIL"))
private void died(DamageSource damageSource, CallbackInfo info){
PvPOverhaul.LOGGER.info(damageSource.getName().toString());
PlayerEntity player = (PlayerEntity) (Object) this;
sendDeathMessageToAllPlayers(player);
}
private void sendDeathMessageToAllPlayers(PlayerEntity player) {
MinecraftServer server = player.getServer();
if (server != null) {
server.getPlayerManager().getPlayerList().forEach(serverPlayer -> {
serverPlayer.sendMessage(Text.literal(player.getName().toString() + " has
perished!"), false);
});
}
}
}
您还应该在资源文件夹中创建一个名为 pvpoverhaul.mixins.json 的 mixin 配置文件
{
"required": 1,
"package": "net.spamta.pvpoverhaul.mixin",
"compatibilityLevel": "JAVA_16",
"mixins": [
"GearKeeper"
]
}
如果你已经正确设置了所有内容,你的 mixin 现在应该被加载,并且当玩家死亡时应该执行 dead 方法中的代码。 DamageSource.getName().toString() 然后应该记录杀死玩家的东西的名称。
希望这个答案有效✨✨