I always felt like things like this have more of a place in the CommunityBoard, instead of the NpcHtml. You have more space and to add more things. Also previous/next pagination can get hectic without numbered pagination so I would add that.
In terms of the code the following can be optimized:
npc.getDropData().forEach(c -> list.add(c));
Collections.reverse(list);
You can iterate over the getDropData() enumerable in a reverse fashion in order to prevent the reverse call. You just add the objects in reverse before hand.
You can move "final int ITEMS_PER_LIST = 7;" outside of the static method to prevent the allocation to the object every time the method is called.
You should chain sb.append within your sb.append calls. Strings are immutable so you're allocating more memory for no reason.
You can change this:
if (_ignored.contains(itemId))
_ignored.remove(itemId);
else
_ignored.add(itemId);
To this:
var existed = _ignored.remove(itemId);
if(!existed)
_ignored.add(itemId);
You also should rename the public methods "ignoredDropContain" and "ignored" in Player.java. They are really bad names and they don't imply what they do. They also don't belong in the Player class.
There are other small things as well but too nit picky to mention.