NPCTrading-1.1.1.jar
26 May 2026
CurseForge · Hytale mod
A customizable NPC trading plugin that lets you easily create interactive traders, manage trade offers, and build immersive shop or economy systems for your world.
Quick answer
NPC Trading NPCTrading-1.1.1.jar targets Hytale. Do not install it as a separate client mod. Enable it on the world host—the local server in singleplayer or the dedicated server in multiplayer. No required dependencies listed for this file.
Where it goes
Do not install it as a separate client mod. Enable it on the world host—the local server in singleplayer or the dedicated server in multiplayer.
Put Hytale mods on the world host or dedicated server. Singleplayer runs a local server too; Hytale does not use separate client mods.
NPCTrading-1.1.1.jar. Change the file and its required mods may change too.
This file does not list any required mods. Do not add a library just because a different file uses it.
This file does not list any required or optional project dependencies. Check the creator notes before changing an existing world.
Before you install it
Built for NPC Trading NPCTrading-1.1.1.jar. Pick another file and the loader, install side or required mods may change.
Use NPCTrading-1.1.1.jar. It targets Hytale; another release may target a different game build or dependency set.
This file does not list any required mods. Do not add a library just because a different file uses it.
Do not install it as a separate client mod. Enable it on the world host—the local server in singleplayer or the dedicated server in multiplayer.
Use the “Get this file” button beside NPCTrading-1.1.1.jar. It opens that exact file at the source.
About this project
NPC Trading is a full-featured trading system plugin that allows you to create custom NPC traders for your server.
Set up item exchanges, configure rotating trade offers, and integrate seamlessly with HyCitizens to create immersive merchant NPCs.
Commands: /npctrading (or /nt)
Quick Open: /nt {TraderName}
Permissions:
npctrading - Allows players to open trading menus through /nt or /npctrading
npctrading.admin - Access to the admin menu
Create and manage Traders that offer item exchanges to players.
Each Trader supports:
Each trade offer includes:
Keep trades fresh and encourage players to check back regularly:
Use:
/npctrading (or /nt)
This opens the Trading UI, where you can:
No configuration files required to use the plugin.
NPC Trading integrates seamlessly with HyCitizens (optional dependency):
Note: This plugin does not include an NPC spawner. You'll need HyCitizens or another NPC plugin to spawn the NPCs.
Don't have an NPC set up yet? Use the quick command:
/nt {TraderName}
This opens the trader's menu directly without needing to interact with an NPC.
If you would like to join the community, suggest features, report bugs, or need some help, join the Discord community! https://discord.gg/Snqz9E58Dr
Want to support NPC Trading? You can donate at Ko-fi or share NPC Trading with your friends!
NPC Trading includes a full developer API for creating, editing, and managing traders programmatically.
NPCTradingPlugin plugin = NPCTradingPlugin.get();
TradersManager - The main entry point for all Trader operations:
TradersManager manager = plugin.getTradersManager();
Trader represents a single trader and all of its settings and trade offers.
uuid (UUID) – unique trader identifier.
name (String) – displayed trader name.
trades (List<TradeOffer>) – list of all trade offers.
citizenIds (List<String>) – list of linked HyCitizens NPC IDs.
rotateItems (boolean) – whether items rotate on a timer.
rotationIntervalMinutes (int) – minutes between rotations.
displayedItemCount (int) – how many trades show at once when rotating.
lastRotationTime (long) – timestamp of last rotation.
currentRotationOffset (int) – current rotation position.
Create a new trader with a random UUID:
Trader trader = manager.createTrader("Blacksmith");
Create a trader with a specific UUID:
UUID uuid = UUID.randomUUID();
Trader trader = manager.createTrader(uuid, "Wandering Merchant");
This will add the trader to the registry and save it to storage.
TradeOffer represents a single exchange (input → output):
TradeOffer offer = new TradeOffer(
"Resource_Iron_Ore", // Input item ID
10, // Input quantity
"Resource_Iron_Ingot", // Output item ID
5 // Output quantity
);
Add a trade offer to a trader:
trader.addTrade(offer);
manager.saveTrader(trader);
Remove a trade by index:
trader.removeTrade(0); // Removes first trade
manager.saveTrader(trader);
Clear all trades:
trader.clearTrades();
manager.saveTrader(trader);
Get all trades:
List<TradeOffer> allTrades = trader.getTrades();
Get currently displayed trades (respects rotation):
List<TradeOffer> displayedTrades = trader.getDisplayedTrades();
Enable item rotation:
trader.setRotateItems(true);
trader.setRotationIntervalMinutes(5); // Rotate every 5 minutes
trader.setDisplayedItemCount(3); // Show 3 trades at a time
manager.saveTrader(trader);
Disable rotation:
trader.setRotateItems(false);
manager.saveTrader(trader);
Get rotation settings:
boolean rotating = trader.isRotateItems();
int interval = trader.getRotationIntervalMinutes();
int displayCount = trader.getDisplayedItemCount();
long lastRotation = trader.getLastRotationTime();
int offset = trader.getCurrentRotationOffset();
Add a Citizen NPC to a trader:
trader.addCitizenId(citizenId);
manager.saveTrader(trader);
Remove a Citizen NPC:
trader.removeCitizenId(citizenId);
manager.saveTrader(trader);
Check if a Citizen is linked:
boolean isLinked = trader.hasCitizenId(citizenId);
Get all linked Citizens:
List<String> citizenIds = trader.getCitizenIds();
Find trader by Citizen ID:
Trader trader = manager.getTraderByCitizenId(citizenId);
After modifying a trader, save the changes:
trader.setName("Master Blacksmith");
trader.setRotationIntervalMinutes(10);
manager.saveTrader(trader);
Remove a trader from the system:
boolean deleted = manager.deleteTrader(traderUuid);
This will remove the trader from memory and delete the saved data.
Get trader by UUID:
Trader trader = manager.getTrader(uuid);
Get trader by name:
Trader trader = manager.getTraderByName("Blacksmith");
Get all traders:
Collection<Trader> traders = manager.getAllTraders();
Get all trader UUIDs:
Set<UUID> uuids = manager.getTraderUUIDs();
Check if trader exists:
boolean exists = manager.hasTrader(uuid);
Get trader count:
int count = manager.getTraderCount();
The TradeManager handles player transactions:
TradeManager tradeManager = plugin.getTradeManager();
Check if a player can afford a trade:
boolean canAfford = tradeManager.canAfford(playerRef, offer);
Get item count in player inventory:
int count = tradeManager.getItemCount(playerRef, "Resource_Iron_Ore");
Execute a trade:
boolean success = tradeManager.executeTrade(playerRef, offer);
This will:
Open a trader's menu for a player:
plugin.getTradeUI().openTradeGUI(playerRef, store, trader);
The NPCBindManager handles the process of linking traders to NPCs:
NPCBindManager bindManager = plugin.getNPCBindManager();
Start a binding session (30-second timeout):
bindManager.startBinding(playerRef, trader);
Get active binding session:
NPCBindManager.BindingSession session = bindManager.getActiveSession(playerUuid);
if (session != null) {
Trader trader = session.trader;
PlayerRef player = session.playerRef;
}
Complete a binding:
bindManager.completeBinding(playerUuid);
Cancel a binding:
bindManager.cancelBinding(playerUuid);
Reload all traders from storage:
manager.reload();
This plugin has been made possible by HyUI.
Project description from CurseForge.
Recent files
26 May 2026
27 Feb 2026
24 Feb 2026
11 Feb 2026
11 Feb 2026
Looking for an older file? The official CurseForge project page is in Resources.