Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

world time implementation #526

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Open

Conversation

tachibanayui
Copy link
Contributor

Since the last time I implemented world time, the main branch has been updated significantly. Merging my previous pull request #370 requires more effort than reimplementing from scratch. As a result, this PR will supersede #370.

Description

Implementation of world time for instance. Support sets the time explicitly, advances the time, and adjusts the frequency that the server sends WorldTimeUpdateS2c packet to clients.

Playground:
#![allow(clippy::type_complexity)]

use std::time::Instant;

use valence::client::despawn_disconnected_clients;
use valence::inventory::HeldItem;
use valence::log::LogPlugin;
use valence::network::ConnectionMode;
use valence::prelude::*;
use valence::world_time::{LinearTimeTicking, WorldTime, WorldTimeBundle};

#[allow(unused_imports)]
use crate::extras::*;

const SPAWN_Y: i32 = 64;

pub fn build_app(app: &mut App) {
    app.insert_resource(NetworkSettings {
        connection_mode: ConnectionMode::Offline,
        ..Default::default()
    })
    .insert_resource(LastTickTimestamp {
        time: Instant::now(),
    })
    .add_plugins(DefaultPlugins.build().disable::<LogPlugin>())
    .add_systems(Startup, setup)
    .add_systems(EventLoopUpdate, toggle_gamemode_on_sneak)
    .add_systems(
        Update,
        (
            init_clients,
            despawn_disconnected_clients,
            show_time_info,
            change_time,
        ),
    )
    .run();
}

#[derive(Resource)]
struct LastTickTimestamp {
    time: Instant,
}

fn setup(
    mut commands: Commands,
    server: Res<Server>,
    biomes: Res<BiomeRegistry>,
    dimensions: Res<DimensionTypeRegistry>,
) {
    let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server);

    for z in -5..5 {
        for x in -5..5 {
            layer.chunk.insert_chunk([x, z], UnloadedChunk::new());
        }
    }

    for z in -25..25 {
        for x in -25..25 {
            layer
                .chunk
                .set_block([x, SPAWN_Y, z], BlockState::GRASS_BLOCK);
        }
    }

    let mut wb = WorldTimeBundle::default();
    wb.interval.0 = 200;

    commands.spawn((layer, wb));
}

fn show_time_info(
    layers: Query<(&WorldTime, &LinearTimeTicking)>,
    mut clients: Query<&mut Client>,
    server: Res<Server>,
    mut lt: ResMut<LastTickTimestamp>,
) {
    let layer = layers.single();
    for mut c in &mut clients {
        let mspt = lt.time.elapsed().as_millis();
        lt.time = Instant::now();

        let msg = format!(
            "Server {} | mspt: {} | Time: {} | interval: {} | rate: {}",
            server.current_tick(),
            mspt,
            layer.0.time_of_day,
            layer.1.interval,
            layer.1.rate
        );
        c.send_action_bar_message(msg);
    }
}

fn change_time(
    mut event: EventReader<DiggingEvent>,
    client: Query<(&Client, &HeldItem)>,
    mut time: Query<&mut LinearTimeTicking>,
) {
    let mut ticker = time.single_mut();
    for e in &mut event {
        if let Ok((_, hi)) = client.get(e.client) {
            match hi.slot() {
                36 => ticker.rate += 1,
                37 => ticker.rate -= 1,
                38 => ticker.interval += 1,
                39 => ticker.interval -= 1,
                _ => (),
            };
        }
    }
}

fn init_clients(
    mut clients: Query<
        (
            &mut Client,
            &mut EntityLayerId,
            &mut VisibleChunkLayer,
            &mut VisibleEntityLayers,
            &mut Position,
            &mut GameMode,
            &mut Inventory,
        ),
        Added<Client>,
    >,
    layers: Query<Entity, (With<ChunkLayer>, With<EntityLayer>)>,
) {
    for (
        mut client,
        mut layer_id,
        mut visible_chunk_layer,
        mut visible_entity_layers,
        mut pos,
        mut game_mode,
        mut inv,
    ) in &mut clients
    {
        let layer = layers.single();

        layer_id.0 = layer;
        visible_chunk_layer.0 = layer;
        visible_entity_layers.0.insert(layer);
        pos.set([0.0, SPAWN_Y as f64 + 1.0, 0.0]);
        *game_mode = GameMode::Creative;

        client.send_chat_message(
            "
        Touch grass (left click) to control time!
        - Diamond: increase rate
        - Dirt: decrease rate
        - Clock: increase interval
        - Compass: decrease interval

        Have fun!
        ",
        );

        inv.set_slot(36, ItemStack::new(ItemKind::Diamond, 1, None));
        inv.set_slot(37, ItemStack::new(ItemKind::Dirt, 1, None));
        inv.set_slot(38, ItemStack::new(ItemKind::Clock, 1, None));
        inv.set_slot(39, ItemStack::new(ItemKind::Compass, 1, None));
    }
}

example: cargo run --package valence --example time_travel
tests: cargo test --package valence --lib -- tests::world_time

Related
part of #210

@tachibanayui tachibanayui marked this pull request as draft September 17, 2023 11:56
@github-actions
Copy link

It looks like this pull request changed the workspace structure. Please replace assets/depgraph.svg with the following text:

depgraph.svg (Don't forget the trailing newline)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.43.0 (0)
 -->
<!-- Title: %3 Pages: 1 -->
<svg width="1655pt" height="620pt"
 viewBox="0.00 0.00 1654.50 620.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 616)">
<title>%3</title>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-616 1650.5,-616 1650.5,4 -4,4"/>
<!-- 0 -->
<g id="node1" class="node">
<title>0</title>
<polygon fill="none" stroke="black" points="173,-468 0,-468 0,-432 173,-432 173,-468"/>
<text text-anchor="middle" x="86.5" y="-446.3" font-family="Times,serif" font-size="14.00">valence_advancement</text>
</g>
<!-- 1 -->
<g id="node2" class="node">
<title>1</title>
<polygon fill="none" stroke="black" points="868,-396 745,-396 745,-360 868,-360 868,-396"/>
<text text-anchor="middle" x="806.5" y="-374.3" font-family="Times,serif" font-size="14.00">valence_server</text>
</g>
<!-- 0&#45;&gt;1 -->
<g id="edge1" class="edge">
<title>0&#45;&gt;1</title>
<path fill="none" stroke="black" d="M173.05,-433.3C176.24,-432.84 179.4,-432.41 182.5,-432 381.59,-405.97 618.17,-389.91 734.54,-382.99"/>
<polygon fill="black" stroke="black" points="734.97,-386.47 744.75,-382.39 734.56,-379.48 734.97,-386.47"/>
</g>
<!-- 2 -->
<g id="node3" class="node">
<title>2</title>
<polygon fill="none" stroke="black" points="794,-324 675,-324 675,-288 794,-288 794,-324"/>
<text text-anchor="middle" x="734.5" y="-302.3" font-family="Times,serif" font-size="14.00">valence_entity</text>
</g>
<!-- 1&#45;&gt;2 -->
<g id="edge2" class="edge">
<title>1&#45;&gt;2</title>
<path fill="none" stroke="black" d="M788.7,-359.7C779.9,-351.14 769.12,-340.66 759.5,-331.3"/>
<polygon fill="black" stroke="black" points="761.7,-328.57 752.09,-324.1 756.82,-333.58 761.7,-328.57"/>
</g>
<!-- 11 -->
<g id="node4" class="node">
<title>11</title>
<polygon fill="none" stroke="black" points="946.5,-324 812.5,-324 812.5,-288 946.5,-288 946.5,-324"/>
<text text-anchor="middle" x="879.5" y="-302.3" font-family="Times,serif" font-size="14.00">valence_registry</text>
</g>
<!-- 1&#45;&gt;11 -->
<g id="edge3" class="edge">
<title>1&#45;&gt;11</title>
<path fill="none" stroke="black" d="M824.54,-359.7C833.56,-351.05 844.62,-340.45 854.44,-331.03"/>
<polygon fill="black" stroke="black" points="856.87,-333.55 861.66,-324.1 852.02,-328.5 856.87,-333.55"/>
</g>
<!-- 10 -->
<g id="node5" class="node">
<title>10</title>
<polygon fill="none" stroke="black" points="902.5,-252 712.5,-252 712.5,-216 902.5,-216 902.5,-252"/>
<text text-anchor="middle" x="807.5" y="-230.3" font-family="Times,serif" font-size="14.00">valence_server_common</text>
</g>
<!-- 2&#45;&gt;10 -->
<g id="edge4" class="edge">
<title>2&#45;&gt;10</title>
<path fill="none" stroke="black" d="M752.54,-287.7C761.56,-279.05 772.62,-268.45 782.44,-259.03"/>
<polygon fill="black" stroke="black" points="784.87,-261.55 789.66,-252.1 780.02,-256.5 784.87,-261.55"/>
</g>
<!-- 11&#45;&gt;10 -->
<g id="edge12" class="edge">
<title>11&#45;&gt;10</title>
<path fill="none" stroke="black" d="M861.7,-287.7C852.9,-279.14 842.12,-268.66 832.5,-259.3"/>
<polygon fill="black" stroke="black" points="834.7,-256.57 825.09,-252.1 829.82,-261.58 834.7,-256.57"/>
</g>
<!-- 6 -->
<g id="node9" class="node">
<title>6</title>
<polygon fill="none" stroke="black" points="724.5,-180 588.5,-180 588.5,-144 724.5,-144 724.5,-180"/>
<text text-anchor="middle" x="656.5" y="-158.3" font-family="Times,serif" font-size="14.00">valence_protocol</text>
</g>
<!-- 10&#45;&gt;6 -->
<g id="edge11" class="edge">
<title>10&#45;&gt;6</title>
<path fill="none" stroke="black" d="M770.56,-215.88C750.01,-206.35 724.25,-194.41 702.41,-184.28"/>
<polygon fill="black" stroke="black" points="703.86,-181.1 693.32,-180.07 700.92,-187.45 703.86,-181.1"/>
</g>
<!-- 3 -->
<g id="node6" class="node">
<title>3</title>
<polygon fill="none" stroke="black" points="584.5,-36 470.5,-36 470.5,0 584.5,0 584.5,-36"/>
<text text-anchor="middle" x="527.5" y="-14.3" font-family="Times,serif" font-size="14.00">valence_math</text>
</g>
<!-- 4 -->
<g id="node7" class="node">
<title>4</title>
<polygon fill="none" stroke="black" points="836,-36 735,-36 735,0 836,0 836,-36"/>
<text text-anchor="middle" x="785.5" y="-14.3" font-family="Times,serif" font-size="14.00">valence_nbt</text>
</g>
<!-- 5 -->
<g id="node8" class="node">
<title>5</title>
<polygon fill="none" stroke="black" points="716.5,-36 602.5,-36 602.5,0 716.5,0 716.5,-36"/>
<text text-anchor="middle" x="659.5" y="-14.3" font-family="Times,serif" font-size="14.00">valence_ident</text>
</g>
<!-- 7 -->
<g id="node10" class="node">
<title>7</title>
<polygon fill="none" stroke="black" points="658.5,-108 508.5,-108 508.5,-72 658.5,-72 658.5,-108"/>
<text text-anchor="middle" x="583.5" y="-86.3" font-family="Times,serif" font-size="14.00">valence_generated</text>
</g>
<!-- 6&#45;&gt;7 -->
<g id="edge5" class="edge">
<title>6&#45;&gt;7</title>
<path fill="none" stroke="black" d="M638.46,-143.7C629.44,-135.05 618.38,-124.45 608.56,-115.03"/>
<polygon fill="black" stroke="black" points="610.98,-112.5 601.34,-108.1 606.13,-117.55 610.98,-112.5"/>
</g>
<!-- 9 -->
<g id="node11" class="node">
<title>9</title>
<polygon fill="none" stroke="black" points="782.5,-108 676.5,-108 676.5,-72 782.5,-72 782.5,-108"/>
<text text-anchor="middle" x="729.5" y="-86.3" font-family="Times,serif" font-size="14.00">valence_text</text>
</g>
<!-- 6&#45;&gt;9 -->
<g id="edge6" class="edge">
<title>6&#45;&gt;9</title>
<path fill="none" stroke="black" d="M674.54,-143.7C683.56,-135.05 694.62,-124.45 704.44,-115.03"/>
<polygon fill="black" stroke="black" points="706.87,-117.55 711.66,-108.1 702.02,-112.5 706.87,-117.55"/>
</g>
<!-- 7&#45;&gt;3 -->
<g id="edge7" class="edge">
<title>7&#45;&gt;3</title>
<path fill="none" stroke="black" d="M569.66,-71.7C563.01,-63.39 554.92,-53.28 547.61,-44.14"/>
<polygon fill="black" stroke="black" points="550.16,-41.73 541.18,-36.1 544.7,-46.1 550.16,-41.73"/>
</g>
<!-- 7&#45;&gt;5 -->
<g id="edge8" class="edge">
<title>7&#45;&gt;5</title>
<path fill="none" stroke="black" d="M602.29,-71.7C611.67,-63.05 623.18,-52.45 633.41,-43.03"/>
<polygon fill="black" stroke="black" points="635.95,-45.45 640.93,-36.1 631.2,-40.3 635.95,-45.45"/>
</g>
<!-- 9&#45;&gt;4 -->
<g id="edge9" class="edge">
<title>9&#45;&gt;4</title>
<path fill="none" stroke="black" d="M743.34,-71.7C749.99,-63.39 758.08,-53.28 765.39,-44.14"/>
<polygon fill="black" stroke="black" points="768.3,-46.1 771.82,-36.1 762.84,-41.73 768.3,-46.1"/>
</g>
<!-- 9&#45;&gt;5 -->
<g id="edge10" class="edge">
<title>9&#45;&gt;5</title>
<path fill="none" stroke="black" d="M712.2,-71.7C703.64,-63.14 693.16,-52.66 683.8,-43.3"/>
<polygon fill="black" stroke="black" points="686.15,-40.7 676.6,-36.1 681.2,-45.65 686.15,-40.7"/>
</g>
<!-- 8 -->
<g id="node12" class="node">
<title>8</title>
<polygon fill="none" stroke="black" points="1090.5,-612 938.5,-612 938.5,-576 1090.5,-576 1090.5,-612"/>
<text text-anchor="middle" x="1014.5" y="-590.3" font-family="Times,serif" font-size="14.00">valence_build_utils</text>
</g>
<!-- 12 -->
<g id="node13" class="node">
<title>12</title>
<polygon fill="none" stroke="black" points="303.5,-468 191.5,-468 191.5,-432 303.5,-432 303.5,-468"/>
<text text-anchor="middle" x="247.5" y="-446.3" font-family="Times,serif" font-size="14.00">valence_anvil</text>
</g>
<!-- 12&#45;&gt;1 -->
<g id="edge13" class="edge">
<title>12&#45;&gt;1</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M303.76,-433.74C306.7,-433.11 309.63,-432.53 312.5,-432 461.28,-404.72 638.03,-389.94 734.62,-383.34"/>
<polygon fill="black" stroke="black" points="735.11,-386.82 744.85,-382.65 734.64,-379.83 735.11,-386.82"/>
</g>
<!-- 13 -->
<g id="node14" class="node">
<title>13</title>
<polygon fill="none" stroke="black" points="461.5,-468 321.5,-468 321.5,-432 461.5,-432 461.5,-468"/>
<text text-anchor="middle" x="391.5" y="-446.3" font-family="Times,serif" font-size="14.00">valence_boss_bar</text>
</g>
<!-- 13&#45;&gt;1 -->
<g id="edge14" class="edge">
<title>13&#45;&gt;1</title>
<path fill="none" stroke="black" d="M461.67,-433.69C464.65,-433.11 467.6,-432.54 470.5,-432 561.2,-415.1 666.33,-399.09 734.51,-389.18"/>
<polygon fill="black" stroke="black" points="735.31,-392.6 744.7,-387.7 734.31,-385.67 735.31,-392.6"/>
</g>
<!-- 14 -->
<g id="node15" class="node">
<title>14</title>
<polygon fill="none" stroke="black" points="625.5,-468 479.5,-468 479.5,-432 625.5,-432 625.5,-468"/>
<text text-anchor="middle" x="552.5" y="-446.3" font-family="Times,serif" font-size="14.00">valence_inventory</text>
</g>
<!-- 14&#45;&gt;1 -->
<g id="edge15" class="edge">
<title>14&#45;&gt;1</title>
<path fill="none" stroke="black" d="M614.31,-431.97C650.71,-421.94 696.9,-409.2 734.88,-398.74"/>
<polygon fill="black" stroke="black" points="736.14,-402.02 744.85,-395.99 734.28,-395.27 736.14,-402.02"/>
</g>
<!-- 15 -->
<g id="node16" class="node">
<title>15</title>
<polygon fill="none" stroke="black" points="1632.5,-396 1524.5,-396 1524.5,-360 1632.5,-360 1632.5,-396"/>
<text text-anchor="middle" x="1578.5" y="-374.3" font-family="Times,serif" font-size="14.00">valence_lang</text>
</g>
<!-- 16 -->
<g id="node17" class="node">
<title>16</title>
<polygon fill="none" stroke="black" points="1646.5,-468 1510.5,-468 1510.5,-432 1646.5,-432 1646.5,-468"/>
<text text-anchor="middle" x="1578.5" y="-446.3" font-family="Times,serif" font-size="14.00">valence_network</text>
</g>
<!-- 16&#45;&gt;1 -->
<g id="edge16" class="edge">
<title>16&#45;&gt;1</title>
<path fill="none" stroke="black" d="M1510.16,-433.39C1507.24,-432.89 1504.34,-432.42 1501.5,-432 1275.61,-398.62 1005.13,-385.65 878.52,-381.14"/>
<polygon fill="black" stroke="black" points="878.3,-377.63 868.18,-380.78 878.06,-384.63 878.3,-377.63"/>
</g>
<!-- 16&#45;&gt;15 -->
<g id="edge17" class="edge">
<title>16&#45;&gt;15</title>
<path fill="none" stroke="black" d="M1578.5,-431.7C1578.5,-423.98 1578.5,-414.71 1578.5,-406.11"/>
<polygon fill="black" stroke="black" points="1582,-406.1 1578.5,-396.1 1575,-406.1 1582,-406.1"/>
</g>
<!-- 17 -->
<g id="node18" class="node">
<title>17</title>
<polygon fill="none" stroke="black" points="795.5,-468 643.5,-468 643.5,-432 795.5,-432 795.5,-468"/>
<text text-anchor="middle" x="719.5" y="-446.3" font-family="Times,serif" font-size="14.00">valence_player_list</text>
</g>
<!-- 17&#45;&gt;1 -->
<g id="edge18" class="edge">
<title>17&#45;&gt;1</title>
<path fill="none" stroke="black" d="M741.01,-431.7C751.96,-422.88 765.45,-412.03 777.32,-402.47"/>
<polygon fill="black" stroke="black" points="779.64,-405.1 785.24,-396.1 775.26,-399.65 779.64,-405.1"/>
</g>
<!-- 18 -->
<g id="node19" class="node">
<title>18</title>
<polygon fill="none" stroke="black" points="971,-468 814,-468 814,-432 971,-432 971,-468"/>
<text text-anchor="middle" x="892.5" y="-446.3" font-family="Times,serif" font-size="14.00">valence_scoreboard</text>
</g>
<!-- 18&#45;&gt;1 -->
<g id="edge19" class="edge">
<title>18&#45;&gt;1</title>
<path fill="none" stroke="black" d="M871.24,-431.7C860.41,-422.88 847.08,-412.03 835.34,-402.47"/>
<polygon fill="black" stroke="black" points="837.48,-399.7 827.51,-396.1 833.06,-405.13 837.48,-399.7"/>
</g>
<!-- 19 -->
<g id="node20" class="node">
<title>19</title>
<polygon fill="none" stroke="black" points="1234,-612 1109,-612 1109,-576 1234,-576 1234,-612"/>
<text text-anchor="middle" x="1171.5" y="-590.3" font-family="Times,serif" font-size="14.00">valence_spatial</text>
</g>
<!-- 20 -->
<g id="node21" class="node">
<title>20</title>
<polygon fill="none" stroke="black" points="1125.5,-468 989.5,-468 989.5,-432 1125.5,-432 1125.5,-468"/>
<text text-anchor="middle" x="1057.5" y="-446.3" font-family="Times,serif" font-size="14.00">valence_weather</text>
</g>
<!-- 20&#45;&gt;1 -->
<g id="edge20" class="edge">
<title>20&#45;&gt;1</title>
<path fill="none" stroke="black" d="M996.42,-431.97C960.59,-421.97 915.14,-409.3 877.69,-398.85"/>
<polygon fill="black" stroke="black" points="878.43,-395.43 867.85,-396.11 876.55,-402.17 878.43,-395.43"/>
</g>
<!-- 21 -->
<g id="node22" class="node">
<title>21</title>
<polygon fill="none" stroke="black" points="1317,-468 1144,-468 1144,-432 1317,-432 1317,-468"/>
<text text-anchor="middle" x="1230.5" y="-446.3" font-family="Times,serif" font-size="14.00">valence_world_border</text>
</g>
<!-- 21&#45;&gt;1 -->
<g id="edge21" class="edge">
<title>21&#45;&gt;1</title>
<path fill="none" stroke="black" d="M1143.9,-433.6C1140.73,-433.06 1137.59,-432.52 1134.5,-432 1046.32,-417.07 944.64,-400.78 878.16,-390.26"/>
<polygon fill="black" stroke="black" points="878.63,-386.79 868.21,-388.69 877.54,-393.71 878.63,-386.79"/>
</g>
<!-- 22 -->
<g id="node23" class="node">
<title>22</title>
<polygon fill="none" stroke="black" points="1492,-468 1335,-468 1335,-432 1492,-432 1492,-468"/>
<text text-anchor="middle" x="1413.5" y="-446.3" font-family="Times,serif" font-size="14.00">valence_world_time</text>
</g>
<!-- 22&#45;&gt;1 -->
<g id="edge22" class="edge">
<title>22&#45;&gt;1</title>
<path fill="none" stroke="black" d="M1334.84,-433.29C1332.03,-432.84 1329.24,-432.41 1326.5,-432 1167.25,-408.38 978.99,-392.04 878.41,-384.24"/>
<polygon fill="black" stroke="black" points="878.6,-380.74 868.36,-383.47 878.06,-387.72 878.6,-380.74"/>
</g>
<!-- 23 -->
<g id="node24" class="node">
<title>23</title>
<polygon fill="none" stroke="black" points="804,-612 677,-612 677,-576 804,-576 804,-612"/>
<text text-anchor="middle" x="740.5" y="-590.3" font-family="Times,serif" font-size="14.00">dump_schedule</text>
</g>
<!-- 24 -->
<g id="node25" class="node">
<title>24</title>
<polygon fill="none" stroke="black" points="841,-540 770,-540 770,-504 841,-504 841,-540"/>
<text text-anchor="middle" x="805.5" y="-518.3" font-family="Times,serif" font-size="14.00">valence</text>
</g>
<!-- 23&#45;&gt;24 -->
<g id="edge23" class="edge">
<title>23&#45;&gt;24</title>
<path fill="none" stroke="black" d="M756.57,-575.7C764.44,-567.22 774.06,-556.86 782.67,-547.58"/>
<polygon fill="black" stroke="black" points="785.38,-549.81 789.62,-540.1 780.25,-545.05 785.38,-549.81"/>
</g>
<!-- 24&#45;&gt;0 -->
<g id="edge24" class="edge">
<title>24&#45;&gt;0</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M769.91,-519.1C675.87,-513.85 412.89,-497.59 183.27,-468.03"/>
<polygon fill="black" stroke="black" points="183.42,-464.52 173.05,-466.7 182.52,-471.46 183.42,-464.52"/>
</g>
<!-- 24&#45;&gt;12 -->
<g id="edge25" class="edge">
<title>24&#45;&gt;12</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M769.97,-519C690.03,-514.11 489.87,-499.69 313.72,-468.07"/>
<polygon fill="black" stroke="black" points="314.22,-464.61 303.76,-466.26 312.97,-471.49 314.22,-464.61"/>
</g>
<!-- 24&#45;&gt;13 -->
<g id="edge26" class="edge">
<title>24&#45;&gt;13</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M769.69,-516C710.03,-507.51 586.3,-489.32 471.67,-468.17"/>
<polygon fill="black" stroke="black" points="472.14,-464.69 461.67,-466.31 470.86,-471.58 472.14,-464.69"/>
</g>
<!-- 24&#45;&gt;14 -->
<g id="edge27" class="edge">
<title>24&#45;&gt;14</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M769.79,-511.12C732.07,-500.68 671.59,-483.95 624,-470.78"/>
<polygon fill="black" stroke="black" points="624.93,-467.41 614.36,-468.12 623.06,-474.16 624.93,-467.41"/>
</g>
<!-- 24&#45;&gt;16 -->
<g id="edge28" class="edge">
<title>24&#45;&gt;16</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M841.19,-520.06C942.83,-517.01 1242.6,-505.4 1500.24,-468.07"/>
<polygon fill="black" stroke="black" points="1500.77,-471.53 1510.16,-466.61 1499.76,-464.6 1500.77,-471.53"/>
</g>
<!-- 24&#45;&gt;17 -->
<g id="edge29" class="edge">
<title>24&#45;&gt;17</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M784.24,-503.7C773.41,-494.88 760.08,-484.03 748.34,-474.47"/>
<polygon fill="black" stroke="black" points="750.48,-471.7 740.51,-468.1 746.06,-477.13 750.48,-471.7"/>
</g>
<!-- 24&#45;&gt;18 -->
<g id="edge30" class="edge">
<title>24&#45;&gt;18</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M827.01,-503.7C837.96,-494.88 851.45,-484.03 863.32,-474.47"/>
<polygon fill="black" stroke="black" points="865.64,-477.1 871.24,-468.1 861.26,-471.65 865.64,-477.1"/>
</g>
<!-- 24&#45;&gt;20 -->
<g id="edge31" class="edge">
<title>24&#45;&gt;20</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M841.07,-511.12C878.56,-500.7 938.63,-484.02 985.99,-470.87"/>
<polygon fill="black" stroke="black" points="987.19,-474.16 995.88,-468.12 985.31,-467.42 987.19,-474.16"/>
</g>
<!-- 24&#45;&gt;21 -->
<g id="edge32" class="edge">
<title>24&#45;&gt;21</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M841.07,-515.46C899.74,-506.27 1020.72,-487.16 1134.02,-468.07"/>
<polygon fill="black" stroke="black" points="1134.63,-471.51 1143.9,-466.4 1133.46,-464.61 1134.63,-471.51"/>
</g>
<!-- 24&#45;&gt;22 -->
<g id="edge33" class="edge">
<title>24&#45;&gt;22</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M841.02,-518.52C923.99,-512.47 1137.16,-495.54 1324.79,-468.18"/>
<polygon fill="black" stroke="black" points="1325.45,-471.63 1334.84,-466.71 1324.43,-464.7 1325.45,-471.63"/>
</g>
<!-- 25 -->
<g id="node26" class="node">
<title>25</title>
<polygon fill="none" stroke="black" points="601,-252 464,-252 464,-216 601,-216 601,-252"/>
<text text-anchor="middle" x="532.5" y="-230.3" font-family="Times,serif" font-size="14.00">packet_inspector</text>
</g>
<!-- 25&#45;&gt;6 -->
<g id="edge34" class="edge">
<title>25&#45;&gt;6</title>
<path fill="none" stroke="black" d="M562.83,-215.88C579.2,-206.64 599.58,-195.13 617.15,-185.21"/>
<polygon fill="black" stroke="black" points="619.06,-188.15 626.05,-180.19 615.62,-182.06 619.06,-188.15"/>
</g>
<!-- 26 -->
<g id="node27" class="node">
<title>26</title>
<polygon fill="none" stroke="black" points="920.5,-612 822.5,-612 822.5,-576 920.5,-576 920.5,-612"/>
<text text-anchor="middle" x="871.5" y="-590.3" font-family="Times,serif" font-size="14.00">playground</text>
</g>
<!-- 26&#45;&gt;24 -->
<g id="edge35" class="edge">
<title>26&#45;&gt;24</title>
<path fill="none" stroke="black" d="M855.19,-575.7C847.19,-567.22 837.43,-556.86 828.68,-547.58"/>
<polygon fill="black" stroke="black" points="831.03,-544.98 821.63,-540.1 825.94,-549.78 831.03,-544.98"/>
</g>
<!-- 27 -->
<g id="node28" class="node">
<title>27</title>
<polygon fill="none" stroke="black" points="694,-252 619,-252 619,-216 694,-216 694,-252"/>
<text text-anchor="middle" x="656.5" y="-230.3" font-family="Times,serif" font-size="14.00">stresser</text>
</g>
<!-- 27&#45;&gt;6 -->
<g id="edge36" class="edge">
<title>27&#45;&gt;6</title>
<path fill="none" stroke="black" d="M656.5,-215.7C656.5,-207.98 656.5,-198.71 656.5,-190.11"/>
<polygon fill="black" stroke="black" points="660,-190.1 656.5,-180.1 653,-190.1 660,-190.1"/>
</g>
</g>
</svg>

For reference, here is a diff against the old depgraph.svg:

diff --git a/assets/depgraph.svg b/assets/depgraph.svg
index b368d45..3c179e7 100644
--- a/assets/depgraph.svg
+++ b/assets/depgraph.svg
@@ -1,523 +1,397 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: %3 Pages: 1 -->
 <svg width="1655pt" height="620pt"
-    viewBox="0.00 0.00 1654.50 620.00" xmlns="http://www.w3.org/2000/svg"
-    xmlns:xlink="http://www.w3.org/1999/xlink">
-    <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 616)">
-        <title>%3</title>
-        <polygon fill="white" stroke="transparent" points="-4,4 -4,-616 1650.5,-616 1650.5,4 -4,4" />
-        <!-- 0 -->
-        <g id="node1" class="node">
-            <title>0</title>
-            <polygon fill="none" stroke="black" points="173,-468 0,-468 0,-432 173,-432 173,-468" />
-            <text text-anchor="middle" x="86.5" y="-446.3" font-family="Times,serif"
-                font-size="14.00">valence_advancement</text>
-        </g>
-        <!-- 1 -->
-        <g id="node2" class="node">
-            <title>1</title>
-            <polygon fill="none" stroke="black"
-                points="868,-396 745,-396 745,-360 868,-360 868,-396" />
-            <text text-anchor="middle" x="806.5" y="-374.3" font-family="Times,serif"
-                font-size="14.00">valence_server</text>
-        </g>
-        <!-- 0&#45;&gt;1 -->
-        <g id="edge1" class="edge">
-            <title>0&#45;&gt;1</title>
-            <path fill="none" stroke="black"
-                d="M173.05,-433.3C176.24,-432.84 179.4,-432.41 182.5,-432 381.59,-405.97 618.17,-389.91 734.54,-382.99" />
-            <polygon fill="black" stroke="black"
-                points="734.97,-386.47 744.75,-382.39 734.56,-379.48 734.97,-386.47" />
-        </g>
-        <!-- 2 -->
-        <g id="node3" class="node">
-            <title>2</title>
-            <polygon fill="none" stroke="black"
-                points="794,-324 675,-324 675,-288 794,-288 794,-324" />
-            <text text-anchor="middle" x="734.5" y="-302.3" font-family="Times,serif"
-                font-size="14.00">valence_entity</text>
-        </g>
-        <!-- 1&#45;&gt;2 -->
-        <g id="edge2" class="edge">
-            <title>1&#45;&gt;2</title>
-            <path fill="none" stroke="black"
-                d="M788.7,-359.7C779.9,-351.14 769.12,-340.66 759.5,-331.3" />
-            <polygon fill="black" stroke="black"
-                points="761.7,-328.57 752.09,-324.1 756.82,-333.58 761.7,-328.57" />
-        </g>
-        <!-- 11 -->
-        <g id="node4" class="node">
-            <title>11</title>
-            <polygon fill="none" stroke="black"
-                points="946.5,-324 812.5,-324 812.5,-288 946.5,-288 946.5,-324" />
-            <text text-anchor="middle" x="879.5" y="-302.3" font-family="Times,serif"
-                font-size="14.00">valence_registry</text>
-        </g>
-        <!-- 1&#45;&gt;11 -->
-        <g id="edge3" class="edge">
-            <title>1&#45;&gt;11</title>
-            <path fill="none" stroke="black"
-                d="M824.54,-359.7C833.56,-351.05 844.62,-340.45 854.44,-331.03" />
-            <polygon fill="black" stroke="black"
-                points="856.87,-333.55 861.66,-324.1 852.02,-328.5 856.87,-333.55" />
-        </g>
-        <!-- 10 -->
-        <g id="node5" class="node">
-            <title>10</title>
-            <polygon fill="none" stroke="black"
-                points="902.5,-252 712.5,-252 712.5,-216 902.5,-216 902.5,-252" />
-            <text text-anchor="middle" x="807.5" y="-230.3" font-family="Times,serif"
-                font-size="14.00">valence_server_common</text>
-        </g>
-        <!-- 2&#45;&gt;10 -->
-        <g id="edge4" class="edge">
-            <title>2&#45;&gt;10</title>
-            <path fill="none" stroke="black"
-                d="M752.54,-287.7C761.56,-279.05 772.62,-268.45 782.44,-259.03" />
-            <polygon fill="black" stroke="black"
-                points="784.87,-261.55 789.66,-252.1 780.02,-256.5 784.87,-261.55" />
-        </g>
-        <!-- 11&#45;&gt;10 -->
-        <g id="edge12" class="edge">
-            <title>11&#45;&gt;10</title>
-            <path fill="none" stroke="black"
-                d="M861.7,-287.7C852.9,-279.14 842.12,-268.66 832.5,-259.3" />
-            <polygon fill="black" stroke="black"
-                points="834.7,-256.57 825.09,-252.1 829.82,-261.58 834.7,-256.57" />
-        </g>
-        <!-- 6 -->
-        <g id="node9" class="node">
-            <title>6</title>
-            <polygon fill="none" stroke="black"
-                points="724.5,-180 588.5,-180 588.5,-144 724.5,-144 724.5,-180" />
-            <text text-anchor="middle" x="656.5" y="-158.3" font-family="Times,serif"
-                font-size="14.00">valence_protocol</text>
-        </g>
-        <!-- 10&#45;&gt;6 -->
-        <g id="edge11" class="edge">
-            <title>10&#45;&gt;6</title>
-            <path fill="none" stroke="black"
-                d="M770.56,-215.88C750.01,-206.35 724.25,-194.41 702.41,-184.28" />
-            <polygon fill="black" stroke="black"
-                points="703.86,-181.1 693.32,-180.07 700.92,-187.45 703.86,-181.1" />
-        </g>
-        <!-- 3 -->
-        <g id="node6" class="node">
-            <title>3</title>
-            <polygon fill="none" stroke="black"
-                points="584.5,-36 470.5,-36 470.5,0 584.5,0 584.5,-36" />
-            <text text-anchor="middle" x="527.5" y="-14.3" font-family="Times,serif"
-                font-size="14.00">valence_math</text>
-        </g>
-        <!-- 4 -->
-        <g id="node7" class="node">
-            <title>4</title>
-            <polygon fill="none" stroke="black" points="836,-36 735,-36 735,0 836,0 836,-36" />
-            <text text-anchor="middle" x="785.5" y="-14.3" font-family="Times,serif"
-                font-size="14.00">valence_nbt</text>
-        </g>
-        <!-- 5 -->
-        <g id="node8" class="node">
-            <title>5</title>
-            <polygon fill="none" stroke="black"
-                points="716.5,-36 602.5,-36 602.5,0 716.5,0 716.5,-36" />
-            <text text-anchor="middle" x="659.5" y="-14.3" font-family="Times,serif"
-                font-size="14.00">valence_ident</text>
-        </g>
-        <!-- 7 -->
-        <g id="node10" class="node">
-            <title>7</title>
-            <polygon fill="none" stroke="black"
-                points="658.5,-108 508.5,-108 508.5,-72 658.5,-72 658.5,-108" />
-            <text text-anchor="middle" x="583.5" y="-86.3" font-family="Times,serif"
-                font-size="14.00">valence_generated</text>
-        </g>
-        <!-- 6&#45;&gt;7 -->
-        <g id="edge5" class="edge">
-            <title>6&#45;&gt;7</title>
-            <path fill="none" stroke="black"
-                d="M638.46,-143.7C629.44,-135.05 618.38,-124.45 608.56,-115.03" />
-            <polygon fill="black" stroke="black"
-                points="610.98,-112.5 601.34,-108.1 606.13,-117.55 610.98,-112.5" />
-        </g>
-        <!-- 9 -->
-        <g id="node11" class="node">
-            <title>9</title>
-            <polygon fill="none" stroke="black"
-                points="782.5,-108 676.5,-108 676.5,-72 782.5,-72 782.5,-108" />
-            <text text-anchor="middle" x="729.5" y="-86.3" font-family="Times,serif"
-                font-size="14.00">valence_text</text>
-        </g>
-        <!-- 6&#45;&gt;9 -->
-        <g id="edge6" class="edge">
-            <title>6&#45;&gt;9</title>
-            <path fill="none" stroke="black"
-                d="M674.54,-143.7C683.56,-135.05 694.62,-124.45 704.44,-115.03" />
-            <polygon fill="black" stroke="black"
-                points="706.87,-117.55 711.66,-108.1 702.02,-112.5 706.87,-117.55" />
-        </g>
-        <!-- 7&#45;&gt;3 -->
-        <g id="edge7" class="edge">
-            <title>7&#45;&gt;3</title>
-            <path fill="none" stroke="black"
-                d="M569.66,-71.7C563.01,-63.39 554.92,-53.28 547.61,-44.14" />
-            <polygon fill="black" stroke="black"
-                points="550.16,-41.73 541.18,-36.1 544.7,-46.1 550.16,-41.73" />
-        </g>
-        <!-- 7&#45;&gt;5 -->
-        <g id="edge8" class="edge">
-            <title>7&#45;&gt;5</title>
-            <path fill="none" stroke="black"
-                d="M602.29,-71.7C611.67,-63.05 623.18,-52.45 633.41,-43.03" />
-            <polygon fill="black" stroke="black"
-                points="635.95,-45.45 640.93,-36.1 631.2,-40.3 635.95,-45.45" />
-        </g>
-        <!-- 9&#45;&gt;4 -->
-        <g id="edge9" class="edge">
-            <title>9&#45;&gt;4</title>
-            <path fill="none" stroke="black"
-                d="M743.34,-71.7C749.99,-63.39 758.08,-53.28 765.39,-44.14" />
-            <polygon fill="black" stroke="black"
-                points="768.3,-46.1 771.82,-36.1 762.84,-41.73 768.3,-46.1" />
-        </g>
-        <!-- 9&#45;&gt;5 -->
-        <g id="edge10" class="edge">
-            <title>9&#45;&gt;5</title>
-            <path fill="none" stroke="black"
-                d="M712.2,-71.7C703.64,-63.14 693.16,-52.66 683.8,-43.3" />
-            <polygon fill="black" stroke="black"
-                points="686.15,-40.7 676.6,-36.1 681.2,-45.65 686.15,-40.7" />
-        </g>
-        <!-- 8 -->
-        <g id="node12" class="node">
-            <title>8</title>
-            <polygon fill="none" stroke="black"
-                points="1090.5,-612 938.5,-612 938.5,-576 1090.5,-576 1090.5,-612" />
-            <text text-anchor="middle" x="1014.5" y="-590.3" font-family="Times,serif"
-                font-size="14.00">valence_build_utils</text>
-        </g>
-        <!-- 12 -->
-        <g id="node13" class="node">
-            <title>12</title>
-            <polygon fill="none" stroke="black"
-                points="303.5,-468 191.5,-468 191.5,-432 303.5,-432 303.5,-468" />
-            <text text-anchor="middle" x="247.5" y="-446.3" font-family="Times,serif"
-                font-size="14.00">valence_anvil</text>
-        </g>
-        <!-- 12&#45;&gt;1 -->
-        <g id="edge13" class="edge">
-            <title>12&#45;&gt;1</title>
-            <path fill="none" stroke="black" stroke-dasharray="1,5"
-                d="M303.76,-433.74C306.7,-433.11 309.63,-432.53 312.5,-432 461.28,-404.72 638.03,-389.94 734.62,-383.34" />
-            <polygon fill="black" stroke="black"
-                points="735.11,-386.82 744.85,-382.65 734.64,-379.83 735.11,-386.82" />
-        </g>
-        <!-- 13 -->
-        <g id="node14" class="node">
-            <title>13</title>
-            <polygon fill="none" stroke="black"
-                points="461.5,-468 321.5,-468 321.5,-432 461.5,-432 461.5,-468" />
-            <text text-anchor="middle" x="391.5" y="-446.3" font-family="Times,serif"
-                font-size="14.00">valence_boss_bar</text>
-        </g>
-        <!-- 13&#45;&gt;1 -->
-        <g id="edge14" class="edge">
-            <title>13&#45;&gt;1</title>
-            <path fill="none" stroke="black"
-                d="M461.67,-433.69C464.65,-433.11 467.6,-432.54 470.5,-432 561.2,-415.1 666.33,-399.09 734.51,-389.18" />
-            <polygon fill="black" stroke="black"
-                points="735.31,-392.6 744.7,-387.7 734.31,-385.67 735.31,-392.6" />
-        </g>
-        <!-- 14 -->
-        <g id="node15" class="node">
-            <title>14</title>
-            <polygon fill="none" stroke="black"
-                points="625.5,-468 479.5,-468 479.5,-432 625.5,-432 625.5,-468" />
-            <text text-anchor="middle" x="552.5" y="-446.3" font-family="Times,serif"
-                font-size="14.00">valence_inventory</text>
-        </g>
-        <!-- 14&#45;&gt;1 -->
-        <g id="edge15" class="edge">
-            <title>14&#45;&gt;1</title>
-            <path fill="none" stroke="black"
-                d="M614.31,-431.97C650.71,-421.94 696.9,-409.2 734.88,-398.74" />
-            <polygon fill="black" stroke="black"
-                points="736.14,-402.02 744.85,-395.99 734.28,-395.27 736.14,-402.02" />
-        </g>
-        <!-- 15 -->
-        <g id="node16" class="node">
-            <title>15</title>
-            <polygon fill="none" stroke="black"
-                points="1632.5,-396 1524.5,-396 1524.5,-360 1632.5,-360 1632.5,-396" />
-            <text text-anchor="middle" x="1578.5" y="-374.3" font-family="Times,serif"
-                font-size="14.00">valence_lang</text>
-        </g>
-        <!-- 16 -->
-        <g id="node17" class="node">
-            <title>16</title>
-            <polygon fill="none" stroke="black"
-                points="1646.5,-468 1510.5,-468 1510.5,-432 1646.5,-432 1646.5,-468" />
-            <text text-anchor="middle" x="1578.5" y="-446.3" font-family="Times,serif"
-                font-size="14.00">valence_network</text>
-        </g>
-        <!-- 16&#45;&gt;1 -->
-        <g id="edge16" class="edge">
-            <title>16&#45;&gt;1</title>
-            <path fill="none" stroke="black"
-                d="M1510.16,-433.39C1507.24,-432.89 1504.34,-432.42 1501.5,-432 1275.61,-398.62 1005.13,-385.65 878.52,-381.14" />
-            <polygon fill="black" stroke="black"
-                points="878.3,-377.63 868.18,-380.78 878.06,-384.63 878.3,-377.63" />
-        </g>
-        <!-- 16&#45;&gt;15 -->
-        <g id="edge17" class="edge">
-            <title>16&#45;&gt;15</title>
-            <path fill="none" stroke="black"
-                d="M1578.5,-431.7C1578.5,-423.98 1578.5,-414.71 1578.5,-406.11" />
-            <polygon fill="black" stroke="black"
-                points="1582,-406.1 1578.5,-396.1 1575,-406.1 1582,-406.1" />
-        </g>
-        <!-- 17 -->
-        <g id="node18" class="node">
-            <title>17</title>
-            <polygon fill="none" stroke="black"
-                points="795.5,-468 643.5,-468 643.5,-432 795.5,-432 795.5,-468" />
-            <text text-anchor="middle" x="719.5" y="-446.3" font-family="Times,serif"
-                font-size="14.00">valence_player_list</text>
-        </g>
-        <!-- 17&#45;&gt;1 -->
-        <g id="edge18" class="edge">
-            <title>17&#45;&gt;1</title>
-            <path fill="none" stroke="black"
-                d="M741.01,-431.7C751.96,-422.88 765.45,-412.03 777.32,-402.47" />
-            <polygon fill="black" stroke="black"
-                points="779.64,-405.1 785.24,-396.1 775.26,-399.65 779.64,-405.1" />
-        </g>
-        <!-- 18 -->
-        <g id="node19" class="node">
-            <title>18</title>
-            <polygon fill="none" stroke="black"
-                points="971,-468 814,-468 814,-432 971,-432 971,-468" />
-            <text text-anchor="middle" x="892.5" y="-446.3" font-family="Times,serif"
-                font-size="14.00">valence_scoreboard</text>
-        </g>
-        <!-- 18&#45;&gt;1 -->
-        <g id="edge19" class="edge">
-            <title>18&#45;&gt;1</title>
-            <path fill="none" stroke="black"
-                d="M871.24,-431.7C860.41,-422.88 847.08,-412.03 835.34,-402.47" />
-            <polygon fill="black" stroke="black"
-                points="837.48,-399.7 827.51,-396.1 833.06,-405.13 837.48,-399.7" />
-        </g>
-        <!-- 19 -->
-        <g id="node20" class="node">
-            <title>19</title>
-            <polygon fill="none" stroke="black"
-                points="1234,-612 1109,-612 1109,-576 1234,-576 1234,-612" />
-            <text text-anchor="middle" x="1171.5" y="-590.3" font-family="Times,serif"
-                font-size="14.00">valence_spatial</text>
-        </g>
-        <!-- 20 -->
-        <g id="node21" class="node">
-            <title>20</title>
-            <polygon fill="none" stroke="black"
-                points="1125.5,-468 989.5,-468 989.5,-432 1125.5,-432 1125.5,-468" />
-            <text text-anchor="middle" x="1057.5" y="-446.3" font-family="Times,serif"
-                font-size="14.00">valence_weather</text>
-        </g>
-        <!-- 20&#45;&gt;1 -->
-        <g id="edge20" class="edge">
-            <title>20&#45;&gt;1</title>
-            <path fill="none" stroke="black"
-                d="M996.42,-431.97C960.59,-421.97 915.14,-409.3 877.69,-398.85" />
-            <polygon fill="black" stroke="black"
-                points="878.43,-395.43 867.85,-396.11 876.55,-402.17 878.43,-395.43" />
-        </g>
-        <!-- 21 -->
-        <g id="node22" class="node">
-            <title>21</title>
-            <polygon fill="none" stroke="black"
-                points="1317,-468 1144,-468 1144,-432 1317,-432 1317,-468" />
-            <text text-anchor="middle" x="1230.5" y="-446.3" font-family="Times,serif"
-                font-size="14.00">valence_world_border</text>
-        </g>
-        <!-- 21&#45;&gt;1 -->
-        <g id="edge21" class="edge">
-            <title>21&#45;&gt;1</title>
-            <path fill="none" stroke="black"
-                d="M1143.9,-433.6C1140.73,-433.06 1137.59,-432.52 1134.5,-432 1046.32,-417.07 944.64,-400.78 878.16,-390.26" />
-            <polygon fill="black" stroke="black"
-                points="878.63,-386.79 868.21,-388.69 877.54,-393.71 878.63,-386.79" />
-        </g>
-        <!-- 22 -->
-        <g id="node23" class="node">
-            <title>22</title>
-            <polygon fill="none" stroke="black"
-                points="1492,-468 1335,-468 1335,-432 1492,-432 1492,-468" />
-            <text text-anchor="middle" x="1413.5" y="-446.3" font-family="Times,serif"
-                font-size="14.00">valence_world_time</text>
-        </g>
-        <!-- 22&#45;&gt;1 -->
-        <g id="edge22" class="edge">
-            <title>22&#45;&gt;1</title>
-            <path fill="none" stroke="black"
-                d="M1334.84,-433.29C1332.03,-432.84 1329.24,-432.41 1326.5,-432 1167.25,-408.38 978.99,-392.04 878.41,-384.24" />
-            <polygon fill="black" stroke="black"
-                points="878.6,-380.74 868.36,-383.47 878.06,-387.72 878.6,-380.74" />
-        </g>
-        <!-- 23 -->
-        <g id="node24" class="node">
-            <title>23</title>
-            <polygon fill="none" stroke="black"
-                points="804,-612 677,-612 677,-576 804,-576 804,-612" />
-            <text text-anchor="middle" x="740.5" y="-590.3" font-family="Times,serif"
-                font-size="14.00">dump_schedule</text>
-        </g>
-        <!-- 24 -->
-        <g id="node25" class="node">
-            <title>24</title>
-            <polygon fill="none" stroke="black"
-                points="841,-540 770,-540 770,-504 841,-504 841,-540" />
-            <text text-anchor="middle" x="805.5" y="-518.3" font-family="Times,serif"
-                font-size="14.00">valence</text>
-        </g>
-        <!-- 23&#45;&gt;24 -->
-        <g id="edge23" class="edge">
-            <title>23&#45;&gt;24</title>
-            <path fill="none" stroke="black"
-                d="M756.57,-575.7C764.44,-567.22 774.06,-556.86 782.67,-547.58" />
-            <polygon fill="black" stroke="black"
-                points="785.38,-549.81 789.62,-540.1 780.25,-545.05 785.38,-549.81" />
-        </g>
-        <!-- 24&#45;&gt;0 -->
-        <g id="edge24" class="edge">
-            <title>24&#45;&gt;0</title>
-            <path fill="none" stroke="black" stroke-dasharray="1,5"
-                d="M769.91,-519.1C675.87,-513.85 412.89,-497.59 183.27,-468.03" />
-            <polygon fill="black" stroke="black"
-                points="183.42,-464.52 173.05,-466.7 182.52,-471.46 183.42,-464.52" />
-        </g>
-        <!-- 24&#45;&gt;12 -->
-        <g id="edge25" class="edge">
-            <title>24&#45;&gt;12</title>
-            <path fill="none" stroke="black" stroke-dasharray="1,5"
-                d="M769.97,-519C690.03,-514.11 489.87,-499.69 313.72,-468.07" />
-            <polygon fill="black" stroke="black"
-                points="314.22,-464.61 303.76,-466.26 312.97,-471.49 314.22,-464.61" />
-        </g>
-        <!-- 24&#45;&gt;13 -->
-        <g id="edge26" class="edge">
-            <title>24&#45;&gt;13</title>
-            <path fill="none" stroke="black" stroke-dasharray="1,5"
-                d="M769.69,-516C710.03,-507.51 586.3,-489.32 471.67,-468.17" />
-            <polygon fill="black" stroke="black"
-                points="472.14,-464.69 461.67,-466.31 470.86,-471.58 472.14,-464.69" />
-        </g>
-        <!-- 24&#45;&gt;14 -->
-        <g id="edge27" class="edge">
-            <title>24&#45;&gt;14</title>
-            <path fill="none" stroke="black" stroke-dasharray="1,5"
-                d="M769.79,-511.12C732.07,-500.68 671.59,-483.95 624,-470.78" />
-            <polygon fill="black" stroke="black"
-                points="624.93,-467.41 614.36,-468.12 623.06,-474.16 624.93,-467.41" />
-        </g>
-        <!-- 24&#45;&gt;16 -->
-        <g id="edge28" class="edge">
-            <title>24&#45;&gt;16</title>
-            <path fill="none" stroke="black" stroke-dasharray="1,5"
-                d="M841.19,-520.06C942.83,-517.01 1242.6,-505.4 1500.24,-468.07" />
-            <polygon fill="black" stroke="black"
-                points="1500.77,-471.53 1510.16,-466.61 1499.76,-464.6 1500.77,-471.53" />
-        </g>
-        <!-- 24&#45;&gt;17 -->
-        <g id="edge29" class="edge">
-            <title>24&#45;&gt;17</title>
-            <path fill="none" stroke="black" stroke-dasharray="1,5"
-                d="M784.24,-503.7C773.41,-494.88 760.08,-484.03 748.34,-474.47" />
-            <polygon fill="black" stroke="black"
-                points="750.48,-471.7 740.51,-468.1 746.06,-477.13 750.48,-471.7" />
-        </g>
-        <!-- 24&#45;&gt;18 -->
-        <g id="edge30" class="edge">
-            <title>24&#45;&gt;18</title>
-            <path fill="none" stroke="black" stroke-dasharray="1,5"
-                d="M827.01,-503.7C837.96,-494.88 851.45,-484.03 863.32,-474.47" />
-            <polygon fill="black" stroke="black"
-                points="865.64,-477.1 871.24,-468.1 861.26,-471.65 865.64,-477.1" />
-        </g>
-        <!-- 24&#45;&gt;20 -->
-        <g id="edge31" class="edge">
-            <title>24&#45;&gt;20</title>
-            <path fill="none" stroke="black" stroke-dasharray="1,5"
-                d="M841.07,-511.12C878.56,-500.7 938.63,-484.02 985.99,-470.87" />
-            <polygon fill="black" stroke="black"
-                points="987.19,-474.16 995.88,-468.12 985.31,-467.42 987.19,-474.16" />
-        </g>
-        <!-- 24&#45;&gt;21 -->
-        <g id="edge32" class="edge">
-            <title>24&#45;&gt;21</title>
-            <path fill="none" stroke="black" stroke-dasharray="1,5"
-                d="M841.07,-515.46C899.74,-506.27 1020.72,-487.16 1134.02,-468.07" />
-            <polygon fill="black" stroke="black"
-                points="1134.63,-471.51 1143.9,-466.4 1133.46,-464.61 1134.63,-471.51" />
-        </g>
-        <!-- 24&#45;&gt;22 -->
-        <g id="edge33" class="edge">
-            <title>24&#45;&gt;22</title>
-            <path fill="none" stroke="black" stroke-dasharray="1,5"
-                d="M841.02,-518.52C923.99,-512.47 1137.16,-495.54 1324.79,-468.18" />
-            <polygon fill="black" stroke="black"
-                points="1325.45,-471.63 1334.84,-466.71 1324.43,-464.7 1325.45,-471.63" />
-        </g>
-        <!-- 25 -->
-        <g id="node26" class="node">
-            <title>25</title>
-            <polygon fill="none" stroke="black"
-                points="601,-252 464,-252 464,-216 601,-216 601,-252" />
-            <text text-anchor="middle" x="532.5" y="-230.3" font-family="Times,serif"
-                font-size="14.00">packet_inspector</text>
-        </g>
-        <!-- 25&#45;&gt;6 -->
-        <g id="edge34" class="edge">
-            <title>25&#45;&gt;6</title>
-            <path fill="none" stroke="black"
-                d="M562.83,-215.88C579.2,-206.64 599.58,-195.13 617.15,-185.21" />
-            <polygon fill="black" stroke="black"
-                points="619.06,-188.15 626.05,-180.19 615.62,-182.06 619.06,-188.15" />
-        </g>
-        <!-- 26 -->
-        <g id="node27" class="node">
-            <title>26</title>
-            <polygon fill="none" stroke="black"
-                points="920.5,-612 822.5,-612 822.5,-576 920.5,-576 920.5,-612" />
-            <text text-anchor="middle" x="871.5" y="-590.3" font-family="Times,serif"
-                font-size="14.00">playground</text>
-        </g>
-        <!-- 26&#45;&gt;24 -->
-        <g id="edge35" class="edge">
-            <title>26&#45;&gt;24</title>
-            <path fill="none" stroke="black"
-                d="M855.19,-575.7C847.19,-567.22 837.43,-556.86 828.68,-547.58" />
-            <polygon fill="black" stroke="black"
-                points="831.03,-544.98 821.63,-540.1 825.94,-549.78 831.03,-544.98" />
-        </g>
-        <!-- 27 -->
-        <g id="node28" class="node">
-            <title>27</title>
-            <polygon fill="none" stroke="black"
-                points="694,-252 619,-252 619,-216 694,-216 694,-252" />
-            <text text-anchor="middle" x="656.5" y="-230.3" font-family="Times,serif"
-                font-size="14.00">stresser</text>
-        </g>
-        <!-- 27&#45;&gt;6 -->
-        <g id="edge36" class="edge">
-            <title>27&#45;&gt;6</title>
-            <path fill="none" stroke="black"
-                d="M656.5,-215.7C656.5,-207.98 656.5,-198.71 656.5,-190.11" />
-            <polygon fill="black" stroke="black"
-                points="660,-190.1 656.5,-180.1 653,-190.1 660,-190.1" />
-        </g>
-    </g>
+ viewBox="0.00 0.00 1654.50 620.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 616)">
+<title>%3</title>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-616 1650.5,-616 1650.5,4 -4,4"/>
+<!-- 0 -->
+<g id="node1" class="node">
+<title>0</title>
+<polygon fill="none" stroke="black" points="173,-468 0,-468 0,-432 173,-432 173,-468"/>
+<text text-anchor="middle" x="86.5" y="-446.3" font-family="Times,serif" font-size="14.00">valence_advancement</text>
+</g>
+<!-- 1 -->
+<g id="node2" class="node">
+<title>1</title>
+<polygon fill="none" stroke="black" points="868,-396 745,-396 745,-360 868,-360 868,-396"/>
+<text text-anchor="middle" x="806.5" y="-374.3" font-family="Times,serif" font-size="14.00">valence_server</text>
+</g>
+<!-- 0&#45;&gt;1 -->
+<g id="edge1" class="edge">
+<title>0&#45;&gt;1</title>
+<path fill="none" stroke="black" d="M173.05,-433.3C176.24,-432.84 179.4,-432.41 182.5,-432 381.59,-405.97 618.17,-389.91 734.54,-382.99"/>
+<polygon fill="black" stroke="black" points="734.97,-386.47 744.75,-382.39 734.56,-379.48 734.97,-386.47"/>
+</g>
+<!-- 2 -->
+<g id="node3" class="node">
+<title>2</title>
+<polygon fill="none" stroke="black" points="794,-324 675,-324 675,-288 794,-288 794,-324"/>
+<text text-anchor="middle" x="734.5" y="-302.3" font-family="Times,serif" font-size="14.00">valence_entity</text>
+</g>
+<!-- 1&#45;&gt;2 -->
+<g id="edge2" class="edge">
+<title>1&#45;&gt;2</title>
+<path fill="none" stroke="black" d="M788.7,-359.7C779.9,-351.14 769.12,-340.66 759.5,-331.3"/>
+<polygon fill="black" stroke="black" points="761.7,-328.57 752.09,-324.1 756.82,-333.58 761.7,-328.57"/>
+</g>
+<!-- 11 -->
+<g id="node4" class="node">
+<title>11</title>
+<polygon fill="none" stroke="black" points="946.5,-324 812.5,-324 812.5,-288 946.5,-288 946.5,-324"/>
+<text text-anchor="middle" x="879.5" y="-302.3" font-family="Times,serif" font-size="14.00">valence_registry</text>
+</g>
+<!-- 1&#45;&gt;11 -->
+<g id="edge3" class="edge">
+<title>1&#45;&gt;11</title>
+<path fill="none" stroke="black" d="M824.54,-359.7C833.56,-351.05 844.62,-340.45 854.44,-331.03"/>
+<polygon fill="black" stroke="black" points="856.87,-333.55 861.66,-324.1 852.02,-328.5 856.87,-333.55"/>
+</g>
+<!-- 10 -->
+<g id="node5" class="node">
+<title>10</title>
+<polygon fill="none" stroke="black" points="902.5,-252 712.5,-252 712.5,-216 902.5,-216 902.5,-252"/>
+<text text-anchor="middle" x="807.5" y="-230.3" font-family="Times,serif" font-size="14.00">valence_server_common</text>
+</g>
+<!-- 2&#45;&gt;10 -->
+<g id="edge4" class="edge">
+<title>2&#45;&gt;10</title>
+<path fill="none" stroke="black" d="M752.54,-287.7C761.56,-279.05 772.62,-268.45 782.44,-259.03"/>
+<polygon fill="black" stroke="black" points="784.87,-261.55 789.66,-252.1 780.02,-256.5 784.87,-261.55"/>
+</g>
+<!-- 11&#45;&gt;10 -->
+<g id="edge12" class="edge">
+<title>11&#45;&gt;10</title>
+<path fill="none" stroke="black" d="M861.7,-287.7C852.9,-279.14 842.12,-268.66 832.5,-259.3"/>
+<polygon fill="black" stroke="black" points="834.7,-256.57 825.09,-252.1 829.82,-261.58 834.7,-256.57"/>
+</g>
+<!-- 6 -->
+<g id="node9" class="node">
+<title>6</title>
+<polygon fill="none" stroke="black" points="724.5,-180 588.5,-180 588.5,-144 724.5,-144 724.5,-180"/>
+<text text-anchor="middle" x="656.5" y="-158.3" font-family="Times,serif" font-size="14.00">valence_protocol</text>
+</g>
+<!-- 10&#45;&gt;6 -->
+<g id="edge11" class="edge">
+<title>10&#45;&gt;6</title>
+<path fill="none" stroke="black" d="M770.56,-215.88C750.01,-206.35 724.25,-194.41 702.41,-184.28"/>
+<polygon fill="black" stroke="black" points="703.86,-181.1 693.32,-180.07 700.92,-187.45 703.86,-181.1"/>
+</g>
+<!-- 3 -->
+<g id="node6" class="node">
+<title>3</title>
+<polygon fill="none" stroke="black" points="584.5,-36 470.5,-36 470.5,0 584.5,0 584.5,-36"/>
+<text text-anchor="middle" x="527.5" y="-14.3" font-family="Times,serif" font-size="14.00">valence_math</text>
+</g>
+<!-- 4 -->
+<g id="node7" class="node">
+<title>4</title>
+<polygon fill="none" stroke="black" points="836,-36 735,-36 735,0 836,0 836,-36"/>
+<text text-anchor="middle" x="785.5" y="-14.3" font-family="Times,serif" font-size="14.00">valence_nbt</text>
+</g>
+<!-- 5 -->
+<g id="node8" class="node">
+<title>5</title>
+<polygon fill="none" stroke="black" points="716.5,-36 602.5,-36 602.5,0 716.5,0 716.5,-36"/>
+<text text-anchor="middle" x="659.5" y="-14.3" font-family="Times,serif" font-size="14.00">valence_ident</text>
+</g>
+<!-- 7 -->
+<g id="node10" class="node">
+<title>7</title>
+<polygon fill="none" stroke="black" points="658.5,-108 508.5,-108 508.5,-72 658.5,-72 658.5,-108"/>
+<text text-anchor="middle" x="583.5" y="-86.3" font-family="Times,serif" font-size="14.00">valence_generated</text>
+</g>
+<!-- 6&#45;&gt;7 -->
+<g id="edge5" class="edge">
+<title>6&#45;&gt;7</title>
+<path fill="none" stroke="black" d="M638.46,-143.7C629.44,-135.05 618.38,-124.45 608.56,-115.03"/>
+<polygon fill="black" stroke="black" points="610.98,-112.5 601.34,-108.1 606.13,-117.55 610.98,-112.5"/>
+</g>
+<!-- 9 -->
+<g id="node11" class="node">
+<title>9</title>
+<polygon fill="none" stroke="black" points="782.5,-108 676.5,-108 676.5,-72 782.5,-72 782.5,-108"/>
+<text text-anchor="middle" x="729.5" y="-86.3" font-family="Times,serif" font-size="14.00">valence_text</text>
+</g>
+<!-- 6&#45;&gt;9 -->
+<g id="edge6" class="edge">
+<title>6&#45;&gt;9</title>
+<path fill="none" stroke="black" d="M674.54,-143.7C683.56,-135.05 694.62,-124.45 704.44,-115.03"/>
+<polygon fill="black" stroke="black" points="706.87,-117.55 711.66,-108.1 702.02,-112.5 706.87,-117.55"/>
+</g>
+<!-- 7&#45;&gt;3 -->
+<g id="edge7" class="edge">
+<title>7&#45;&gt;3</title>
+<path fill="none" stroke="black" d="M569.66,-71.7C563.01,-63.39 554.92,-53.28 547.61,-44.14"/>
+<polygon fill="black" stroke="black" points="550.16,-41.73 541.18,-36.1 544.7,-46.1 550.16,-41.73"/>
+</g>
+<!-- 7&#45;&gt;5 -->
+<g id="edge8" class="edge">
+<title>7&#45;&gt;5</title>
+<path fill="none" stroke="black" d="M602.29,-71.7C611.67,-63.05 623.18,-52.45 633.41,-43.03"/>
+<polygon fill="black" stroke="black" points="635.95,-45.45 640.93,-36.1 631.2,-40.3 635.95,-45.45"/>
+</g>
+<!-- 9&#45;&gt;4 -->
+<g id="edge9" class="edge">
+<title>9&#45;&gt;4</title>
+<path fill="none" stroke="black" d="M743.34,-71.7C749.99,-63.39 758.08,-53.28 765.39,-44.14"/>
+<polygon fill="black" stroke="black" points="768.3,-46.1 771.82,-36.1 762.84,-41.73 768.3,-46.1"/>
+</g>
+<!-- 9&#45;&gt;5 -->
+<g id="edge10" class="edge">
+<title>9&#45;&gt;5</title>
+<path fill="none" stroke="black" d="M712.2,-71.7C703.64,-63.14 693.16,-52.66 683.8,-43.3"/>
+<polygon fill="black" stroke="black" points="686.15,-40.7 676.6,-36.1 681.2,-45.65 686.15,-40.7"/>
+</g>
+<!-- 8 -->
+<g id="node12" class="node">
+<title>8</title>
+<polygon fill="none" stroke="black" points="1090.5,-612 938.5,-612 938.5,-576 1090.5,-576 1090.5,-612"/>
+<text text-anchor="middle" x="1014.5" y="-590.3" font-family="Times,serif" font-size="14.00">valence_build_utils</text>
+</g>
+<!-- 12 -->
+<g id="node13" class="node">
+<title>12</title>
+<polygon fill="none" stroke="black" points="303.5,-468 191.5,-468 191.5,-432 303.5,-432 303.5,-468"/>
+<text text-anchor="middle" x="247.5" y="-446.3" font-family="Times,serif" font-size="14.00">valence_anvil</text>
+</g>
+<!-- 12&#45;&gt;1 -->
+<g id="edge13" class="edge">
+<title>12&#45;&gt;1</title>
+<path fill="none" stroke="black" stroke-dasharray="1,5" d="M303.76,-433.74C306.7,-433.11 309.63,-432.53 312.5,-432 461.28,-404.72 638.03,-389.94 734.62,-383.34"/>
+<polygon fill="black" stroke="black" points="735.11,-386.82 744.85,-382.65 734.64,-379.83 735.11,-386.82"/>
+</g>
+<!-- 13 -->
+<g id="node14" class="node">
+<title>13</title>
+<polygon fill="none" stroke="black" points="461.5,-468 321.5,-468 321.5,-432 461.5,-432 461.5,-468"/>
+<text text-anchor="middle" x="391.5" y="-446.3" font-family="Times,serif" font-size="14.00">valence_boss_bar</text>
+</g>
+<!-- 13&#45;&gt;1 -->
+<g id="edge14" class="edge">
+<title>13&#45;&gt;1</title>
+<path fill="none" stroke="black" d="M461.67,-433.69C464.65,-433.11 467.6,-432.54 470.5,-432 561.2,-415.1 666.33,-399.09 734.51,-389.18"/>
+<polygon fill="black" stroke="black" points="735.31,-392.6 744.7,-387.7 734.31,-385.67 735.31,-392.6"/>
+</g>
+<!-- 14 -->
+<g id="node15" class="node">
+<title>14</title>
+<polygon fill="none" stroke="black" points="625.5,-468 479.5,-468 479.5,-432 625.5,-432 625.5,-468"/>
+<text text-anchor="middle" x="552.5" y="-446.3" font-family="Times,serif" font-size="14.00">valence_inventory</text>
+</g>
+<!-- 14&#45;&gt;1 -->
+<g id="edge15" class="edge">
+<title>14&#45;&gt;1</title>
+<path fill="none" stroke="black" d="M614.31,-431.97C650.71,-421.94 696.9,-409.2 734.88,-398.74"/>
+<polygon fill="black" stroke="black" points="736.14,-402.02 744.85,-395.99 734.28,-395.27 736.14,-402.02"/>
+</g>
+<!-- 15 -->
+<g id="node16" class="node">
+<title>15</title>
+<polygon fill="none" stroke="black" points="1632.5,-396 1524.5,-396 1524.5,-360 1632.5,-360 1632.5,-396"/>
+<text text-anchor="middle" x="1578.5" y="-374.3" font-family="Times,serif" font-size="14.00">valence_lang</text>
+</g>
+<!-- 16 -->
+<g id="node17" class="node">
+<title>16</title>
+<polygon fill="none" stroke="black" points="1646.5,-468 1510.5,-468 1510.5,-432 1646.5,-432 1646.5,-468"/>
+<text text-anchor="middle" x="1578.5" y="-446.3" font-family="Times,serif" font-size="14.00">valence_network</text>
+</g>
+<!-- 16&#45;&gt;1 -->
+<g id="edge16" class="edge">
+<title>16&#45;&gt;1</title>
+<path fill="none" stroke="black" d="M1510.16,-433.39C1507.24,-432.89 1504.34,-432.42 1501.5,-432 1275.61,-398.62 1005.13,-385.65 878.52,-381.14"/>
+<polygon fill="black" stroke="black" points="878.3,-377.63 868.18,-380.78 878.06,-384.63 878.3,-377.63"/>
+</g>
+<!-- 16&#45;&gt;15 -->
+<g id="edge17" class="edge">
+<title>16&#45;&gt;15</title>
+<path fill="none" stroke="black" d="M1578.5,-431.7C1578.5,-423.98 1578.5,-414.71 1578.5,-406.11"/>
+<polygon fill="black" stroke="black" points="1582,-406.1 1578.5,-396.1 1575,-406.1 1582,-406.1"/>
+</g>
+<!-- 17 -->
+<g id="node18" class="node">
+<title>17</title>
+<polygon fill="none" stroke="black" points="795.5,-468 643.5,-468 643.5,-432 795.5,-432 795.5,-468"/>
+<text text-anchor="middle" x="719.5" y="-446.3" font-family="Times,serif" font-size="14.00">valence_player_list</text>
+</g>
+<!-- 17&#45;&gt;1 -->
+<g id="edge18" class="edge">
+<title>17&#45;&gt;1</title>
+<path fill="none" stroke="black" d="M741.01,-431.7C751.96,-422.88 765.45,-412.03 777.32,-402.47"/>
+<polygon fill="black" stroke="black" points="779.64,-405.1 785.24,-396.1 775.26,-399.65 779.64,-405.1"/>
+</g>
+<!-- 18 -->
+<g id="node19" class="node">
+<title>18</title>
+<polygon fill="none" stroke="black" points="971,-468 814,-468 814,-432 971,-432 971,-468"/>
+<text text-anchor="middle" x="892.5" y="-446.3" font-family="Times,serif" font-size="14.00">valence_scoreboard</text>
+</g>
+<!-- 18&#45;&gt;1 -->
+<g id="edge19" class="edge">
+<title>18&#45;&gt;1</title>
+<path fill="none" stroke="black" d="M871.24,-431.7C860.41,-422.88 847.08,-412.03 835.34,-402.47"/>
+<polygon fill="black" stroke="black" points="837.48,-399.7 827.51,-396.1 833.06,-405.13 837.48,-399.7"/>
+</g>
+<!-- 19 -->
+<g id="node20" class="node">
+<title>19</title>
+<polygon fill="none" stroke="black" points="1234,-612 1109,-612 1109,-576 1234,-576 1234,-612"/>
+<text text-anchor="middle" x="1171.5" y="-590.3" font-family="Times,serif" font-size="14.00">valence_spatial</text>
+</g>
+<!-- 20 -->
+<g id="node21" class="node">
+<title>20</title>
+<polygon fill="none" stroke="black" points="1125.5,-468 989.5,-468 989.5,-432 1125.5,-432 1125.5,-468"/>
+<text text-anchor="middle" x="1057.5" y="-446.3" font-family="Times,serif" font-size="14.00">valence_weather</text>
+</g>
+<!-- 20&#45;&gt;1 -->
+<g id="edge20" class="edge">
+<title>20&#45;&gt;1</title>
+<path fill="none" stroke="black" d="M996.42,-431.97C960.59,-421.97 915.14,-409.3 877.69,-398.85"/>
+<polygon fill="black" stroke="black" points="878.43,-395.43 867.85,-396.11 876.55,-402.17 878.43,-395.43"/>
+</g>
+<!-- 21 -->
+<g id="node22" class="node">
+<title>21</title>
+<polygon fill="none" stroke="black" points="1317,-468 1144,-468 1144,-432 1317,-432 1317,-468"/>
+<text text-anchor="middle" x="1230.5" y="-446.3" font-family="Times,serif" font-size="14.00">valence_world_border</text>
+</g>
+<!-- 21&#45;&gt;1 -->
+<g id="edge21" class="edge">
+<title>21&#45;&gt;1</title>
+<path fill="none" stroke="black" d="M1143.9,-433.6C1140.73,-433.06 1137.59,-432.52 1134.5,-432 1046.32,-417.07 944.64,-400.78 878.16,-390.26"/>
+<polygon fill="black" stroke="black" points="878.63,-386.79 868.21,-388.69 877.54,-393.71 878.63,-386.79"/>
+</g>
+<!-- 22 -->
+<g id="node23" class="node">
+<title>22</title>
+<polygon fill="none" stroke="black" points="1492,-468 1335,-468 1335,-432 1492,-432 1492,-468"/>
+<text text-anchor="middle" x="1413.5" y="-446.3" font-family="Times,serif" font-size="14.00">valence_world_time</text>
+</g>
+<!-- 22&#45;&gt;1 -->
+<g id="edge22" class="edge">
+<title>22&#45;&gt;1</title>
+<path fill="none" stroke="black" d="M1334.84,-433.29C1332.03,-432.84 1329.24,-432.41 1326.5,-432 1167.25,-408.38 978.99,-392.04 878.41,-384.24"/>
+<polygon fill="black" stroke="black" points="878.6,-380.74 868.36,-383.47 878.06,-387.72 878.6,-380.74"/>
+</g>
+<!-- 23 -->
+<g id="node24" class="node">
+<title>23</title>
+<polygon fill="none" stroke="black" points="804,-612 677,-612 677,-576 804,-576 804,-612"/>
+<text text-anchor="middle" x="740.5" y="-590.3" font-family="Times,serif" font-size="14.00">dump_schedule</text>
+</g>
+<!-- 24 -->
+<g id="node25" class="node">
+<title>24</title>
+<polygon fill="none" stroke="black" points="841,-540 770,-540 770,-504 841,-504 841,-540"/>
+<text text-anchor="middle" x="805.5" y="-518.3" font-family="Times,serif" font-size="14.00">valence</text>
+</g>
+<!-- 23&#45;&gt;24 -->
+<g id="edge23" class="edge">
+<title>23&#45;&gt;24</title>
+<path fill="none" stroke="black" d="M756.57,-575.7C764.44,-567.22 774.06,-556.86 782.67,-547.58"/>
+<polygon fill="black" stroke="black" points="785.38,-549.81 789.62,-540.1 780.25,-545.05 785.38,-549.81"/>
+</g>
+<!-- 24&#45;&gt;0 -->
+<g id="edge24" class="edge">
+<title>24&#45;&gt;0</title>
+<path fill="none" stroke="black" stroke-dasharray="1,5" d="M769.91,-519.1C675.87,-513.85 412.89,-497.59 183.27,-468.03"/>
+<polygon fill="black" stroke="black" points="183.42,-464.52 173.05,-466.7 182.52,-471.46 183.42,-464.52"/>
+</g>
+<!-- 24&#45;&gt;12 -->
+<g id="edge25" class="edge">
+<title>24&#45;&gt;12</title>
+<path fill="none" stroke="black" stroke-dasharray="1,5" d="M769.97,-519C690.03,-514.11 489.87,-499.69 313.72,-468.07"/>
+<polygon fill="black" stroke="black" points="314.22,-464.61 303.76,-466.26 312.97,-471.49 314.22,-464.61"/>
+</g>
+<!-- 24&#45;&gt;13 -->
+<g id="edge26" class="edge">
+<title>24&#45;&gt;13</title>
+<path fill="none" stroke="black" stroke-dasharray="1,5" d="M769.69,-516C710.03,-507.51 586.3,-489.32 471.67,-468.17"/>
+<polygon fill="black" stroke="black" points="472.14,-464.69 461.67,-466.31 470.86,-471.58 472.14,-464.69"/>
+</g>
+<!-- 24&#45;&gt;14 -->
+<g id="edge27" class="edge">
+<title>24&#45;&gt;14</title>
+<path fill="none" stroke="black" stroke-dasharray="1,5" d="M769.79,-511.12C732.07,-500.68 671.59,-483.95 624,-470.78"/>
+<polygon fill="black" stroke="black" points="624.93,-467.41 614.36,-468.12 623.06,-474.16 624.93,-467.41"/>
+</g>
+<!-- 24&#45;&gt;16 -->
+<g id="edge28" class="edge">
+<title>24&#45;&gt;16</title>
+<path fill="none" stroke="black" stroke-dasharray="1,5" d="M841.19,-520.06C942.83,-517.01 1242.6,-505.4 1500.24,-468.07"/>
+<polygon fill="black" stroke="black" points="1500.77,-471.53 1510.16,-466.61 1499.76,-464.6 1500.77,-471.53"/>
+</g>
+<!-- 24&#45;&gt;17 -->
+<g id="edge29" class="edge">
+<title>24&#45;&gt;17</title>
+<path fill="none" stroke="black" stroke-dasharray="1,5" d="M784.24,-503.7C773.41,-494.88 760.08,-484.03 748.34,-474.47"/>
+<polygon fill="black" stroke="black" points="750.48,-471.7 740.51,-468.1 746.06,-477.13 750.48,-471.7"/>
+</g>
+<!-- 24&#45;&gt;18 -->
+<g id="edge30" class="edge">
+<title>24&#45;&gt;18</title>
+<path fill="none" stroke="black" stroke-dasharray="1,5" d="M827.01,-503.7C837.96,-494.88 851.45,-484.03 863.32,-474.47"/>
+<polygon fill="black" stroke="black" points="865.64,-477.1 871.24,-468.1 861.26,-471.65 865.64,-477.1"/>
+</g>
+<!-- 24&#45;&gt;20 -->
+<g id="edge31" class="edge">
+<title>24&#45;&gt;20</title>
+<path fill="none" stroke="black" stroke-dasharray="1,5" d="M841.07,-511.12C878.56,-500.7 938.63,-484.02 985.99,-470.87"/>
+<polygon fill="black" stroke="black" points="987.19,-474.16 995.88,-468.12 985.31,-467.42 987.19,-474.16"/>
+</g>
+<!-- 24&#45;&gt;21 -->
+<g id="edge32" class="edge">
+<title>24&#45;&gt;21</title>
+<path fill="none" stroke="black" stroke-dasharray="1,5" d="M841.07,-515.46C899.74,-506.27 1020.72,-487.16 1134.02,-468.07"/>
+<polygon fill="black" stroke="black" points="1134.63,-471.51 1143.9,-466.4 1133.46,-464.61 1134.63,-471.51"/>
+</g>
+<!-- 24&#45;&gt;22 -->
+<g id="edge33" class="edge">
+<title>24&#45;&gt;22</title>
+<path fill="none" stroke="black" stroke-dasharray="1,5" d="M841.02,-518.52C923.99,-512.47 1137.16,-495.54 1324.79,-468.18"/>
+<polygon fill="black" stroke="black" points="1325.45,-471.63 1334.84,-466.71 1324.43,-464.7 1325.45,-471.63"/>
+</g>
+<!-- 25 -->
+<g id="node26" class="node">
+<title>25</title>
+<polygon fill="none" stroke="black" points="601,-252 464,-252 464,-216 601,-216 601,-252"/>
+<text text-anchor="middle" x="532.5" y="-230.3" font-family="Times,serif" font-size="14.00">packet_inspector</text>
+</g>
+<!-- 25&#45;&gt;6 -->
+<g id="edge34" class="edge">
+<title>25&#45;&gt;6</title>
+<path fill="none" stroke="black" d="M562.83,-215.88C579.2,-206.64 599.58,-195.13 617.15,-185.21"/>
+<polygon fill="black" stroke="black" points="619.06,-188.15 626.05,-180.19 615.62,-182.06 619.06,-188.15"/>
+</g>
+<!-- 26 -->
+<g id="node27" class="node">
+<title>26</title>
+<polygon fill="none" stroke="black" points="920.5,-612 822.5,-612 822.5,-576 920.5,-576 920.5,-612"/>
+<text text-anchor="middle" x="871.5" y="-590.3" font-family="Times,serif" font-size="14.00">playground</text>
+</g>
+<!-- 26&#45;&gt;24 -->
+<g id="edge35" class="edge">
+<title>26&#45;&gt;24</title>
+<path fill="none" stroke="black" d="M855.19,-575.7C847.19,-567.22 837.43,-556.86 828.68,-547.58"/>
+<polygon fill="black" stroke="black" points="831.03,-544.98 821.63,-540.1 825.94,-549.78 831.03,-544.98"/>
+</g>
+<!-- 27 -->
+<g id="node28" class="node">
+<title>27</title>
+<polygon fill="none" stroke="black" points="694,-252 619,-252 619,-216 694,-216 694,-252"/>
+<text text-anchor="middle" x="656.5" y="-230.3" font-family="Times,serif" font-size="14.00">stresser</text>
+</g>
+<!-- 27&#45;&gt;6 -->
+<g id="edge36" class="edge">
+<title>27&#45;&gt;6</title>
+<path fill="none" stroke="black" d="M656.5,-215.7C656.5,-207.98 656.5,-198.71 656.5,-190.11"/>
+<polygon fill="black" stroke="black" points="660,-190.1 656.5,-180.1 653,-190.1 660,-190.1"/>
+</g>
+</g>
 </svg>

@tachibanayui tachibanayui marked this pull request as ready for review September 17, 2023 15:46
@rj00a rj00a linked an issue Sep 17, 2023 that may be closed by this pull request
3 tasks
@rj00a rj00a self-requested a review September 19, 2023 00:49
@rj00a
Copy link
Member

rj00a commented Sep 30, 2023

#533 is going to change the way layers work, so I'd like to see how that shakes out before committing to this.

Copy link
Contributor

@qualterz qualterz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good for initial implementation.

@qualterz
Copy link
Contributor

qualterz commented Dec 30, 2023

Does something block this pull request from being merged?

}
```

## Advacing the world time
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
## Advacing the world time
## Advancing the world time

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Optional component for Instance used to control time, weather, world border, etc.
3 participants