- Java 89.3%
- Shell 9%
- Batchfile 1.7%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| .forgejo/workflows | ||
| gradle | ||
| miniserver | ||
| worlds | ||
| .gitattributes | ||
| .gitignore | ||
| dockerSetup.sh | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| README.md | ||
| settings.gradle | ||
Ministom
A smoll minigame server for Minecraft writting in Java with Minestom.
Why?
I always liked to make smoll minigames for Minecraft & I even tried before creating a Minecraft server Network with a friend. However Minecraft servers are verryyyy memory expensive tought it was before the big spike of ram price increase it was still a bit expensive for us (both still students) to buy a better server.
We tried all kinds of tricks and I learned a lot about Networking, docker, server managment so on.
This time i try my luck again with one big server instead of many under a proxy & now I actually know how to write code in java because I am currently in a class about it.
- my java exam is in a few weeks so it is an additional learning project.
How to player?
There 4 ways you can:
- You can build from source with shadowjar task which should give you an .jar which is the entire server and can be just started (require worlds directory in same directory as jar execution context)
- Download from the workflow of my forgejo instance the server zip from last succefull build, unzip it and run the jar inside (required folders/files are also in zip)
- Do the same as 2 but run dockerSetup.sh which generates a bunch of files includin a compose.yaml which can be composed using podman/docker to create a stack with velocity viaVersion, backwards & rewind to implement multi version support and a ministom container itself
Features
- Different minigames
- A system which automaticly manages all game instances
- A queue system
- A party system
- A ban system
- An automatic bad word block list banner when players use words they really should not (must be configure over properties file)
- A report system
- A permission system
- Persistant reports/bans/permissions accross server restarts with sqlite database
- Configuration over properties file ooooor ... by modifieng source code ;)
- Multible commands acting as a 'frontend' to all the systems some require specific permissions to execute
- A main program to connect everything
- Velocity support
- Build tool to modify maps on the go
- Additional abilities that may be usefull
- fly in survival mode
- hide from other players
- change gamemode
- help command
- A console prompt that can be used to execute comands from console side
Permissions
admin # all admin permissions
admin.build # all build permissions
admin.build.place # allow player to place blocks in non build areas
admin.build.break # allow player to break blocks in non build areas
admin.build.interact # allow player to interact with blocks in non build areas
admin.build.minied # allow player to use custom build tool
admin.permission # allow player to change permissions of others
admin.state.gamemode # allow player to change gamemode
admin.state.fly # allow player to fly (even when in survival over a command /fly)
admin.state.hide # allow player to hide themselfe as ghosts
admin.playerManager # allow player to manage players
admin.playerManager.ban # allow player to ban/unban players
admin.playerManager.report # allow player to manage report system (creating reports can be done without this permission)
admin.playerManager.tp # allow player to teleport themselfe & others
dev # all deveolpment permissions (may not have fancy ui or responsive error handling)
dev.crates # allow manual modifieng of crate system
dev.queueForce # allow forcing queue to start even if it does not meet min player requirement
Configuration
Create a file on the same directory level as the .jar named server.properties
afterwards you can write following configurations to overwrite their default.
address=0.0.0.0 # the address of the server
port=25565 # the server port
mainAdmin= # a player uuid which always will hav every permissions
defaultCrate=Lobby # the crate/game used as lobby
onlineMode=false # if online mode should be enabled or not
velocity=false # if velocity support should be enabled or not (currently not available)
queueTime=10 # time for queue system to wait for additional players after player minnimum was reached but not the maximum
wordsBlacklist=bad,word1 # a list of words that will be detected in player messages and gets them banned
badWordBanTime=720 # how long the bantime of a bad word mention should be om minutes (default 12 hours)
Todo
- Make .properties config instead of hardcoding everything
- Try making ram usage lower
- Make database module switchable with other database
- Make inventory uis in addition to commands
- Add /hub command to move players to lobby
- Move logic from commands to their actually managers to make codebase more consistent
- Launch instance on foxors.de
- Automaticly kick players from parties if they go offline
- Make crates run in other threads to not block main
- Make crateModules work by giving them the entire crate object itself and using the instance given functions for that
- Create nice ui for countdounw crates Module
- Centrelize kicking players from queue/parties if they go offline
- Make a test with friends
- GAMES...
- Snake
- Classic PvP
- Jump and run
- Spleef
- Get down
- Dropper
- Tnt spleef
- Disasters
- JumpPvP (original game idea)
- Snowball fight
- Towers
- Kick players in cratesManager if crate gets remove
- Report player system
- Ban system
- Add more comments for javadoc
- Add autocompletion to queue
- Make spectator players actually invisible
- Fix racing condition when creatin creates in queue where players may be sent to crate before it is ready
- Replay system that saves the last frew minutes when reporting players
- Make a rank system (+match making) ranks should not be bought they are earned
- Anti cheat (named watch cat instead of hypixels watch dog)
- Cach mojang api requests
- Make auto ban system for people using bad/horrible words in chat
- Capsel chats of players to their local world
- Add a help command
- Make permission command actual work on offline players
- Make unit tests :(