EventsLib

EventsLib

一个事件库,用于补充缺失的事件监听器

本库旨在与我的部分模组配套使用,这些模组需要更具体的事件来处理效果。本模组不添加任何物品,也不会以任何方式改变游戏。除非有其他模组需要它并利用其额外事件,否则它对玩家没有实际用途。

它添加了一个名为 MobEffectTickEvent 的事件,该事件为模组开发者提供了一个接口,用于获取效果剩余时长的百分比,以及效果实例和实体(如果需要这些信息的话)。

// MobEffectTickEvent 的示例
    @SubscribeEvent
    public static void onMobEffectTick(MobEffectTickEvent event) {
        float percentageLeft = event.getPercentageLeft();
        String entityName = event.getEntity().getName().getString();
        String effectName = event.getEffectInstance().getEffect().value().toString();
        
        System.out.println("实体: " + entityName
                + " 受到 " + effectName
                + " 影响,剩余时长: " + percentageLeft + "%。");
        
        if (percentageLeft == 50.0f) {
            System.out.println("实体 " + entityName + " 上的效果 " + effectName + " 时长剩余 50%。");
        }
        if (percentageLeft == 20.0f) {
            System.out.println("实体 " + entityName + " 上的效果 " + effectName + " 时长剩余 20%。");
        }
    }

它还添加了一个在效果消失时仅运行一次的方法。在我的 Fargo's Talismans 模组中,我用它来移除由基座添加到玩家身上的属性,而不是通过运行 PlayerTick 方法来实现。

    // 关于 onEffectRemoved 的示例(在 MobEffectEndEffect 扩展类中)
    @Override
    public void onEffectRemoved(LivingEntity entity, int amplifier) {
        super.onEffectRemoved(entity, amplifier);
        if (entity instanceof Player) {
            System.out.println("效果已消失。");
        }
    }