Skip to content
This repository has been archived by the owner on Jul 8, 2018. It is now read-only.

Shift显示物品信息

Mouse edited this page Jul 24, 2017 · 2 revisions

大家都看到有一些模组中的物品可以显示一些信息,其实这非常容易实现。也有模组有按下指定按键(例如Shift)显示额外信息的功能,今天我们来讲解一下如何实现按下Shift显示物品信息。

首先我们需要覆写'Item.addInfomation'方法,该方法在玩家将鼠标置于物品上时调用,用于添加物品的信息。

    @Override
    public void addInformation(ItemStack stack, EntityPlayer player, List<String> tooltip, boolean advanced) {
    }

第一个参数stack是玩家当前指向的物品,第二个参数player是当前需要获取信息的玩家,第三个参数tooltip是物品信息列表,物品信息需要向这个对象添加,第四个参数advanced表示是否需要显示高级(调试)信息。

接下来,我们只需要判断玩家是否按下Shift,然后就可以添加信息了。

    @Override
    public void addInformation(ItemStack stack, EntityPlayer worldIn, List<String> tooltip, boolean flagIn) {
        if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT)) {
            tooltip.add("这是特殊信息");
        }
    }

以上代码中Keyboard.isKeyDown可以获取当前有哪个按键被按下。这样,我们就可以在玩家按下Shift的时候显示信息了。

由于每次都这样写太麻烦了,为了贯彻提高代码复用性的准则,所以我们在ItemHelper类实现了一个静态方法。

    /**
     * 添加可以Shift显示的Lore
     * @param lores addInformation 的arg3 的列表
     * @param shifts 按下shift后显示的内容
     */
    public static void shiftLore(List lores, String ...shifts){
        if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT))
            Collections.addAll(lores,shifts);
        else
            lores.add(TextFormatting.WHITE + I18n.translateToLocal("gui.inventory.shiftfordetail")); //若没有按下提示按下Shift查看额外信息
    }
Clone this wiki locally