Why visible names are not enough
If your villager only asks for a paper named City voucher, any player with an anvil can fake it. Lore alone is also weak, because it still lives in visible text. For economy items, the villager should validate an invisible payload inside the stack.
Use minecraft:custom_data as the identity layer
In modern versions you can attach a hidden component to the currency item. The visible label can still say Guild voucher, but the real check lives in a structured object.
components:{
"minecraft:custom_name":'[{"text":"Guild voucher","italic":false}]',
"minecraft:custom_data":{currency:"guild_voucher",issuer:"capital_bank",tier:"silver"}
}
Why this protects the economy
- A renamed vanilla item will not have the same hidden payload.
- You can rotate designs without changing the underlying ID.
- Different factions can use separate issuers and tiers.
- The same visible note can still be invalid if the hidden data is wrong.
Practical villager pattern
When you build the buy stack for a trade, add the same custom_data object there. That way the villager accepts only the real token, not an imitation with copied text.
buy:{
id:"minecraft:paper",
count:3,
components:{
"minecraft:custom_name":'[{"text":"Guild voucher","italic":false}]',
"minecraft:custom_data":{currency:"guild_voucher",issuer:"capital_bank",tier:"silver"}
}
}
Good economy rules for RP servers
- Keep one stable string for each currency family:
guild_voucher,dock_token,ration_stamp. - Add a second field for who issued it: city, bank, guild, or chapter.
- Never trust only lore, display name, or model.
- Reserve numeric fields for counts and values, but keep IDs readable.
When to split currencies
Use separate IDs for money that should not mix. For example, temple donation slips, military payroll chits, and black-market coupons can all be paper, but they should never share the same custom_data payload.
Recommended workflow
- Create the reward and payment items with matching
custom_data. - Give them a readable visible name for players.
- Use the villager trade builder to lock the payment stack to that hidden payload.
- Test the trade with a fake renamed copy before shipping it live.