Voidworks 0.2.0
Curse Maven Snippet
What's new
- A Matter-line Void Dragon is seen loading and unloading its cargo. Once it is up out of the shaft at its stop, or up off its seat where it rested, it holds still over the shaft, and the first item taken from each provider hatch on the Well it stopped at rises from the top of the hatch, arcs over the rim and comes in to its paws in a second, landing with a quiet item pickup pop, their starts spread so the last lands half a second before it dives; it hangs its first stack only once the first has reached its paws. Unloading and dropping at a rider's Well are the mirror, from its paws into each hatch it puts into, and it hangs the stack it carried until the last leaves its paws. Only the look waits: the hatches are emptied or filled, and the Toll paid, as the stop begins, as before. A presence shown partway through a stop joins it there.
Tripgainshandling, how its stop is seen (Handling, ofPassings);VoidDragon.onPassingis how each is shown, by aPassingShownsent to the players watching the dragon. (#133) - A Matter-line Void Dragon is ridden and called as a Mote-line one is, in stacks. The Well its rider picks is a stop added to its trip, whose requesters get what they are short of as the rider is set down, the rest going on to its destination. A ridden dive's load is cut by the share of time saved, in stacks, so it carries no more stacks a second than unridden: as the rider jumps, the dragon keeps the items it took first, in whole stacks, and puts the rest into the hatches of the Well's network as on arrival, into the requesters asking for them, then into the providers with room, counting toward neither its ageing nor its eggs; if they have no room for all of it, it does not dive, puts nothing, and the rider is told so above the hotbar. A called one drops none of its load at the Well it is called to. (#118)
- Breaking: A Matter-line load pays a Toll in void as it loads, out of the departure Well's network by the spend rule at its core: 256 base void energy (what a mote releases one step above the pressure) a stack-equivalent, doubled for each step the destination Well's Void Pressure stands above the departure's, the base on a level or downhill trip. A part stack pays its share, its items over the item's stack size, and a filled shulker box or bundle pays for what it holds, counted the same way, plus one for itself. The price is datapack data, the
voidworks:tolldata map onvoidworks:well_hatch({"stack_price": 256}), which a pack overrides (Toll). A stop offers only what its network can pay the Toll for to the destination, so one that can pay for none is never loaded from; the Toll is taken first, then the dragon heals from what is left, and it is paid once: a load sent on, dropped at a rider's Well or held pays nothing more and gets nothing back. The Mote line pays none. Jade shows a Matter-line dragon's load as6 of 27 stacks, Toll 3072 paid, and a provider hatchHolds 9 stacks; its network can pay the Toll for 2, priced to the cheapest of its owner's Wells that lack something it holds, orStalled: its network can't pay the Toll for one.Routing's constructor takes theToll;MatterLoadhas atoll,Warewhat one of ithelds,DragonReportatollandHatchReportapayable(Payable), andHatchReport.oftakes the server. (#117) - Breaking: a Matter-line Void Dragon ages and lays by the stacks it unloads, where it counted them against the Mote line's motes: each life stage lasts
lifeStageStacks(1,728) invoidworks-server.toml, 64 young loads, and an adult lays a Matter Dragon Egg, not a Drained one, for eachdragonEggStacks(216) it carries, 8 in its life, by the Mote line's rules: popped out of the shaft at a stop, owed while that Well's chunk is not loaded, those still owed as it turns senior laid at its next loaded stop and none after. It dies of old age as any dragon does, at the end of a stop at a loaded Well with nothing aboard. Its stage shows in Jade and its size, and/voidworks dragon agesets it, by stacks. The stage factors stay shared.Routingtakes aLifeper Line (itsLifeStagesandperEgg, how much an adult carries for each egg) in place of the motes per egg and oneLifeStages;Wells.lay(place, line)lays that Line's egg;EggKind.laidBy(line)is the egg a Line lays;VoidworksConfig.life(line)andlifeStages(line)replacelifeStages(),dragonEggMotes()andlifeStageMotes(). (#116) - A Matter-line Void Dragon, a grown dragon's presence and a Dragonling alike, is tinted a pale amber, carrying or not, its eyes amber too, where a Mote-line one keeps the void's purple; what it hangs and a dying dragon's beams are unchanged.
VoidDragon.line()is now in the dragon's synced data, so it holds on clients too. (#126) - A Void Dragon's presence casts a shadow half as wide while it rests on its Well, its wings folded, easing between the two within 3 blocks of its seat as it lands or takes off, over half a second at the least, so it never jumps, even for a landing begun close to the seat or given up.
VoidDragon.settled(partialTicks)is how far it has settled onto its seat, andVoidDragon.fromSeat(at)how faratis from it. - A Mote-line dragon's presence is followed by mote butterflies, one now and then of each grade it carries, tinted as every mote's butterflies are, each keeping a place about its body as it flies for a few seconds before it vanishes, or as soon as the dragon leaps away from it, whether it rests, sitting or flying about, works or dives, and none while it carries nothing; a Matter-line one and a Dragonling have none. The presence syncs only which grades it carries to clients, never how many:
VoidDragon.followers()gives them as aFollowers, andLoad.followers()is a load's. (#120) - A Matter-line dragon's presence hangs its first carried stack under its body, drawn from that stack's own item model, a filled shulker box as a shulker box, whether it flies about, works, rests or dives, and nothing while it carries nothing; a Matter-line Dragonling holds a chest there. A Mote-line one hangs nothing. The presence syncs only that stack of its load to clients:
VoidDragon.hung()gives it, andLoad.firstStack()is the stack it hangs. (#119) - The Gallery pack has a Matter Link scene,
voidworks:gallery/matter_link, laid byvoidworks:gallery/buildat~ ~ ~-64: two of the runner's Void Wells 12 blocks apart, a provider hatch holding four stacks of gold blocks on the west one and a requester asking for three on the east one, and a grown Matter-line dragon resting at the west Well that carries them across, the west Well's network filled with motes for the Toll through a Voidstone beside it. For it,/voidworks dragon <pos>takes an optional Line,mote(the default) ormatter, and the new/voidworks hatch <pos> (provider|requester) <item> <stacks>readies the Well hatch atposfor whoever runs it: joined to the Well it stands against, theirs, and a provider holding so many full stacks or a requester asking for so many; it refuses a hatch on another player's Well. Both are for operators only.WellHatchBlockEntity.ready(level, owner, mode)is the readying. (#121) - An End Displacer grows its body as a square pyramid widening out ahead of its front face, one position a step ahead, a 3×3 two steps ahead and so on, where it filled the whole space past that face nearest first. On the ground, facing up, it no longer roofs itself over a block up: the ring around it stays clear, so a player walks up to its sides and sets a hopper there. A Zone still counts harvests, so it places as many blocks as before, taller and narrower.
Frontier.aheadis the pyramid. (#100) - Breaking:
io.github._5thlayer.voidworks.gallery.GalleryPackis gone: libworks offers the Gallery pack now, andio.github._5thlayer.libworks.gallery.GalleryPack.id("voidworks")names it. The jar nests libworks-runtime 0.1.11, andneoforge.mods.tomlrequireslibworksfrom 0.1.11 to the next minor. The pack keeps its id,mod/voidworks:gallery_pack, under the same name, andvoidworks:gallery/clearremoves the dragons resting in a scene's plot or on a trip to or from it, as building the Void Dragon scene again always did (5thlayer/libworks#31). - Breaking: Matter-line Void Dragons carry items between their owner's Well hatches, from providers to requesters, between Wells in any dimension, with no chunk loaded at either end. A requester is short by its request, less what it holds and what is on its way to it; a dragon flies to a stop whose requesters are short, loads from the owner's stop whose providers hold most of what they lack, the item most short first, and its trip claims items by kind, so dragons sharing a request never overshoot it. Another owner's hatches on a Well are never touched. A load counts in stacks, each full by its item's stack size, so a filled shulker box takes one: a young dragon carries
dragonMatterLoad(27) stacks invoidworks-server.toml, times its life stage's load factor. On arrival what does not fit goes to another of the owner's requesters asking for it, else into their providers with room, else the dragon holds it and rests until there is room. Items in flight live in the dragon's record, components and all, so nothing is lost on a save or a chunk unloading. A Mote-line dragon touches no hatch, and a Matter-line one loads no motes. The Toll is not charged yet. Jade lists a Matter-line dragon's load, one line per item with its icon, a filled shulker box followed by what it holds, then "6 of 27 stacks".LoadgainsMatterLoad(a list ofWare) anditems();Tripgainsitemsafteradded, the items its claim is made of;DragonReportgainsline,itemsandmost, which changes its constructor,DragonReport.oftakes the Matter line's load, andhead()andtail()split its lines around the items;Routingtakes aHatchesand the Matter line's load;WellHatches.on(well)lists a Well's hatches;StackWaresturns item stacks intoWares and back. (#115) - A Well hatch is a provider or a requester, each its own item: the recipe makes a Well Hatch Provider (
voidworks:well_hatch, renamed from Well Hatch), and a new Well Hatch Requester (voidworks:well_hatch_requester) places a requester; sneak-used in the air, a stack of either turns into the other, and a hatch broken or picked is its mode's item (WellHatchItem,VoidworksBlocks.WELL_HATCH_REQUESTER_ITEM;WellHatches.puttakes theModeit is placed as). Its owner switches a placed one between provider and requester by sneak-using it with an empty hand. Either switch, placed or in hand, is heard as a shulker box opening (WellHatches.SWITCH_SOUND). Using an item on a requester sets its request to that item's kind, components ignored, and adds a stack per use, up to its slots (27); another item replaces the request at one stack, and an empty hand clears it, each told above the hotbar. A requester gives no hand anything and empties only through its item faces. A requester switched to a provider loses its request and offers what it holds; a provider switched to a requester keeps what it holds for its faces to drain. Only the owner switches it or sets its request, and both survive a save. Its front shows which it is: a provider's shell is an orange shulker's, where it was purple, and a requester's a blue shulker's, through the block's newmodeproperty (providerorrequester). It breaks as fast as Voidworks' machines (hardness 5, where it was the Well's 22.5), keeping its blast resistance. Its front also shows one of a requester's requested item, or of the first stack a provider holds, flat in its window as an item frame holds one (WellHatchBlockEntity.shown()). Jade names it by its mode's item and shows a requester's request beside what it holds, as "Requesting" and the item with the stacks asked for on it, or "Requesting nothing".WellHatches.Hatchgainsmode()(aWellHatches.Mode),request()(aWellHatches.Requestof item and stacks),switchMode(),ask(item)andclearRequest();HatchReportis what Jade shows. No dragon fills a request yet. (#114) - A Well hatch holds items for its Void Well, a full block crafted from a shulker box ringed by four Void Well Casing. It is placed against the outer face of any wall casing of a Well, on any course, never the core, the rim or into the shaft, and only by the Well's owner; anywhere else, or against another's Well, it is refused and the player told why above the hotbar. It joins that Well without being part of its structure, and a Well takes any number. It holds
wellHatchSlots(27) slots invoidworks-server.toml, the slots it was placed with, in the server's saved data rather than its block, so a dragon will reach it with no chunk loaded (SavedWellHatches.of(server), aWellHatchesofWellHatches.Hatch). Every face is an item face, so a hopper under it empties it and one above fills it; it is never filled by hand: its owner using it with an item is told to set a hopper on it, the item's own use not running, and their empty hand takes its first stack out; anyone else is told whose it is. Its Well no longer whole, it keeps what it holds, and its core broken it is a plain container; broken itself, it drops what it held. Jade shows what it holds. No dragon loads or unloads it yet.WellStructure.hatchFace(core, facing, against, face)says where one goes. (#113) - Breaking: a Matter Dragon Egg founds the Matter line of Void Dragons (ADR 0011). It is a Drained Dragon Egg upgraded by a Mutation Chamber or a Void Crucible through the new
dragon_eggsFamily, one egg for one at the steep Rung's 800 void energy and even chance (#voidworks:rung/dragon_eggs/drainedand/matter); nothing upgrades it back, and the vanilla egg has no upgrade. It is the Drained egg tinted amber, placed, in the hand and soaking, and until it soaks it falls and teleports when hit. It soaks at the price any egg does, counting toward its owner's next as any dragon does, gives off amber flecks of itself as it soaks, in place of a Mote-line egg's sparks, and hatches a Dragonling of the Matter line, whose grown dragon is of it too. A Matter-line dragon carries nothing yet: routing gives it nothing to load, while it rests, is ridden and called, and heals as any dragon does. Every dragon has aLine,MOTEorMATTER:VoidDragonRecordgainslineafterowner, which changes its constructor,VoidDragons.add(owner, line, rest)adds one of a Line,VoidDragon.hatchFor(owner, line)hatches one andVoidDragon.line()gives it,EggKindgainsMATTERandline(), and the soaking egg'seggproperty gainsmatter. Dragons and Dragonlings saved before Lines are of the Mote line. (#112) - Voidworks' game-test code and structures no longer ship in its jar (libworks ADR 0011): a Consumer's game tests and dev client no longer register Voidworks' test type
voidworks:code, nor carry itsgametest/platformstructure, and a Consumer's dev client no longer registers the test blockvoidworks:dormant_test_machine. Voidworks builds on libworks-plugin 0.4.0. - A harvest is seen as the void taking the block over a second: the harvested block, drawn over the Voidstone now there, is eaten away through 12 irregular stages until only the Voidstone is left, for a Void Displacer's harvest, a Void Siphon's by hand, and a spent Displacer becoming Voidstone, which eats away its own casing. A solid block sheds crumbs as it goes, in place of its burst; a lava source is a bright cube of still lava, and air the End's starfield receding, as if the void hardened into Voidstone. It is only a look: the position is Voidstone from the harvest's tick, and what it yields and the network it joins are as before. The stage masks,
assets/voidworks/textures/void_taking/stage_<1-12>.png, are placeholders, each painting what the void has reached by its stage; a resource pack can draw its own. Each such moment posts aVoidTakesBlockEventon the NeoForge event bus, on the server, with the position and what it held, then sends aVoidTakingto the players tracking it. (#98) - An item a Density tag names shows its Density in its tooltip, right under its name, with the motes one yields fed to a Void Displacer, from
densityMotesinvoidworks-server.toml("Density 4: 64 motes"), or its Density alone before a world has loaded the config. Another mod's storage blocks in thec:tags show it too; an item of Density 0 shows nothing. (#106) - A Void Dragon's rider watches it start down into the Well after they jump, sitting on its back as before, and sees the void only half a second after their eyes go below the Well's rim into the shaft (
VoidDragon.VOID_DELAY_TICKS), the dragon diving on meanwhile; before, the screen went black as they jumped, while the dragon still hovered over the Well. They are unseen from the jump on, now from the jump's own tick.VoidDragon.inTheVoid()says whether a presence has taken its rider into the shaft, and its rider stands at its feet only from then;carrying()andDragonRiding.inTheDivestill hold from the jump. (#84) - A Void Dragon is seen again wherever it is after its presence's chunk unloaded: that presence, never saved, was left out of the world but still counted as the dragon's, so no new one showed, at the Well it was called to or anywhere else, and it came back at its old place with the chunk. A presence where nothing ticks is now taken away, and a new one shows where its dragon is. (#79)
- A grown Void Dragon with nothing to do away from its owner's Wells, such as one just grown from a Dragonling, dives to the nearest of them and rests there, so it can be ridden and called. Before, one with no trip to make stayed where it grew up for good. (#79)
- A grown Void Dragon's presence pushes no one, so a player stands on a Well's rim beside a dragon sitting astride it, or under one hovering at work there, without being shoved off. Its box is unchanged, so mounting it and Jade still find it; a Dragonling pushes and is pushed as any mob does. (#79)
- A Void Displacer buys Zone upgrades with motes. Sneak-using an awake one with an empty hand quotes its next level above the hotbar ("Zone 64 → 80 for 1600 void energy"), and the same player's second sneak-use within 5 seconds commits to it; anything else lets the quote lapse, and a network whose motes are worth less than the price there arms nothing. Committed, it soaks the price from the stores touching it, as a Dormant machine does, while it goes on harvesting, then its Zone grows; a payment in part is kept across a save, and a sneak-use while it soaks offers to cancel it, losing what it paid. A spent one waiting on its output can be upgraded too, and waits for the upgrade to harvest on (
DisplacerBlockEntity.Stall.UPGRADE_UNPAID). The newvoidworks:zone_upgradeblock data map names each Displacer'sstep,first_priceandgrowth(16, 1600 and 2 for all three); a Displacer with no entry buys none. Jade shows the levels bought and the next one's price, or what a soaking upgrade has paid.ZoneUpgradeis the entry (ZoneUpgrade.of(state),price(levels),raise(zone)).DisplacerBlockEntitygainsupgradeLevels(),nextUpgradePrice(),upgradePayment()(aDisplacerBlockEntity.Payment),sneakUseandlapseQuote, andDisplacerReportgainslevels,nextPriceandupgrade;TouchingMotes.soakis the soak Dormant machines and Zone upgrades share,TouchingMotes.payIntoone store's share of it, andTouchingMotes.networkWorthwhat the stores touching a position are worth with their whole networks. (#85) - A Void Well's shaft shows its network's fill: a translucent void fluid, deep purple-black with water's moving surface and a faint glow, as high as the network is full in sixteenths of its capacity, core and Voidstone together, reaching the top only when full, and easing over a second to a new level; every Well on a network shows the same. Up to a dozen butterflies, tinted by the grades the network holds in proportion, drift under its surface, more the fuller it is. A Well that is Dormant or not whole shows an empty shaft. It is drawn only: the shaft stays open air, and calling, dives and eggs work as before.
VoidWellBlockEntity.shaft()gives what it shows (ShaftFill), sent to watchers only as it changes;WellStructure.fluid(core, facing)is the room its fluid fills. (#82) - A Void Displacer whose Zone is spent, or that can reach nothing more, waits for its item output to empty before it becomes Voidstone, as a full output stalls it, so a hopper or pipe pulling it gets the last harvest too. Before, the last harvest dropped on the ground. One whose output nothing empties stays a Displacer, and Jade says it is spent and waiting on its output (
DisplacerBlockEntity.Stall.OUTPUT_UNEMPTIED). An empty hand now takes a Displacer's output, and gives back its fed blocks only once the output is empty (DisplacerBlockEntity.giveOutput). The Gallery's Overworld Displacer scene shows its output hopper and chest in the mound's face. (#97) - Breaking: a Void Dragon's dive with its owner riding takes at most
dragonRiddenDiveTicks(60) invoidworks-server.toml, however far, and carries its load cut by the share of time saved, so riding never moves more motes a second. As the rider jumps, the dragon puts what it holds beyond that into the Well it is at, lowest grade first, counting toward neither its ageing nor its eggs; with no room there it does not dive, and the rider is told so above the hotbar. Through the dive the rider sees, in the middle of the void, the picked Well's name over a bar that fills as the dive goes, coloured by the destination's dimension type from the newvoidworks:dive_colourdata map (Overworld blue, Nether red, End pale yellow-green; the void's purple for one it does not name), and hears a Nether portal's hum rise toward emerging. The dragon's leg after setting them down is unchanged.Routing.ridereturns aRouting.Ride(diving, cannot, or no room);DivegainsriddenTicksandridden;VoidDragon.diveShown()gives what its rider is shown (DiveShown). (#99) - With Groundworks present, a Void Well is placed in one step from its core: holding a core shows the whole Well in Groundworks' preview, and a click places the core, its 56 casing and 16 rim around an open shaft, paid from the inventory, all or nothing, the core facing out of its wall toward the player, so the Well is whole at once. Once placed it is an ordinary Well, and breaking a casing stops it as before. Without Groundworks nothing changes: it is built by hand. The Assembly is data alone,
data/voidworks/groundworks/assembly/void_well.json, its core made a Key by thegroundworks:assembly_keysblock tag. Voidworks still requires nothing but Minecraft and NeoForge. (#65) - Jade shows a Void Dragon's health as it shows the Ender Dragon's, a heart and
100/100from its record, in place of theHealth:line; Jade's own entity health switch hides it. A Dragonling still shows no health. (#83) - Breaking: a grown Void Dragon ages through four life stages, young, adult, senior and old, by the motes it unloads over its life, each stage
lifeStageMotes(524,288) long, changing only at a stop (ADR 0010). Each stage multiplies its load and speed (lifeStageLoads1/2/3.5/6,lifeStageSpeeds1/0.6/0.35/0.2 invoidworks-server.toml), its speed stacking on its health's share, floored at a quarter; a new load applies from its next load and a new speed from its next dive. Only an adult lays Drained Dragon Eggs: eggs it still owes on turning senior are laid at its next loaded stop, then no more. An old dragon whose stage runs out dies at the end of a stop at a loaded Well, carrying nothing, living on past an unloaded one: it sets any rider down on the Well's rim, lays the eggs it owes, and its presence rises over the Well in a short Ender Dragon death, beams and sound, leaving nothing; nothing else tells its owner. An egg's price now counts its owner's living dragons and eggs soaking, not every dragon they ever hatched, so a death, or/voidworks dragon remove, lowers it (Hatchery.lose)./voidworks dragon age <stage>sets the grown dragon an operator looks at to the start of that stage, owing no egg. Jade shows a dragon's stage, and its presence is sized ×0.8, ×1, ×1.1 or ×1.2 by it. Dragons saved before this start young, their count toward an egg dropped.Routingtakes aLifeStagesandstepreturns the dragons that died;VoidDragonRecordgainscargoand losesspeed(), nowLifeStages.speed(dragon);DragonReportgainsstage. (#54) - The Gallery pack builds a scene for each feature, in rows of three beside the Void Dragon's: the Overworld, End and Nether Displacers, Density, Voidstone networks, the Void Siphon, Dormant machines, the Mutation and Unmaking Chambers and the Void Crucible, each
voidworks:gallery/<scene>. Clicking a scene's sign builds it again from the start. The End and Nether Displacers work only in their own dimension, so built anywhere else, as the Overworld's and Density's are outside the Overworld, their scene shows the Displacer as an item over a pedestal. (#77) - The Gallery pack builds a scene for each feature, in rows of three beside the Void Dragon's: the Overworld, End and Nether Displacers, Density, Voidstone networks, charging and emptying the Void Siphon, Dormant machines, the Mutation and Unmaking Chambers and the Void Crucible, each
voidworks:gallery/<scene>. Clicking a scene's sign builds it again from the start. The End and Nether Displacers work only in their own dimension, so built anywhere else, as the Overworld's and Density's are outside the Overworld, their scene shows the Displacer as an item over a pedestal. (#77) - Breaking: a dragon egg's price is datapack data, no longer server config (ADR 0009). The
voidworks:egg_priceblock data map, onvoidworks:soaking_dragon_egg, names an owner'sfirst_price(25600 void energy) and itsgrowth(2), the multiple each dragon they have hatched or are soaking puts on their next egg; a growth of 1 keeps every egg at the first price, and an egg with no entry is free.firstEggPriceis gone fromvoidworks-server.tomlandVoidworksConfig.EggPrice.of(dragons)gives a price,EggPrice.of(state)an egg block's entry, andHatchery.startSoakingtakes theEggPrice;Hatchery.priceandHatchery.codecgive way toEggPrice.ofandHatchery.CODEC. (#25) - A Void Dragon resting at a Well lands and sits astride its rim, over the shaft, lengthwise along the wall its core is set in so neither head nor tail covers the core, in the Ender Dragon's sitting pose, its wings held still and down, turning its head toward a nearby player. Where blocks fill the room its body takes there, it flies about over the shaft instead and lands once there is room. As it sets off it takes off, then dives into the shaft; mounted by its owner, it takes off to hover, and lands again once they get off. One at work at a Well, loading, unloading, waiting for its owner or setting a rider down, stays in the air, and one back after its chunk unloaded is sitting already.
VoidDragon.perch()says whether a presence flies, lands, sits or takes off (VoidDragon.Perch),perchYaw()the heading it keeps meanwhile andseatPos()where it sits. A ridden dragon now hovers in place: before, its wandering pulled it slowly about under its rider. (#81) - A Void Dragon resting at a Well whose chunk is not loaded no longer loads that chunk each second to see whether to show it (ADR 0005).
- Jade shows a Void Dragon and a Dragonling, to anyone looking. A grown dragon's presence shows what its record holds, read on the server each time Jade asks so it follows the record: what it is doing (resting, loading, unloading, waiting for its owner, setting its rider down, or diving), the Well it is bound for by name, or unnamed its dimension and position, while on a trip, but not while it unloads there, waits for its owner or sets its rider down; the motes it carries by grade, tinted like each grade's butterflies, and their total, or that it carries nothing; its health of 100; and its owner. A Dragonling shows how far it has grown, in percent, and its owner. Both show these in place of Jade's hearts, and each has its own switch in Jade's settings.
DragonReport.of(presence, server)andDragonlingReport.of(dragonling, server)read them. (#67) - The Drained Dragon Egg has art of its own: a pale, cracked dragon egg, its first crack dark. Soaking, either egg wears it, the vanilla egg too, though broken it still drops the vanilla egg; its cracks spread at each of its four
stages and glow brighter in amethyst, at full brightness in the dark. The Void Dragon and Dragonling keep the vanilla Ender Dragon's texture, read from the player's game and tinted purple, as their look. (#62) - A Void Dragon's owner rides it and calls it. Using one of their dragons stopped at one of their Wells, resting or at work, mounts it, with no harness; no one else can. It hovers, and waits at its stop while they ride; strafing left and right steps through their other Wells, whole and awake, in the order they were placed, the one picked shown above the hotbar by its name or its dimension and position; jumping dives there, and sneaking gets off before the dive, onto the rim of the Well it is at. The rider sits on its back where its wings meet. Through the dive the rider is held down the shaft, unseen, and cannot get off, act or be hurt, their screen black but for motes swirling in toward its middle; once the dragon has stopped at the picked Well, in any dimension, the dragon emerging there brings them up out of its shaft on its back and sets them down on its rim. A rider who leaves the game is set down first, on the rim of the Well the dragon is at or diving to, as is one whose dragon a command removes mid-dive. The picked Well is a stop added to the dragon's trip: it unloads what that Well is short of, in grades worth something there, and takes the rest on to its destination. Standing on the rim of one of their Wells for a second calls a dragon, a hop on the spot not ending the call: one of theirs already stopped at that Well, such as the one that just set them down, waits there once its stop is over; otherwise the next of theirs to finish its stop, or the nearest of theirs with nothing to do at once, comes there as though they rode it already: its dive takes no longer than a ridden dive (
dragonRiddenDiveTicks), and it first puts what it holds beyond its ridden load into the Well it is at, lowest grade first, as a ridden dive does; with no room there for that, it dives the whole way with all it carries. It drops none of its load at the called Well. While it dives there, the action bar says it is coming, and once it waits there, that it waits for them; a bar just over the action bar fills as the dive goes, in the colour of the called Well's dimension (CallPayload, sent each second to the caller's client). It waits a stop at least, and while they stay; then it goes on. Another owner's rim calls nothing.Routingtakes anOwners(who is calling where, which dragons are ridden) and gainsride(dragons, id, picked, now);Tripgainsadded(), the Well of a stop added to it, saved with it, and the legsTO_CALL,WAITING,TO_PICKEDandSETTING_DOWN, whichShowingshows as dives and stops. A Well's name is now inVoidWellstoo (Entry.name(),Entry.label(),VoidWells.at(place)), so a Well whose chunk is not loaded is picked by name.WellStructure.onRim(core, facing, pos)says whether a position stands on a Well's rim,DragonRiding.inTheDive(entity)whether an entity rides through a dive, andVoidDragon.carrying()whether a presence carries its rider./voidworks dragon removealso takes a dragon on its way to a stop added in the box. (#60) - A Void Dragon emerging from a Well is first seen at the shaft's mouth, the first open air over its rim (
DragonPresences.MOUTH), and climbs 4 blocks from there before it flies about the Well, so its body, far wider than the shaft, no longer passes through the Well's walls. It still dives down into the shaft, and flies about the Well as high as before. - The Voidworks Gallery, an optional datapack in the jar (
mod/voidworks:gallery_pack), offered in every world's Data Packs screen and off until a player turns it on (ADR 0008)./function voidworks:gallery/build, run by an operator player, builds the Module's features as working scenes in plots running east of them, each clearing its plot first, so it builds the same way again;/function voidworks:gallery/<scene>builds one. Its first scene,void_dragon, is two of the runner's Void Wells 12 blocks apart, a reservoir full of grade-5 motes and one with its target at full, and a grown Void Dragon carrying between them. It holds functions only. Three operator commands make what the scene needs:/voidworks well <pos> <target>readies a Well core for whoever runs it, theirs with that fill target and its Dormant cost paid, in its network at once when whole (VoidWellBlockEntity.ready,Dormancy.payInFull);/voidworks dragon <pos>gives them a grown Void Dragon resting at the Well, not counted as hatched; and/voidworks dragon remove <from> <to>removes every dragon resting in the box or on a trip to or from it (VoidDragons.removeAt), whose presence now goes with it./voidworks moteat a position with no Voidstone is now an error, as a vanilla command's refusal is, so a function's trace names it. (#76) - A Void Dragon's dive between two Wells in one dimension takes only its distance's time, a second per
dragonDiveBlocksPerSecond(64) blocks apart; the fixeddragonDiveTicks(200) invoidworks-server.tomlis now added only to a dive between dimensions. Every dive takes at least 2 seconds (Dive.MINIMUM_TICKS), so between near Wells the dragon is still seen diving into one shaft and emerging from the other. A shorter dive weakens the dragon less. Of an owner's Wells on one network, a dragon stops at the one its dive reaches soonest, as before, and of those it reaches as soon, now the nearest. (#75) - Void Dragons lay Drained Dragon Eggs. A grown dragon counts the motes it unloads at its owner's Wells, stowed loads included, and each time it has carried
dragonEggMotes(65536) invoidworks-server.tomlsince its last egg, it lays one at the next Well it stops at, to load or unload: a Drained Dragon Egg item pops out in the middle of the Well's shaft. A Well whose chunk is not loaded lays none; the dragon owes the egg, and any more it comes to owe, to its next stop at a loaded Well, where it lays them all. What it carries beyond an egg counts toward the next. The egg carries nothing of the dragon: whoever places it owns what hatches, at their own price.VoidDragonRecordgainssinceEgg(), saved with it;Routingtakes the motes per egg, andWellsgainslay(place). (#61) - Void Pressure counts in a world just created. Until the first
/reloador rejoin, the Overworld, the Nether and the End had no entry, so each took the Overworld's pressure with no harvest kind and a Void Siphon harvested nothing. Voidworks now reads thevoidworks:void_pressuredata map's files itself, by dimension id, in the same format, with conditions,replaceandremoveas before. Read an entry withVoidPressure.dimension: the dimension registry's own copy of the map is still empty in a new world until a reload. - A Void Siphon charges FE items (ADR 0007). Set to charge, every
siphonIntervalit spends its motes into the FE items its holder wears or holds, any mod's item that takes FE through NeoForge'sCapabilities.Energy.ITEM: the chest first, then the legs, the feet, the head, the main hand and the off hand, never the rest of the inventory. It spends by the spend rule at the player's feet, the lowest grade still worth something first, so motes charge most in the Nether; the void energy released becomesfePerVoidEnergyFE each (10, tuned against Gearworks' Gear) invoidworks-server.toml. It spends a mote only when the items have room for all its FE, and at most its tier'ssiphonRatemotes each time; Siphons spend in inventory order, the hotbar first. On Voidstone a Siphon set to charge fills itself and the FE items at once; set to empty it keeps its motes for a Dormant machine or a Dragonling. While its holder wears or holds an FE item, its tooltip shows the FE its motes would charge there.SiphonCharging.step(level, player)takes a player's whole Siphon step, the Voidstone exchange then the charging, whichFeCharging.charge(level, player)does alone;FeCharging.wearsOrHolds(player)says whether a player has an FE item to charge,KnownPressure.viewer()is the client's player, andVoidworksConfig.fePerVoidEnergy()reads the rate. Voidworks makes no gear of its own and requires no FE mod. (#72) - A Void Well gives back to whatever draws on its network, however far from full it is (ADR 0006). Its pressure stays below even one mote in a Voidstone until it is about 71% full, so before, a machine elsewhere on its network never got a mote of it; now a machine soaking or spending from the network pulls motes out of the Well, a mote of each grade worth something at the machine's Void Pressure a step, across each face toward it, and they crawl along the Voidstone to it. Grades worth nothing there stay in the Well. While the machine draws, the Well soaks up none of those grades from the stores nearer the machine than it, harvests landing there included. With nothing drawing, a Well still soaks up its network's surplus and gives nothing back until it is nearly full.
TouchingMotes.want(level, pos, stores)andVoidNetworks.want(pos, pressure)mark a draw by a machine at that Void Pressure;TouchingMotes.want(level, stores)andVoidNetworks.want(pos)still want every grade. (#71) - Several Void Wells on one network are one stop for Void Dragons (ADR 0006): a dragon never carries between its owner's Wells on one network, and each stays a place to stop, load, unload and heal, the one a dive reaches soonest. A dragon judges a network by the highest of its owner's targets there, short only below it and giving only its excess over it; another owner's Wells and targets on the network never bind it. A network's need counts every dragon's motes already on their way to any Well on it, whoever owns the dragon, so owners sharing a network never overshoot each other.
Wells.Wellgains itsnetwork(), the places of every Well on its network, whoever's. (#70) - A Void Well counts its whole network for Void Dragons and its fill target (ADR 0006). What a dragon reads of a Well, what it holds, how full it is and how much it holds at most, is its core's and every Voidstone's of its network together, and its fill target is a share of that whole capacity, so it rises as Voidstone joins; Jade's target line shows it so. A dragon loading takes from the core first, then from the Voidstone of the network nearest it, at once, wherever the motes are, so a reservoir's motes settled in its Voidstone short of the core are loaded; it heals from the network the same way, lowest grade first. An unload goes into the core, and only once it is full into the Voidstone nearest the Well.
VoidNetworks.draw(pos, mote, amount, transaction)takes motes out of a network asdepositputs them in: where it is first, then the nearest stores holding them. (#69) - Void Dragons weaken as they dive and heal at their Wells. Diving, a dragon loses a point of health every
dragonWeakenTicks(200, 10 seconds) invoidworks-server.tomlfor each step the Void Pressure at the worse of the dive's two ends is below the End's, as it goes: a dive to or from the Nether costs twice an Overworld one, and a dive between End Wells nothing. Stopped at a Well or resting, it loses none, and its health never drops below 1. Hurt, it dives more slowly, its speed scaling with its health down to a quarter: a dive is a distance it covers at the speed it has each second, so a dragon that weakens during a dive slows for the rest of it, the dive's fixeddragonDiveTickspart too. Before it dives from a Well, that Well heals it from its own motes, after any it loads, lowest grade first, not by the spend rule: a point of health for everydragonHealMotes(16), as far as they go, so an empty Well heals nothing. Health is saved on the dragon's record, and aTripsaves how far its dive is counted (countedTo()) and the ground it has still to cover (toCover()).Harmholds the rule andRoutingtakes one;VoidDragonRecord.speed()gives its speed, ofWHOLE_SPEED(100),weakened(points)weakens a record, andVoidDragons.updatereplaces one. (#59) - Void Dragons are seen at work. While a Well's chunk is loaded, a dragon there shows its presence in the open air over the Well's shaft, never in the core's wall: it emerges from the shaft as it stops there, flies close about the Well while it loads or unloads and wider while it rests, and as it sets off dives into the shaft and is gone. A dragon at an unloaded Well shows nothing, and appears once the chunk loads, mid-stop or resting. The presence follows the dragon's record and never drives it: removing it, or unloading its chunk, changes nothing in the dragon's work.
Showing.of(record, now, stopTicks)gives what a dragon's presence shows of its record, andVoidDragon.showing()what a presence shows now;WellStructure.shaft(core, facing)gives the middle of a Well's shaft. (#64) - Breaking: Jade shows a Void Well no "Here" line: what the Well holds is most of its network's total, which Jade already shows. Voidstone still shows what that one block holds.
NetworkReport.here()is now an optionalHeldof a count and a capacity, empty for a Well, in place ofhere()andhereCapacity(). - Void Dragons carry motes between their owner's Void Wells, in every dimension, with no chunk loaded. A dragon flies only to a Well below its fill target, taking from its owner's fullest Well that has something worth delivering there: a reservoir, or a Well above its target, which gives its excess; a Well below its target never gives. It loads only grades worth something at the destination's Void Pressure, highest first, up to
dragonLoad(8192) motes, stoppingdragonStopTicks(100) at each Well to load and unload, and dives between them indragonDiveTicks(200) and a second perdragonDiveBlocksPerSecond(64) blocks apart in Overworld blocks, a Nether block counting eight, all invoidworks-server.toml. Each trip is claimed, so dragons sharing a Well never overshoot its target. A load whose destination is broken, not whole or no longer short goes to another of the owner's Wells that needs it, else to the one with most room, else the dragon holds it until there is room. With nothing to do, a dragon rests at the Well it last stopped at.VoidDragonRecordgains itsload()and claimedtrip(), both saved; a Well core with an owner lists itself, with its target, inSavedVoidWells.of(server)(VoidWells) so dragons find it. (#58) - A Void Well touches through every block of it: Voidstone beside its casing, its rim or its core joins it to that network, conducts into it, and pays its Dormant cost, so the core's face stays free for a player. A Void Siphon set to empty, used on a Dormant core, now pays it: an item in hand has its own use on the core, as on a Displacer or a Chamber, where the core showed its status instead. A Dormant machine built of several blocks names the rest in
Dormancy.Holder.parts(), which it soaks through as through its own block;TouchingMotes.atandtotalWorthtake a machine's parts, andVoidNetworks.joinandrejoina store's, positions that touch for it but hold no motes, which several stores may share; a conductionFlowreaching or leaving a Well names the part it crossed. A Well awake in a network from before rejoins through its parts once loaded. (#57) - A Void Well has an owner, a fill target and a name, each set in the world. The player who places its core owns it. Its owner sneak-using the core with an empty hand cycles its
FillTarget: none, a quarter, a half, three quarters or full ofwellCapacity, one total over every grade, back to none. A name tag its owner uses on the core names the Well and is used up, as naming a mob is; unnamed, it goes by its dimension and position (VoidWellBlockEntity.label()). Anyone else's sneak-use or name tag changes nothing and tells them whose Well it is, and a core from before owners is claimed by the first player to set its target or name it. Plain use with an empty hand shows whether the well is whole or its payment, and its target; Jade shows its name, that it is not whole, its target in motes and its owner (WellReport). Owner, target and name are saved with the core, whole or not;owner(),target()andname()read them. (#57) - A Dragonling grows into a Void Dragon. It flies, floating about within 6 blocks of where it hatched, its home, unless it follows a player holding a Void Siphon, and grows up over
dragonlingGrowTicks(48000, 40 minutes) invoidworks-server.tomlwhile its chunk is loaded; one no player owns never grows. Its owner feeds it with a Siphon set to empty, used on it: the Siphon spends by the spend rule where the Dragonling is, never more than growing up needs, and everydragonlingFeedEnergy(1000) void energy takes a minute off. Grown, it is a Void Dragon: server state, not an entity (ADR 0005), a record of its owner, health and resting place saved with the world (SavedVoidDragons.of(server),VoidDragonRecord), shown by a presence flying within 16 blocks of where it rests while that place is loaded, avoidworks:void_dragonhalf the Ender Dragon's size that is never saved and comes back after its chunk unloads; one dragon never shows two. Nothing hurts a Void Dragon.VoidSiphonItem.motesInHand(player, hand)reaches the motes of a Siphon in a player's hand. (#56) - Void Dragon eggs hatch a Dragonling. Either egg, the vanilla egg or the new Drained Dragon Egg (
voidworks:drained_dragon_egg, from the Works tab and commands for now, which falls and teleports when hit as the vanilla egg does), that a player places touching a Voidstone network (Voidstone, or a Void Well in one) becomes a soaking egg (voidworks:soaking_dragon_egg, with no item): it neither falls nor teleports, soaks its price by the spend rule at its block from every mote store touching it, as a Dormant machine soaks its cost, glows and draws in the void's sparks more at each of its fourstages, and once paid hatches a Dragonling owned by its placer. Its price is fixed when it starts soaking:firstEggPrice(25600) invoidworks-server.toml, doubled for every dragon its owner has hatched or is soaking. An egg no player placed never soaks; broken while soaking, an egg drops the egg it was and loses what it soaked. While no player has hatched a dragon in the world, a dragon kill places the vanilla egg on the exit portal again. The Dragonling (voidworks:void_dragon, the young of the Void Dragon) is owned by its egg's placer, and nothing hurts it but a command's kill or the void below the world; it wears the Ender Dragon's model, read from the player's game, at a fifth of its size, and until it has art of its own the vanilla texture tinted purple, as the Drained Dragon Egg wears end stone. (#55) - A Dormant machine can set a price of its own:
Dormancy.setPrice(price), called when it is placed, makes it soak that much void energy in place of its block'svoidworks:dormant_costentry, andstatus()shows that price to a player using it and in Jade. The price is saved with the payment. A machine that sets none soaks its block's cost, as before. (#63) /voidworks showcase, for operators, builds a line of 8 Voidstone two blocks ahead at the player's feet, puts 32 motes one grade above the Void Pressure in at its near end and a Dormant Mutation Chamber at its far end, overwriting what stood there, to watch motes conduct to the Chamber and wake it. Its Voidstone stays. (#4)- Breaking: Voidstone conducts. Each Voidstone now holds its own motes, and a Voidstone's
voidworks:motesreaches only those, not its whole network's; motes crawl between touching Voidstone, each grade on its own, from the fuller to the emptier,conductionRate(4) motes a face everyconductionInterval(10) ticks, without loss, seen as small butterflies walking the Voidstone's faces (thevoidworks:mote_crawlpayload). Motes too few to even a network out settle, but a machine soaking or spending from a Voidstone, or a charging Void Siphon with room, draws even the last of them to it;TouchingMotes.wantmarks a Consumer's draw so, andVoidNetworks.want(pos)one store. A harvest,/voidworks moteand a 0.1 save's pool settle into the Voidstone where they arrive, then the nearest with room; a Void Siphon charges from and empties into the Voidstone stood on and those touching it. A Voidstone that goes loses its own motes, and a network it splits becomes two.MoteNetworkis no longer a mote store:VoidNetworks.store(pos)gives a position'sMoteStore,depositputs motes in as a harvest does, andMoteNetwork.countByGrade()sums a network. Jade shows what the Voidstone looked at holds under its network's total. (#4) - The Void Well, a 5×5×5 well: a 3×3 floor of Void Well Casing (
voidworks:void_well_casing; obsidian, purpur blocks and an ender pearl, 8 at a time), a 5×5 ring of casing walls three high around it with the shaft open, a raised rim of Void Well Rim (voidworks:void_well_rim; purpur pillars over obsidian, 6 at a time) on top, and its core (voidworks:void_well; shulker shells, crying obsidian and an ender chest) in the middle of one wall's middle course, facing out the way its placer looked. The core is placed Dormant at 25600 void energy and soaks its cost only once the well around it is whole. Whole and awake, it joins the network it touches as one store ofwellCapacity(65536) motes whose pressure stays low until it is nearly full, so it soaks up the network's surplus and gives it back as the network drains. No longer whole, it leaves its network keeping its motes, and rejoins with them once whole again; a broken core loses them. Itsvoidworks:motesreaches them while it is in a network, an empty hand on it says whether the well is whole, and Jade shows its network as Voidstone's.WellStructure.layoutnames every position of the well around a core. Its casing is large brooding brick in obsidian's shades and its rim small stone tiles in purpur's, both tiling seamlessly across the well, and its core's front a window framed in the rim's tiles onto the void, churning while it works and still while Dormant, from Malcolm Riley's unused textures (CC BY 4.0, credited inNOTICE).VoidNetworks.withdrawandrejointake a store out and back with its motes. (#4) - The Unmaking Chamber's breakdowns show in EMI, when it is installed: each item with one, × its count, into the ingredients that may come back, with the void energy it spends and its yield's range, from
unmakingYieldStarttounmakingYieldCap. An item with no breakdown, or one thevoidworks:breakdowndata map bars, shows none. The server sends every breakdown to each client as it joins and on a reload;UnmakingRecipes.all()gives them on the server andKnownBreakdowns.all()on the client. (#52) - The Family ladders show in EMI, when it is installed: each upgrade step, a Rung's items (another mod's joined by tag among them) × its count into the next Rung's result, under the Mutation Chamber with its void energy cost and chance, and under the Void Crucible with the time a lone one takes at the End. An item whose Rungs disagree shows no step. Families are now synced to clients, their data format unchanged, and
Families.ladders(RegistryAccess)reads them from any registries, a client's included, withLadders.steps()giving each upgrade and the items that climb to it. (#42) - Breaking: Void Siphon tiers: the Resonant Void Siphon (
voidworks:resonant_void_siphon) and the Draconic Void Siphon (voidworks:draconic_void_siphon). A Void Siphon smithed with an echo shard, no template, becomes Resonant, and a Resonant one smithed with dragon's breath becomes Draconic, each keeping its motes and toggle. A tier raises what a Siphon holds and how many motes it charges or empties on Voidstone each time; its harvest is the same at every tier.siphonCapacityandsiphonRateinvoidworks-server.tomlare now lists by tier, bottom first (256, 1024, 4096 and 8, 16, 32), so a server that set either as a number has it reset to the defaults.VoidSiphonItemtakes itsSiphonTier, whichtier(),capacity()andrate()read, andVoidworksConfig.siphonCapacity(tier)andsiphonRate(tier)take one; every tier is aVoidSiphonItem. Their sprites are the Void Siphon's wand with its crystal recoloured, an echo shard's teals and dragon's breath's pinks, from Malcolm Riley's unused textures (CC BY 4.0, credited inNOTICE). (#22)
This mod has no additional files

