This commit is contained in:
David Allemang
2026-05-08 09:58:01 -04:00
committed by David Allemang
parent b5f8b03503
commit 3f637373f5
29 changed files with 318 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
*.pdf
site
.idea/

12
content/bulk.typ Normal file
View File

@@ -0,0 +1,12 @@
#import "/docs.typ": docs-page, note, tip, warn
#show: docs-page.with(
route: "/bulk/",
title: [Bulk Transport],
)
= Tileable Receivers
= Interleaved vs Sequential Channels
= Chained vs Shared Reference
= Broadcast and Multicast

12
content/channels.typ Normal file
View File

@@ -0,0 +1,12 @@
#import "/docs.typ": docs-page, note, tip, warn
#show: docs-page.with(
route: "/channels/",
title: [Channels],
)
= Static Channel Allocation
= Dynamic Channel Selectors
= Looped Connections

11
content/core.typ Normal file
View File

@@ -0,0 +1,11 @@
#import "/docs.typ": docs-page, note, tip, warn
#show: docs-page.with(
route: "/core/",
title: [Core Mechanics],
)
= Entity IDs
= Stationary Item Optimization
= Observable Drop Delay

17
content/design.typ Normal file
View File

@@ -0,0 +1,17 @@
#import "/docs.typ": docs-page, note, tip, warn
#show: docs-page.with(
route: "/design/",
title: [Design Considerations],
)
= Tilesets
== Binary vs Lexicographic
= Block Event Delay
= Synchronization
== Daylight Detector
== Geyser
== Ender Pearl
== Synchronization Protocols
= Settling time
= Horizontal vs Vertical Arrangement

12
content/interference.typ Normal file
View File

@@ -0,0 +1,12 @@
#import "/docs.typ": docs-page, note, tip, warn
#show: docs-page.with(
route: "/interference/",
title: [Interference],
)
= Entity Spawns
= Single-Player (before 26.2) <singleplayer>
= Mixed Diode Interference
= Lazy chunks
= Reloading Chunks

14
content/network.typ Normal file
View File

@@ -0,0 +1,14 @@
#import "/docs.typ": docs-page, note, tip, warn
#show: docs-page.with(
route: "/network/",
title: [Network Protocols],
)
= Collision Prevention
== Checkbit
== Queue
= Load Balancing
= Private Channels
= Self Syncing Protocol

14
content/transport.typ Normal file
View File

@@ -0,0 +1,14 @@
#import "/docs.typ": docs-page, note, tip, warn
#show: docs-page.with(
route: "/transport/",
title: [Transport Protocols],
)
= Mod 4 Binary
= Mod 2 Binary
= Mod 4 Quaternary
= Transceivers
= Logical Operations
= Transport Protocol Catalog

31
docs.typ Normal file
View File

@@ -0,0 +1,31 @@
#import "/static/index.typ": stylesheets
#let docs-page(title: none, route: none, content) = {
document(
route + "index.html",
title: title,
html.html({
html.head({
html.meta(charset: "utf-8")
html.meta(name: "viewport", content: "width=device-width, initial-scale=1")
html.meta(name: "color-scheme", content: "dark light")
for stylesheet in stylesheets {
html.link(rel: "stylesheet", href: stylesheet)
}
html.title(context title)
})
html.body({
html.header({
html.h1(context title)
})
html.main(content)
})
}),
)
}
#let callout(kind: str, body) = html.div(class: "callout " + kind, body)
#let note = callout.with(kind: "note")
#let warn = callout.with(kind: "caution")
#let tip = callout.with(kind: "tip")

40
index.typ Normal file
View File

@@ -0,0 +1,40 @@
#import "/docs.typ": docs-page, note, tip, warn
#show: docs-page.with(
route: "/",
title: [The Wireless Masterclass],
)
Welcome! Here, we will talk about Entity ID based wireless redstone for Minecraft Java Edition.
#warn[
Until version 26.2, this only works on multiplayer servers. \
Starting with version 26.2, singleplayer is also supported. See @singleplayer for details.
]
#context {
list(
..query(document).map(
it => {
link(it.location(), it.title)
list(..query(heading.where(level: 1).within(it.location())).map(it => link(it.location(), it.body)))
},
),
)
// for page in query(title) { page }
// outline(target: selector.or(heading))
// repr(query(selector(heading).within(locate(doc.location()))))
//for item in query(selector.or(heading.where(depth < 2), title)) {
//str(item.body)
//}
}
// #outline(title: none, depth: 2)
= Objectives
== Use Cases
== Advantages and Limitations

12
main.typ Normal file
View File

@@ -0,0 +1,12 @@
#set heading(numbering: "1.")
#include "static/index.typ"
#include "index.typ"
#include "content/core.typ"
#include "content/interference.typ"
#include "content/design.typ"
#include "content/channels.typ"
#include "content/transport.typ"
#include "content/bulk.typ"
#include "content/network.typ"

6
mise.toml Normal file
View File

@@ -0,0 +1,6 @@
[tools]
tinymist = "latest"
typst = "0.15.0"
[tasks.watch]
run = "typst watch main.typ site --format bundle --features bundle,html"

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

42
static/index.typ Normal file
View File

@@ -0,0 +1,42 @@
#let fonts = (
(src: "/font/Minecraft-Seven_v2.woff2", name: "Mojangles", style: "normal", weight: 400),
(src: "/font/LibertinusKeyboard-Regular.woff2", name: "Libertinus Keyboard", style: "normal", weight: 400),
(src: "/font/LibertinusMath-Regular.woff2", name: "Libertinus Math", style: "normal", weight: 400),
(src: "/font/LibertinusMono-Regular.woff2", name: "Libertinus Mono", style: "normal", weight: 400),
(src: "/font/LibertinusSans-Bold.woff2", name: "Libertinus Sans", style: "normal", weight: 700),
(src: "/font/LibertinusSans-Italic.woff2", name: "Libertinus Sans", style: "italic", weight: 400),
(src: "/font/LibertinusSans-Regular.woff2", name: "Libertinus Sans", style: "normal", weight: 400),
(src: "/font/LibertinusSerif-Bold.woff2", name: "Libertinus Serif", style: "normal", weight: 700),
(src: "/font/LibertinusSerif-BoldItalic.woff2", name: "Libertinus Serif", style: "italic", weight: 700),
(src: "/font/LibertinusSerif-Italic.woff2", name: "Libertinus Serif", style: "italic", weight: 400),
(src: "/font/LibertinusSerif-Regular.woff2", name: "Libertinus Serif", style: "normal", weight: 400),
(src: "/font/LibertinusSerif-Semibold.woff2", name: "Libertinus Serif", style: "normal", weight: 600),
(src: "/font/LibertinusSerif-SemiboldItalic.woff2", name: "Libertinus Serif", style: "italic", weight: 600),
(src: "/font/LibertinusSerifDisplay-Regular.woff2", name: "Libertinus Display", style: "normal", weight: 400),
(src: "/font/LibertinusSerifInitials-Regular.woff2", name: "Libertinus Initials", style: "normal", weight: 400),
)
#asset(
"font.css",
fonts
.map(it => {
"@font-face{"
"font-family:" + repr(it.name) + ";"
"font-style:" + str(it.style) + ";"
"font-weight:" + str(it.weight) + ";"
"src: url(" + repr(it.src) + ");"
"}"
})
.join(" "),
)
#asset("./style.css", read("style.css", encoding: none))
#for font in fonts {
asset(font.src, read("." + font.src, encoding: none))
}
#let stylesheets = (
"/font.css",
"/style.css",
)

92
static/style.css Normal file
View File

@@ -0,0 +1,92 @@
html {
font-family: "Libertinus Serif", serif;
font-size: 18pt;
line-height: 1.5em;
}
h1, h2, h3, h4, h5, h6 {
font-family: "Mojangles", "monospace";
}
code {
font-family: "Libertinus Mono", monospace;
}
math {
font-family: "Libertinus Math", math;
}
main, header, footer {
max-width: 80ch;
margin-inline: auto;
}
li > * {
margin-block: 0;
}
.callout {
display: block;
margin-inline: -2ch;
padding-inline: 2ch;
padding-block: 1ch;
border-radius: 4pt;
border-width: 1pt;
border-style: solid;
color: var(--mode-color);
border-color: rgba(from var(--mode-color) r g b);
background-color: rgba(from var(--mode-color) r g b / 5%);
}
.callout::before {
content: var(--mode-name);
padding-inline-end: 1ch;
font-family: "Mojangles", "monospace";
display: inline-block;
float: left;
}
.callout > p:first-child {
display: inline;
}
.note {
--mode-name: "Note";
}
.caution {
--mode-name: "Caution";
}
.tip {
--mode-name: "Tip";
}
@media (prefers-color-scheme: dark) {
.note {
--mode-color: cyan;
}
.caution {
--mode-color: coral;
}
.tip {
--mode-color: springgreen;
}
}
@media (prefers-color-scheme: light) {
.note {
--mode-color: blue;
}
.caution {
--mode-color: orangered;
}
.tip {
--mode-color: seagreen;
}
}