revive project

- now using docker
- single world only
This commit is contained in:
Kim, Jimin 2025-04-14 14:19:29 +09:00
parent ebe71cf741
commit a7d5b829f1
Signed by: pomp
GPG key ID: D3932F82A0667A3B
17 changed files with 91 additions and 310 deletions

18
.gitignore vendored
View file

@ -1,16 +1,4 @@
/_/
/master/*
/modules/
/plugins/
/secret/*
/servers/*
/test/
cache/
logs/
/waterfall-*.jar
*.log*
!.gitkeep
config.yml
modules.yml
/data/
mods.txt
whitelist.json

3
.vscode/extensions.json vendored Normal file
View file

@ -0,0 +1,3 @@
{
"recommendations": ["esbenp.prettier-vscode"]
}

26
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,26 @@
{
"editor.formatOnSave": true,
"[markdown]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[yaml]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"cSpell.words": [
"AIKAR",
"essentialsx",
"healthcheck",
"itzg",
"LPMC",
"maintenancemode",
"MODRINTH",
"pompydev"
]
}

View file

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2021 developomp
Copyright (c) 2021 pompydev
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View file

@ -1,88 +1,16 @@
# [LPMC](https://github.com/developomp/LPMC)
# LPMC
> **THIS PROJECT IS A WORK IN PROGRESS**
- seed: `-4172144997902289642` (2b2t seed)
[![LICENSE: MIT](https://img.shields.io/badge/License-MIT-green?style=for-the-badge)](./LICENSE)
[![SHELL FORMATTER: SHFMT](https://img.shields.io/badge/shell_formatter-shfmt-darkgrey?style=for-the-badge)](https://github.com/mvdan/sh)
[![MARKDOWN & YML FORMATTER: PRETTIER](https://img.shields.io/badge/markdown_&_yml_formatter-pretiier-ff69b4?style=for-the-badge)](https://github.com/prettier/prettier)
# Tools
## Updating
| Usage | URL |
| ------------------: | :--------------------------------------------------------------------- |
| Editing chunks | https://github.com/Amulet-Team/Amulet-Map-Editor |
| Editing NBT files | https://marketplace.visualstudio.com/items?itemName=Misodee.vscode-nbt |
| 3D model extraction | https://github.com/erich666/Mineways |
| World inspection | https://github.com/toolbox4minecraft/amidst |
> **THIS IS NOT A SETUP INSTRUCTION.**
## Sister projects
- version: 1.17.1
- seed: `-4172144997902289642` for all worlds (yeah it's 2b2t seed)
- platform: ubuntu 20.04 on ARM processor and username set to ubuntu.
- working directory is project root (`/home/ubuntu/LPMC`).
- scripts are executed with user permission and **NOT** with root permission.
- worlds should already exist in the [servers](./servers) directory.
### 1. Download waterfall
1. [Download](https://papermc.io/downloads#Waterfall) the latest version of waterfall. (latest version as of writing: 451)
2. Put it in project root (no need to rename it)
### 2. Download paper
1. [Download](https://papermc.io/downloads#Paper-1.17) the latest version of paper version 1.17.1. (latest version as of writing: 353)
2. Put it in the [`master`](./master) directory.
### 3. Download plugins
- Put them in the [`master`](./master) directory.
| Plugin | Documentation |
| --------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------- |
| [EssentialsX](https://dev.bukkit.org/projects/essentialsx/files) | [Documentation](https://essentialsx.net/wiki/Home.html) |
| [DiscordSRV](https://dev.bukkit.org/projects/discordsrv/files) | [Documentation](https://docs.discordsrv.com) |
| [Core Protect](https://dev.bukkit.org/projects/coreprotect/files) | [Documentation](https://docs.coreprotect.net) |
| [World Guard](https://dev.bukkit.org/projects/worldguard/files) | [Documentation](https://worldguard.enginehub.org/en/latest) |
| [World Edit](https://dev.bukkit.org/projects/worldedit/files) | [Documentation](https://worldedit.enginehub.org/en/latest) |
| [Holographic Displays](https://dev.bukkit.org/projects/holographic-displays/files) | [Documentation](https://filoghost.me/docs/holographic-displays) |
| [Illegal Stack](https://www.spigotmc.org/resources/dupe-fixes-illegal-stack-remover.44411) | [Documentation](https://github.com/dniym/IllegalStack/wiki) |
| [Skin Restorer](https://www.spigotmc.org/resources/skinsrestorer.2124) | [Documentation](https://github.com/SkinsRestorer/SkinsRestorerX/wiki) |
| [Stack Mob](https://www.spigotmc.org/resources/stackmob-enhance-your-servers-performance-without-the-sacrifice.29999) | |
## Commands & Scripts
Create systemd files:
```
./scripts/systemd.sh
```
Start/Stop using systemd:
```
sudo systemctl <start|stop> <lpmc_waterfall|lpmc_lobby|lpmc_smp>
```
Start server manually (<kbd>ctrl</kbd>+<kbd>C</kbd> to stop)
```
./scripts/start.sh <waterfall|lobby|smp>
```
Update plugins and stuff:
```
./scripts/update.sh
```
## Tools
- [Editing chunks](https://github.com/Amulet-Team/Amulet-Map-Editor)
- [Editing NBT files](https://marketplace.visualstudio.com/items?itemName=Misodee.vscode-nbt)
- [World inspection](https://github.com/toolbox4minecraft/amidst)
- [3D model extraction](https://github.com/erich666/Mineways)
## todo
- rules
- no grief
- be responsible
- break rule = ban
## Related projects
- [LPMC website](https://github.com/developomp/lpmc.developomp.com)
- https://github.com/pompydev/lpmc.pompy.dev

47
docker-compose.yml Normal file
View file

@ -0,0 +1,47 @@
# https://github.com/YouHaveTrouble/minecraft-optimization
services:
smp:
# Paper needs Java 21+. See https://docs.papermc.io/paper/getting-started
# https://docker-minecraft-server.readthedocs.io/en/latest/versions/java/
image: "itzg/minecraft-server:java23"
environment: # https://docker-minecraft-server.readthedocs.io/en/latest/variables/#server
# Server
# https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/server-types/paper/
# https://papermc.io/downloads/all
TYPE: PAPER
VERSION: 1.21.4
PAPER_BUILD: 225
MODS_FILE: "/extras/mods.txt" # https://docker-minecraft-server.readthedocs.io/en/latest/mods-and-plugins/#modplugin-url-listing-file
RCON_PASSWORD: password # https://docker-minecraft-server.readthedocs.io/en/latest/variables/#rcon
# Whitelist
# https://docker-minecraft-server.readthedocs.io/en/latest/variables/#whitelist
ENABLE_WHITELIST: true
WHITELIST_FILE: "/extras/whitelist.json"
# Info
ICON: https://raw.githubusercontent.com/pompydev/LPMC/refs/heads/master/server-icon.png
SERVER_NAME: LPMC
MOTD: "LP but MC"
# Performance
MEMORY: 8G # https://docker-minecraft-server.readthedocs.io/en/latest/configuration/jvm-options/#memory-limit
USE_AIKAR_FLAGS: true # https://docker-minecraft-server.readthedocs.io/en/latest/configuration/jvm-options/#enable-aikars-flags
# Misc
EULA: true
GUI: false # https://docker-minecraft-server.readthedocs.io/en/latest/configuration/misc-options/#explicitly-disable-gui
ports:
- "25565:25565"
volumes:
- ./data:/data
- ./mods.txt:/extras/mods.txt:ro
- ./whitelist.json:/extras/whitelist.json:ro
healthcheck:
test:
["CMD", "/usr/local/bin/mc-monitor", "status", "--host", "localhost"]
interval: 2s
timeout: 10s
retries: 15
# https://github.com/itzg/docker-mc-backup

View file

View file

@ -1 +0,0 @@
ssh -i secret/ssh-key.key ubuntu@server.lpmc.developomp.com

View file

@ -1,71 +0,0 @@
# usage: scripts/start.sh <OPTION HERE>
AVAILABLE_OPTIONS=(
waterfall
lobby
smp
)
# uncomment if you need specific version of java
# JAVA=/usr/lib/jvm/java-17-openjdk/bin/java
if [ -z ${JAVA+x} ]; then
JAVA=java
fi
start_waterfall() {
echo "starting waterfall"
WATERFALL=$(find . -maxdepth 1 -type f -name waterfall*.jar)
$JAVA -Xmx128M -Xms128M -jar $WATERFALL
}
start_paper() {
# $1: working directory
# $2: RAM
cd $1
# https://blog.airplane.gg/aikar-flags/#how-to-use-the-flags
$JAVA -Xms$2 -Xmx$2 \
-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch \
-XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 \
-XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M \
-XX:G1ReservePercent=20 -XX:InitiatingHeapOccupancyPercent=15 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true \
-jar paper.jar nogui
}
start_lobby() {
start_paper "servers/lobby" "1G"
}
start_smp() {
start_paper "servers/smp" "3G"
}
# check arguments
if [[ ! " ${AVAILABLE_OPTIONS[*]} " =~ " ${1} " ]]; then
echo "invalid argument: ${1}"
echo "available options are:"
for i in "${AVAILABLE_OPTIONS[@]}"; do
echo " - ${i}"
done
fi
case $1 in
waterfall)
start_waterfall
;;
lobby)
start_lobby
;;
smp)
start_smp
;;
*)
echo "unknown option: $1"
;;
esac

View file

@ -1,2 +0,0 @@
rm /etc/systemd/system/lpmc_*
cp services/* /etc/systemd/system

View file

@ -1,117 +0,0 @@
# update plugins and stuff
BOLD=$(tput bold)
NORMAL=$(tput sgr0)
WORKING_ON="waterfall"
PLUGINS_DIR="plugins"
WATERFALL_PLUGINS=(
"SkinsRestorer"
)
LOBBY_SERVER_PLUGINS=(
"CoreProtect"
"DiscordSRV"
"EssentialsX"
"HolographicDisplays"
"SkinsRestorer"
"worldEdit"
"worldGuard"
)
SMP_SERVER_PLUGINS=(
"CoreProtect"
"EssentialsX"
"IllegalStack"
"SkinsRestorer"
"StackMob"
"worldEdit"
"worldGuard"
)
bold() {
echo "${BOLD}$@${NORMAL}"
}
updating() {
echo " updating $*"
}
get_plugins_dir() {
case "$WORKING_ON" in
waterfall)
PLUGINS_DIR="plugins"
;;
lobby)
PLUGINS_DIR="servers/lobby/plugins"
;;
smp)
PLUGINS_DIR="servers/smp/plugins"
;;
*) ;;
esac
}
### setup functions
setup_paperMC() {
# make paper.jar symlink in each server folder
# get the first search result for paper-*.jar
PAPER_FILE=$(find master -type f -name "paper-*.jar" | head -n 1)
# get directories in ./servers directory
SERVER_DIRS=($(find servers -maxdepth 1 -type d -not -path "servers"))
# make/replace symbolic link for paperMC
for SERVER_DIR in "${SERVER_DIRS[@]}"; do
PAPER_SYMLINK_PATH="$SERVER_DIR/paper.jar"
# check if symlink exists
if [ -L $PAPER_SYMLINK_PATH ]; then
rm $PAPER_SYMLINK_PATH
fi
# copy paper.jar file
cp "$PAPER_FILE" $PAPER_SYMLINK_PATH
done
}
setup_plugin() {
updating "$1"
# find jar file
ORIGINAL_JAR=$(find master -iname $1*.jar)
get_plugins_dir
NEW_JAR="$PLUGINS_DIR/$1.jar"
# remove existing plugin symlink
rm $NEW_JAR >/dev/null 2>&1
# create (new) symlink
cp $ORIGINAL_JAR $NEW_JAR
}
### MAIN
bold "setting up paperMC"
setup_paperMC
bold "setting up waterfall plugins"
for i in "${WATERFALL_PLUGINS[@]}"; do
setup_plugin $i
done
WORKING_ON="lobby"
bold "setting up lobby plugins"
for i in "${LOBBY_SERVER_PLUGINS[@]}"; do
setup_plugin $i
done
WORKING_ON="smp"
bold "setting up smp plugins"
for i in "${SMP_SERVER_PLUGINS[@]}"; do
setup_plugin $i
done

View file

View file

View file

@ -1,4 +0,0 @@
[Service]
ExecStart=bash /home/ubuntu/LPMC/scripts/start.sh lobby
Restart=on-failure
WorkingDirectory=/home/ubuntu/LPMC

View file

@ -1,4 +0,0 @@
[Service]
ExecStart=bash /home/ubuntu/LPMC/scripts/start.sh smp
Restart=on-failure
WorkingDirectory=/home/ubuntu/LPMC

View file

@ -1,4 +0,0 @@
[Service]
ExecStart=bash /home/ubuntu/LPMC/scripts/start.sh waterfall
Restart=on-failure
WorkingDirectory=/home/ubuntu/LPMC

View file

@ -1,8 +0,0 @@
use_netty_dns_resolver: true
disable_modern_tab_limiter: true
log_initial_handler_connections: true
throttling:
tab_complete: 1000
game_version: ""
disable_tab_list_rewrite: false
disable_entity_metadata_rewrite: false