This repository has been archived by the owner on Jul 8, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
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查看额外信息
}