classicborne
v0.1.1
Published
General purpose Minecraft Classic server.
Maintainers
Readme
classicborne
A general purpose* Minecraft Classic server with CPE support.
import { BaseUniverse } from "classicborne/class/server/BaseUniverse.mjs"
const myUniverse = new BaseUniverse({
port: 25565,
postToMainServer: true,
})
// flush changes on all levels every 60 seconds
setInterval(() => {
myUniverse.levels.forEach(async (level) => {
level = await level
if (level.changeRecord) level.changeRecord.flushChanges()
})
}, 60000)Extend it by subclassing base classes.
import { BaseLevel } from "classicborne/class/level/BaseLevel.mjs"
import { BasePlayer } from "classicborne/class/player/BasePlayer.mjs"
import { BaseUniverse } from "classicborne/class/server/BaseUniverse.mjs"
class MyLevel extends BaseLevel {
/** */
constructor(...args) {
super(...args)
this.positionEventListeners = new Map()
this.on("playerRemoved", async (player) => {
const positionEventListener = this.positionEventListeners.get(player)
player.client.removeListener("position", positionEventListener)
})
this.on("playerAdded", async (player) => {
const onPosition = (position) => {
console.log(position)
}
player.client.on("position", onPosition)
this.positionEventListeners.set(player, onPosition)
})
}
static async teleportPlayer(player) {
if (super.teleportPlayer(player) === false) return
MyLevel.loadIntoUniverse(player.universe, "my-level").then(async (level) => {
level.addPlayer(player, [60, 8, 4], [162, 254])
})
}
}
class MyPlayer extends BasePlayer {
/** */
async initialize(...args) {
const authenticated = await super.initialize(...args)
if (!authenticated) return
this.universe.addPlayer(this)
MyLevel.teleportPlayer(this)
}
}
class MyUniverse extends BaseUniverse {
static playerClass = MyPlayer
}
new MyUniverse({
port: 25565,
postToMainServer: false,
})Features
- Support for Classic Protocol Extension (CPE).
- Multiple level management.
- Per-client entity ID assignment.
- Novel level data persistence.
- It's just undoable history in a compact format.
- Block changes and command issues are only recorded.
- Optional caching of "keyframes" when restoring from changes alone takes long.
- Each change can be undone.
- Basic "Watchdog" client monitor.
Projects using classicborne
See the GitHub topic for more.
