= 创作分享 =
编程开发
[Fabric-1.20.4] 编写一个实体伤害监视器
JuiceFeedback

[Fabric-1.20.4] 编写一个实体伤害监视器

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

发表于 2024-7-24 23:32:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

回复 | 举报

该帖共收到 3 条回复!
KSmc_brigade
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 + "所致伤")));
    }
}
发表于 2024-7-26 12:30:58 | 只看该作者

回复 | 举报

3.14159265358979
QQ酱367129 发表于 2024-7-26 12:30
mixin示例:

package cn.ksmcbrigade.test2.mixin;

为什么不用Forge的事件系统(
azaz
azzz
eee
zaza
zzza
发表于 2024-7-31 13:32:17 | 只看该作者

回复 | 举报

KSmc_brigade
000001912w 发表于 2024-7-31 13:32
为什么不用Forge的事件系统(

平时写辅助类模组写多了,mixin我比较习惯
发表于 2024-7-31 13:43:29 | 只看该作者

回复 | 举报

百科目前不允许匿名发帖哦~ 请先 [ 登陆 ][ 注册 ] 吧~

本版积分规则

发新帖
  • 回复
  • 点评
  • 评分

[ MC百科(mcmod.cn) 除另有声明,所有开放公共编辑的内容均使用 BY-NC-SA 3.0 协议 ]

Minecraft百科CC协议
快速回复 返回顶部 返回列表