Back to Overview

Survival Plugin

Tags:Back-EndMinecraft
Technologies:JavaPaperMCPostgreSQL

Instead of relying on a dozen different fragmented plugins to run a Minecraft server, I decided to build my own all-in-one core plugin from scratch. This project handles everything from essential player commands to custom chat formatting and even hosts its own resource packs.

The Stack

  • Language: Java, utilizing a strict, object-oriented architecture.
  • Build Tool: Maven, managed through a central configuration.
  • Data Management: A custom Database Manager to safely handle player data and server states.
  • Web Integration: A built-in HTTP server designed specifically to distribute custom server resource packs.
  • Configuration: YAML-based config files for easy server-side adjustments.

Features & Player Mechanics

This plugin replaces heavily bloated third-party tools with clean, handwritten implementations of core server mechanics:

  • Teleportation System: A fully interactive TPA system handling /tpa, /tpaccept, /tpdeny, and /tphere requests.
  • Moderation Tools: Essential oversight features including /vanish, /fly, /invsee, and more.
  • World Navigation: Comprehensive Home and Warp Managers for setting and managing player locations.
  • Quality of Life: Portable utility commands granting players instant access to /enderchest, /workbench, and /trash.

Theming, UI & Customization

A server should feel like a cohesive experience, not a patchwork of random tools. I built out dedicated managers and listeners to control the visual flow:

  • Chat & Assets: Custom chat formatting, message prefixes, and autocomplete features.
  • Live Server Branding: A fully customized TablistManager and dynamic MOTD handling.
  • Event Tracking: Dedicated listeners for player actions, including custom join and leave messages.

Why Build It Myself?

Writing a Minecraft plugin of this scale is a massive exercise in handling edge cases and server events. How do you ensure a player in /vanish stays completely invisible to the server's TablistManager and JoinListener? How do you efficiently serve custom assets without relying on a third-party web host?

Building features like the ResourcePackServer and wrestling with complex inventory states in the InvseeListener made this project a fantastic deep dive into backend Java development and real-time event handling.