Rewrite in typescrypt #327
@ -1,3 +1,11 @@
|
|||||||
node_modules/
|
/node_modules/
|
||||||
.git/
|
/.git/
|
||||||
|
/.github/
|
||||||
|
/.vscode/
|
||||||
|
/.devcontainer/
|
||||||
|
/*.md
|
||||||
|
.*ignore
|
||||||
|
.gitpod.y*ml
|
||||||
dist/
|
dist/
|
||||||
|
Dockerfile
|
||||||
|
docker-compose.y*ml
|
2
.github/workflows/publish_docker_main.yml
vendored
2
.github/workflows/publish_docker_main.yml
vendored
@ -43,7 +43,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
push: true
|
push: true
|
||||||
target: server
|
target: bdscore
|
||||||
tags: ${{ env.DOCKERIMAGE }}:latest
|
tags: ${{ env.DOCKERIMAGE }}:latest
|
||||||
platforms: ${{ env.DOCKERPLATFORM }}
|
platforms: ${{ env.DOCKERPLATFORM }}
|
||||||
cache-from: type=gha,scope=${{ github.ref }}_${{ hashFiles('**/package-lock.json') }}
|
cache-from: type=gha,scope=${{ github.ref }}_${{ hashFiles('**/package-lock.json') }}
|
||||||
|
2
.github/workflows/publish_docker_release.yml
vendored
2
.github/workflows/publish_docker_release.yml
vendored
@ -36,7 +36,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
push: true
|
push: true
|
||||||
target: server
|
target: bdscore
|
||||||
tags: ${{ env.DOCKERIMAGE }}:latest
|
tags: ${{ env.DOCKERIMAGE }}:latest
|
||||||
platforms: ${{ env.DOCKERPLATFORM }}
|
platforms: ${{ env.DOCKERPLATFORM }}
|
||||||
cache-from: type=gha,scope=${{ github.ref }}_${{ hashFiles('**/package-lock.json') }}
|
cache-from: type=gha,scope=${{ github.ref }}_${{ hashFiles('**/package-lock.json') }}
|
||||||
|
136
Dockerfile
136
Dockerfile
@ -1,74 +1,98 @@
|
|||||||
FROM debian:latest
|
FROM debian:latest AS nodedowload
|
||||||
LABEL name="Bds Maneger Docker"
|
ENV DEBIAN_FRONTEND="noninteractive"
|
||||||
|
RUN apt update && apt -y install wget tar lsb-release
|
||||||
|
|
||||||
|
# Install latest docker image
|
||||||
|
RUN mkdir /tmp/Node && NODEURL=""; NODEVERSION=$(wget -qO- https://api.github.com/repos/nodejs/node/releases | grep tag_name | cut -d '"' -f 4 | sort -V | tail -n 1) && \
|
||||||
|
case $(uname -m) in \
|
||||||
|
x86_64 ) NODEURL="https://nodejs.org/download/release/$NODEVERSION/node-$NODEVERSION-linux-x64.tar.gz";; \
|
||||||
|
aarch64 ) NODEURL="https://nodejs.org/download/release/$NODEVERSION/node-$NODEVERSION-linux-arm64.tar.gz";; \
|
||||||
|
armv7l ) NODEURL="https://nodejs.org/download/release/$NODEVERSION/node-$NODEVERSION-linux-armv7l.tar.gz";; \
|
||||||
|
ppc64le ) NODEURL="https://nodejs.org/download/release/$NODEVERSION/node-$NODEVERSION-linux-ppc64le.tar.gz";; \
|
||||||
|
s390x ) NODEURL="https://nodejs.org/download/release/$NODEVERSION/node-$NODEVERSION-linux-s390x.tar.gz";; \
|
||||||
|
*) echo "Unsupported architecture ($(uname -m))"; exit 1;; \
|
||||||
|
esac && \
|
||||||
|
echo "Node bin Url: ${NODEURL}"; wget -q "${NODEURL}" -O /tmp/node.tar.gz && \
|
||||||
|
tar xfz /tmp/node.tar.gz -C /tmp/Node && \
|
||||||
|
mkdir /tmp/nodebin && cp -rp /tmp/Node/*/* /tmp/nodebin && ls /tmp/nodebin && rm -rfv /tmp/nodebin/LICENSE /tmp/nodebin/*.md
|
||||||
|
|
||||||
|
FROM debian:latest AS libries
|
||||||
|
ENV DEBIAN_FRONTEND="noninteractive"
|
||||||
|
RUN apt update && apt -y install wget unzip zip
|
||||||
|
RUN mkdir -p /libries; mkdir /libries/lib64; \
|
||||||
|
if [ "$(uname -m)" != "x86_64" ];then \
|
||||||
|
apt install -y qemu-user-static; \
|
||||||
|
wget -q "https://github.com/The-Bds-Maneger/external_files/raw/main/Linux/libs_amd64.zip" -O /tmp/libries.zip; \
|
||||||
|
unzip -o /tmp/libries.zip -d /libries; \
|
||||||
|
rm -rfv /tmp/libries.zip; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
FROM debian:latest AS bdscore
|
||||||
LABEL org.opencontainers.image.title="Bds Maneger Docker"
|
LABEL org.opencontainers.image.title="Bds Maneger Docker"
|
||||||
LABEL org.opencontainers.image.description="Start Minecraft Server with Docker containers and Auto Control Server wirh Bds Maneger Core."
|
LABEL org.opencontainers.image.description="Start Minecraft Server with Docker containers and Auto Control Server wirh Bds Maneger Core."
|
||||||
LABEL org.opencontainers.image.vendor="Sirherobrine23"
|
LABEL org.opencontainers.image.vendor="Sirherobrine23"
|
||||||
LABEL org.opencontainers.image.licenses="MIT"
|
LABEL org.opencontainers.image.licenses="MIT"
|
||||||
LABEL org.opencontainers.image.source="https://github.com/The-Bds-Maneger/Bds-Maneger-Core.git"
|
LABEL org.opencontainers.image.source="https://github.com/The-Bds-Maneger/Bds-Maneger-Core.git"
|
||||||
ENV DEBIAN_FRONTEND="noninteractive"
|
|
||||||
|
|
||||||
# Install Core Packages
|
|
||||||
RUN apt update && apt install -y curl wget unzip zip xz-utils tar procps
|
|
||||||
|
|
||||||
# Install external Libries to another architecture
|
# Install external Libries to another architecture
|
||||||
RUN if [ "$(uname -m)" != "x86_64" ];then \
|
COPY --from=libries /libries/ /
|
||||||
mkdir -p /lib64; \
|
# Install NodeJS and latest NPM
|
||||||
apt install -y qemu-user-static; \
|
COPY --from=nodedowload /tmp/nodebin/ /usr
|
||||||
wget -q "https://github.com/The-Bds-Maneger/external_files/raw/main/Linux/libs_amd64.zip" -O /tmp/libries.zip; \
|
RUN npm -g install npm@latest
|
||||||
unzip -o /tmp/libries.zip -d /; \
|
|
||||||
rm -rfv /tmp/libries.zip; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Install external Libries to ARM64
|
# Install Core Packages
|
||||||
RUN apt install -y ca-certificates make build-essential procps lsb-release xdg-utils g++ libatomic1 libnss3 libatk-bridge2.0-0 gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxrandr2 libxrender1 libxss1 libxtst6 fonts-liberation libnss3 libgbm-dev
|
ENV DEBIAN_FRONTEND="noninteractive"
|
||||||
|
RUN apt update && \
|
||||||
# Install Node.js
|
apt install -y procps ca-certificates procps lsb-release xdg-utils g++ libatomic1 libnss3 \
|
||||||
RUN NODEVERSION=$(wget -qO- https://api.github.com/repos/nodejs/node/releases | grep tag_name | cut -d '"' -f 4 | sort -V | tail -n 1) && \
|
libatk-bridge2.0-0 gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 \
|
||||||
case $(uname -m) in \
|
libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 \
|
||||||
x86_64 ) wget -q "https://nodejs.org/download/release/$NODEVERSION/node-$NODEVERSION-linux-x64.tar.xz" -O /tmp/node.tar.xz;; \
|
libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 \
|
||||||
aarch64 ) wget -q "https://nodejs.org/download/release/$NODEVERSION/node-$NODEVERSION-linux-arm64.tar.xz" -O /tmp/node.tar.xz;; \
|
libxcursor1 libxdamage1 libxext6 libxfixes3 libxrandr2 libxrender1 libxss1 libxtst6 fonts-liberation libnss3 libgbm-dev
|
||||||
armv7l ) wget -q "https://nodejs.org/download/release/$NODEVERSION/node-$NODEVERSION-linux-armv7l.tar.xz" -O /tmp/node.tar.xz;; \
|
|
||||||
ppc64el ) wget -q "https://nodejs.org/download/release/$NODEVERSION/node-$NODEVERSION-linux-ppc64le.tar.xz" -O /tmp/node.tar.xz;; \
|
|
||||||
s390x ) wget -q "https://nodejs.org/download/release/$NODEVERSION/node-$NODEVERSION-linux-s390x.tar.xz" -O /tmp/node.tar.xz;; \
|
|
||||||
*) echo "Unsupported architecture"; exit 1;; \
|
|
||||||
esac && \
|
|
||||||
mkdir /tmp/Node && \
|
|
||||||
tar -xJf /tmp/node.tar.xz -C /tmp/Node && \
|
|
||||||
rm -rf /tmp/node.tar.xz && \
|
|
||||||
cp -rf /tmp/Node/*/* /usr && \
|
|
||||||
rm -rf /tmp/Node && \
|
|
||||||
npm -g install npm@latest
|
|
||||||
|
|
||||||
# Install openjdk
|
# Install openjdk
|
||||||
RUN apt update && \
|
RUN apt update && \
|
||||||
JAVAVERSIONS="$(apt search openjdk|grep '/'|grep "openjdk-"|sed 's|/| |g'|awk '{print $1}'|grep 'jre'|sed -e 's|-jre.*||g'|uniq)";\
|
JAVAVERSIONS="$(apt search openjdk|grep '/'|grep 'openjdk-'|sed 's|/| |g'|awk '{print $1}'|grep 'jre'|sed -e 's|-jre.*||g'|uniq)";\
|
||||||
case $JAVAVERSIONS in \
|
case $JAVAVERSIONS in \
|
||||||
*openjdk-17* ) apt install -y openjdk-17*;; \
|
*17* ) apt install -y openjdk-17*;; \
|
||||||
*openjdk-16* ) apt install -y openjdk-16*;; \
|
*16* ) apt install -y openjdk-16*;; \
|
||||||
*) echo "Unsupported Java Version, avaibles"; echo "$JAVAVERSIONS";exit 0;; \
|
*) echo "Unsupported Java Version, avaibles"; echo "$JAVAVERSIONS";exit 0;; \
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Create Volume to Storage Server And Config
|
# Create Volume to Storage Server
|
||||||
VOLUME [ "/root/bds_core" ]
|
VOLUME [ "/data" ]
|
||||||
|
|
||||||
|
# App Workspace
|
||||||
|
WORKDIR /app
|
||||||
|
ENTRYPOINT [ "node", "--trace-warnings", "/app/dist/cjs/bin/docker.js" ]
|
||||||
|
|
||||||
|
# Ports
|
||||||
|
EXPOSE 3000/tcp
|
||||||
|
EXPOSE 19132/udp
|
||||||
|
EXPOSE 19133/udp
|
||||||
|
EXPOSE 25565/tcp
|
||||||
|
EXPOSE 25566/tcp
|
||||||
|
|
||||||
|
# Default ENVs
|
||||||
|
ENV NODE_ENV="production"
|
||||||
|
ENV SERVER_PATH="/data/server"
|
||||||
|
ENV BACKUP_PATH="/data/backups"
|
||||||
|
ENV LOG_PATH="/data/logs"
|
||||||
|
ENV EXTRA_PATH="/data/extra"
|
||||||
|
|
||||||
|
# Server Settings
|
||||||
|
ENV DESCRIPTION="My Sample Server"
|
||||||
|
ENV WORLD_NAME="My Map"
|
||||||
|
ENV GAMEMODE="survival"
|
||||||
|
ENV DIFFICULTY="normal"
|
||||||
|
ENV MAXPLAYERS="5"
|
||||||
|
ENV REQUIRED_LOGIN="false"
|
||||||
|
ENV ALLOW_COMMADS="false"
|
||||||
|
|
||||||
|
# Bds Core Settings
|
||||||
|
ENV VERSION="latest"
|
||||||
|
ENV PLATFORM="bedrock"
|
||||||
|
|
||||||
# Node packages
|
|
||||||
COPY package*.json ./
|
COPY package*.json ./
|
||||||
RUN npm install && npm run build
|
RUN npm install --production --no-save
|
||||||
|
|
||||||
# Set default ENVs to Bds Core
|
|
||||||
ENV SERVER_VERSION="true" \
|
|
||||||
PLAYERS="5" \
|
|
||||||
WORLD_NAME="The Ultimate Server" \
|
|
||||||
DESCRIPTION="running Minecraft Server on Bds Maneger by Bds Manager Project" \
|
|
||||||
GAMEMODE="survival" \
|
|
||||||
DIFFICULTY="normal" \
|
|
||||||
ENABLE_COMMANDS="false" \
|
|
||||||
ACCOUNT="false" \
|
|
||||||
LEVEL_SEED="" \
|
|
||||||
SERVER="bedrock" \
|
|
||||||
SERVER_VERSION="latest" \
|
|
||||||
NODE_ENV="production"
|
|
||||||
EXPOSE 19132/udp 19133/udp 1932/tcp
|
|
||||||
WORKDIR /opt/backend_core_scripts/
|
|
||||||
ENTRYPOINT [ "sh", "-c", "node bin/BdsManeger.js start -ak -d ${SERVER_VERSION} -p ${SERVER} --players ${PLAYERS} --world-name ${WORLD_NAME} --description ${DESCRIPTION} --gamemode ${GAMEMODE} --difficulty ${DIFFICULTY} --level-seed ${LEVEL_SEED}" ]
|
|
||||||
COPY ./ ./
|
COPY ./ ./
|
||||||
|
RUN npm run build:cjs
|
||||||
|
146
README.md
146
README.md
@ -1,110 +1,100 @@
|
|||||||
# Bds Maneger Core
|
# Bds Maneger Core
|
||||||
|
|
||||||
Bds Maneger Core is a javascript core in Nodejs that manages several types of server seftware for Minecraft Bedrock and Java. Bds Maneger Core has integrated with a REST API with full integration with Bds Maneger Core in addition to CLI and One bot versions for the telegram.
|
This is a small hub to manage various servers for Minecraft Bedrock and for Minecraft Java, such as installing, starting and keeping up to date with the latest version available.
|
||||||
|
|
||||||
Any contribution is welcome, but before a look at [CONTRIBUTING.md](CONTRIBUTING.md), [Bds Manager Core code of conduct](CODE_OF_CONDUCT.md)
|
This module is fully compatible with ESM, CJS and Typescript.
|
||||||
|
|
||||||
## Requirements for Bds Maneger Core
|
## Requirements
|
||||||
|
|
||||||
### All
|
This module requires some requirements to work:
|
||||||
|
|
||||||
* [Nodejs 15.6.0+](https://nodejs.org/en/download/current/)
|
* NodeJS: `^15.x`.
|
||||||
* [OpenJDK 16+](https://www.oracle.com/java/technologies/javase-jdk16-downloads.html)
|
* Java: `^8.0` or OpenJDK: `^16`.
|
||||||
|
|
||||||
### Windows 10+
|
### For Windows Users
|
||||||
|
|
||||||
* [Microsoft Visual Studio C++ (The Bds Maneger Documentation)](<https://docs.bdsmaneger.com/docs/Bds Maneger core/WindowsFixDll/#windows-server>)
|
Minecraft Bedrock needs Visual studio C++ if you are using Windows Server ([More information you can find on the Wiki](<https://github.com/The-Bds-Maneger/Bds-Maneger-Core/wiki/Server-Platforms#minecraft-bedrock-server-alpha>)).
|
||||||
|
|
||||||
## Documentation
|
## CLI
|
||||||
|
|
||||||
We have a separate repository for all Bds Maneger Project documentation, [link here from the main page](<https://docs.bdsmaneger.com/Bds Maneger core>), [Repository link](https://github.com/The-Bds-Maneger/Bds-Manager-Project-Documentation)
|
This module also includes a simple CLI for managing servers. how:
|
||||||
|
|
||||||
## Badges
|
1. Download compatible server versions.
|
||||||
|
2. Update the server.
|
||||||
|
3. Start the server.
|
||||||
|
4. Backup Server.
|
||||||
|
|
||||||
[![Total alerts](https://img.shields.io/lgtm/alerts/g/Bds-Maneger/bds_maneger_api.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/Bds-Maneger/bds_maneger_api/alerts/)
|
## Install
|
||||||
[![Language grade: JavaScript](https://img.shields.io/lgtm/grade/javascript/g/Bds-Maneger/bds_maneger_api.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/Bds-Maneger/bds_maneger_api/context:javascript)
|
|
||||||
[![DeepScan grade](https://deepscan.io/api/teams/13683/projects/16691/branches/363172/badge/grade.svg)](https://deepscan.io/dashboard#view=project&tid=13683&pid=16691&bid=363172)
|
|
||||||
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/d357bef9c4ba4198ab16be64a5adf051)](https://www.codacy.com/gh/The-Bds-Maneger/Bds-Maneger-Core/dashboard?utm_source=github.com&utm_medium=referral&utm_content=The-Bds-Maneger/Bds-Maneger-Core&utm_campaign=Badge_Grade)
|
|
||||||
|
|
||||||
## Start Bds Maneger Core with npx
|
To install CLI: `npm install -g @the-bds-maneger/core` (`Linux user Use sudo or root`).
|
||||||
|
|
||||||
### CLI
|
To Install module: `npm install @the-bds-maneger/core`.
|
||||||
|
|
||||||
All options can be found in the bds maneger core documentation.
|
Run withou install: `npx @the-bds-maneger/core`.
|
||||||
|
|
||||||
`npx @the-bds-maneger/core@latest -sk`
|
## Docker and Docker Compose
|
||||||
|
|
||||||
## Install Bds Maneger Core globally
|
|
||||||
|
|
||||||
The commands available after installation:
|
|
||||||
|
|
||||||
* bds_maneger
|
|
||||||
|
|
||||||
`npm i -g @the-bds-maneger/core@latest`
|
|
||||||
|
|
||||||
## Launch Bds Maneger Core with a docker image
|
|
||||||
|
|
||||||
### Docker Compose
|
### Docker Compose
|
||||||
|
|
||||||
[Docker Compose Install guide](https://docs.docker.com/compose/install/)
|
[Docker Compose releases](<https://github.com/docker/compose/releases/latest>).
|
||||||
|
|
||||||
```yaml
|
* MacOS and Windows docker users is already installed by default in Docker Desktop.
|
||||||
version: "2.1"
|
|
||||||
services:
|
```yml
|
||||||
BdsCore:
|
version: "3.9"
|
||||||
image: ghcr.io/the-bds-maneger/core:latest
|
|
||||||
container_name: BdsCore
|
|
||||||
restart: always
|
|
||||||
network_mode: host
|
|
||||||
environment:
|
|
||||||
DESCRIPTION: running Minecraft Bedrock Server on the docker by Bds Manager
|
|
||||||
WORLD_NAME: Bds Maneger Docker
|
|
||||||
GAMEMODE: survival
|
|
||||||
DIFFICULTY: normal
|
|
||||||
ACCOUNT: "false"
|
|
||||||
PLAYERS: 13
|
|
||||||
SERVER: bedrock
|
|
||||||
ENABLE_COMMANDS: "false"
|
|
||||||
volumes:
|
volumes:
|
||||||
- ./BdsCore:/home/bds/bds_core
|
server_storage:
|
||||||
|
services:
|
||||||
|
bdscore:
|
||||||
|
image: ghcr.io/the-bds-maneger/core:latest
|
||||||
|
volumes:
|
||||||
|
- server_storage:/data
|
||||||
|
environment:
|
||||||
|
# Server Settings
|
||||||
|
DESCRIPTION: "My Sample Server"
|
||||||
|
WORLD_NAME: "My Map"
|
||||||
|
GAMEMODE: "survival"
|
||||||
|
DIFFICULTY: "normal"
|
||||||
|
MAXPLAYERS: "5"
|
||||||
|
REQUIRED_LOGIN: "false"
|
||||||
|
# Bds Core Settings
|
||||||
|
VERSION: "latest"
|
||||||
|
PLATFORM: "bedrock"
|
||||||
|
ports:
|
||||||
|
# Port to API
|
||||||
|
- 3000:3000/tcp
|
||||||
|
# Server Port to bedrock
|
||||||
|
- 19132:19132/udp
|
||||||
|
- 19133:19133/udp
|
||||||
|
# Server Port to java
|
||||||
|
- 25565:25565/tcp
|
||||||
|
- 25565:25565/udp
|
||||||
```
|
```
|
||||||
|
|
||||||
### Windows
|
### Docker
|
||||||
|
|
||||||
```cmd
|
create Docker volume: `docker volume create --driver local --name bds_server_storage`.
|
||||||
docker run --rm -d --name BdsManegerCore -v BdsCore:/home/bds/bds_core ^
|
|
||||||
--restart=always -p 19132:19132/udp -p 19133:19133/udp -p 1932:1932/tcp ^
|
|
||||||
-e DESCRIPTION="running Minecraft Bedrock Server on the docker by Bds Manager" ^
|
|
||||||
-e WORLD_NAME="Bds Maneger Docker" ^
|
|
||||||
-e GAMEMODE="survival" ^
|
|
||||||
-e DIFFICULTY="normal" ^
|
|
||||||
-e ACCOUNT="false" ^
|
|
||||||
-e PLAYERS="13" ^
|
|
||||||
-e SERVER="bedrock" ^
|
|
||||||
-e ENABLE_COMMANDS="false" ^
|
|
||||||
ghcr.io/the-bds-maneger/core:latest
|
|
||||||
```
|
|
||||||
|
|
||||||
### Linux/MacOS
|
run image:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run --rm -d --name BdsManegerCore -v BdsCore/:/home/bds/bds_core \
|
docker run --rm -d \
|
||||||
--restart=always -p 19132:19132/udp -p 19133:19133/udp -p 1932:1932/tcp \
|
--name=bdscore \
|
||||||
-e DESCRIPTION="running Minecraft Bedrock Server on the docker by Bds Manager" \
|
-v bds_server_storage:/data \
|
||||||
-e WORLD_NAME="Bds Maneger Docker" \
|
-p 25565:25565/udp \
|
||||||
|
-p 25565:25565/tcp \
|
||||||
|
-p 19132:19132/udp \
|
||||||
|
-p 19133:19133/udp \
|
||||||
|
-p 3000:3000/tcp \
|
||||||
|
-e DESCRIPTION="My Sample Server" \
|
||||||
|
-e WORLD_NAME="My Map" \
|
||||||
-e GAMEMODE="survival" \
|
-e GAMEMODE="survival" \
|
||||||
-e DIFFICULTY="normal" \
|
-e DIFFICULTY="normal" \
|
||||||
-e ACCOUNT="false" \
|
-e MAXPLAYERS="5" \
|
||||||
-e PLAYERS="13" \
|
-e REQUIRED_LOGIN="false" \
|
||||||
-e SERVER="bedrock" \
|
-e VERSION="latest" \
|
||||||
-e ENABLE_COMMANDS="false" \
|
-e PLATFORM="bedrock" \
|
||||||
ghcr.io/the-bds-maneger/core:latest
|
ghcr.io/the-bds-maneger/core:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
## Azure Container and Azure VM
|
Get log: `docker logs bdscore`.
|
||||||
|
|
||||||
We've separate the repository for azure deploy templates, [go here](https://github.com/The-Bds-Maneger/Azure#azure-deploys) if you want to deploy to azure.
|
|
||||||
|
|
||||||
## Oracle Cloud
|
|
||||||
|
|
||||||
soon!
|
|
||||||
|
@ -19,7 +19,6 @@ services:
|
|||||||
BDS_VERSION: "latest"
|
BDS_VERSION: "latest"
|
||||||
SERVER: "bedrock"
|
SERVER: "bedrock"
|
||||||
ports:
|
ports:
|
||||||
- 1932:3000/tcp
|
|
||||||
- 3000:3000/tcp
|
- 3000:3000/tcp
|
||||||
- 19132:19132/udp
|
- 19132:19132/udp
|
||||||
- 19133:19133/udp
|
- 19133:19133/udp
|
8
package-lock.json
generated
8
package-lock.json
generated
@ -22,7 +22,6 @@
|
|||||||
"express": "^4.17.3",
|
"express": "^4.17.3",
|
||||||
"prismarine-nbt": "^2.2.1",
|
"prismarine-nbt": "^2.2.1",
|
||||||
"properties-to-json": "^0.2.1",
|
"properties-to-json": "^0.2.1",
|
||||||
"typescript": "^4.6.2",
|
|
||||||
"yargs": "^17.4.0"
|
"yargs": "^17.4.0"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
@ -34,7 +33,8 @@
|
|||||||
"@types/express": "^4.17.13",
|
"@types/express": "^4.17.13",
|
||||||
"@types/node": "^17.0.22",
|
"@types/node": "^17.0.22",
|
||||||
"@types/yargs": "^17.0.10",
|
"@types/yargs": "^17.0.10",
|
||||||
"npm-run-all": "^4.1.5"
|
"npm-run-all": "^4.1.5",
|
||||||
|
"typescript": "^4.6.3"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=15.6.0"
|
"node": ">=15.6.0"
|
||||||
@ -1786,6 +1786,7 @@
|
|||||||
"version": "4.6.3",
|
"version": "4.6.3",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz",
|
||||||
"integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==",
|
"integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==",
|
||||||
|
"dev": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"tsc": "bin/tsc",
|
"tsc": "bin/tsc",
|
||||||
"tsserver": "bin/tsserver"
|
"tsserver": "bin/tsserver"
|
||||||
@ -3260,7 +3261,8 @@
|
|||||||
"typescript": {
|
"typescript": {
|
||||||
"version": "4.6.3",
|
"version": "4.6.3",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz",
|
||||||
"integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw=="
|
"integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"unbox-primitive": {
|
"unbox-primitive": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
|
18
package.json
18
package.json
@ -6,8 +6,8 @@
|
|||||||
},
|
},
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"description": "A very simple way to manage Minecraft servers",
|
"description": "A very simple way to manage Minecraft servers",
|
||||||
"main": "dist/index.js",
|
"main": "dist/cjs/index.js",
|
||||||
"types": "src/index.ts",
|
"types": "dist/cjs/index.d.ts",
|
||||||
"exports": {
|
"exports": {
|
||||||
"require": "./dist/src/index.js",
|
"require": "./dist/src/index.js",
|
||||||
"import": "./dist/esm/index.js"
|
"import": "./dist/esm/index.js"
|
||||||
@ -18,20 +18,21 @@
|
|||||||
"build:esm": "tsc --module es2020 --outDir dist/esm"
|
"build:esm": "tsc --module es2020 --outDir dist/esm"
|
||||||
},
|
},
|
||||||
"nodemonConfig": {
|
"nodemonConfig": {
|
||||||
|
"delay": 2500,
|
||||||
|
"ext": "json,js,ts",
|
||||||
"ignore": [
|
"ignore": [
|
||||||
"test/*"
|
"test/*"
|
||||||
],
|
],
|
||||||
"delay": 2500,
|
|
||||||
"watch": [
|
"watch": [
|
||||||
"src",
|
"src",
|
||||||
"bin",
|
"bin",
|
||||||
"package.json",
|
"package.json",
|
||||||
"package-lock.json"
|
"package-lock.json"
|
||||||
],
|
],
|
||||||
"exec": "npm run build:cjs && node --trace-warnings ./dist/cjs/index.js start --Develop"
|
"exec": "npm run build:cjs && node --trace-warnings ./dist/cjs/bin/index.js start --Develop"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"bds_maneger": "dist/cjs/index.js"
|
"bds_maneger": "dist/cjs/bin/index.js"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -45,7 +46,8 @@
|
|||||||
"java",
|
"java",
|
||||||
"pocketmine",
|
"pocketmine",
|
||||||
"server_mode",
|
"server_mode",
|
||||||
"rest"
|
"rest",
|
||||||
|
"typescript"
|
||||||
],
|
],
|
||||||
"author": "Sirherobrine23",
|
"author": "Sirherobrine23",
|
||||||
"license": "AGPL-3.0-or-later",
|
"license": "AGPL-3.0-or-later",
|
||||||
@ -70,7 +72,6 @@
|
|||||||
"express": "^4.17.3",
|
"express": "^4.17.3",
|
||||||
"prismarine-nbt": "^2.2.1",
|
"prismarine-nbt": "^2.2.1",
|
||||||
"properties-to-json": "^0.2.1",
|
"properties-to-json": "^0.2.1",
|
||||||
"typescript": "^4.6.2",
|
|
||||||
"yargs": "^17.4.0"
|
"yargs": "^17.4.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@ -79,6 +80,7 @@
|
|||||||
"@types/express": "^4.17.13",
|
"@types/express": "^4.17.13",
|
||||||
"@types/node": "^17.0.22",
|
"@types/node": "^17.0.22",
|
||||||
"@types/yargs": "^17.0.10",
|
"@types/yargs": "^17.0.10",
|
||||||
"npm-run-all": "^4.1.5"
|
"npm-run-all": "^4.1.5",
|
||||||
|
"typescript": "^4.6.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@ function ensureFileSync(pathFile: string){
|
|||||||
let serverPath = null;
|
let serverPath = null;
|
||||||
let worldName = null;
|
let worldName = null;
|
||||||
|
|
||||||
const providedServerPath = path.resolve(process.env.SERVERPATH||path.join(os.homedir(), "bds_core/servers"), "bedrock");
|
const providedServerPath = path.resolve(process.env.SERVER_PATH||path.join(os.homedir(), "bds_core/servers"), "bedrock");
|
||||||
const addonPath = path.resolve(providedServerPath, "../BDS-Addons/");
|
const addonPath = path.resolve(providedServerPath, "../BDS-Addons/");
|
||||||
if (!(fs.existsSync(addonPath))) fs.mkdirSync(addonPath, {recursive: true});
|
if (!(fs.existsSync(addonPath))) fs.mkdirSync(addonPath, {recursive: true});
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ const requiredFiles = ["behavior_packs", "resource_packs", "valid_known_packs.js
|
|||||||
* Prepares to install addons for the provided Bedrock Dedicated Server.
|
* Prepares to install addons for the provided Bedrock Dedicated Server.
|
||||||
*/
|
*/
|
||||||
export function addonInstaller() {
|
export function addonInstaller() {
|
||||||
// const providedServerPath = path.resolve(process.env.SERVERPATH||path.join(os.homedir(), "bds_core/servers"), "bedrock");
|
// const providedServerPath = path.resolve(process.env.SERVER_PATH||path.join(os.homedir(), "bds_core/servers"), "bedrock");
|
||||||
// Validate server path (path is provided, path is valid, path contains required files)
|
// Validate server path (path is provided, path is valid, path contains required files)
|
||||||
if (!providedServerPath) throw new Error("You must provide a server path for BDSAddonInstaller");
|
if (!providedServerPath) throw new Error("You must provide a server path for BDSAddonInstaller");
|
||||||
if (!fs.existsSync(providedServerPath)) throw new Error("The provided server path does not exist.\n" + providedServerPath);
|
if (!fs.existsSync(providedServerPath)) throw new Error("The provided server path does not exist.\n" + providedServerPath);
|
||||||
|
@ -5,11 +5,10 @@ import AdmZip from "adm-zip";
|
|||||||
|
|
||||||
export default CreateBackup;
|
export default CreateBackup;
|
||||||
export async function CreateBackup(Platform: "bedrock"|"java"|"pocketmine"|"spigot"|"dragonfly") {
|
export async function CreateBackup(Platform: "bedrock"|"java"|"pocketmine"|"spigot"|"dragonfly") {
|
||||||
const ServerPath = path.resolve(process.env.SERVERPATH||path.join(os.homedir(), "bds_core/servers"), Platform);
|
const ServerPath = path.resolve(process.env.SERVER_PATH||path.join(os.homedir(), "bds_core/servers"), Platform);
|
||||||
const BackupPath = path.resolve(process.env.BACKUPPATH||path.join(os.homedir(), "bds_core/backups"));
|
const BackupPath = path.resolve(process.env.BACKUP_PATH||path.join(os.homedir(), "bds_core/backups"));
|
||||||
if (!(fs.existsSync(ServerPath))) throw new Error("Server no Installed or path not found");
|
if (!(fs.existsSync(ServerPath))) throw new Error("Server no Installed or path not found");
|
||||||
if (!(fs.existsSync(BackupPath))) fs.mkdirSync(BackupPath, {recursive: true});
|
if (!(fs.existsSync(BackupPath))) fs.mkdirSync(BackupPath, {recursive: true});
|
||||||
const BackupFile = path.resolve(BackupPath, `${Platform}_${new Date().toISOString().replace(/:/g, "-")}.zip`);
|
|
||||||
const Backup = new AdmZip();
|
const Backup = new AdmZip();
|
||||||
if (Platform === "bedrock") {
|
if (Platform === "bedrock") {
|
||||||
if (fs.existsSync(path.join(ServerPath, "worlds"))) Backup.addLocalFolder(path.join(ServerPath, "worlds"));
|
if (fs.existsSync(path.join(ServerPath, "worlds"))) Backup.addLocalFolder(path.join(ServerPath, "worlds"));
|
||||||
@ -17,7 +16,8 @@ export async function CreateBackup(Platform: "bedrock"|"java"|"pocketmine"|"spig
|
|||||||
if (fs.existsSync(path.join(ServerPath, "permissions.json"))) Backup.addLocalFile(path.join(ServerPath, "permissions.json"));
|
if (fs.existsSync(path.join(ServerPath, "permissions.json"))) Backup.addLocalFile(path.join(ServerPath, "permissions.json"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const BackupFile = path.resolve(BackupPath, `${Platform}_${new Date().toString().replace(/[-\(\)\:\s+]/gi, "_")}.zip`);
|
||||||
const zipBuffer = Backup.toBuffer();
|
const zipBuffer = Backup.toBuffer();
|
||||||
fs.writeFileSync(BackupFile, zipBuffer);
|
fs.writeFileSync(BackupFile, zipBuffer);
|
||||||
return zipBuffer;
|
return {zipBuffer, BackupFile};
|
||||||
}
|
}
|
28
src/bin/docker.ts
Normal file
28
src/bin/docker.ts
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import * as BdsCore from "../index";
|
||||||
|
import * as BdsTypes from "../globalType";
|
||||||
|
|
||||||
|
const {
|
||||||
|
VERSION = "latest",
|
||||||
|
PLATFORM = "bedrock",
|
||||||
|
DESCRIPTION = "My Sample Server",
|
||||||
|
WORLD_NAME = "My Map",
|
||||||
|
GAMEMODE = "survival",
|
||||||
|
DIFFICULTY = "normal",
|
||||||
|
MAXPLAYERS = "5",
|
||||||
|
REQUIRED_LOGIN = "false",
|
||||||
|
ALLOW_COMMADS = "false",
|
||||||
|
} = process.env;
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
if (VERSION === "latest") {
|
||||||
|
await BdsCore.DownloadServer.DownloadServer(PLATFORM as BdsTypes.Platform, true);
|
||||||
|
} else if (VERSION !== "latest") {
|
||||||
|
await BdsCore.DownloadServer.DownloadServer(PLATFORM as BdsTypes.Platform, VERSION);
|
||||||
|
} else {
|
||||||
|
console.log("Invalid Version");
|
||||||
|
}
|
||||||
|
const Server = await BdsCore.Server.Start(PLATFORM as BdsTypes.Platform);
|
||||||
|
Server.on("all", data => process.stdout.write(data));
|
||||||
|
Server.exit(process.exit);
|
||||||
|
|
||||||
|
})();
|
@ -31,7 +31,7 @@ async function InstallPHP(PathToInstall: string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function DownloadServer(Platform: bdsTypes.Platform, Version: string|boolean) {
|
export async function DownloadServer(Platform: bdsTypes.Platform, Version: string|boolean) {
|
||||||
const ServerPath = path.resolve(process.env.SERVERPATH||path.join(os.homedir(), "bds_core/servers"), Platform);
|
const ServerPath = path.resolve(process.env.SERVER_PATH||path.join(os.homedir(), "bds_core/servers"), Platform);
|
||||||
const versions = await getVersions()
|
const versions = await getVersions()
|
||||||
const info = versions.platform.filter(v => v.name === Platform).find(v => v.version === (typeof Version === "boolean"?versions.latest[Platform]:Version));
|
const info = versions.platform.filter(v => v.name === Platform).find(v => v.version === (typeof Version === "boolean"?versions.latest[Platform]:Version));
|
||||||
if (Platform === "bedrock") {
|
if (Platform === "bedrock") {
|
||||||
@ -43,6 +43,7 @@ export async function DownloadServer(Platform: bdsTypes.Platform, Version: strin
|
|||||||
const JavaPath = path.resolve(ServerPath);
|
const JavaPath = path.resolve(ServerPath);
|
||||||
if (!(await fs.existsSync(JavaPath))) fs.mkdirSync(JavaPath, {recursive: true});
|
if (!(await fs.existsSync(JavaPath))) fs.mkdirSync(JavaPath, {recursive: true});
|
||||||
await fs.promises.writeFile(path.resolve(JavaPath, "Server.jar"), await getBuffer(String(info.data)));
|
await fs.promises.writeFile(path.resolve(JavaPath, "Server.jar"), await getBuffer(String(info.data)));
|
||||||
|
await fs.promises.writeFile(path.resolve(JavaPath, "eula.txt"), "eula=true");
|
||||||
} else if (Platform === "spigot") {
|
} else if (Platform === "spigot") {
|
||||||
const SpigotPath = path.resolve(ServerPath);
|
const SpigotPath = path.resolve(ServerPath);
|
||||||
if (!(await fs.existsSync(SpigotPath))) fs.mkdirSync(SpigotPath, {recursive: true});
|
if (!(await fs.existsSync(SpigotPath))) fs.mkdirSync(SpigotPath, {recursive: true});
|
||||||
|
@ -2,6 +2,7 @@ import * as Server from "./server";
|
|||||||
import * as Backup from "./backup";
|
import * as Backup from "./backup";
|
||||||
import * as DownloadServer from "./download_server";
|
import * as DownloadServer from "./download_server";
|
||||||
import * as API from "./api";
|
import * as API from "./api";
|
||||||
|
import * as serverConfig from "./serverConfig";
|
||||||
|
|
||||||
export default {Server, Backup, DownloadServer, API};
|
export default {Server, Backup, DownloadServer, API, serverConfig};
|
||||||
export {Server, Backup, DownloadServer, API};
|
export {Server, Backup, DownloadServer, API, serverConfig};
|
@ -34,7 +34,7 @@ export function getSessions() {return Sessions;}
|
|||||||
|
|
||||||
// Start Server
|
// Start Server
|
||||||
export async function Start(Platform: bdsTypes.Platform): Promise<BdsSession> {
|
export async function Start(Platform: bdsTypes.Platform): Promise<BdsSession> {
|
||||||
const ServerPath = path.resolve(process.env.SERVERPATH||path.join(os.homedir(), "bds_core/servers"), Platform);
|
const ServerPath = path.resolve(process.env.SERVER_PATH||path.join(os.homedir(), "bds_core/servers"), Platform);
|
||||||
if (!(fs.existsSync(ServerPath))) fs.mkdirSync(ServerPath, {recursive: true});
|
if (!(fs.existsSync(ServerPath))) fs.mkdirSync(ServerPath, {recursive: true});
|
||||||
const Process: {command: string; args: Array<string>; env: {[env: string]: string}; cwd: string;} = {
|
const Process: {command: string; args: Array<string>; env: {[env: string]: string}; cwd: string;} = {
|
||||||
command: "",
|
command: "",
|
||||||
@ -156,7 +156,12 @@ export async function Start(Platform: bdsTypes.Platform): Promise<BdsSession> {
|
|||||||
},
|
},
|
||||||
creteBackup: (crontime: string|Date) => {
|
creteBackup: (crontime: string|Date) => {
|
||||||
const cronJob = new node_cron.CronJob(crontime, async () => {
|
const cronJob = new node_cron.CronJob(crontime, async () => {
|
||||||
bdsBackup.CreateBackup(Platform);
|
if (Platform === "bedrock") {
|
||||||
|
execCommand("save hold");
|
||||||
|
execCommand("save query");
|
||||||
|
}
|
||||||
|
await bdsBackup.CreateBackup(Platform);
|
||||||
|
if (Platform === "bedrock") execCommand("save resume");
|
||||||
});
|
});
|
||||||
cronJob.start();
|
cronJob.start();
|
||||||
return;
|
return;
|
||||||
@ -175,9 +180,10 @@ export async function Start(Platform: bdsTypes.Platform): Promise<BdsSession> {
|
|||||||
const bedrockConfig = await serverConfig.parseConfig(Platform);
|
const bedrockConfig = await serverConfig.parseConfig(Platform);
|
||||||
Seesion.seed = bedrockConfig.nbt.parsed.value.RandomSeed.value.toString();
|
Seesion.seed = bedrockConfig.nbt.parsed.value.RandomSeed.value.toString();
|
||||||
}
|
}
|
||||||
const logFile = path.resolve(ServerPath, `../log/${Seesion.id}.log`);
|
const logFile = path.resolve(process.env.LOG_PATH||path.resolve(ServerPath, "../log"), `${Platform}_${Seesion.id}.log`);
|
||||||
if(!(fs.existsSync(path.parse(logFile).dir))) fs.mkdirSync(path.parse(logFile).dir, {recursive: true});
|
if(!(fs.existsSync(path.parse(logFile).dir))) fs.mkdirSync(path.parse(logFile).dir, {recursive: true});
|
||||||
const logStream = fs.createWriteStream(logFile, {flags: "w+"});
|
const logStream = fs.createWriteStream(logFile, {flags: "w+"});
|
||||||
|
logStream.write(`[${StartDate.toISOString()}] Server started\n\n`);
|
||||||
onLog("all", data => logStream.write(data));
|
onLog("all", data => logStream.write(data));
|
||||||
Sessions[Seesion.id] = Seesion;
|
Sessions[Seesion.id] = Seesion;
|
||||||
return Seesion;
|
return Seesion;
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import crypto from "crypto";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import os from "os";
|
import os from "os";
|
||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
@ -5,10 +6,10 @@ import * as prismarineNbt from "prismarine-nbt";
|
|||||||
import properties_to_json from "properties-to-json";
|
import properties_to_json from "properties-to-json";
|
||||||
import * as bdsType from "./globalType";
|
import * as bdsType from "./globalType";
|
||||||
|
|
||||||
type BdsConfigGet = {
|
export type BdsConfigGet = {
|
||||||
world: string;
|
world: string;
|
||||||
description: string;
|
description: string;
|
||||||
gamemode: string;
|
gamemode: "survival"|"creative"|"adventure"|"spectator";
|
||||||
difficulty: "peaceful"|"easy"|"normal"|"hard";
|
difficulty: "peaceful"|"easy"|"normal"|"hard";
|
||||||
players: number;
|
players: number;
|
||||||
whitelist: true|false;
|
whitelist: true|false;
|
||||||
@ -22,7 +23,7 @@ type BdsConfigGet = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function parseConfig(Platform: bdsType.Platform): Promise<BdsConfigGet> {
|
export async function parseConfig(Platform: bdsType.Platform): Promise<BdsConfigGet> {
|
||||||
const serverPath = path.resolve(process.env.SERVERPATH||path.join(os.homedir(), "bds_core/servers"), Platform);
|
const serverPath = path.resolve(process.env.SERVER_PATH||path.join(os.homedir(), "bds_core/servers"), Platform);
|
||||||
if (Platform === "bedrock") {
|
if (Platform === "bedrock") {
|
||||||
const bedrockConfigPath = path.join(serverPath, "server.properties");
|
const bedrockConfigPath = path.join(serverPath, "server.properties");
|
||||||
if (!(fs.existsSync(bedrockConfigPath))) throw new Error("Bedrock server config not found");
|
if (!(fs.existsSync(bedrockConfigPath))) throw new Error("Bedrock server config not found");
|
||||||
@ -42,3 +43,121 @@ export async function parseConfig(Platform: bdsType.Platform): Promise<BdsConfig
|
|||||||
}
|
}
|
||||||
throw new Error("Platform not supported");
|
throw new Error("Platform not supported");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type BdsConfigSet = {
|
||||||
|
world: string;
|
||||||
|
seed?: string;
|
||||||
|
description: string;
|
||||||
|
gamemode: "survival"|"creative"|"adventure"|"hardcore";
|
||||||
|
difficulty: "peaceful"|"easy"|"normal"|"hard";
|
||||||
|
players: number;
|
||||||
|
whitelist: true|false;
|
||||||
|
require_login: true|false;
|
||||||
|
cheats_command: true|false;
|
||||||
|
portv4: number;
|
||||||
|
portv6: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function createConfig(Platform: bdsType.Platform, config: BdsConfigSet): Promise<void> {
|
||||||
|
const serverPath = path.resolve(process.env.SERVER_PATH||path.join(os.homedir(), "bds_core/servers"), Platform);
|
||||||
|
if (Platform === "bedrock") {
|
||||||
|
const bedrockConfigArray = [
|
||||||
|
"view-distance=32",
|
||||||
|
"tick-distance=4",
|
||||||
|
"player-idle-timeout=0",
|
||||||
|
"max-threads=8",
|
||||||
|
"default-player-permission-level=member",
|
||||||
|
"texturepack-required=true",
|
||||||
|
"content-log-file-enabled=false",
|
||||||
|
"compression-threshold=1",
|
||||||
|
"server-authoritative-movement=server-auth",
|
||||||
|
"player-movement-score-threshold=20",
|
||||||
|
"player-movement-action-direction-threshold=0.85",
|
||||||
|
"player-movement-distance-threshold=0.3",
|
||||||
|
"player-movement-duration-threshold-in-ms=500",
|
||||||
|
"correct-player-movement=false",
|
||||||
|
"server-authoritative-block-breaking=false",
|
||||||
|
"force-gamemode=false",
|
||||||
|
];
|
||||||
|
bedrockConfigArray.push(`level-name=${config.world}`);
|
||||||
|
if (config.seed) bedrockConfigArray.push(`level-seed=${config.seed}`);
|
||||||
|
else bedrockConfigArray.push("level-seed=");
|
||||||
|
bedrockConfigArray.push(`server-name=${config.description}`);
|
||||||
|
bedrockConfigArray.push(`gamemode=${config.gamemode}`);
|
||||||
|
bedrockConfigArray.push(`difficulty=${config.difficulty}`);
|
||||||
|
bedrockConfigArray.push(`allow-cheats=${config.cheats_command}`);
|
||||||
|
bedrockConfigArray.push(`max-players=${config.players}`);
|
||||||
|
bedrockConfigArray.push(`online-mode=${config.require_login}`);
|
||||||
|
bedrockConfigArray.push(`allow-list=${config.whitelist}`);
|
||||||
|
bedrockConfigArray.push(`server-port=${config.portv4}`);
|
||||||
|
bedrockConfigArray.push(`server-portv6=${config.portv6}`);
|
||||||
|
const bedrockConfig = bedrockConfigArray.join("\n");
|
||||||
|
fs.writeFileSync(path.join(serverPath, "server.properties"), bedrockConfig);
|
||||||
|
return;
|
||||||
|
} else if (Platform === "java") {
|
||||||
|
const javaConfigArray = [
|
||||||
|
"query.port=65551",
|
||||||
|
"enable-jmx-monitoring=false",
|
||||||
|
"enable-query=true",
|
||||||
|
"generator-settings=",
|
||||||
|
"generate-structures=true",
|
||||||
|
"network-compression-threshold=256",
|
||||||
|
"max-tick-time=60000",
|
||||||
|
"use-native-transport=true",
|
||||||
|
"enable-status=true",
|
||||||
|
"allow-flight=false",
|
||||||
|
"view-distance=32",
|
||||||
|
"max-build-height=256",
|
||||||
|
"server-ip=",
|
||||||
|
"sync-chunk-writes=true",
|
||||||
|
"prevent-proxy-connections=false",
|
||||||
|
"resource-pack=",
|
||||||
|
"entity-broadcast-range-percentage=100",
|
||||||
|
"player-idle-timeout=0",
|
||||||
|
"force-gamemode=false",
|
||||||
|
"rate-limit=0",
|
||||||
|
"broadcast-console-to-ops=true",
|
||||||
|
"spawn-npcs=true",
|
||||||
|
"spawn-animals=true",
|
||||||
|
"snooper-enabled=true",
|
||||||
|
"function-permission-level=2",
|
||||||
|
"text-filtering-config=",
|
||||||
|
"spawn-monsters=true",
|
||||||
|
"enforce-whitelist=false",
|
||||||
|
"resource-pack-sha1=",
|
||||||
|
"spawn-protection=16",
|
||||||
|
"max-world-size=29999984",
|
||||||
|
"require-resource-pack=true",
|
||||||
|
"resource-pack-prompt=",
|
||||||
|
"hide-online-players=false",
|
||||||
|
"simulation-distance=10",
|
||||||
|
"enable-rcon=false",
|
||||||
|
`rcon.password=${crypto.randomBytes(6).toString("hex")}`,
|
||||||
|
"rcon.port=25575",
|
||||||
|
"broadcast-rcon-to-ops=true"
|
||||||
|
];
|
||||||
|
javaConfigArray.push(`level-name=${config.world}`);
|
||||||
|
javaConfigArray.push(`motd=${config.description}`);
|
||||||
|
if (config.gamemode === "hardcore") {
|
||||||
|
javaConfigArray.push("gamemode=survival");
|
||||||
|
javaConfigArray.push("hardcore=true");
|
||||||
|
} else {
|
||||||
|
javaConfigArray.push(`gamemode=${config.gamemode}`);
|
||||||
|
javaConfigArray.push(`hardcore=false`);
|
||||||
|
}
|
||||||
|
javaConfigArray.push(`difficulty=${config.difficulty}`);
|
||||||
|
if (config.seed) javaConfigArray.push(`level-seed=${config.seed}`);
|
||||||
|
else javaConfigArray.push("level-seed=");
|
||||||
|
javaConfigArray.push(`enable-command-block=${config.cheats_command}`);
|
||||||
|
javaConfigArray.push(`max-players=${config.players}`);
|
||||||
|
javaConfigArray.push(`online-mode=${config.require_login}`);
|
||||||
|
javaConfigArray.push(`white-list=${config.whitelist}`);
|
||||||
|
javaConfigArray.push(`server-port=${config.portv4}`);
|
||||||
|
javaConfigArray.push("level-type=default");
|
||||||
|
javaConfigArray.push("op-permission-level=4");
|
||||||
|
javaConfigArray.push("pvp=true");
|
||||||
|
javaConfigArray.push("allow-nether=true");
|
||||||
|
await fs.promises.writeFile(path.join(serverPath, "server.properties"), javaConfigArray.join("\n"));
|
||||||
|
} else if (Platform === "pocketmine") {}
|
||||||
|
throw new Error("Platform not supported");
|
||||||
|
}
|
Reference in New Issue
Block a user