Tycoon
Overview
Tycoon is a zoo game mode. Players kill mobs to unlock research categories, feed a catalyst and use a fuel item to research animals, then place their animals in their zoo to earn passive income. Animals gain levels, can be prestiged for permanent bonuses, sent on timed expeditions, bred, fused, traded on a player market or handed over for contracts.
Everything is data-driven. Each species is an Animal Definition, each system (research categories, challenges, staff, decorations, contracts, breeding, shops) is a manifest entry, and the economy rules live in one Tycoon Economy Config. The player interface is a single menu, Tycoon Control Panel, whose layouts are built in the web panel: the code only fills in live data and attaches the clicks.
Zoo space, not money, is the scarce resource. A player's capacity grows with their zoo profession level, every species costs a number of spaces, and revenue scales with that cost. Placed animals are shown to their owner only, so all players can share one world.
This is a private extension of the BTC build of TypeWriter (BTC Core, Paper or Folia), documented for reference.
Features
- Research tree — mob kills unlock Research Categories; each animal needs a fully powered catalyst and a fuel item for the final roll.
- Zoo space and placement — species cost spaces; animals are placed on declared positions of a Placement Group, one animal per position.
- Passive income — placed animals pay revenue over time, scaled by rarity, level, prestige, happiness, staff and decorations, with capped offline catch-up.
- Happiness — 0 to 100, multiplies revenue; overcrowding is its only penalty, feeding and decorations raise it.
- Levels and prestige — XP curve and level cap in the economy config; Prestige resets an animal to level 1 for a permanent revenue bonus.
- Fusion and breeding — Fusion of two same-species animals, and recipe-based Breeding with an incubation time.
- Expeditions — send an animal on a timed idle mission and collect the result on return.
- Adventure map — a temporary dimension cloned from a template world, explored chunk by chunk with a fatigue gauge, with animals ridden as mounts.
- Social economy — rotating Delivery Shop, player market, animal contracts, daily and weekly challenges, zoo staff, decorations and a leaderboard.
Installation
- Install TypeWriter with the BTC build (BTC Core on Paper or Folia).
- Install the required extensions: Entity (animal models and fake entities) and GUI (the control panel).
- Install Vault with an economy plugin. All costs and rewards in money use Vault.
- Optional extensions: Vehicle with PacketEvents for mounts, RPG Core for the zoo profession level, TemporaryDimension for the adventure map (it needs BTC Core's SlimeWorldManager), and MySql with Redis for the cross-server leaderboard and market. MiniPlaceholders is needed for the placeholders.
- Put the Tycoon JAR in
plugins/Typewriter/extensions/and restart the server.
Getting started
Add a first animal and let players research it:
- In the TypeWriter web panel, open a static page and add a Tycoon Data Artifact. Add a Tycoon Market Artifact too if you want the player market. Do not change their
artifactId. - Add a Research Category. Set
displayName,requiredMobKillsand, optionally,trackedMobTypes(empty means every mob counts). - Add an Animal Definition. Set
entityDefinition(the model),category(the id of the category),rarity,spaceCostandbaseRevenueRate. List theacceptedCatalystItems(anitemIdmaterial name and apowerValue), thecatalystPowerRequiredand thefuelItem. Add the new animal id to the category'sanimals. - Add a Tycoon Placement Group with at least one position, so players have somewhere to put the animal.
- Add a Tycoon Economy Config. Without it the built-in defaults are used.
- Build the interface: add a Tycoon Control Panel with its layouts and views, and a Tycoon Menu Config with the item templates of every list. Open the panel from a command entry of your choice.
- Publish. A player kills mobs until the category unlocks, starts the animal's catalyst from the research screen, feeds it catalyst items, then uses the fuel item (or you trigger Catalyst Activate) to attempt the research.
A list template left empty in Tycoon Menu Config renders as an empty slot. Nothing is invented by the code.
How it works
Research
Killing a mob counts toward every Research Category that tracks its type. At requiredMobKills the category unlocks, unless requiredCategory is not unlocked yet (the Category Unlock action respects it too).
An animal is researched in two stages. First the player feeds catalyst items: right-clicking an entity with an item listed in acceptedCatalystItems adds its powerValue. When the power reaches catalystPowerRequired, using the fuelItem rolls the research. The chance is successChance multiplied by the rarity's capture weight. On success the player gets the animal, or the alternativeRewards if they already own the species. The catalyst is consumed either way. The right-click gesture only reacts for an animal whose catalyst was already started (for example from the research screen of the control panel). The Catalyst Activate action rolls the research for a fully powered catalyst without the fuel item.
| Rarity | Revenue multiplier | Capture weight | Mount fatigue (s) |
|---|---|---|---|
COMMON | 1.0 | 1.0 | 120 |
UNCOMMON | 1.5 | 0.6 | 180 |
RARE | 2.5 | 0.25 | 300 |
EPIC | 5.0 | 0.08 | 480 |
LEGENDARY | 10.0 | 0.02 | 900 |
Zoo, space and happiness
Capacity is baseSpaceCapacity plus spacePerZooLevel for each level of the RPG Core profession named in zooProfessionId (the level is 1 when empty or when RPG Core is absent). maxPlacedPerSpecies limits how many individuals of one species stand at once. Past overcrowding.thresholdPercent of the capacity, happiness drops. Happiness changes revenue between revenueMultiplierAtZero and revenueMultiplierAtMax.
Offline, a player earns for at most offlineCatchup.maxHours hours at offlineCatchup.rate of the online rate, computed once when they reconnect.
Levels, prestige, fusion and breeding
maxAnimalLevel and xpCurve set the levels. At the maximum level, Prestige resets one individual to level 1 and adds prestigeRevenueBonus to its revenue, up to maxPrestige.
Fusion takes two reserve animals of one species with the same level and prestige (at least fusionMinLevel), removes them and starts an incubation. When the egg hatches, the action's rarityUpgradeChance can raise the rarity by one step and cosmeticMutationChance can give a mutation skin. Breeding matches two parent species (in either order) to a recipe with requiredParentLevel, incubationSeconds, cost and consumesParents.
Staff, decorations and challenges
Staff members have a role (REVENUE_COLLECTOR, CARETAKER, EXPEDITION_GUIDE, RESEARCHER), a hireCost and an hourly upkeepPerHour; a member that cannot be paid is let go. Decorations add happinessBonus and revenueBonus and are capped by maxPerPlayer. Challenges track a challengeType over a DAILY or WEEKLY period and pay rewardMoney and rewardCommands. Animal Contracts ask for animals by species or category, minimum level and count.
Menus
Tycoon Control Panel is a menu with views. The page defines everything the player sees:
layoutPoolholds a rootframe(ormainLayoutIdnames it). Frames with variable content use the layout id@view.viewsdeclares the screens. A view gives its layout per frame, or by the naming convention<viewId>_<frameId>.defaultViewIdis the first view opened.- A tab slot carries the tag
view:<viewId>; the active tab is highlighted by the shared view style. - Content items use a
buttonTypeof the formtycoon_button:TYPE, ortycoon_button:TYPE:argument. The extension fills live data into the item's tags and attaches the clicks. - A menu is opened on a view with the target
<viewId>or<viewId>:<argument>(for example a research category id).
Button types, by screen:
| Screen | Button types |
|---|---|
| Zoo and bestiary | ZOO_INFO, BESTIARY_ENTRY, BESTIARY_SPECIES_ENTRY, SPECIES_MANAGE_INFO, PLACEMENT_SLOT_ENTRY, SPECIES_LEVEL_ENTRY, BESTIARY_PANEL_ENTRY, PLACED_ENTRY |
| Research | RESEARCH_CATEGORY_ENTRY, RESEARCH_ANIMAL_ENTRY, RESEARCH_CATEGORY |
| Expeditions and mounts | EXPEDITION_ENTRY, EXPEDITION_START_ENTRY, MOUNT_ENTRY |
| Adventure | ADVENTURE_CHUNK_ENTRY, ADVENTURE_INFO |
| Economy | SHOP_ENTRY, PRESTIGE_ENTRY, MARKET_ENTRY, MARKET_MINE_ENTRY, MARKET_SELL_ENTRY, ANIMAL_CONTRACT_ENTRY, STAFF_ENTRY, STAFF_INFO |
| Social | RANKING_SORT, RANKING_ENTRY, CHALLENGE_ENTRY |
| Breeding and decorations | BREEDING_PARENT_ENTRY, BREEDING_EGG_ENTRY, BREEDING_INFO, DECORATION_ENTRY, DECORATION_PLACED_ENTRY |
| Lists | LIST_PAGER:<listId>[:<pageSize>] (shows only when the list does not fit on one screen) |
Order-based entries (the _ENTRY types) render one element per tagged slot, in the order of the slots. The item template of each list, with its tags such as {animal_name} or {remaining_time}, comes from Tycoon Menu Config. The same entry names the views opened by research categories (researchViewId), expedition slots (expeditionViewId) and the bestiary (bestiaryViewId).
Commands
Commands are entries, so their names and permissions are edited in the panel. Each is registered by placing the entry on a page.
| Command | Description |
|---|---|
/tycoonadmin give <player> <animal> | Give an animal to an online player. Requires the permission set in permission (default tycoon.admin). |
/tycoonadmin remove <player> <animal> | Remove the least advanced individual of a species. |
/tycoonadmin setlevel <player> <animal> <level> | Set the level of every individual of a species, clamped to maxAnimalLevel. |
/tycoonadmin unlockcategory <player> <category> | Unlock a research category. |
/tycoonadmin info [player] | Show a player's zoo profile. |
/tycoonadmin resetfatigue [player] | Reset adventure fatigue. |
/tycoonadmin spawnshop <shop> | Spawn a delivery shop merchant now. |
/tycoonadmin save | Write all Tycoon data to disk. |
/collecter | Collect accumulated revenue. Open to everyone unless permission is set. |
/visiter <player> | Teleport to another player's location to visit their zoo. Open to everyone unless permission is set. |
The names above are the defaults of Tycoon Admin Command, Tycoon Collect Command and Tycoon Visit Command; change commandName to rename them. Menu opening commands (for example /zoo) are not part of this extension: create them with a command entry of the Basic extension that triggers the Control Panel.
Permissions
| Permission | Grants |
|---|---|
tycoon.admin | The whole /tycoonadmin tree. This is the default of the admin command's permission field and can be changed there. |
The permission field of the collect and visit commands is empty by default (no permission needed).
Placeholders
MiniPlaceholders tags of the tycoon expansion, provided through TypeWriter. <id> is an animal definition id, <cat> a research category id, <n> an expedition slot index starting at 0. All of them read the viewing player's profile.
Totals
| Placeholder | Returns |
|---|---|
<tycoon_total_animals> | Number of owned animals. |
<tycoon_total_species> | Number of owned species. |
<tycoon_placed_animals> | Animals placed in the zoo. |
<tycoon_unplaced_animals> | Animals in reserve. |
<tycoon_total_revenue> | Total revenue earned, with 2 decimals. |
<tycoon_total_revenue_raw> | Total revenue earned, as an integer. |
<tycoon_categories_unlocked>, <tycoon_categories_total>, <tycoon_categories_locked> | Research categories unlocked, tracked and still locked. |
<tycoon_milestones_count> | Collection milestones reached. |
<tycoon_prestige_total> | Total prestige count over all animals. |
<tycoon_expeditions_active> | Active expeditions. |
<tycoon_expeditions_completed> | Always 0. |
<tycoon_zoo_visitors> | Zoo visitors. |
<tycoon_active_mount_id> | Selected mount id, or none. |
<tycoon_last_revenue_collect> | Time of the last collection (HH:mm:ss). |
Research categories
| Placeholder | Returns |
|---|---|
<tycoon_category_unlocked:cat> | true if unlocked. |
<tycoon_category_mobs_killed:cat> | Tracked mobs killed. |
<tycoon_category_required_kills:cat> | Kills needed to unlock. |
<tycoon_category_progress_percent:cat> | Progress in percent. |
<tycoon_category_name:cat> | Display name. |
Animals
| Placeholder | Returns |
|---|---|
<tycoon_animal_level:id>, <tycoon_animal_xp:id>, <tycoon_animal_prestige:id> | Level, XP and prestige count of the owned animal. |
<tycoon_animal_owned:id>, <tycoon_animal_placed:id> | true or false. |
<tycoon_animal_count:id>, <tycoon_animal_placed_count:id> | Individuals owned and placed. |
<tycoon_animal_rarity:id>, <tycoon_animal_rarity_color:id> | Rarity name and its hex colour. |
<tycoon_animal_custom_name:id> | Custom name. |
<tycoon_animal_display_name:id> | Display name of the definition. |
<tycoon_animal_is_mountable:id>, <tycoon_animal_mount_speed:id>, <tycoon_animal_fatigue_capacity:id> | Mount settings of the definition. |
<tycoon_animal_max_level:id> | maxAnimalLevel of the economy config. |
<tycoon_animal_space_cost:id>, <tycoon_animal_revenue_rate:id>, <tycoon_animal_fusion_level:id> | spaceCost, baseRevenueRate, fusionMinLevel. |
<tycoon_animal_catalyst_progress:id> | Catalyst fill in percent. |
<tycoon_animal_catalyst_power:id>, <tycoon_animal_catalyst_items:id> | Catalyst power and number of donated item types. |
<tycoon_placed_happiness:id>, <tycoon_placed_biome:id>, <tycoon_placed_world:id>, <tycoon_placed_coords:id>, <tycoon_placed_chunk:id> | Details of the placed animal. |
<tycoon_prestige_bonus:id> | Prestige bonus of the animal. |
Expeditions
| Placeholder | Returns |
|---|---|
<tycoon_expedition_count> | Expedition slots in use. |
<tycoon_expedition_animal:n> | Animal id of slot n. |
<tycoon_expedition_remaining_seconds:n>, <tycoon_expedition_remaining_minutes:n> | Time before the return. |
<tycoon_expedition_duration_hours:n> | Total duration in hours. |
<tycoon_expedition_ready:n> | true when ready to collect. |
Entries
27 entries, generated from the extension source.
Actions9
- Animal XP ActionGrant XP to a player's owned animal toward its next level
- Catalyst Activate ActionUse the fuel item to attempt animal research once the catalyst is fully powered
- Category Unlock ActionUnlock a research category when the mob kill threshold is met
- Customize Animal ActionCustomize an owned animal: rename, apply skins, equip accessories
- Expedition Start ActionSend an owned animal on a timed expedition to earn loot, XP, and rare resources
- Fusion ActionFuse two animals of the same species to create an egg with inherited stats and mutation chance
- Prestige ActionPrestige a max-level animal: resets to level 1 with a permanent revenue bonus and exclusive cosmetic
- Revenue Collect ActionCollect accumulated tycoon revenue for a player
- Tycoon MenuTycoon Control Panel (menu à vues)
Commands3
- Tycoon Admin CommandCommande d'administration Tycoon
- Tycoon Collect CommandCommande de collecte des revenus
- Tycoon Visit CommandCommande de visite de zoo
Artifacts2
- Tycoon Data ArtifactCentralized persistent storage for all Tycoon data (profiles, research, expeditions)
- Tycoon Market ArtifactPersistent storage for the player auction house (market listings)
Manifests13
- Adventure MapConfigures an adventure map: temporary dimension template, chunk grid, spawn zone, and mount selector
- Animal DefinitionDefines a tycoon animal with research tree, catalyst mechanics, fusion, and economy stats
- Delivery ShopConfigures a rotating delivery shop: NPC spawn schedule, item pool, and FOMO rotation mechanics
- Research CategoryResearch category in the tycoon tech tree; groups animals and requires mob kills to unlock
- Tycoon Animal ContractA delivery contract rewarding handed-over animals
- Tycoon Breeding RecipeCross two animal species into a hybrid offspring egg
- Tycoon ChallengeA rotating daily/weekly zoo challenge
- Tycoon DecorationA placeable zoo decoration granting happiness/revenue bonuses
- Tycoon Economy ConfigTycoon economic rules: space, overcrowding, happiness, prestige
- Tycoon Menu ConfigTycoon Control Panel Configuration
- Tycoon Placement GroupGroupe d'emplacements de zoo
- Tycoon Research RecipeResearch Recipe
- Tycoon StaffA hireable zoo staff member with a passive role effect
Troubleshooting
The menu opens empty. Tycoon Menu Config templates default to empty slots, and the layoutPool must contain the layouts named by mainLayoutId and views. Check the log for the menu id.
Clicking a research category or an expedition slot goes back to the overview. The view ids in researchViewId, expeditionViewId and bestiaryViewId of the menu config (defaults tycoon_recherches, tycoon_expeditions, tycoon_bestiaire) must match the ids of your views. Otherwise the engine falls back to the default view.
A category never unlocks. trackedMobTypes is compared with the lowercase entity type name; an empty list counts every mob. A category with requiredCategory can only be unlocked through the Category Unlock action once that category is unlocked.
An animal cannot be placed. It needs a free position in a Placement Group whose maxSpaceCost is at least the animal's spaceCost, enough free space under the capacity and a zoo level of at least requiredZooLevel. Do not reorder positions on a live server: slot ids are derived from their index.
Costs and rewards in money do nothing. They go through Vault. Install Vault and an economy plugin.
The adventure map or mounts are unavailable. They need the TemporaryDimension extension (with BTC Core's SlimeWorldManager) and the Vehicle extension with PacketEvents. Without Redis, the leaderboard and market stay local to the server.
A fusion or breeding gives nothing. Fusion needs two reserve animals with the same level and prestige and at least fusionMinLevel; placed animals are ignored. The hatch is only rolled when the egg is ready, after incubationHours: rarityUpgradeChance and cosmeticMutationChance of the Fusion action apply then.