mirror of
https://github.com/plexusorg/Module-HTTPD.git
synced 2026-06-05 17:46:53 +00:00
fuck it we're rendering blocks using webgl
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package dev.plex.request.impl;
|
||||
|
||||
import dev.plex.HTTPDModule;
|
||||
import dev.plex.request.AbstractServlet;
|
||||
import dev.plex.request.GetMapping;
|
||||
import dev.plex.request.MappingHeaders;
|
||||
@@ -9,11 +10,15 @@ import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class AssetsEndpoint extends AbstractServlet
|
||||
{
|
||||
private static final Pattern TEXTURE_PATH = Pattern.compile("(item|block)/[a-z0-9_]+\\.png");
|
||||
private static final Pattern TEXTURE_PATH = Pattern.compile("((item|block)/[a-z0-9_]+|entity/shield/[a-z0-9_]+)\\.png");
|
||||
private static final Pattern MODEL_PATH = Pattern.compile("(item|block)/[a-z0-9_]+\\.json");
|
||||
private static final Pattern ITEM_DEF_PATH = Pattern.compile("[a-z0-9_]+\\.json");
|
||||
|
||||
|
||||
@GetMapping(endpoint = "/assets/dashboard.js")
|
||||
@@ -37,6 +42,29 @@ public class AssetsEndpoint extends AbstractServlet
|
||||
return readFileReal(this.getClass().getResourceAsStream("/httpd/assets/player.js"));
|
||||
}
|
||||
|
||||
@GetMapping(endpoint = "/assets/blockrenderer.js")
|
||||
@MappingHeaders(headers = {"content-type;application/javascript; charset=utf-8", "cache-control;public, max-age=300"})
|
||||
public String blockRendererJs(HttpServletRequest request, HttpServletResponse response)
|
||||
{
|
||||
return readFileReal(this.getClass().getResourceAsStream("/httpd/assets/blockrenderer.js"));
|
||||
}
|
||||
|
||||
@GetMapping(endpoint = "/assets/three.module.js")
|
||||
@MappingHeaders(headers = {"content-type;application/javascript; charset=utf-8", "cache-control;public, max-age=86400"})
|
||||
public String threeJs(HttpServletRequest request, HttpServletResponse response)
|
||||
{
|
||||
serveResource("/httpd/assets/three.module.js", response);
|
||||
return null;
|
||||
}
|
||||
|
||||
@GetMapping(endpoint = "/assets/three.core.js")
|
||||
@MappingHeaders(headers = {"content-type;application/javascript; charset=utf-8", "cache-control;public, max-age=86400"})
|
||||
public String threeCoreJs(HttpServletRequest request, HttpServletResponse response)
|
||||
{
|
||||
serveResource("/httpd/assets/three.core.js", response);
|
||||
return null;
|
||||
}
|
||||
|
||||
@GetMapping(endpoint = "/assets/plexlogo.webp")
|
||||
@MappingHeaders(headers = {"content-type;image/webp", "cache-control;public, max-age=86400"})
|
||||
public String plexLogo(HttpServletRequest request, HttpServletResponse response)
|
||||
@@ -49,23 +77,74 @@ public class AssetsEndpoint extends AbstractServlet
|
||||
@MappingHeaders(headers = {"content-type;image/png", "cache-control;public, max-age=86400"})
|
||||
public String texture(HttpServletRequest request, HttpServletResponse response)
|
||||
{
|
||||
String uri = request.getRequestURI();
|
||||
String prefix = "/assets/textures/";
|
||||
if (!uri.startsWith(prefix))
|
||||
{
|
||||
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
|
||||
return null;
|
||||
}
|
||||
String resourcePath = uri.substring(prefix.length());
|
||||
if (!TEXTURE_PATH.matcher(resourcePath).matches())
|
||||
{
|
||||
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
|
||||
return null;
|
||||
}
|
||||
serveResource("/httpd/assets/textures/" + resourcePath, response);
|
||||
servePathUnder(request, response, "/assets/textures/", TEXTURE_PATH, "textures", "/httpd/assets/textures/");
|
||||
return null;
|
||||
}
|
||||
|
||||
@GetMapping(endpoint = "/assets/models/")
|
||||
@MappingHeaders(headers = {"content-type;application/json; charset=utf-8", "cache-control;public, max-age=86400"})
|
||||
public String model(HttpServletRequest request, HttpServletResponse response)
|
||||
{
|
||||
servePathUnder(request, response, "/assets/models/", MODEL_PATH, "models", "/httpd/assets/models/");
|
||||
return null;
|
||||
}
|
||||
|
||||
@GetMapping(endpoint = "/assets/items/")
|
||||
@MappingHeaders(headers = {"content-type;application/json; charset=utf-8", "cache-control;public, max-age=86400"})
|
||||
public String itemDef(HttpServletRequest request, HttpServletResponse response)
|
||||
{
|
||||
servePathUnder(request, response, "/assets/items/", ITEM_DEF_PATH, "items", "/httpd/assets/items/");
|
||||
return null;
|
||||
}
|
||||
|
||||
private static void servePathUnder(HttpServletRequest request, HttpServletResponse response, String urlPrefix, Pattern allowed, String cacheCategory, String resourcePrefix)
|
||||
{
|
||||
String uri = request.getRequestURI();
|
||||
if (!uri.startsWith(urlPrefix))
|
||||
{
|
||||
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
|
||||
return;
|
||||
}
|
||||
String rest = uri.substring(urlPrefix.length());
|
||||
if (!allowed.matcher(rest).matches())
|
||||
{
|
||||
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
|
||||
return;
|
||||
}
|
||||
if (currentStaff(request) == null)
|
||||
{
|
||||
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
|
||||
return;
|
||||
}
|
||||
if (serveCached(cacheCategory, rest, response))
|
||||
{
|
||||
return;
|
||||
}
|
||||
serveResource(resourcePrefix + rest, response);
|
||||
}
|
||||
|
||||
private static boolean serveCached(String category, String relativePath, HttpServletResponse response)
|
||||
{
|
||||
if (HTTPDModule.getMinecraftAssetsManager() == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Path path = HTTPDModule.getMinecraftAssetsManager().resolve(category, relativePath);
|
||||
if (path == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
try (OutputStream out = response.getOutputStream())
|
||||
{
|
||||
Files.copy(path, out);
|
||||
return true;
|
||||
}
|
||||
catch (IOException ignored)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static void serveResource(String classpathPath, HttpServletResponse response)
|
||||
{
|
||||
try (InputStream in = AssetsEndpoint.class.getResourceAsStream(classpathPath);
|
||||
|
||||
Reference in New Issue
Block a user