I think this question has been asked by different people many times, but I still didn't get the answer I wanted, so I decided to ask on my own. When you create a custom inventory, you have to pass some kind of InventoryHolder to identify what type of inventory it is. Some of the tutorials make the custom gui class implements InventoryHolder and pass itself to #createInventory, but some people said that passing stuff is a misuse of it, so they pass null instead. I decided to read more plugin's source code and I found that some plugin even creates an empty custom InventoryHolder, and some return null (https://github.com/cervinakuy/KitPvP/tree/master/src/com/planetgallium/kitpvp/menu) and some create a new inventory in that and return that. I would like to know what is the best way to handle the InventoryHolder so that I can handle InventoryClick easily and update the player's inventory in same type.