MC百科社群

标题: [Fabric-1.20.4] 编写一个实体伤害监视器 [打印本页]

作者: JuiceFeedback    时间: 2024-7-24 23:32
标题: [Fabric-1.20.4] 编写一个实体伤害监视器
编写一个伤害监视器,当生物受到伤害(包括自然伤害)时向聊天栏发送一条测试信息:“<实体名字> <伤害来源> 所致伤”
我觉得这个用处挺多的,但是翻了许多地方貌似没教程
原版的方法有点看不懂
还请大佬给个代码示例或者思路


作者: QQ酱367129    时间: 2024-7-26 12:30
mixin示例:

package cn.ksmcbrigade.test2.mixin;

import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.damage.DamageSource;
import net.minecraft.text.Text;
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.CallbackInfoReturnable;

@Mixin(LivingEntity.class)
public abstract class LivingEntityMixin extends Entity {

    public LivingEntityMixin(EntityType<?> type, World world) {
        super(type, world);
    }

    @Inject(method = "damage",at = @At("HEAD"))
    public void damage(DamageSource source, float amount, CallbackInfoReturnable<Boolean> cir){
        String attackerName = source.getAttacker()==null?"未知":source.getAttacker().getDisplayName()==null?"未知":source.getAttacker().getDisplayName().getString();
        this.getWorld().getPlayers().forEach(p -> p.sendMessage(Text.of(this.getDisplayName()+" 因 "+ attackerName + "所致伤")));
    }
}

作者: 000001912w    时间: 2024-7-31 13:32
QQ酱367129 发表于 2024-7-26 12:30
mixin示例:

package cn.ksmcbrigade.test2.mixin;

为什么不用Forge的事件系统(
作者: QQ酱367129    时间: 2024-7-31 13:43
000001912w 发表于 2024-7-31 13:32
为什么不用Forge的事件系统(

平时写辅助类模组写多了,mixin我比较习惯




欢迎光临 MC百科社群 (https://bbs.mcmod.cn/) MC百科|最大的MineCraft中文模组百科