Initial commit

This commit is contained in:
Jim Shepich III 2025-02-18 01:57:42 -05:00
commit 10729c2702
7 changed files with 94 additions and 0 deletions

1
.version Normal file
View File

@ -0,0 +1 @@
0.0.1-dev1

17
Containerfile Normal file
View File

@ -0,0 +1,17 @@
FROM python:3.13-slim
# Set the working directory
WORKDIR /app
# Copy the current directory contents into the container at /app
COPY minecraft-plugin-proxy.py /app
COPY requirements.txt /app
# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
# Make port 8000 available to the world outside this container.
EXPOSE 8000
# Serve the API
CMD ['fastapi', 'run', '--port', '8000', '/app/minecraft-plugin-proxy.py']

28
README.md Normal file
View File

@ -0,0 +1,28 @@
# Minecraft Plugin Proxy
Are you a Minecraft sysadmin using a containerized setup? Are you sick of dealing with plugins that don't support downloading the latest version via REST API? Then this is the project for you!
This project is a proxy server that will find the latest version of a plugin and redirect you to the download link.
All of the plugins have custom hard-coded logic that will find the latest version of the plugin and redirect you to the download link.
## Usage
Include the minecraft-plugin-proxy as a service in your compose unit:
```yaml
services:
minecraft-plugin-proxy:
image: ghcr.io/epicshepich/minecraft-plugin-proxy:latest
```
Services in your compose unit can access the proxy server at `http://minecraft-plugin-proxy:8080` with the following query parameters:
## Endpoints
The following endpoints are currently available:
- `/viabackwards/velocity`: ViaBackwards for the Velocity proxy container.
- `/luckperms/{server_type}`: LuckPerms for the specified server type (e.g. `bukkit`, `bungeecord`, `velocity`).
- `/tribufu-velocityrcon`: Tribufu's VelocityRcon plugin for the Velocity proxy container.

3
build.sh Normal file
View File

@ -0,0 +1,3 @@
#!/bin/sh
podman build -t minecraft-plugin-proxy:latest -t minecraft-plugin-proxy:$(cat ./.version) .

43
minecraft-plugin-proxy.py Normal file
View File

@ -0,0 +1,43 @@
'''
A proxy built on FastAPI to find the most recent version of a Minecraft plugin.
'''
import requests
from fastapi import FastAPI
from fastapi.responses import RedirectResponse
from xml.etree import ElementTree as ET
api = FastAPI()
@api.get('/viabackwards/velocity')
async def viabackwards_velocity():
latest_release = requests.get(
'https://hangar.papermc.io/api/v1/projects/ViaVersion/ViaBackwards/latestrelease'
).text.strip()
return RedirectResponse(
f'https://hangar.papermc.io/api/v1/projects/ViaVersion/ViaBackwards/versions/{latest_release}/Velocity/download'
)
@api.get('/luckperms/{server_type}')
async def luckperms_velocity(server_type):
luckperms_metadata = requests.get('https://metadata.luckperms.net/data/all').json()
return RedirectResponse(
luckperms_metadata['downloads'][server_type]
)
@api.get('/tribufu-velocityrcon')
async def tribufu_velocityrcon():
velocityrcon_metadata = requests.get('https://mvn.tribufu.com/releases/com/tribufu/Tribufu-VelocityRcon/maven-metadata.xml').text
root = ET.fromstring(velocityrcon_metadata)
version = root.find('.//versioning/latest').text
return RedirectResponse(
f'https://mvn.tribufu.com/releases/com/tribufu/Tribufu-VelocityRcon/{version}/Tribufu-VelocityRcon-{version}.jar'
)

0
push.sh Normal file
View File

2
requirements.txt Normal file
View File

@ -0,0 +1,2 @@
requests
fastapi[standard]