qc_common
Shared by client and server: coordinates, chunks, content registry, physics, protocol. More...
Namespaces
Status samples of the admin channel over time (decisions E-848, E-863) | |
Parses an advancement (advancements/<name>.json, decision E-923) | |
Advancements in the content sync (QcContentSerializer, decision E-923): everything the client shows (tree, icon, texts, frame, handbook link) and the names and requirement groups of the criteria; the triggers and conditions stay on the server (the client gets Impossible) | |
Anvil's rules (decision E-866), pure so that tests and the server share them, as in the reference game: the left stack is repaired with its material (each item a quarter of the durability, one level each), combined with a second item of its kind (durability of both plus 12 %, two levels; the right item's enchantments merge in: equal levels rise by one up to the highest, otherwise the higher stays; conflicting or unfitting ones cost a level and stay off) and renamed (one level) | |
Resolves the anvil swaps of all blocks once all packs are loaded (decision E-870): a block's anvilSwap gives its item the swap into into and the item into the swap back, both paid with one with | |
Armour rules (decision E-234), pure so that the server's damage handling is testable on its own: every armour point takes 4 % off a hit up to 20 points (80 %); each hit wears every worn piece with durability by a quarter of the damage (at least 1), and a piece breaks at its durability | |
Parses the "armour" object of an item (decision E-235): slot, points, set, layer boxes and parts | |
Armour of an item in the content sync (QcContentSerializer): written by the server, read and checked by the client like the rest of the content | |
Loads the base game content pack (embedded as :/content/qtcraft) into a new registry | |
Parses the explosion fields of a block (decision E-600): "blastResistance" and "explosive" | |
Parses block definitions of content packs | |
Rules that derive block states from the surroundings, shared by the server and the client's block prediction (decision E-853): the state a placed block takes from the player's view and the clicked face, connections of fences, walls and panes, and whether a block still has the support it needs | |
Wire format of one block definition in the content sync, with its resolved shape | |
Parses the "textures" object of visible blocks ("all", "side", "top", "bottom", face names and named "slots") and checks that every shape part names a known slot (decision E-765) | |
Body of a boat (decision E-920), the same for the server (collisions, riders, placing) and the client (targeting, drawing, the driver's prediction) | |
Rules of the boat's movement, in the units of the role model where they come from it (blocks per tick) converted to m/s | |
Where a body fits into the world: clear of the collision boxes of the blocks around it | |
Soft collision between players and creatures (decision E-882), shared by the server (authoritative) and the client's prediction of its player, so both push the player alike | |
What build and machine a log, crash report or login comes from (decision E-834): the project version and the git commit at configure time (CMake writes both into QcBuildInfo.cpp), the compiler, Qt, the operating system and the processor | |
Translatable chat lines and disconnect reasons of the server (decision E-094) | |
Parses the coastal towers of the terrain ("coastalTowers" in worldgen/terrain.json, decision E-605); the structures and the foundation block are checked by the generator | |
Groups of commands as a list, by their words and by their byte in the protocol | |
Parses command macros (commands/*.json, decision E-248) | |
Parameters of a command as its usage text names them (decision E-848), for a command picker with parameter help and completion | |
Field conventions shared by the content-pack parsers | |
Content names have the form "namespace:path" with lowercase letters, digits, '_', '-', '.' and '/' | |
Turns content-pack JSON documents into definitions | |
Parses the cooking fields of a block: "machine" (furnaces, smokers, blast furnaces; decision E-770), "campfire" (decision E-772) and "bites" (cake, decision E-773) | |
Recipe matching shared by server (authoritative) and client (preview) | |
Crash reports (decision E-834) | |
Folder of the player's data (worlds, mods, the player key, server settings): QTCRAFT_DATA_DIR when set, else the application data location of the platform | |
Day and night as a pure function of world time (seconds) | |
A folder to hand in after a playtest (decision E-834): the logs of the newest sessions and all crash reports and dumps of <data>/logs, settings.ini and server.json without secrets, and info.txt with the build, the system, the mods and the worlds of the data folder (and the files that could not be copied) | |
Parses a kind of status effect (effects/<name>.json, decision E-450) | |
What enchantments do (decision E-864), pure so that server and client (mining speed it predicts) share the rules: which items an enchantment applies to, the level of an effect on a stack and the effects' numbers as in the reference game | |
Enchanting table's rules as in the reference game (decision E-864): bookshelves around the table raise the three offers' levels, and a player's enchantment seed fixes the offers until he enchants (then the server draws a new seed) | |
Parses an enchantment (enchantments/<name>.json, decision E-864) | |
Enchantments in the content sync (QcContentSerializer, decision E-864): every field, so the client knows effects and names | |
Number of the entity kinds, their protocol values and names | |
Parses the farming fields of blocks (decisions E-289 and E-290): "crop" (stages, pace, light, fruit of stems) and "soil" (moisture, water reach, what it reverts to) | |
Rules of each game mode, and its names; the mode itself is QcGameMode (registered for QML as GameMode, with GameMode.Mode.Creative and so on) | |
Versions of the world generator (decision E-922) | |
Handbook pages of the visible blocks (categories "blocks", "parts" and "liquids"), in content order: how they are mined, their physical behaviour, uses, recipes and where they occur | |
Handbook tables built from the block data (category "tables", after the tables of QcHandbookOverviewPages, in this order): the Signal Dust components with what they take and give, the blocks that are no opaque full cubes with their light and spawning behaviour, the light sources and the blast resistance of every block (decision E-685) | |
Builds the handbook from a complete content registry (base game and mods, including the server-side world-generation data and chapters): every block, item, recipe, creature, biome, liquid, world generation feature and tag gets an entry with facts and links | |
Handbook chapters about playing (category "playing"), in content order: their sections with rule and key placeholders filled, and links to related content | |
Handbook pages of the creatures (category "creatures"), in content order: behaviour, spawning and drops | |
Handbook pages of the items without a block page (categories "items", "tools" and "food"), in content order | |
JSON form of handbook pages, shared by the control interface and the in-game screen (which turns it into QVariantMaps), so both show exactly the same content | |
Markdown export of a handbook: index.md and one file per non-empty category, with relative links between entries | |
Handbook pages that gather content from all over: the item tags (category "tags", by tag name) followed by the tables of fuels, tools, armour and machine recipes (category "tables", in that order; the block tables of QcHandbookBlockTables follow them) | |
Data of the web handbook (web/handbook/data, shown by web/handbook/handbook.js like the handbook screen of the game): one JSON file per language with the packs, the categories with their entries in list order and every page in the form of QcHandbookJson::entry, each with the English title the search compares (QcHandbook::search) | |
Handbook pages of the world generation, in this order: the biomes (category "biomes"), then the terrain overview, the ore veins and the features (category "worldgen"), each in content order | |
Parses the "hangs" object of an item (decision E-790): "type" ("item_frame" or "painting"), for a painting its "motifs" ({"name", "texture", "width", "height"}, sizes 1 to 4) and its "back" texture | |
JSON names of hold categories and grips ("tool", "partialBlock", "handle", ...) | |
Parses how items are held (decision E-831): the hold object of an item or block and the category defaults in held.json | |
How items are held (decision E-831) in the content sync (QcContentSerializer): the hold of items and blocks and the category defaults, read back within the parser's limits (QcHoldParser) | |
Parses item definitions of content packs | |
Definition of an item in the content sync (QcContentSerializer): its stack, tool, food and fuel values, tags, what it places or fills, its armour (QcArmourSerializer) and how it is used (launcher, projectile, throwable, drink, fishing rod) | |
Coordinates of the cells of the light engine (QcLightEngine): the chunk and the place in it of a block coordinate, the index of a cell column in a chunk, the faces that lead to the neighbour columns | |
How light passes block states whose shape is not a full cube (decision E-104): such a state of a light-dimming block lets light into its cell (opacity 0) but not across the faces its shape covers completely | |
Parses the "flow" object of a liquid block: how far and how fast it spreads, whether it makes new sources, its bucket, bottle and sound, and its reactions with other liquids | |
Files of the diagnostics folder (decision E-834): one session per start of a program, named "<program>-<yyyyMMdd-HHmmss>" in UTC (so the order survives a change of daylight saving time; the lines inside carry local time), with "-2", "-3" … when that name is taken | |
Few cryptographic steps of the minimal login (decision E-252), all HMAC-SHA256 from QtCore: a password key stretched with PBKDF2, a player identity per server derived from the player's installation key, proofs bound to the nonce of one connection and a short fingerprint of an identity | |
Parses a loot table (loot/<name>.json, decision E-521) | |
Maps in the crafting grid (decision E-804), besides their recipes: a filled map with empty maps of its kind and nothing else copies it (one copy per empty map, all with its map id); a filled map in the middle of the 3 x 3 grid with its zoomsWith item in the eight cells around it zooms it out (a new map one scale larger, which the server makes when the result is taken) | |
One pixel of a map (decision E-799): the top block of its column as the index of its block definition (QcBlockState::type, the same for all states of a block, an index into QcContentRegistry::blocks()) and a shade, in 16 bits as (block + 1) << 2 | shade; 0 is a pixel nobody has looked at yet | |
Parses materials and the part families that turn them into building parts | |
Log file of a program (decision E-834): a Qt message handler that writes every message that passes the logging rules to a QcLogWriter and then hands it on to the handler installed before (the console) | |
Body of a minecart (decision E-382), the same for the server (collisions, pistons, riders) and the client (targeting, drawing, the rider's view) | |
Mining rules shared by server (validation) and client (progress display) | |
Parses mobs and the skeleton models and appearances that characters are drawn with | |
Wire format of one creature definition in the content sync: what the client shows and uses of it (size, model parts, sounds, glow, breeding food, tameable, milking, the thread of a family) | |
Checks the traits of creatures (decision E-460) when the content is finished | |
Protocol messages: plain data structs in thematic headers, together the alternatives of the QcMessage variant (QcMessages.h) | |
Bounds of the admin messages, checked by the decoders | |
Names people type and others read (player names, preset names; decision E-232): limits count Unicode code points, not UTF-16 units, and cuts fall between graphemes, so an emoji or a letter with its accents is kept whole or dropped whole and no lone surrogate is left behind | |
Access lists of secret files on Windows (decision E-901), where Qt's permission bits only set the read-only attribute: a file inherits the access list of its folder unless it gets its own | |
Compares the content packs of server and client at the login (decision E-252): same ids, same versions and, where both sides computed one, the same hash over the files | |
Registry function behind building parts: for every material of the registry and every part family of the material's kind, it registers the part's block (item follows from createBlockItems), its crafting recipe and its display names | |
Deterministic movement and collision shared by server (authoritative) and client (prediction) | |
Random key of one installation (decision E-252): 32 bytes, made on first use and kept as hex in <data>/player.key, readable only by the user | |
Rules of portable containers (a backpack, decision E-832): a block whose container travels with it as the data of its item (QcItemData::contents) | |
Box and the eyes of a body in each pose | |
Memory of the running process in MiB (debug display, statistics log, health line, benchmark); 0 where the platform does not report it | |
Server's check of a player's profile before it takes it over (Hello, SetAppearance; decisions E-036, E-231, E-232): the client stores and sends the profile, but nothing it sends is trusted | |
Parses a kind of projectile (projectiles/<name>.json, decision E-425) | |
Binary wire format: every frame is [quint16 type tag][payload] in QDataStream big-endian encoding | |
Payload encoders and decoders of the protocol messages, one overload pair per message | |
Where a shift-clicked stack goes, by its slot (numbers as in QcMsg::MoveInventoryItem) | |
Parses the rail fields of blocks (decisions E-382, E-384): what a rail does to carts ("railAction") and the states its track is made of | |
Rails (decision E-382): the track a rail state lays out and the state a rail takes from the rails around it | |
Voxel traversal (Amanatides & Woo) along a ray, tested against the boxes of each block state: the drawn boxes of every block that is neither air nor liquid nor invisible, or the collision boxes only (including the part of a fence above its own cell) | |
Parses crafting and smelting recipes of content packs | |
Repair in the crafting grid (decision E-236): two items of the same kind with durability, at least one of them worn, and nothing else make one item with both remaining durabilities plus a bonus of 5 % of the full durability | |
Files that hold secrets (the player key, the server's TLS key, the known servers, a server's settings and identities; decisions E-252, E-872, E-901): written atomically (QSaveFile) and readable only by the user | |
Parses block shapes: shape files and the inline shapes of blocks | |
Parses the showcase settings (worldgen/showcase.json, decision E-220) | |
Text on a sign (decision E-766): up to four lines that a player writes and everyone reads | |
Checks the links between Signal Dust blocks once all packs are loaded (decision E-333): a piston's head must be a piston_head block with the piston's facing values and sticky; a torch's or lamp's counterpart must exist, be of the same kind, have the opposite active and the same properties | |
Parses the "signal" object of blocks (decision E-333): the kind of component and its numbers, and checks that the block has the state properties the kind needs (a lever needs powered, the wire power and its four sides, a repeater facing, delay, powered and locked ...) | |
Light of the open sky in a chunk (for QcLightEngine): the top of each cell column (the highest block that stops sky light), the cells above the tops that the open sky lights, and the cells beside a higher neighbouring column from which the light spreads sideways | |
Two slabs in one cell make a full block | |
Names of the sounds the game plays for blocks, creatures and the player | |
Parses synthesized sound definitions of content packs | |
Where creatures that walk may appear by themselves (decision E-836), the same for every kind instead of a block list per creature: the ground is a solid block whose top face is full and that is drawn opaque (no glass, leaves or ice, no lower slab, path or farmland; an upper slab and a double slab carry), and neither ground nor the cells of feet and head hurt or hold a body (QcBlockDefinition::keepsSpawnsAway) | |
Checks what spawners, dungeons and loot tables name (decisions E-520..E-522) when the content is finished, and which creature kinds a spawner may bring forth at all | |
Corners of stairs as in the reference (decision E-754) | |
Stonecutter's recipes (decision E-784) | |
Bounds for counts read from untrusted streams (network, save files), so corrupt input cannot trigger huge allocations | |
Parses structures (structures/*.json, decision E-219) | |
Parses where the world generator places a structure by itself and what guards it (decisions E-590, E-591): groundLayer, surface (biomes, region spacing, chance, attempts, slope, margin to villages, foundation), guardians (zones whose creatures come back) and spawnArea (the monsters of its footprint, decision E-871) | |
Parses the variation of a structure (decision E-404): choices (named lists of name swaps, one option taken per placed copy) and parts (optional cells with a chance, in the structure's palette) | |
Number of the tick phases and their ids | |
Parses the offers of a profession (trades/<name>.json) and the trading settings of a villager species, villagers/<name>.json (decision E-414) | |
Parses the fields of the vegetation object of a biome (decision E-814): grass and flowers, each with density, patchSize, plants (block names or objects with block and weight) and patches (chance, tries, radius) | |
Joins the village files of all packs when the content is finished (QcContentRegistry::finish, decision E-421), in two steps around linking the creatures to their villager settings | |
Street plans of a village style (decision E-408): layouts in villages/*.json, a list of weighted kinds with their parameters, and the defaults of each kind and of a style without the field | |
Parses village styles (villages/*.json) and the village settings (worldgen/villages.json), decision E-403 | |
Outfits villagers wear (decision E-411): for every look (the default one of each villager species and each style's) and every profession with layers, the look's outfit with the profession's layers laid over it (an apron over the style's shirt), registered as a creature outfit under outfitName() | |
Parses the settings of a villager species (villagers/<name>.json), the professions (professions/<name>.json) and the look of a village style's villagers (decision E-411, E-421) | |
Names of the weather kinds and the climate of a column | |
Parses what the weather does to the world (weather.json of a pack, decision E-396) | |
Dimensions of the world | |
Parses worldgen/options.json of a content pack (decision E-917): the groups, options and presets of the world generation | |
Parses the settings of the flat and void world types (worldgen/flat.json, worldgen/void.json, decision E-223) | |
Parses the world generation definitions of content packs: biomes, features, ores and terrain |
Classes
Axis-aligned bounding box in world space (metres) | |
Advancements of the content (part of QcContentRegistry, decision E-923), in load order and replaced by name like other definitions | |
What an event must show for a criterion to be met; empty fields accept anything | |
One criterion of an advancement: its name inside the advancement, the event and its conditions | |
An advancement of the adventure guide (advancements/<name>.json, decision E-923): its place in the tree (parent, empty for a root), how it shows (icon item, title and description keys, frame, hidden until reached, announced in the chat), the handbook entry it leads to ("chapter:<name>", "item:<name>", "block:<name>", "mob:<name>", "biome:<name>"), its criteria and which of them it needs: requirements holds groups, every group must have one met criterion | |
Criteria one player has met, per advancement (decision E-923) | |
Allow-lists of adventure mode (decision E-735), a setting of the world: for each item kind, the blocks it may break and the blocks it may act on (be placed on, till, light, pour, …), like the reference's can_break and can_place_on, but per item kind instead of per stack | |
What QcAdventureRules::fromJson() read and what it left out | |
Air of a player or a creature under water (decision E-955), counted in game ticks | |
An anvil swap (decision E-870): the anvil turns a stack of one item into the same number of into, using up one with from its right slot | |
A player's chosen look: outfit, hair style and cape by content name, and four colours as 0xRRGGBB | |
An outfit (textures for the slots of a skeleton model), a hair style (extra boxes on the head, textured through its own layers) or a cape (a plate on the back, textured through its layers) | |
Texture for one slot of a model | |
A creature that lives in water (fish, decision E-502), from its data (aquatic): it swims only in water, in schools with its kind (cohesion, alignment and separation among at most neighbours creatures of its kind within schoolRadius metres), flops about on land and suffocates there after airSeconds | |
How a creature with the archer AI shoots (decision E-426), from its data (archer) | |
What makes an item armour: the slot it is worn in, the armour points it gives, the set it belongs to (showcase stands and the handbook group by it) and how it is drawn on a body | |
A layer box of a piece of armour (decision E-235): every box of the reference model (the humanoid) whose slot is in covers, made inflate metres larger on every side and cut to the heights fromY..toY (model space), drawn with texture on its bone | |
An extra box of a piece of armour on one bone (shoulder piece, crest, visor, toe cap), in model space like the bone's own boxes | |
What the client draws and plays (part of QcContentRegistry, synchronised with the content): textures, skeleton models, appearances (outfits, hair styles) and sounds, each replaced by name | |
Finished base content with the warnings of loading and finishing it | |
A biome of the terrain generator: its climate point, the shape of its land, its ground blocks, rivers, deltas, villages, monsters, features and vegetation (a biome file of a pack) | |
A block eaten bite by bite where it stands (cake, decision E-773): using it eats one bite of food points; its state bites counts the bites taken, the bite after its last value removes the block | |
How a block takes part in explosions (decision E-600) | |
Read access to blocks, implemented by the server world and the client world mirror | |
A box of block cells from low to high, both corners inclusive (decision E-975) | |
Definition of a block type as read from a content pack's JSON (QcBlockParser) | |
Integer position of a block in the world, in blocks (= metres) | |
A named block state property (facing, half, open, ...) and its possible values; the first value is the default | |
What the player aims at when placing a block: face of the block at clicked, hit (0..1 inside that block), while looking along yaw and pitch (degrees, positive is up) | |
A block covering a share of some ground (the beds of rivers, decision E-840) | |
Everything that depends on one concrete block state, derived from the block definition and its shape | |
Runtime ids are block states: every block owns a contiguous range of ids, one per combination of its property values (the first property varies fastest) | |
Textures of a block: one per face plus the named slots that shape parts use | |
What the driver of a boat does in one tick (decision E-920): paddle forward or back, turn left or right | |
A boat as it moves (decision E-920), the shared physics of the server (every boat, authoritative) and the client (the prediction of the own boat): its feet, velocity and contact (motion.inWater: it floats), the direction it points to and how fast it turns | |
Bodies sorted into columns of one block (decision E-882), so that the push on one body (QcBodyPush::between) looks only at the bodies in the columns within reach of it instead of at all of them: building costs a sort of the bodies, a look-up a binary search per column around the body | |
A body as the push sees it | |
How a peaceful creature breeds (decision E-293): fed with one of food, an adult falls in love for loveSeconds; two of a kind in love within partnerDistance metres get a young one, which grows up after growUpSeconds | |
A campfire (decision E-772) | |
Size of a cape in metres and its distance from the back (decision E-240) | |
A creature that takes single blocks and puts them down again (the shadewalker, decision E-460), from its data (carries): only the blocks of blocks, and only while the game rule mobGriefing is on | |
Column of QcWorld::sectionCount sections at one chunk position | |
Horizontal position of a chunk column, in chunks | |
16x16x16 blocks stored as a palette plus per-block palette indices | |
Coastal towers of the terrain generator ("coastalTowers" in worldgen/terrain.json, decision E-605): a tower from structure data on land at or a little above sea level with ocean near it, standing on a foundation down to the ground | |
Soft edges of cold biomes (decision E-858): the top water layer freezes by the temperature of its column with a noise instead of by biome, rivers only further into the cold, and the ground blocks of a column come from the biome a few blocks away in a jittered direction, so they mix over the border | |
A command made of other commands, defined in data (commands/*.json, decision E-248): mods have no C++ access, so this is how they add commands | |
One form of a command's usage | |
One word of a form: a literal or a placeholder | |
Message-level view of a transport: encodes outgoing messages, decodes incoming frames and closes the link on undecodable input | |
Manifest of a content pack (base game or mod): pack.json in the pack directory | |
Reads content packs from disk (or Qt resources) into a registry | |
Central catalogue of all content (blocks, items, creatures, recipes, effects); assets, world generation, villages and translations are catalogues of their own that it owns (decision E-715) | |
A parsed state name: the state (std::nullopt for an unknown block) and what was wrong with it | |
Wire format of the content sync message: everything a client needs to show the world | |
Where and how install() writes reports | |
Every item of the content, mods included, sorted into the tabs of the creative inventory and searchable by name (decision E-286) | |
A plant that ripens in stages (wheat, carrots, pumpkin stems), driven by random ticks on the server (decision E-289) | |
A creature that crumbles into blocks where it touches a source block of the liquid liquid (the sand golem, decision E-593), from its data (crumbles): it is gone without loot or experience, and its build stands in its place, an iron golem's T in reverse: body at its feet, in the middle above them and on both sides of the middle across its facing, head on the middle | |
A damaged file of a world and what it held | |
Command line options of logging, crash reports and the health line, shared by qtcraft and qtcraft-headless | |
Logging and crash reports of one run of a program (decision E-834), from the start of main() until its end: deletes the files of old sessions, installs the log file (QcMessageLog) with its header and the crash handler, applies –log-rules, and on destruction closes the log | |
What the session starts with | |
What the diagnostics options asked for (decision E-834) | |
Drunk with the use button like food is eaten (milk, decision E-500); it becomes emptiesTo | |
A creature that drinks to heal (the witch, decision E-623), from its data (drinks): once its health lies heal or more below its most and cooldownSeconds have passed since its last drink, it holds item for seconds without shooting, then heals by heal with sound | |
Dungeons of the terrain generator ("dungeons" in worldgen/terrain.json, decision E-522): a room of wall/moss blocks deep underground with a spawner of a weighted kind and chests with loot, and corridors carved from it to caves within reach, lined where they border cave or earth and lit sparsely outside the spawner's spawn area | |
A kind of status effect (decision E-450), from effects/<name>.json: what it does to a body while it lasts (poison: damage now and then, never below minHealth) and how the HUD shows it (icon, colour, hearts in the colour) | |
One offer: the levels the player needs (0: no offer) and the enchantments it gives | |
An enchantment an item carries (decision E-864): the enchantment's content name and its level | |
An enchantment (enchantments/<name>.json, decision E-864), as in the reference game | |
Kinematic state of an entity | |
What a player or an armour stand wears in the four armour slots (QcEquipmentSlot, decisions E-232, E-234): one stack each | |
A player's experience (decision E-398): a level and the points gathered towards the next one, with the reference game's cost curve (7 + 2 L points per level below 15, 37 + 5 (L - 15) up to 29, then 112 + 9 (L - 30)) | |
Experience points something gives as orbs (decision E-398): a mined ore, a killed creature, a pair of bred animals; between min and max points, chosen evenly | |
Step from a block to its neighbour across one face, in blocks | |
A parent that splits off children and takes them with it (the Kjut, decision E-839), from its data (family): every fresh hurt it survives that takes health splits off childrenPerHit creatures of kind child while fewer than maxChildren of its children live and it has split fewer than maxSplits children in its life; when it dies, every child of it vanishes with popSound and leaves popDrops (like the children of a QObject on deleteLater), without an explosion | |
A terrain feature (a feature file of a pack): a tree, a column, a single plant or a pool of liquid | |
A feature a biome places (an entry of the biome's "features") | |
How a block takes part in fire (decision E-392) | |
What a fishing rod does (decision E-503; "fishing" in the item's file): the use button casts bobber, a projectile kind, at speed and reels it in again | |
One entry of a fishing rod's loot table (decision E-503): count of item, drawn with weight against the weights of the other entries | |
Settings of the flat world type (worldgen/flat.json): the layer preset a new flat world gets unless it names its own, "bedrock,59*stone,3*dirt,grass_block" (bottom up, n* repeats) | |
Framing of the protocol on a byte stream (TCP, decision E-251): every frame is a big-endian quint32 length followed by that many bytes; a frame of length 0 only keeps the connection alive | |
What a mode changes about the rules | |
A creature that a player provokes by looking at its head (the shadewalker, decision E-460), from its data (gaze): the player's look and the direction from their eyes to the middle of its head agree within tolerance, which narrows with the distance d (look · direction > 1 − tolerance / d, like the reference game: about 4.5° at 8 m, 1.8° at 50 m), from no farther than range metres, with nothing in between | |
How a creature with the golem AI fights, is repaired and built (decision E-471), from its data (golem) | |
A plant that grows upwards by itself (sugar cane): random ticks of its top block add a block of the same kind above until the column is maxHeight tall | |
Handbook of one content registry in one language (built by QcHandbookBuilder): categories with their entries, grouped by pack, and a search over titles in this language and in English | |
A category and its entries | |
Everything a handbook consists of; see the accessors of the same names | |
How much light a block takes away | |
A chapter of the handbook about playing (controls, hunger, death ...), from handbook/*.json | |
What the handbook page builders share while building one handbook | |
One page of the handbook: a block, item, creature, biome, chapter ... with its facts, recipes and references to other pages | |
One row of the facts table: a value, links, or both | |
A reference to another entry (target is its id) | |
A crafting recipe (cells of a grid, row by row; empty links are empty cells) or a machine recipe (one input cell) | |
A titled part of the page: text (a small Markdown subset: paragraphs, "- " lists, **bold**), links or recipes | |
Reverse lookups over the content for the handbook pages, all in content order: recipes by result and ingredient, smelting by result and input, what drops an item, where a block occurs, which creatures spawn on it, machines by category and parts by base block | |
Titles, icons and entry ids of content in the handbook, and links to their entries | |
One file of an export: a Markdown page or a file of the web handbook's data (QcHandbookWeb) | |
Recipes as shown in the handbook, and the sections every item page has about how the item is made and what it is used for | |
Texts of a handbook in one language: translations of content and handbook labels, numbers with units, and the rule and key placeholders in descriptions and chapters | |
Where an item frame or a painting hangs and what it shows (decisions E-790, E-791), the same for the server (placement, support, saving) and the client (targeting, drawing) | |
Field "hangs" of an item (decision E-790): used on a block face, the item hangs an entity of type there that drops the item again | |
Health line (decision E-834): every interval one info line "HEALTH …" in qtcraft.health with memory (resident and peak), frame and tick times, chunks, entities, players, round trip and network rates, so a log of a long playtest shows how the program fared before a problem | |
What a program reports in its health line; unknown parts stay empty or -1 | |
One thing a projectile does when it hits (decision E-427), an entry of its kind's "onHit" list: {"type": "knockback", "strength": 0.5} | |
A type of effect: its name, the key and range of its number and the number when not given | |
Defaults of every category (held.json); a later pack's file overrides the fields it sets | |
Hold of an item or block definition, or one category's defaults | |
Bounds one value of a vector must keep, both inclusive | |
One placement of the held thing around the grip | |
A creature that hovers (the Kjut, decision E-839), from its data (hover): it floats height metres above the ground or the liquid below it, bobbing by bob metres every bobSeconds, never higher than maxHeight above the ground and lower under a low ceiling; it flies without gravity towards where its brain wants to go, rises over a wall in its way and turns to face where it goes at no more than turnSpeed degrees a second | |
A read-only view of the definitions (of the type T) of a content registry list, indexed by their strong id type Id instead of an integer (decision E-952) | |
One end of an in-process link | |
Index of a definition in a list of its own kind, as a type of its own per list (decision E-952): Tag tells the lists apart, so an index of one list cannot pass for one of another | |
Collects durations until take() hands out their mean and maximum and starts anew | |
Mean and maximum of durations within one interval of the health line (decision E-834) | |
Player inventory: hotbar slots 0..8 followed by the main storage | |
Optional data of an item stack (decision E-823): typed components, each with a fixed id that is never reused (ids from QcItemData::firstModId on belong to mods) | |
An item kind of a content pack (items/<name>.json, QcItemParser): its stack size, tool, food and fuel values and all the ways it can be used | |
An item that a block (or other content) drops, with count, chance and conditions | |
A number of identical items, e.g. one inventory slot | |
Reads typed fields of one untrusted JSON object | |
A saved component this version does not read (decisions E-420, E-823), kept as raw bytes so that saving again loses nothing: a component of an unknown id whole, or, for a known component of a newer version, the fields after the ones this version knows (tail), written back after them under the newer version | |
Which keys trigger which action of the game, as a table: every action has a primary and a secondary key (Qt::Key values, 0 = none) | |
A binding moved away from another action to resolve a conflict: action's slot now holds key (the key the rebound action had before, 0 = none) | |
What an item that shoots projectiles does (a bow, decision E-425): held with the use button down, it draws for up to drawSeconds; released, it shoots the first ammunition of the inventory it takes (decision E-427) at speed times the power of the draw, if the power reached minPower | |
What a creature lays now and then (a chicken's eggs, decision E-452): an awake adult drops item at its feet after a time chosen evenly between minSeconds and maxSeconds, anew after each one, and sound plays there | |
Block and sky light of all loaded chunks per section, kept up to date incrementally (decisions E-049 and E-389); the server and the client use the same engine | |
Sections that hold cells and the bytes they take, per channel | |
What the engine keeps | |
Light of one chunk computed on its own (its neighbours dark walls), on any thread | |
Light levels (0..15) of the cells of one section, two per byte (2 KiB per section) | |
How every block state treats light, indexed by runtime block id (decision E-389): the opacity (light lost entering the cell, 15 stops it), the block light it gives off and the faces light cannot cross (QcLightPassage) | |
Block light of a box-shaped volume of cells: sources flood outwards breadth-first, every step into a cell costs max(1, opacity of that cell) levels, cells of opacity 15 stay dark and no step crosses a face that a partial shape covers (QcLightPassage) | |
Links of a handbook section, one per target: a link to a target that is already there adds its note to that one | |
How a liquid block flows (see QcLiquidFlow) | |
What a liquid turns into where it touches another liquid (lava next to water) | |
Round trip as the player list carries it (decision E-886), in microseconds; negative while unknown | |
A load that failed (a file, a definition, the base game): why, and the warnings collected up to there (decision E-975) | |
A pack loaded into a registry: its manifest and the warnings about the entries it skipped | |
One log file with a size cap (decision E-834): lines are appended unbuffered, so a crash loses none of them; when the file would grow beyond the cap it becomes the rotated part 1, older parts move up by one, the oldest beyond rotations is deleted and a new file starts | |
Size cap and the rotated parts kept | |
Login settings of a server open to network players (decision E-252); a single-player world opened to the LAN gets them when it starts listening | |
A loot table (loot/<name>.json, decision E-521): what a chest the world generator places holds (dungeons; later mine shafts and surface structures) | |
A pool of entries drawn from a number of times | |
Loot tables of the content (decision E-521), replaced by name like other definitions, and what one gives: roll() draws the pools of a table from a seed (the same seed gives the same loot) and scatters the stacks over the free slots of a chest | |
What draw() needs to know of an item: its id and largest stack | |
Block capability of a machine (furnace, smoker, blast furnace): an input, a fuel and an output slot that work through the smelting recipes of category while fuel burns; kinds narrows them to recipes of those kinds (decision E-770) | |
Thread-safe hand-over of values of the type T from producer threads to one consumer | |
What the grid makes | |
Picture of one map (decision E-799), the same for the server, which reveals and saves it, and the client, which keeps what the server sent: size x size pixels over a square of the world that lies on a fixed grid of its scale (the map of a block column is the same for every holder), each pixel the top block of its column with a shade (QcMapPixel), 0 where nobody has looked yet | |
A player or an item frame shown on a map (decisions E-803, E-808): where, in half pixels from the map's middle (-128 at the west or north edge, 127 at the east or south edge), and which way the player looks or the frame faces, in sixteenths of a full turn clockwise from north | |
A material that building parts are made of: a base block and its kind | |
Log file install() writes | |
When a line was written: the local time and the milliseconds since the log started | |
What recent() found: the lines, and the sequence of the newest line kept when it looked (read under the same lock, so a caller that asks again after it gets every later line exactly once) | |
One of the latest lines | |
Abandoned mine shafts of the terrain generator ("mineshafts" in worldgen/terrain.json, decision E-570): a network of corridors on several levels below a central room, laid out on a square lattice, with wooden supports, rails, cobwebs, chest minecarts with loot and spawners; levels joined by staircases, plank bridges on pillars where a corridor crosses a cave, and a ladder shaft with a headframe up to the surface in some of them | |
A biome with its own chance of a surface entrance | |
How a creature finds its way (decision E-423), from its data (abilities); the path rules (QcPathRules::of) follow from it | |
Data definition of a creature: stats, behaviour, spawning, model and drops | |
One place and time where the creature spawns: the main rule (the fields above) or an extra one (spawn.also, e.g. slimes also on swamp surfaces at night) | |
One box of a mob's model, in metres relative to the mob's feet centre, facing north (-Z) | |
Reads one mob definition of a content pack: owns the definition being built and the reader of the mob's JSON object | |
One bone of a skeleton model: boxes that turn together around a pivot | |
One box of a bone | |
A skeleton model for creatures and players (a file in models): named bones with boxes that outfits texture by slot | |
Server -> client: the commands of the registry and the macros of the content | |
One command or macro | |
Server -> client: recent chat after subscribing (history), then each new line | |
One chat line as the server sent it to the players, with when (ms since the epoch) and who wrote it (empty for lines of the server) | |
Server -> client after subscribing to the status: the bounded history for charts, oldest first | |
Server -> client: operators, whitelist and bans | |
One ban | |
Server -> client: the log's tail (tail, answering a subscription or LogTail) or new lines | |
One line of the server's log (QcMessageLog::recent) | |
Server -> client: everyone playing, with the server's view of each | |
Client -> server: one request of the operator; the server answers with AdminResult (same id) and, for the readers and the changes of a list or setting, the report of that topic | |
Server -> client: the outcome of an AdminRequest (id 0 answers a subscription or ends it), with the command's replies as chat lines | |
One point of the status: at timeMs (milliseconds since the epoch, UTC) the ticks of the second before it, the players, chunks and entities, the resident memory and the network rates | |
Server -> client: game rules and server limits with what a settings page needs | |
One game rule or server limit | |
Server -> client, about once a second while the operator follows the status | |
Client -> server: the topics the operator follows; 0 ends the subscription | |
Server -> client: the receiving player's progress in the adventure guide (decision E-923) | |
Server -> client: the open anvil's slots, the name in its name field, what it would make and the levels that costs (QcAnvil::Result; 0 and an empty output for nothing) | |
Client -> server: hit an entity with the held item | |
Server -> client: the player's action numbered sequence (FinishMining, UseItem) is handled, together with every earlier one (decision E-853) | |
Server -> client: blocks set together in one tick (an explosion's, decision E-604) | |
Server -> client: the block at pos is now block | |
Server -> client: the items lying on the campfire at pos (decision E-772), sent after the ChunkData of its chunk and whenever they change; one content item id per slot, 0 for an empty one | |
Client -> server: the player stopped hitting before the block broke | |
Client -> server: chat line or command starting with '/' | |
Server -> client: chat line or command feedback | |
Client -> server: take offer slot (0–2) of the open enchanting table | |
Server -> client: a whole chunk, sent when it comes into the player's view | |
Server -> client: the labels floating in a chunk (decision E-222), sent right after its ChunkData when there are any; they go with the chunk's ChunkUnload | |
Server -> client: the client forgets the chunk at pos | |
Client -> server: the anvil screen closed | |
Client -> server: the crafting screen closed; grid items go back to the inventory | |
Client -> server: the enchanting screen closed | |
Client -> server: the machine screen closed | |
Client -> server: the stonecutter screen closed | |
Client -> server: the player closed the trading screen | |
Client -> server: use the held item without a target: eat it, or put on held armour (swapping with what is worn in its slot) | |
Server -> client: all content definitions; runtime block ids are the indices in this registry | |
Client -> server: craft a recipe directly from the inventory (recipe book), count times | |
Client -> server, creative mode only (decision E-283): puts stack into the inventory slot slot (0..35, or an armour slot 100..103 for armour made for it), onto the same item up to its stack size, else in place of what is there; an empty stack clears the slot (the bin) | |
Client -> server: which debug data the client wants while its debug display, the control interface or the statistics log needs it; 0 stops it | |
Both directions: the connection ends | |
Client -> server: the use button pressed or released with a launcher in the hand, or the draw given up (a screen opened, decision E-425) | |
Client -> server: throw one item (or the whole stack) of the selected hotbar slot | |
Client -> server: the lines the player wrote on the sign at pos | |
One of the three offers as the player sees it: the levels it needs (0: no offer) and, as a clue, the first enchantment it gives (its content name and level) | |
Server -> client: the open enchanting table's slots, the bookshelves that count, the offers and the rune seed the screen writes the clues with (decision E-884: a random value of the player's own, drawn anew with the enchanting seed but not derived from it, so the order of the readable letters stays until the player enchants and tells nothing about the offers) | |
State of one entity in EntityMoves; the fields as in EntitySpawn | |
Server -> client: positions of all visible entities that changed this tick, with the server's time of the tick (players' time, QcServerClock::playerTimeNs, in ms) for the client's interpolation buffer (decision E-271) | |
Server -> client: the entity id left the player's view or died | |
Server -> client: an entity came into view, with its kind (decision E-365); a creature also names its type, an index into the content's mobs | |
Server -> client: an explosion of power (QcBlastDefinition) at centre (decision E-604); the client shows its flash and smoke, the sound comes as a sound event | |
Client -> server: the client's timer says the block is broken; the server checks the time itself | |
Client -> server: take the anvil's output output for levelCost levels, as the last AnvilState showed them; refused when either changed since | |
Server -> client: the receiving player's game mode (decision E-282), after the welcome and with every change | |
Client -> server: first message on every connection | |
Server -> client: the receiving player's complete inventory, crafting grid and armour slots | |
Server -> client: the answer to LatencyProbe | |
Client -> server: measures the round trip of the connection (decision E-886) | |
Server -> client: lightning struck at position (the top of the column it hit) | |
Server -> client after Hello from a remote client: what the server needs for the login | |
Client -> server: the answer to LoginChallenge | |
Server -> client: contents and progress of the open machine | |
Server -> client: what is new of map id for a player holding it (decision E-802): its place on the grid, the pixels of area row by row (QcMapPixel; an empty area sends none) and the players shown on it now (QcMapMarker) | |
Where a creature is heading: chasing a player, wandering or fleeing | |
Client -> server: move count items from slot from to slot to | |
Server -> client: the player opened the anvil at pos (decision E-866); AnvilState follows | |
Server -> client: open the crafting screen with a grid of this size (crafting table) | |
Server -> client: the player opened the enchanting table at pos (decision E-864); EnchantingState follows | |
Server -> client: the player opened the machine at pos, or with an empty category the storage block (chest) there; MachineState follows | |
Server -> client: the player placed or used the sign at pos; the client opens its editor with the sign's current lines | |
Server -> client: the player opened the stonecutter at pos (decision E-785); StonecutterState follows | |
Client -> server: the player opened (paused) or left the pause menu (decision E-877) | |
Client -> server: the middle mouse button on a block (decision E-285) | |
Server -> client: measures the round trip for the admin channel's player list (decision E-848); the client's tick thread answers at once with a Pong of the same nonce | |
Server -> client: the receiving player's air under water (decision E-955), sent only when what the HUD shows changes: the bubbles (QcAirSupply::bubblesOf), a full breath or whether the eyes are under water | |
Server -> client: the receiving player's experience (decision E-398): his level and the points towards the next one, which needs pointsForNext (QcExperience::pointsForNext, sent so the client needs no curve) | |
Server -> client: the receiving player's food points | |
Server -> client: the receiving player's health; dead players wait for Respawn | |
Client -> server: one tick of movement intent | |
Server -> client: everyone on the server, sent to all whenever someone joins or leaves, and every two seconds while a round trip changed (decision E-886) | |
One player | |
Server -> client: authoritative state of the receiving player | |
Client -> server: the answer to Ping | |
Client -> server: shift-click on a slot | |
Client -> server: the text of the anvil's name field changed (at most QcItemData::maxNameLength characters after trimming) | |
Client -> server: leave the death screen | |
Client -> server: the player selected another hotbar slot | |
Client -> server: choose the stonecutting recipe recipe for the input of the open stonecutter (empty: none); the server answers with StonecutterState | |
Server -> client: tick phases and server counts, at most twice a second while subscribed | |
On the server (decisions E-374 to E-377): in its storage, under way (read or generated, waiting for their group), unloaded and not yet saved; groups of circuits among the loaded ones (more than one chunk), the largest, the one of the player's chunk, groups over the limit seen so far; load tickets of circuits (and those refused), forced chunks, chunk loaders | |
Server -> client: the server stopped (paused) or resumed its ticks (decision E-877) | |
Client -> server: the player changed their look | |
Server -> client: the text on the sign at pos, sent after the ChunkData of its chunk and whenever it changes; all lines empty: no text (cleared, or the sign is gone) | |
Server -> client: a sound at a world position (block broken, creature hurt, furnace crackling) | |
Server -> client: the creature kind shown spinning in the monster spawner at pos (decision E-520), sent after the ChunkData of its chunk and whenever it changes; mob is the kind's index in the content, -1 for none (an empty cage, or the spawner is gone) | |
Client -> server: the player starts hitting a block | |
Server -> client: the open stonecutter's input slot and the stonecutting recipe chosen for it (empty: none) | |
Client -> server: take the crafting result once into the inventory | |
Client -> server: the use button pressed with a throwable item in the hand (a snowball, decision E-427); the server throws it unless its cooldown runs | |
Client -> server: trade the offer at index offer of the open screen once, or with repeat as often as the inventory and the uses left allow (shift-click) | |
One offer as the trading screen shows it: what the player pays (one or two stacks, the first at its current price), what they get, and how often it can still be traded before the villager restocks | |
Server -> client: the trading screen of the villager villager opened or changed (a trade, a restock, a level gained) | |
Client -> server: use the held item on a creature (catch a firefly with an empty bottle) or on an armour stand (put on or take off armour or the held item; the server picks the body part from the player's view) | |
Client -> server: use the held item on a block face (places blocks, opens doors) | |
Degrees; the server wraps yaw into [0, 360) and clamps pitch to [-90, 90] (positive is up) | |
Server -> client: the weather as this player sees it (decision E-395) | |
Server -> client: accepted connection | |
Server -> client: seconds since the world began and the length of a full day; running is false while the time of day stands still (game rule daylightCycle, decision E-221) | |
Definitions of one kind in registration order, found by their name: registering a name again replaces the earlier definition in its place, so a later pack overrides an earlier one. Definition is the type of the definitions | |
Instruments of a note block (decision E-767): the sound it plays for the block below it, by that block's name, else by its sound material, else fallback | |
Ore veins of the terrain generator (an ore file of a pack): compact clumps of block grown inside one chunk, replacing only replaces | |
One content pack as server and client compare it: id, version and a hash over its files (QcContentFingerprint) | |
Identity of a content pack that went into a registry (base game or mod); shown in the UI and recorded with saved worlds | |
One picture a painting can show (decision E-791): its size in blocks and its texture | |
A family of building parts (stairs, slabs, walls, fences, gates) that QcPartGenerator derives from every material of a matching kind: block, item, recipe and names come from this template and the material's base block | |
Mean and maximum of a few series of times (milliseconds) over the latest samples, for the debug display (decision E-225): one sample per server tick or per frame, each with one value per series | |
Width and height of an entity's collision box | |
Outcome of moveBox(): the movement that was possible and the axes on which blocks stopped it | |
What an entity wants for one tick: wish is the horizontal movement direction (length <= 1), speed its target speed, jump jumps on ground, swims up in water or climbs, hold keeps a climber in place, keepsToEdges stops it at edges it would drop off (a sneaking player, sneakEdgeDepth), slideDrag is how it slides on slippery ground (footDrag, itemDrag, coastDrag) | |
Walking speed and jump factors of the block under a body's feet (mud), and its slipperiness (ice) | |
A block state at a cell: one block a plan, a rule or a server system places or changes (decision E-975). Protocol messages keep their own types | |
A chunk loader block of a world (decision E-377): where it stands and who placed it (QcChunkLoaders::Loader on the server) | |
Movement intent for one simulation tick, sent from client to server | |
Which block states keep rain and snow out of the cells below them (decision E-395): those that keep sky light coming straight down out (QcLightPassage::skyStop: opaque blocks, leaves, covered tops), solid blocks with a collision shape (glass, fences, slabs) and liquids | |
A kind of projectile (decision E-425), from projectiles/<name>.json; server side only | |
A water creature that swims in pulses (the squid, decision E-974), from its data ("aquatic": {"pulse": ...}): each pulse of seconds starts with a push of thrust times the pulse towards speed m/s, then it glides and slows down; hurt, it pulses twice as often at its chaseSpeed | |
What is open and what the moved item is | |
What a rail state does to the carts on it (decision E-384) | |
One end of a track: the middle of the cell's side side (north, east, south or west), at the bottom of the cell or, when raised, at its top | |
Cell of the rail whose track meets end end of the track track in cell (the same height, one higher or one lower beside it), and which of its ends meets it; nothing at the end of a line | |
Rails of the same block as the rail at cell along its line, at most reach each way, in the order of the line (from the end of its first track end to that of its second), cell among them at index (the lines of powered and activator rails, decision E-384) | |
Track and behaviour of every block state of a content, looked up once (carts ask every tick) | |
Track a rail state lays out through its cell | |
Block a ray hit (QcRaycast::cast) | |
Crafting recipe from content data | |
Round trip samples of the last windowNs (decision E-886) | |
Round trip of a connection as the debug display, the control interface and the health line show it (decision E-886), in milliseconds: the latest sample, the smoothed value (EWMA with 1/8 like TCP's SRTT), the smallest and largest sample and the jitter (mean difference between consecutive samples) over the window | |
A block that grows into a tree feature after a random time (saplings) | |
A section of a chunk: the address a key of qcSectionKey() stands for, and the section a light or mesh change concerns (decision E-975) | |
A part of a shape applies when every condition holds: the block's value of property is one of values | |
Block geometry from data | |
One part of a block shape: boxes and crossed planes that apply in the states where all its conditions hold | |
Shared, reference-counted holder of a stack's data | |
One category of the showcase world (an entry of "categories") | |
Settings of the showcase world (worldgen/showcase.json, decision E-220): the flat ground, the time of day, the blocks of podiums, enclosures and item chests, the lookout structure and the categories that sort every block of the registry onto podiums | |
One ground layer: its block ("block") and its depth in blocks ("depth", at least 1) | |
Which blocks belong to a showcase category | |
A shy creature (the ocelot, decision E-480), from its data (shy): it flees from players closer than distance metres, except from one who holds one of its calmItems and moves no faster than calmSpeed m/s (sneaking up slowly with its food) | |
A sign (decision E-766): lines lines of at most lineLength characters that players write and everyone sees (QcSignTexts on the server, QcMsg::SignText); 0 lines: no sign | |
Ink of a sign text colour as red, green and blue (decision E-830): a tone of the dye dark enough to stand off the lightest planks (birch) at a contrast of at least 2:1 | |
Text of one sign: its lines and the colour a dye gave them (decision E-830), the dye's name (QcItemDefinition::dye); empty for the default, which is also what black dye gives | |
Signal Dust part of a block (the "signal" object, decision E-333): its kind and the numbers that tune it | |
Slots of a screen as one list (inventory, crafting grid, an open machine or chest, armour), as the server moves items between them | |
Turns one input item into a result inside a machine of the same category (furnace: "smelting"); the stonecutter's recipes (decision E-784) have the category "stonecutting" and their own list | |
Soil that crops grow on (farmland): random ticks keep it wet while water lies within reach blocks horizontally (same level or one above) and let it dry otherwise; dry soil without a crop on it, or soil under a full block, turns into revertsTo | |
A sound effect, ambience loop or jingle described by synthesis parameters (content sounds/) | |
One synthesized voice of a sound: a source with a pitch sweep, an envelope and simple filters | |
Weight a biome gives a monster kind instead of the kind's own (decision E-838): the husk's desert takes most of the zombies' share | |
Monster list of every biome (decision E-838), as in the original game: each monster kind has a weight in a biome, and an attempt picks one kind of the whole list by weight and then tests it at the place; a kind that may not spawn there wastes the attempt | |
What makes a block a monster spawner ("spawner" in block data, decision E-520): the rules it spawns its creature kind by | |
How an armour stand stands (decision E-238): a rotation per body part and what it shows | |
Degrees around the part's pivot like QcAnimator::BoneRotation: x (pitch) swings arms and legs forward and tilts the head up, y (yaw) turns it towards the stand's right, z (roll) lifts it outwards to the right | |
One status effect a body has (decision E-450): its kind (QcEffectDefinition::name), its level (1 = level I) and the ticks it still lasts | |
Status effects of a player or a creature (decision E-450): at most one of each kind | |
A building made of blocks, defined in data (structures/*.json, decision E-219): a palette of block states and the palette key of every cell, plus what a placed copy brings along: creatures, contents of chests and machines, armour stands, labels, block updates to run (liquids start to flow, sand falls) and saplings that grow | |
A boat (decision E-920) with its feet at at (a point, like a creature's), of the boat item item, pointing to yaw degrees (0: north). The JSON keys are the field names | |
A minecart on the rail at at, placed from item (a chest or hopper cart takes the contents whose at is its rail, decision E-386). An entry of "minecarts" is a plain cell for qtcraft:minecart or an object with "at" and "item" | |
A choice of the village planner (decision E-404): one of the options is taken per placed copy, each as likely as the others | |
A zone of the structure whose guardians come back by themselves (decision E-591; "guardians"): while fewer than max creatures of mob that belong to the zone are awake, at most one comes every cooldownSeconds into a cell of the box from..to (local, both corners inside) with block light at most maxLight, when no living player is within minPlayerDistance of the box and one is within maxPlayerDistance (QcGuardians) | |
An item frame or painting hung when the world is made (decision E-797, the showcase's station): on face of the block behind cell at (a painting's lower left cell), from item; a frame holds held turned by rotation eighths, a painting shows the motif motif. The JSON keys are the field names | |
A floating text placed with the structure (an entry of "labels") | |
A chest at at filled from the loot table table when its chunk first arrives (decision E-521). The JSON keys are the field names | |
A creature placed with the structure (an entry of "mobs") | |
An optional part of the village planner (decision E-404): cells in the structure's palette written over its own cells with chance per placed copy (keep: the structure's own cell) | |
Text on the sign at at (decision E-766; lines, up to four of at most 32 characters), written when the world is made (the showcase's stations). The JSON keys are the field names | |
Structure's footprint over the whole height of the world as a spawn area of the original game (decision E-871; "spawnArea": {"monsters": [...]}): a monster that spawns naturally in one of its columns is one of monsters, drawn alike, by the monsters' rules of light, ground, distance and cap, one at a time (QcSpawnAreas) | |
A monster spawner of the structure (decision E-520): the cell at of the spawner, the creature mob it brings forth and whether its creatures stay put (confined: they walk, but neither teleport nor change the world, like the showcase's spawner behind glass); in world coordinates also given to the server with the chunk (QcChunkFurnishing::spawners). The JSON keys are the field names | |
A stack of count (1 to 64, default 1) item; name and enchantments give it a custom name and enchantments (an enchanted book in a showcase chest, decision E-873). The JSON keys are the field names | |
An armour stand (decision E-238): where it stands, turned by yaw degrees (0 faces north), and its properties as command lines ("equip qtcraft:iron", "pose right_arm -90 0 0"), which the server checks when it places the stand (QcStandProperties). The JSON keys are the field names; a property line keeps at most 256 characters | |
Where the terrain generator places the structure by itself (decision E-590; "surface"): at most one copy per square region of spacing blocks (whole chunks), with chance, at the first of attempts places that lies wholly inside the region on land above the sea in one of biomes (all five samples of its footprint) whose ground varies by at most maxSlope; never within villageMargin blocks of a village | |
Where and how a structure is placed by the generator: the fields of QcStructureDefinition of the same names | |
How long one arm swing lasts (decision E-881), shared by the client's animation and the server's cadence of swings while a player mines: the reference's six ticks (300 ms), one tick shorter per level of a hastening effect and two ticks longer per level of a tiring one | |
A creature that players tame (wolves, cats; decision E-480), from its data (tameable): each of its taming items used on it tames it with chance (a tame one belongs to that player's identity, follows, sits when its owner uses it and fights for its owner with defends); a wolf becomes a dog | |
A creature that teleports (the shadewalker, decision E-460), from its data (teleport): to a random safe place within range metres (a solid floor, room for its body, no liquid, only in loaded chunks; QcSafeSpot), at most once per cooldownSeconds | |
Settings of the terrain generator (worldgen/terrain.json): sea level, base blocks, caves, bedrock, rivers, deltas, the biome scale and the settings of dungeons, mine shafts, coastal towers and cold edges | |
How a texture animates (decision E-878): frames pictures shown for frameTicks game ticks (50 ms) each, in a loop; with interpolate the picture blends smoothly into the next one | |
What is shown at a time: frame index, blended by blend (0..1) into frame next | |
Texture source as delivered by content packs | |
CPU time consumed by the calling thread, independent of waiting (VSync, locks, sleeping) | |
An item thrown by hand as its own projectile (a snowball, decision E-427): the use button throws one at once at speed, randomly turned by up to inaccuracyDegrees; the thrower waits cooldownSeconds before the next throw of that item | |
Server tick durations, lateness and skipped ticks so far (QcTickStats::summary, benchmark) | |
One offer of a profession (decision E-414): from level on, a villager may offer result for costs (one or two stacks, paid by the player), maxUses times until it restocks at its workstation | |
A file of offers (trades/<name>.json): offers of one profession | |
A number of items of one kind in a trade offer (by item name) | |
How villagers trade (villagers/<name>.json "trading", decision E-414): the experience a villager needs for each level (the first is 0, the fifth is master), how many offers of each level a villager draws from its profession's pool, and how often a day it restocks at its workstation, at least restockGap of a day apart | |
Bytes of the message frames a connection sent and received so far (health line, decision E-834) | |
Texts of the content by language and key (part of QcContentRegistry) | |
Frame-based, bidirectional link between one client and the server | |
Minimal double-precision vector for GUI-free code (QVector3D lives in QtGui) | |
Grass and flowers of a biome (decision E-814): two weighted tables of plant blocks | |
One layer of vegetation: the plants, their density per surface column (scattered by the generator), the size of the areas one kind grows in (patchSize blocks, 0: mixed column by column), and the patches | |
Patches the generator lays out of one plant of the table (flower patches): a patch cell of patchCell × patchCell blocks holds one with chance, centred at a random spot of the cell; it tries tries columns at most radius blocks from its centre on each axis and plants one kind, chosen by weight, on every free one. Read from the "patches" object | |
One layer of a biome's vegetation (decision E-814) resolved to block ids: a weighted choice shared by the world generator and bone meal | |
One plant of the layer | |
A table and the block names of the layer that were left out | |
Villages of the content (part of QcContentRegistry, server side only, not synchronised): village styles and settings (decision E-403), villager species and professions (decisions E-411, E-421) and the professions' offers (decision E-414) | |
A style's own golems (its "golem", decision E-421): the fields it gives, each over the settings' golems (worldgen/villages.json), so {"minVillagers": 5} keeps the settings' creature kind | |
Golems villagers summon (worldgen/villages.json "golem" or a style's "golem", decisions E-421, E-470), like in the reference game: a villager wants a golem while it slept in its bed within sleptSeconds | |
Walkway of a piece with a water rule (decision E-404): from the end of the road it stands at straight on to the water and over blocks out over it, at the height of the road's end | |
One street plan the villages of a style are laid out with (decision E-408), chosen per village by weight | |
One kind of building of a style (decision E-403): one of its blueprints, chosen by weight, per building | |
A range a village draws one value from, uniformly: min to max, both included, of the type Value | |
Other creatures living in the villages of a style (decision E-421), such as cats: mob with min to max of them per village | |
One surface a village may lay its roads of one rank with (decision E-406): block goes into the ground's top block; step (a slab, optional) is laid on a road cell next to one a block higher, so a step on terraced ground reads as a stair | |
Village settings (worldgen/villages.json, decision E-403): how often and where villages are built, which creature kind lives in them and which golems guard them | |
How a style over water stands (decision E-407): its pieces and boardwalks lie at one floor height above the water surface on posts down to the bottom, and stairs lead down where a boardwalk ends on dry land | |
A village style (villages/*.json, decision E-403): the biomes it is built in, the pieces its villages are built from, their roads, fields and street plans, how its blocks are swapped and who lives there | |
Ground a village over water shapes around itself (decision E-407, E-660, E-661): within margin blocks of its pieces and boardwalks (frayed by noise up to fray more) the ground lies at the water surface, blending back to the terrain over at least blend blocks; on it a noise of scale blocks forms pools depth blocks deep over water of the open ground, ringed by mudBand blocks of the bottom block, grass between, with plant beside the pools at plantChance and floatingPlant on their water at floatingPlantChance (lily pads, decision E-774); dry ground stays where stairs lead down to land | |
How villagers breed (villagers/<name>.json "breeding", decision E-415) | |
What the villagers of one village style wear (decision E-411): an outfit, hair styles or headwear to choose from (an empty name: none) and the colours of the tinted layers (0xRRGGBB) | |
A profession (professions/<name>.json, decision E-411, E-421): the blocks it works at (its workstation kind is then its own name, the kind QcVillagePlan and QcVillage keep for a workstation; no blocks: the unemployed), layers laid over the style's outfit (an apron on the torso; QcVillagerOutfits joins them), headwear in place of the style's hair (a hair-kind appearance; empty keeps the style's), whether it tends the crops of the village fields (farmers), and optionally its own routine and number of offers per level in place of its species' | |
From from (a share of the day: 0 sunrise, 0.25 noon, 0.5 sunset, 0.75 midnight) until the next step the villagers do activity | |
Settings of one villager species (villagers/<name>.json, decision E-411, E-421; server side only): a creature kind with "villager": "<name>" lives by them | |
Settings of the void world type (worldgen/void.json): air everywhere except a square platform of platform blocks around the world's origin (radius 0: none) at height platformY | |
Precipitation of one column: dry, or rain below snowFrom and snow from that height up | |
What the weather does to the world (weather.json of a pack, decision E-396; server side only, a later pack replaces it) | |
("snow"): while it snows, columnsPerTick random columns near each player per tick get a layer block on their top where they may; no layer when the block is missing or the count 0. The JSON keys are the field names | |
Weather of a world as world.json keeps it (decision E-395): the current spell (kind and the ticks until it ends), how many spells the world has had, the strengths of rain and thunder, which fade towards the spell's kind, and how many ticks the weather has run | |
A block picked by weight among others (decision E-975): the qualified block name (key "block") and its relative weight (key "weight", at least 1). Village crops and vegetation plants use it | |
A structure picked by weight among others (decision E-975): the qualified structure name (key "structure") and its relative weight (key "weight", at least 1). Village blueprints and coastal towers use it | |
Fixed set of worker threads executing queued jobs in FIFO order | |
Metadata of a saved world (world.json) | |
A text floating in the world (showcase names, decision E-222) | |
One option of the world generation a player sets when creating a world (an entry of "options" in worldgen/options.json of a pack, decision E-917) | |
A heading the options of the menu are grouped under | |
What one pack's worldgen/options.json adds; a later pack replaces groups, options and presets of the same name | |
A named set of option values (more villages, large biomes): the other options keep their defaults | |
Rules a world type sets once when a world of it is created (decision E-223): a time of day that stands still (seconds after sunrise) or the running day, and whether creatures spawn by themselves | |
What the world generators build from (part of QcContentRegistry, server side only, not synchronised): biomes, features, ores and the terrain settings, the structures and the settings of the showcase, flat and void world types, and the options a world may set on them (decision E-917) | |
A rectangle of columns (or of other cells on the x-z plane, such as regions) from (minX, minZ) to (maxX, maxZ), both corners inclusive |
Detailed Description
Uses no other library of the project.