Custom items are a server-side item wearing a client-side skin. The server can define anything; whether a player sees it depends entirely on whether they have your resource pack — and that split is where all the confusion lives.
How it works
The server gives an ordinary item a piece of extra data — historically a custom model number, and on newer versions an item model identifier. Your resource pack says «when you see that value on this item, draw this model instead». Without the pack, the client draws the ordinary item, because that is genuinely what it is.
What players see
| Player has | They see |
|---|---|
| Your resource pack | The custom model, as intended |
| No pack | The base item — a stick, a carrot on a stick, a paper |
| An old version of your pack | The base item, or the wrong model |
| Bedrock via Geyser | The base item. Java packs do not apply to them. |
A custom item still works without the pack — the plugin still knows it is a magic staff and still runs its ability. The player just sees a stick doing something inexplicable. That is why «my sword is broken» reports are usually a pack problem, not a plugin problem.
Setting it up so it holds together
- Serve the pack from the server
resource-packinserver.propertiesprompts every player automatically. Asking people to install it manually means most will not. - Consider requiring it
require-resource-pack=truemeans nobody plays without it. On a server built around custom items that is often the honest setting, even though it turns some people away. - Update the hash every time the pack changes
Otherwise clients keep their cached copy and your new item shows as a stick for everyone who has played before.
- Test on an account that has never joined
Your own client has the pack cached from ten versions ago. It is the worst possible test device.
Choose base items that are not absurd without the pack. A custom bow that falls back to a bow reads fine; one that falls back to a raw potato does not, and someone will always be seeing the potato.
About the format change
Newer Minecraft versions replaced the old numeric model data with a named item model system. Both approaches exist in the wild, and a pack or plugin written for one will not work on the other. If custom items stopped rendering after a version upgrade, this is the first thing to check.