Technik
Eigene DJ-Titel
Einfacher seit 06.11.2026 (E163):
.ogg-Dateien inconfig/schuetzenfest/lieder/legen oder in der Web-Konsole unter Einstellungen → Lieder hochladen. Der Server liest Name und Länge selbst, verteilt die Dateien an alle Spieler und das Pult legt sie ohne Neustart auf. Anleitung im Wiki unter „Festabend → Eigene Lieder“, Technik unten unter „Lieder-Ordner“. Der Weg hier mit Ressourcenpaket bleibt als Alternative.
Stand 03.11.2026, Entscheidung E91. Das DJ-Pult legt nach Zeltpolka, Schunkelwalzer und Zeltrock bis zu acht eigene Titel auf. Die Musik kommt aus einem Ressourcenpaket; die Mod selbst liefert dafür keine Musik (CLAUDE.md: keine geschützte Musik einbauen). Was du in dein Paket legst, verantwortest du selbst.
So geht's
- Ressourcenpaket anlegen, z. B.
resourcepacks/Meine DJ-Titel/mit einerpack.mcmeta. Die Formatnummer muss zu deiner Minecraft-Version passen; am einfachsten kopierst du diepack.mcmetaaus einem Paket, das in deinem Spiel schon ohne Warnung läuft. - Lieder als
.oggablegen unterassets/schuetzenfest/sounds/dj/, z. B.assets/schuetzenfest/sounds/dj/zeltgaudi.ogg. - Format Ogg Vorbis. Umwandeln geht z. B. mitffmpeg -i lied.mp3 -ac 1 -c:a libvorbis -q:a 5 zeltgaudi.ogg. - Mono (-ac 1), sonst wird die Musik nicht mit dem Abstand leiser und klingt überall gleich laut. assets/schuetzenfest/sounds.jsonim Paket anlegen. Sie ergänzt die Sounds der Mod, ersetzt sie aber nicht:
json
{
"dj.eigener_titel.1": {
"sounds": [{ "name": "schuetzenfest:dj/zeltgaudi", "stream": true }]
},
"dj.eigener_titel.2": {
"sounds": [{ "name": "schuetzenfest:dj/rausschmeisser", "stream": true }]
}
}
"stream": true ist für lange Stücke wichtig. Es gibt die Plätze dj.eigener_titel.1 bis dj.eigener_titel.8.
4. Name und Länge eintragen in config/schuetzenfest/festabend.json (im Einzelspieler im Spielordner, auf einem Server beim Server):
json
"eigene_titel": [
{ "nummer": 1, "name": "Zeltgaudi", "sekunden": 214 },
{ "nummer": 2, "name": "Rausschmeißer", "sekunden": 187 }
]
Der Server kennt die Musikdatei nicht. Er braucht die Länge, damit er weiß, wann der Titel von vorn beginnt. Fehlt sekunden, gelten 180. Fehlt nummer, zählt die Position in der Liste.
5. Paket aktivieren (Optionen → Ressourcenpakete) und Welt bzw. Server neu starten, damit die Config gelesen wird.
Am Pult kommen die Titel in der Reihenfolge der Liste nach den eingebauten Stücken dran. Nach dem letzten Titel geht das Pult aus.
Auf einem Server
Die Config liegt beim Server, das Paket braucht jeder Spieler. Am einfachsten gibst du es als Server-Ressourcenpaket aus (resource-pack in server.properties). Wer das Paket nicht hat, hört bei einem eigenen Titel nichts, der Rest der Feier mit Licht und Stimmung läuft aber weiter.
Wie es funktioniert
- Der Server spielt den Titel am Pult und an bis zu vier Lautsprechern im Zelt, alle mit demselben Start. Lautstärke 3, also bis etwa 48 Blöcke hörbar; ein Ressourcenpaket kann mit
attenuation_distanceeine andere Reichweite setzen. - Wer später ins Zelt kommt, bekommt den laufenden Titel nachgereicht. Er hört ihn dann von Anfang an, nicht an derselben Stelle wie die anderen.
- Am Ende kommt der nächste Titel der Liste (seit E163; vorher begann der Titel von vorn).
- Weiterschalten, Ausschalten, Ehrentanz, Zapfenstreich und das letzte Lied stoppen den Titel bei allen Zuhörern.
- Legt jemand über Simple Voice Chat auf (E84), pausiert auch ein eigener Titel.
- Das Licht bleibt bei 120 Schlägen pro Minute. Das Tempo des eigenen Lieds kennt der Server nicht.
Technik
- Sound-Events:
DjTitelSounds, registriert alsschuetzenfest:dj.eigener_titel.1–8. In dersounds.jsonder Mod haben sie leere Listen und einen Untertitel. - Config:
EigenerTitel(Nummer, Name, Sekunden) inFestabendConfig.Einstellungen.eigeneTitel. - Ablauf:
Feiern.titelStarten,eigenenSpielen,nachreichen(schicktClientboundSoundPacketan jeden Spieler einmal je Titel) undeigenenStoppen(ClientboundStopSoundPacket). - Das Pult speichert die Titelnummer im Blockstate
titel(0–10). Wird die Config gekürzt, spielt ein Pult mit zu hoher Nummer den ersten Titel. - Tests:
EigenerTitelTest(Config lesen), GametestdjPultLegtEigeneTitelAuf.
Lieder-Ordner (E163)
- Server:
festabend.lieder.EigeneLiederliestconfig/schuetzenfest/lieder/*.ogg(sortiert nach Dateiname, höchstens 40 Lieder à 40 MB) im Hintergrund ein und prüft alle 10 Sekunden Name, Größe und Änderungszeit der Dateien. Länge, Kanäle und Abtastrate liestOggInfoaus dem Ogg-Kopf und der Granule-Position der letzten Seite. Kennung ist die SHA-1 der Datei. - Verteilung:
LiederPakete.Liste(beim Betreten und nach jeder Änderung), der Client fragt Fehlendes mitAnfragean, der Server schickt es in Teilen zu 32 KiB (4 je Tick und Spieler) und nur Lieder aus seiner Liste. Der Client prüft die SHA-1 und legt die Datei inschuetzenfest/lieder-cache/im Spielordner; nach 60 Tagen ohne Nutzung räumt er sie weg. Im Einzelspieler liest er direkt aus dem Lieder-Ordner. - Wiedergabe: Sound-Event
schuetzenfest:eigene_lieder/<sha1>(nicht registriert, im Paket als direkter Holder). Die Client-MixinsSoundManagerMixinundSoundBufferLibraryMixinlösen es zur Datei im Cache auf;MonoStrommischt Stereo zu Mono, damit OpenAL die Musik mit dem Abstand leiser macht. - Das Pult zählt bis zu 53 Titel im Blockzustand (
DjPultBlock.MAX_TITEL). Läuft ein Titel zu Ende, kommt der nächste der ganzen Liste (vorher wiederholte ein eigener Titel sich endlos). - Web-Konsole: Bereich „Lieder“ (
/api/e/lieder, Rechtliederfür Admin und Festwart) lädt Dateien bis 300 MB hoch und löscht. Ogg Vorbis kommt direkt in den Ordner, alles andere nachlieder/eingang/; dort wandelt der Dienstlieder-umwandler(alpine + ffmpeg,server/docker-compose.yml) alle 5 Sekunden in Ogg Vorbis q4 um (höchstens 30 Minuten). Unlesbares landet ineingang/fehler/. - Tests:
EigeneLiederTestmit einer kleinen Testdatei (src/test/resources/lieder/03_Test_Lied.ogg, Sinuston).
Lieder an Fahrgeschäften (E166)
- Kirmes-Menü (
/schuetzenfest kirmesmenue [fahrgeschaeft], Einstellungen → Reiter „Kirmes-Menü“), Reiter „Musik“: links die Fahrgeschäft-Arten ausKirmesMusik.STUECKE, rechts alle Lieder zum Anhaken, ▶ hört nur lokal probe. Unten „Alle“, „Keine“, „Der Reihe nach/Zufällig“ und „Eigenes Stück an/aus“ (das eingebaute Stück spielt dann 90 s zwischen den Liedern). Ein Lied darf mehreren Arten gehören. Ohne angehakte Lieder bleibt das eigene Stück. - Speicher:
config/schuetzenfest/kirmesmusik.json, eine Liste je Art für den ganzen Server (Nils' Wahl „Je Art“), übersteht eine neue Welt. Ändern dürfen Rechte-Stufe 2 und im Einzelspieler der Besitzer; der Server prüft Art und Lieder (KirmesMusikServer.setzen) und schickt allenKirmesMusikPakete.Stand(Lieder mit Namen und Länge, Listen, Uhrzeit des Servers), auch wenn sich der Lieder-Ordner ändert. - Wiedergabe:
KirmesListen.spurrechnet aus Uhrzeit des Servers, Liste und Liedlängen, welches Lied an welcher Stelle läuft; Zufall mischt je Durchgang mit festem Startwert, also auf allen Rechnern gleich.KirmesMusikClientspielt es mit Hörweite und Lautstärke des Fahrgeschäfts überFahrmusikKlang(vorgespult wie die Lautsprecher-Spuren) und wechselt bei Liedende. Fehlt ein Lied auf dem Rechner noch, spielt solange das eigene Stück. Es bleibt bei höchstens 4 Fahrgeschäft-Spuren gleichzeitig, das Budget des Raumklangs (PR #459) wird nicht berührt. - Tests:
KirmesListenTest.
Noch offen
- [T] Im Spiel nicht angehört. Ungeprüft ist, ob der Client Sound-Events mit leerer Liste in der Mod und Einträgen aus dem Paket ohne Warnung zusammenführt. So arbeitet Minecraft eigentlich, wenn
replacenicht gesetzt ist. - Keine Einstellung im Menü. Die Titel stehen nur in
festabend.json. - [T] Lieder-Ordner: Wiedergabe über die Mixins, Download und Stereo→Mono im Spiel noch nicht angehört.
- Lieder-Ordner gilt nur fürs DJ-Pult; die Liveband spielt weiter ihre eigenen Lieder.
