mirror of
https://github.com/MrMasrozYTLIVE/MCServer.git
synced 2024-11-21 20:38:23 -05:00
Did some minor changes. Added ChatColor class. Made PacketMapChunk way faster by pregenerating example chunk instead of generating it on each 'writeData()' call. I'll most likely will do some more changes soon? Or i'll forget about it for 5 months again eh.
This commit is contained in:
parent
251b016169
commit
7bfc95e0bb
@ -2,7 +2,6 @@ import { PacketManager } from "./utils/PacketManager";
|
|||||||
import {PlayerManager} from "./utils/PlayerManager";
|
import {PlayerManager} from "./utils/PlayerManager";
|
||||||
import {Server} from "node:net"; // TODO: Replace with https://bun.sh/docs/api/tcp
|
import {Server} from "node:net"; // TODO: Replace with https://bun.sh/docs/api/tcp
|
||||||
import {PacketDisconnectKick} from "./packet/impl/player/PacketDisconnectKick";
|
import {PacketDisconnectKick} from "./packet/impl/player/PacketDisconnectKick";
|
||||||
import {Player} from "./Player";
|
|
||||||
|
|
||||||
export class MinecraftServer {
|
export class MinecraftServer {
|
||||||
public server: Server = new Server();
|
public server: Server = new Server();
|
||||||
@ -10,6 +9,7 @@ export class MinecraftServer {
|
|||||||
|
|
||||||
public static PlayerManagers = new Map<String, PlayerManager>();
|
public static PlayerManagers = new Map<String, PlayerManager>();
|
||||||
// EntityMap = new Map<Number, IEntity>();
|
// EntityMap = new Map<Number, IEntity>();
|
||||||
|
public static MAX_PLAYERS = 20;
|
||||||
|
|
||||||
public async start() {
|
public async start() {
|
||||||
this.server.listen(25565, async () => {
|
this.server.listen(25565, async () => {
|
||||||
|
@ -12,7 +12,7 @@ export class Player extends Entity {
|
|||||||
|
|
||||||
public xPosition: number = 0;
|
public xPosition: number = 0;
|
||||||
public prevXPosition: number = this.xPosition;
|
public prevXPosition: number = this.xPosition;
|
||||||
public yPosition: number = 100;
|
public yPosition: number = 140;
|
||||||
public prevYPosition: number = this.yPosition;
|
public prevYPosition: number = this.yPosition;
|
||||||
public zPosition: number = 0;
|
public zPosition: number = 0;
|
||||||
public prevZPosition: number = this.zPosition;
|
public prevZPosition: number = this.zPosition;
|
||||||
|
@ -9,6 +9,8 @@ import {PacketPreChunk} from "../world/PacketPreChunk";
|
|||||||
import {PacketMapChunk} from "../world/PacketMapChunk";
|
import {PacketMapChunk} from "../world/PacketMapChunk";
|
||||||
import {PacketPosition} from "../player/PacketPosition";
|
import {PacketPosition} from "../player/PacketPosition";
|
||||||
import {PacketPositionLook} from "../player/PacketPositionLook";
|
import {PacketPositionLook} from "../player/PacketPositionLook";
|
||||||
|
import {MinecraftServer} from "../../../MinecraftServer";
|
||||||
|
import {ChatColor} from "../../../utils/ChatColor";
|
||||||
|
|
||||||
export class PacketLogin extends Packet {
|
export class PacketLogin extends Packet {
|
||||||
constructor() {
|
constructor() {
|
||||||
@ -19,15 +21,17 @@ export class PacketLogin extends Packet {
|
|||||||
|
|
||||||
readData(reader: IReader, player: Player) {
|
readData(reader: IReader, player: Player) {
|
||||||
const protocol = reader.readInt();
|
const protocol = reader.readInt();
|
||||||
if(protocol > 14) player.playerManager.kickPlayer(`Server is outdated!`);
|
if(protocol > 14) return player.playerManager.kickPlayer(`Server is outdated!`);
|
||||||
else if (protocol < 14) player.playerManager.kickPlayer(`Client is outdated!`);
|
else if (protocol < 14) return player.playerManager.kickPlayer(`Client is outdated!`);
|
||||||
|
|
||||||
|
if(MinecraftServer.PlayerManagers.size > MinecraftServer.MAX_PLAYERS) return player.playerManager.kickPlayer(`Server is full!`);
|
||||||
|
|
||||||
const username = reader.readString16();
|
const username = reader.readString16();
|
||||||
const seed = reader.readLong();
|
const seed = reader.readLong();
|
||||||
const dimension = reader.readByte();
|
const dimension = reader.readByte();
|
||||||
player.playerManager.sendPacket(this);
|
player.playerManager.sendPacket(this);
|
||||||
player.playerManager.sendPacket(new PacketPositionLook());
|
player.playerManager.sendPacket(new PacketPositionLook());
|
||||||
PlayerManager.sendPacketToAll(new PacketChat(`§e<${username}> has joined the game.`));
|
PlayerManager.sendPacketToAll(new PacketChat(`${ChatColor.YELLOW}<${username}> has joined the game.`));
|
||||||
|
|
||||||
player.playerManager.sendPacket(new PacketPreChunk());
|
player.playerManager.sendPacket(new PacketPreChunk());
|
||||||
player.playerManager.sendPacket(new PacketMapChunk());
|
player.playerManager.sendPacket(new PacketMapChunk());
|
||||||
|
@ -3,6 +3,7 @@ import {PacketEnum} from "../../../utils/PacketEnum";
|
|||||||
import {createWriter, Endian, IReader} from "bufferstuff";
|
import {createWriter, Endian, IReader} from "bufferstuff";
|
||||||
import {Player} from "../../../Player";
|
import {Player} from "../../../Player";
|
||||||
import {PlayerManager} from "../../../utils/PlayerManager";
|
import {PlayerManager} from "../../../utils/PlayerManager";
|
||||||
|
import {MinecraftServer} from "../../../MinecraftServer";
|
||||||
|
|
||||||
export class PacketServerList extends Packet {
|
export class PacketServerList extends Packet {
|
||||||
constructor() {
|
constructor() {
|
||||||
@ -12,7 +13,7 @@ export class PacketServerList extends Packet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
readData(reader: IReader, player: Player) {
|
readData(reader: IReader, player: Player) {
|
||||||
player.playerManager.kickPlayer(`Beta 1.7.3 Server§0§0`);
|
player.playerManager.kickPlayer(`Beta 1.7.3 Server§${MinecraftServer.PlayerManagers.size}§${MinecraftServer.MAX_PLAYERS}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
writeData() {
|
writeData() {
|
||||||
|
@ -6,30 +6,32 @@ import {deflate} from "node:zlib";
|
|||||||
import * as zlib from "zlib";
|
import * as zlib from "zlib";
|
||||||
|
|
||||||
export class PacketMapChunk extends Packet {
|
export class PacketMapChunk extends Packet {
|
||||||
|
public world: Buffer;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super({
|
super({
|
||||||
packetID: PacketEnum.MapChunk
|
packetID: PacketEnum.MapChunk
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const chunk = createWriter(Endian.BE);
|
||||||
|
|
||||||
|
for(let x = 0; x < 256; x++) {
|
||||||
|
for(let i = 0; i < 90; i++) {
|
||||||
|
chunk.writeByte(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(let i = 0; i < 38; i++) {
|
||||||
|
chunk.writeByte(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.world = zlib.deflateSync(chunk.toBuffer());
|
||||||
}
|
}
|
||||||
|
|
||||||
readData(reader: IReader, player: Player) {
|
readData(reader: IReader, player: Player) {
|
||||||
}
|
}
|
||||||
|
|
||||||
writeData() {
|
writeData() {
|
||||||
const world = createWriter(Endian.BE);
|
|
||||||
|
|
||||||
for(let x = 0; x < 256; x++) {
|
|
||||||
for(let i = 0; i < 10; i++) {
|
|
||||||
world.writeByte(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(let i = 0; i < 118; i++) {
|
|
||||||
world.writeByte(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const buf = zlib.deflateSync(world.toBuffer());
|
|
||||||
|
|
||||||
return createWriter(Endian.BE).writeUByte(this.options.packetID)
|
return createWriter(Endian.BE).writeUByte(this.options.packetID)
|
||||||
.writeInt(0)
|
.writeInt(0)
|
||||||
.writeShort(0)
|
.writeShort(0)
|
||||||
@ -37,8 +39,8 @@ export class PacketMapChunk extends Packet {
|
|||||||
.writeByte(15)
|
.writeByte(15)
|
||||||
.writeByte(127)
|
.writeByte(127)
|
||||||
.writeByte(15)
|
.writeByte(15)
|
||||||
.writeInt(buf.length)
|
.writeInt(this.world.length)
|
||||||
.writeBuffer(buf)
|
.writeBuffer(this.world)
|
||||||
.toBuffer();
|
.toBuffer();
|
||||||
}
|
}
|
||||||
}
|
}
|
18
src/utils/ChatColor.ts
Normal file
18
src/utils/ChatColor.ts
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
export class ChatColor {
|
||||||
|
public static DARK_RED: string = "§4";
|
||||||
|
public static RED: string = "§c";
|
||||||
|
public static GOLD: string = "§6";
|
||||||
|
public static YELLOW: string = "§e";
|
||||||
|
public static DARK_GREEN: string = "§2";
|
||||||
|
public static GREEN: string = "§a";
|
||||||
|
public static AQUA: string = "§b";
|
||||||
|
public static DARK_AQUA: string = "§3";
|
||||||
|
public static DARK_BLUE: string = "§1";
|
||||||
|
public static BLUE: string = "§9";
|
||||||
|
public static LIGHT_PURPLE: string = "§d";
|
||||||
|
public static DARK_PURPLE: string = "§5";
|
||||||
|
public static WHITE: string = "§f";
|
||||||
|
public static GRAY: string = "§7";
|
||||||
|
public static DARK_GRAY: string = "§8";
|
||||||
|
public static BLACK: string = "§0";
|
||||||
|
}
|
@ -8,6 +8,7 @@ import {PacketManager} from "./PacketManager";
|
|||||||
import {MinecraftServer} from "../MinecraftServer";
|
import {MinecraftServer} from "../MinecraftServer";
|
||||||
import {PacketEnum} from "./PacketEnum";
|
import {PacketEnum} from "./PacketEnum";
|
||||||
import {PacketHandshake} from "../packet/impl/login/PacketHandshake";
|
import {PacketHandshake} from "../packet/impl/login/PacketHandshake";
|
||||||
|
import {ChatColor} from "./ChatColor";
|
||||||
|
|
||||||
export class PlayerManager {
|
export class PlayerManager {
|
||||||
public player: Player;
|
public player: Player;
|
||||||
@ -71,7 +72,7 @@ export class PlayerManager {
|
|||||||
if(MinecraftServer.debug) console.log(`Player ${this.username} left. Deleting from the map!`);
|
if(MinecraftServer.debug) console.log(`Player ${this.username} left. Deleting from the map!`);
|
||||||
MinecraftServer.PlayerManagers.delete(this.username);
|
MinecraftServer.PlayerManagers.delete(this.username);
|
||||||
|
|
||||||
PlayerManager.sendPacketToAll(new PacketChat(`§e<${this.username}> left the game.`));
|
PlayerManager.sendPacketToAll(new PacketChat(`${ChatColor.YELLOW}<${this.username}> left the game.`));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static getPlayer(username: String) {
|
public static getPlayer(username: String) {
|
||||||
|
Loading…
Reference in New Issue
Block a user