Skip to main content

Tycoon

Zoo tycoon: research animals, earn passive income, breed, prestige, explore and trade.

Privatev0.1Economy & crafting
RequiresTypeWriter0.9.0-beta-177 (BTC build)Entity extensionGUI extensionVaultVehicle extensionoptionalPacketEventsoptionalRPG CoreoptionalTemporaryDimension extensionoptionalMySql extensionoptionalMiniPlaceholdersoptional

Built for the BornToCraft network. This extension is documented for reference and is not distributed.

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​

  1. Install TypeWriter with the BTC build (BTC Core on Paper or Folia).
  2. Install the required extensions: Entity (animal models and fake entities) and GUI (the control panel).
  3. Install Vault with an economy plugin. All costs and rewards in money use Vault.
  4. 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.
  5. Put the Tycoon JAR in plugins/Typewriter/extensions/ and restart the server.

Getting started​

Add a first animal and let players research it:

  1. 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.
  2. Add a Research Category. Set displayName, requiredMobKills and, optionally, trackedMobTypes (empty means every mob counts).
  3. Add an Animal Definition. Set entityDefinition (the model), category (the id of the category), rarity, spaceCost and baseRevenueRate. List the acceptedCatalystItems (an itemId material name and a powerValue), the catalystPowerRequired and the fuelItem. Add the new animal id to the category's animals.
  4. Add a Tycoon Placement Group with at least one position, so players have somewhere to put the animal.
  5. Add a Tycoon Economy Config. Without it the built-in defaults are used.
  6. 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.
  7. 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.
note

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.

RarityRevenue multiplierCapture weightMount fatigue (s)
COMMON1.01.0120
UNCOMMON1.50.6180
RARE2.50.25300
EPIC5.00.08480
LEGENDARY10.00.02900

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.

Tycoon Control Panel is a menu with views. The page defines everything the player sees:

  • layoutPool holds a root frame (or mainLayoutId names it). Frames with variable content use the layout id @view.
  • views declares the screens. A view gives its layout per frame, or by the naming convention <viewId>_<frameId>. defaultViewId is 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 buttonType of the form tycoon_button:TYPE, or tycoon_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:

ScreenButton types
Zoo and bestiaryZOO_INFO, BESTIARY_ENTRY, BESTIARY_SPECIES_ENTRY, SPECIES_MANAGE_INFO, PLACEMENT_SLOT_ENTRY, SPECIES_LEVEL_ENTRY, BESTIARY_PANEL_ENTRY, PLACED_ENTRY
ResearchRESEARCH_CATEGORY_ENTRY, RESEARCH_ANIMAL_ENTRY, RESEARCH_CATEGORY
Expeditions and mountsEXPEDITION_ENTRY, EXPEDITION_START_ENTRY, MOUNT_ENTRY
AdventureADVENTURE_CHUNK_ENTRY, ADVENTURE_INFO
EconomySHOP_ENTRY, PRESTIGE_ENTRY, MARKET_ENTRY, MARKET_MINE_ENTRY, MARKET_SELL_ENTRY, ANIMAL_CONTRACT_ENTRY, STAFF_ENTRY, STAFF_INFO
SocialRANKING_SORT, RANKING_ENTRY, CHALLENGE_ENTRY
Breeding and decorationsBREEDING_PARENT_ENTRY, BREEDING_EGG_ENTRY, BREEDING_INFO, DECORATION_ENTRY, DECORATION_PLACED_ENTRY
ListsLIST_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.

CommandDescription
/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 saveWrite all Tycoon data to disk.
/collecterCollect 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​

PermissionGrants
tycoon.adminThe 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​

PlaceholderReturns
<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​

PlaceholderReturns
<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​

PlaceholderReturns
<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​

PlaceholderReturns
<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
Commands3
Artifacts2
Manifests13

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.

  • BTC Sky — islands and research on the same BTC build.
  • Machine — data-driven machines for islands.