forked from MinecraftUtilities/Backend
cleanup isometric skin renderer
This commit is contained in:
parent
a16fda1b53
commit
b682153ebb
@ -3,9 +3,9 @@ package cc.fascinated.model.player;
|
|||||||
import cc.fascinated.common.PlayerUtils;
|
import cc.fascinated.common.PlayerUtils;
|
||||||
import cc.fascinated.config.Config;
|
import cc.fascinated.config.Config;
|
||||||
import cc.fascinated.exception.impl.BadRequestException;
|
import cc.fascinated.exception.impl.BadRequestException;
|
||||||
import cc.fascinated.service.skin.SkinPartParser;
|
import cc.fascinated.service.skin.SkinPartRenderer;
|
||||||
import cc.fascinated.service.skin.impl.FlatParser;
|
import cc.fascinated.service.skin.impl.FlatRenderer;
|
||||||
import cc.fascinated.service.skin.impl.IsometricHeadParser;
|
import cc.fascinated.service.skin.impl.IsometricHeadRenderer;
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
@ -95,13 +95,13 @@ public class Skin {
|
|||||||
/**
|
/**
|
||||||
* Head parts
|
* Head parts
|
||||||
*/
|
*/
|
||||||
HEAD(new FlatParser(8, 8, 8)),
|
HEAD(new FlatRenderer(8, 8, 8)),
|
||||||
HEAD_ISOMETRIC(new IsometricHeadParser());
|
HEAD_ISOMETRIC(new IsometricHeadRenderer());
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The skin part parser for the part.
|
* The skin part parser for the part.
|
||||||
*/
|
*/
|
||||||
private final SkinPartParser skinPartParser;
|
private final SkinPartRenderer skinPartParser;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the name of the part.
|
* Gets the name of the part.
|
||||||
|
@ -133,7 +133,9 @@ public class PlayerService {
|
|||||||
return cache.get();
|
return cache.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
byte[] skinPartBytes = part.getSkinPartParser().getPart(player.getSkin(), part.getName(), renderOverlay, size);
|
long before = System.currentTimeMillis();
|
||||||
|
byte[] skinPartBytes = part.getSkinPartParser().renderPart(player.getSkin(), part.getName(), renderOverlay, size);
|
||||||
|
log.info("Took {}ms to render skin part: {} for player: {}", System.currentTimeMillis() - before, part.getName(), player.getUniqueId());
|
||||||
CachedPlayerSkinPart skinPart = new CachedPlayerSkinPart(
|
CachedPlayerSkinPart skinPart = new CachedPlayerSkinPart(
|
||||||
key,
|
key,
|
||||||
skinPartBytes
|
skinPartBytes
|
||||||
|
@ -1,18 +1,19 @@
|
|||||||
package cc.fascinated.service.skin;
|
package cc.fascinated.service.skin;
|
||||||
|
|
||||||
import cc.fascinated.common.ImageUtils;
|
import cc.fascinated.common.ImageUtils;
|
||||||
|
import cc.fascinated.exception.impl.BadRequestException;
|
||||||
import cc.fascinated.model.player.Skin;
|
import cc.fascinated.model.player.Skin;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.SneakyThrows;
|
import lombok.extern.log4j.Log4j2;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
|
|
||||||
@AllArgsConstructor @Getter
|
@AllArgsConstructor @Getter @Log4j2
|
||||||
public abstract class SkinPartParser {
|
public abstract class SkinPartRenderer {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the skin part image.
|
* Gets the skin part image.
|
||||||
@ -36,7 +37,27 @@ public abstract class SkinPartParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the skin part image.
|
* Gets the bytes of an image.
|
||||||
|
*
|
||||||
|
* @param image the image
|
||||||
|
* @param skin the skin
|
||||||
|
* @param partName the part name
|
||||||
|
* @return the bytes
|
||||||
|
*/
|
||||||
|
public byte[] getBytes(BufferedImage image, Skin skin, String partName) throws BadRequestException {
|
||||||
|
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
|
||||||
|
ImageIO.write(image, "png", outputStream);
|
||||||
|
// Cleanup
|
||||||
|
outputStream.flush();
|
||||||
|
log.info("Successfully got {} part bytes for {}", partName, skin.getUrl());
|
||||||
|
return outputStream.toByteArray();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
throw new BadRequestException("Failed to get " + partName + " part bytes for " + skin.getUrl());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renders a skin part.
|
||||||
*
|
*
|
||||||
* @param skin the skin
|
* @param skin the skin
|
||||||
* @param partName the skin part name
|
* @param partName the skin part name
|
||||||
@ -44,5 +65,5 @@ public abstract class SkinPartParser {
|
|||||||
* @param size the output size
|
* @param size the output size
|
||||||
* @return the skin part image
|
* @return the skin part image
|
||||||
*/
|
*/
|
||||||
public abstract byte[] getPart(Skin skin, String partName, boolean renderOverlay, int size);
|
public abstract byte[] renderPart(Skin skin, String partName, boolean renderOverlay, int size) throws BadRequestException;
|
||||||
}
|
}
|
@ -1,8 +1,7 @@
|
|||||||
package cc.fascinated.service.skin.impl;
|
package cc.fascinated.service.skin.impl;
|
||||||
|
|
||||||
import cc.fascinated.common.ImageUtils;
|
|
||||||
import cc.fascinated.model.player.Skin;
|
import cc.fascinated.model.player.Skin;
|
||||||
import cc.fascinated.service.skin.SkinPartParser;
|
import cc.fascinated.service.skin.SkinPartRenderer;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.extern.log4j.Log4j2;
|
import lombok.extern.log4j.Log4j2;
|
||||||
|
|
||||||
@ -13,7 +12,7 @@ import java.awt.image.BufferedImage;
|
|||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
|
|
||||||
@Getter @Log4j2
|
@Getter @Log4j2
|
||||||
public class FlatParser extends SkinPartParser {
|
public class FlatRenderer extends SkinPartRenderer {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The x and y position of the part.
|
* The x and y position of the part.
|
||||||
@ -26,20 +25,20 @@ public class FlatParser extends SkinPartParser {
|
|||||||
private final int widthAndHeight;
|
private final int widthAndHeight;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new {@link FlatParser}.
|
* Constructs a new {@link FlatRenderer}.
|
||||||
*
|
*
|
||||||
* @param x the x position of the part
|
* @param x the x position of the part
|
||||||
* @param y the y position of the part
|
* @param y the y position of the part
|
||||||
* @param widthAndHeight the width and height of the part
|
* @param widthAndHeight the width and height of the part
|
||||||
*/
|
*/
|
||||||
public FlatParser(int x, int y, int widthAndHeight) {
|
public FlatRenderer(int x, int y, int widthAndHeight) {
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
this.widthAndHeight = widthAndHeight;
|
this.widthAndHeight = widthAndHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] getPart(Skin skin, String partName, boolean renderOverlay, int size) {
|
public byte[] renderPart(Skin skin, String partName, boolean renderOverlay, int size) {
|
||||||
double scale = (double) size / this.widthAndHeight;
|
double scale = (double) size / this.widthAndHeight;
|
||||||
log.info("Getting {} part bytes for {} with size {} and scale {}", partName, skin.getUrl(), size, scale);
|
log.info("Getting {} part bytes for {} with size {} and scale {}", partName, skin.getUrl(), size, scale);
|
||||||
|
|
||||||
@ -60,7 +59,7 @@ public class FlatParser extends SkinPartParser {
|
|||||||
}
|
}
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
log.error("Failed to get {} part bytes for {}", partName, skin.getUrl(), ex);
|
log.error("Failed to get {} part bytes for {}", partName, skin.getUrl(), ex);
|
||||||
return null;
|
throw new RuntimeException("Failed to get " + partName + " part for " + skin.getUrl());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,102 +0,0 @@
|
|||||||
package cc.fascinated.service.skin.impl;
|
|
||||||
|
|
||||||
import cc.fascinated.common.ImageUtils;
|
|
||||||
import cc.fascinated.model.player.Skin;
|
|
||||||
import cc.fascinated.service.skin.SkinPartParser;
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.extern.log4j.Log4j2;
|
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.geom.AffineTransform;
|
|
||||||
import java.awt.image.BufferedImage;
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
|
|
||||||
@Getter @Log4j2
|
|
||||||
public class IsometricHeadParser extends SkinPartParser {
|
|
||||||
|
|
||||||
private static final double SKEW_A = 26d / 45d; // 0.57777777
|
|
||||||
private static final double SKEW_B = SKEW_A * 2d; // 1.15555555
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public byte[] getPart(Skin skin, String partName, boolean renderOverlay, int size) {
|
|
||||||
double scale = (size / 8d) / 2.5;
|
|
||||||
log.info("Getting {} part bytes for {} with size {} and scale {}", partName, skin.getUrl(), size, scale);
|
|
||||||
|
|
||||||
try {
|
|
||||||
final BufferedImage outputImage = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);
|
|
||||||
|
|
||||||
// Get all the required head parts
|
|
||||||
final BufferedImage headTop = ImageUtils.resize(this.getSkinPart(skin, 8, 0, 8, 8, 1), scale);
|
|
||||||
final BufferedImage headFront = ImageUtils.resize(this.getSkinPart(skin, 8, 8, 8, 8, 1), scale);
|
|
||||||
final BufferedImage headRight = ImageUtils.resize(this.getSkinPart(skin, 0, 8, 8, 8, 1), scale);
|
|
||||||
|
|
||||||
if (renderOverlay) {
|
|
||||||
// Draw the overlay on top of the gathered skin parts
|
|
||||||
|
|
||||||
// Top overlay
|
|
||||||
Graphics2D g = headTop.createGraphics();
|
|
||||||
g.drawImage(this.getSkinPart(skin, 40, 0, 8, 8, 1), 0, 0, null);
|
|
||||||
g.dispose();
|
|
||||||
|
|
||||||
// Front overlay
|
|
||||||
g = headFront.createGraphics();
|
|
||||||
g.drawImage(this.getSkinPart(skin, 16, 8, 8, 8, 1), 0, 0, null);
|
|
||||||
g.dispose();
|
|
||||||
|
|
||||||
// Right side overlay
|
|
||||||
g = headRight.createGraphics();
|
|
||||||
g.drawImage(this.getSkinPart(skin, 32, 8, 8, 8, 1), 0, 0, null);
|
|
||||||
g.dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Declare pos
|
|
||||||
double x;
|
|
||||||
double y;
|
|
||||||
double z;
|
|
||||||
|
|
||||||
// Declare offsets
|
|
||||||
final double z_offset = scale * 3.5d;
|
|
||||||
final double x_offset = scale * 2d;
|
|
||||||
|
|
||||||
// Create graphics
|
|
||||||
final Graphics2D outGraphics = outputImage.createGraphics();
|
|
||||||
|
|
||||||
// head top
|
|
||||||
x = x_offset;
|
|
||||||
y = -0.5;
|
|
||||||
z = z_offset;
|
|
||||||
outGraphics.setTransform(new AffineTransform(1d, -SKEW_A, 1, SKEW_A, 0, 0));
|
|
||||||
outGraphics.drawImage(headTop, (int) (y - z), (int) (x + z), headTop.getWidth(), headTop.getHeight() + 1, null);
|
|
||||||
|
|
||||||
// head front
|
|
||||||
x = x_offset + 8 * scale;
|
|
||||||
y = 0;
|
|
||||||
z = z_offset - 0.5;
|
|
||||||
outGraphics.setTransform(new AffineTransform(1d, -SKEW_A, 0d, SKEW_B, 0d, SKEW_A));
|
|
||||||
outGraphics.drawImage(headFront, (int) (y + x), (int) (x + z), headFront.getWidth(), headFront.getHeight(), null);
|
|
||||||
|
|
||||||
// head right
|
|
||||||
x = x_offset;
|
|
||||||
y = 0;
|
|
||||||
z = z_offset;
|
|
||||||
outGraphics.setTransform(new AffineTransform(1d, SKEW_A, 0d, SKEW_B, 0d, 0d));
|
|
||||||
outGraphics.drawImage(headRight, (int) (x + y + 1), (int) (z - y - 0.5), headRight.getWidth(), headRight.getHeight() + 1, null);
|
|
||||||
|
|
||||||
// Cleanup and return
|
|
||||||
outGraphics.dispose();
|
|
||||||
|
|
||||||
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
|
|
||||||
ImageIO.write(outputImage, "png", outputStream);
|
|
||||||
// Cleanup
|
|
||||||
outputStream.flush();
|
|
||||||
outGraphics.dispose();
|
|
||||||
log.info("Successfully got {} part bytes for {}", partName, skin.getUrl());
|
|
||||||
return outputStream.toByteArray();
|
|
||||||
}
|
|
||||||
} catch (Exception ex) {
|
|
||||||
log.error("Failed to get {} part bytes for {}", partName, skin.getUrl(), ex);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,106 @@
|
|||||||
|
package cc.fascinated.service.skin.impl;
|
||||||
|
|
||||||
|
import cc.fascinated.common.ImageUtils;
|
||||||
|
import cc.fascinated.model.player.Skin;
|
||||||
|
import cc.fascinated.service.skin.SkinPartRenderer;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.extern.log4j.Log4j2;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.geom.AffineTransform;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
|
@Getter @Log4j2
|
||||||
|
public class IsometricHeadRenderer extends SkinPartRenderer {
|
||||||
|
|
||||||
|
private static final double SKEW_A = 26d / 45d; // 0.57777777
|
||||||
|
private static final double SKEW_B = SKEW_A * 2d; // 1.15555555
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The head transforms
|
||||||
|
*/
|
||||||
|
private static final AffineTransform HEAD_TRANSFORM = new AffineTransform(1d, -SKEW_A, 1, SKEW_A, 0, 0);
|
||||||
|
private static final AffineTransform FRONT_TRANSFORM = new AffineTransform(1d, -SKEW_A, 0d, SKEW_B, 0d, SKEW_A);
|
||||||
|
private static final AffineTransform RIGHT_TRANSFORM = new AffineTransform(1d, SKEW_A, 0d, SKEW_B, 0d, 0d);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte[] renderPart(Skin skin, String partName, boolean renderOverlay, int size) {
|
||||||
|
double scale = (size / 8d) / 2.5;
|
||||||
|
log.info("Getting {} part bytes for {} with size {} and scale {}", partName, skin.getUrl(), size, scale);
|
||||||
|
|
||||||
|
double x, y, z; // The x, y, and z positions
|
||||||
|
double zOffset = scale * 3.5d;
|
||||||
|
double xOffset = scale * 2d;
|
||||||
|
try {
|
||||||
|
BufferedImage outputImage = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);
|
||||||
|
Graphics2D graphics = outputImage.createGraphics();
|
||||||
|
|
||||||
|
// Get all the required head parts
|
||||||
|
BufferedImage headTop = ImageUtils.resize(this.getSkinPart(skin, 8, 0, 8, 8, 1), scale);
|
||||||
|
BufferedImage headFront = ImageUtils.resize(this.getSkinPart(skin, 8, 8, 8, 8, 1), scale);
|
||||||
|
BufferedImage headRight = ImageUtils.resize(this.getSkinPart(skin, 0, 8, 8, 8, 1), scale);
|
||||||
|
|
||||||
|
if (renderOverlay) {
|
||||||
|
Graphics2D headGraphics = headTop.createGraphics();
|
||||||
|
applyOverlay(headGraphics,this.getSkinPart(skin, 40, 0, 8, 8, 1));
|
||||||
|
|
||||||
|
headGraphics = headFront.createGraphics();
|
||||||
|
applyOverlay(headGraphics, this.getSkinPart(skin, 16, 8, 8, 8, 1));
|
||||||
|
|
||||||
|
headGraphics = headRight.createGraphics();
|
||||||
|
applyOverlay(headGraphics, this.getSkinPart(skin, 32, 8, 8, 8, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw the head
|
||||||
|
x = xOffset;
|
||||||
|
y = -0.5;
|
||||||
|
z = zOffset;
|
||||||
|
// The head is offset by 1 pixel for whatever reason
|
||||||
|
drawPart(graphics, headTop, HEAD_TRANSFORM,y - z, x + z, headTop.getWidth(), headTop.getHeight() + 1);
|
||||||
|
|
||||||
|
// Draw the front of the head
|
||||||
|
x = xOffset + 8 * scale;
|
||||||
|
y = 0;
|
||||||
|
z = zOffset - 0.5;
|
||||||
|
drawPart(graphics, headFront, FRONT_TRANSFORM, y + x, x + z, headFront.getWidth(), headFront.getHeight());
|
||||||
|
|
||||||
|
// Draw the right side of the head
|
||||||
|
x = xOffset;
|
||||||
|
y = 0;
|
||||||
|
z = zOffset;
|
||||||
|
drawPart(graphics, headRight, RIGHT_TRANSFORM, x + y + 1, z - y - 0.5, headRight.getWidth(), headRight.getHeight());
|
||||||
|
|
||||||
|
return super.getBytes(outputImage, skin, partName);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
log.error("Failed to get {} part bytes for {}", partName, skin.getUrl(), ex);
|
||||||
|
throw new RuntimeException("Failed to get " + partName + " part for " + skin.getUrl());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Applies an overlay (skin layer) to the head part.
|
||||||
|
*
|
||||||
|
* @param graphics the graphics
|
||||||
|
* @param part the part
|
||||||
|
*/
|
||||||
|
private void applyOverlay(Graphics2D graphics, BufferedImage part) {
|
||||||
|
graphics.drawImage(part, 0, 0, null);
|
||||||
|
graphics.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Draws a part of the head.
|
||||||
|
*
|
||||||
|
* @param graphics the graphics
|
||||||
|
* @param part the part
|
||||||
|
* @param transform the transform
|
||||||
|
* @param x the x position
|
||||||
|
* @param y the y position
|
||||||
|
* @param width the width
|
||||||
|
* @param height the height
|
||||||
|
*/
|
||||||
|
private void drawPart(Graphics2D graphics, BufferedImage part, AffineTransform transform, double x, double y, int width, int height) {
|
||||||
|
graphics.setTransform(transform);
|
||||||
|
graphics.drawImage(part, (int) x, (int) y, width, height, null);
|
||||||
|
}
|
||||||
|
}
|
@ -1,3 +0,0 @@
|
|||||||
artifactId=Minecraft-Utilities
|
|
||||||
groupId=cc.fascinated
|
|
||||||
version=1.0.0
|
|
@ -1,28 +1,38 @@
|
|||||||
|
cc\fascinated\model\dns\DNSRecord.class
|
||||||
cc\fascinated\service\pinger\impl\JavaMinecraftServerPinger.class
|
cc\fascinated\service\pinger\impl\JavaMinecraftServerPinger.class
|
||||||
cc\fascinated\service\pinger\MinecraftServerPinger.class
|
cc\fascinated\service\pinger\MinecraftServerPinger.class
|
||||||
cc\fascinated\config\OpenAPIConfiguration.class
|
cc\fascinated\config\OpenAPIConfiguration.class
|
||||||
cc\fascinated\model\server\JavaMinecraftServer$Players.class
|
cc\fascinated\model\server\BedrockMinecraftServer$Edition.class
|
||||||
cc\fascinated\model\player\Cape.class
|
cc\fascinated\model\player\Cape.class
|
||||||
cc\fascinated\service\MojangAPIService.class
|
cc\fascinated\model\dns\DNSRecord$Type.class
|
||||||
|
cc\fascinated\model\server\BedrockMinecraftServer.class
|
||||||
cc\fascinated\controller\PlayerController.class
|
cc\fascinated\controller\PlayerController.class
|
||||||
|
cc\fascinated\model\server\JavaMinecraftServer$ForgeModInfo$ForgeMod.class
|
||||||
cc\fascinated\common\JavaMinecraftVersion.class
|
cc\fascinated\common\JavaMinecraftVersion.class
|
||||||
cc\fascinated\model\mojang\JavaServerStatusToken.class
|
cc\fascinated\model\server\JavaMinecraftServer$ForgeModInfo.class
|
||||||
cc\fascinated\model\player\Skin$Parts.class
|
cc\fascinated\model\player\Skin$Parts.class
|
||||||
|
cc\fascinated\common\packet\MinecraftBedrockPacket.class
|
||||||
|
cc\fascinated\service\MojangService.class
|
||||||
cc\fascinated\log\TransactionLogger.class
|
cc\fascinated\log\TransactionLogger.class
|
||||||
|
cc\fascinated\model\cache\CachedPlayerSkinPart.class
|
||||||
cc\fascinated\common\WebRequest.class
|
cc\fascinated\common\WebRequest.class
|
||||||
cc\fascinated\exception\impl\ResourceNotFoundException.class
|
cc\fascinated\exception\impl\ResourceNotFoundException.class
|
||||||
|
cc\fascinated\service\pinger\impl\BedrockMinecraftServerPinger.class
|
||||||
cc\fascinated\model\server\MinecraftServer$Platform.class
|
cc\fascinated\model\server\MinecraftServer$Platform.class
|
||||||
cc\fascinated\model\mojang\MojangUsernameToUuid.class
|
cc\fascinated\model\mojang\MojangUsernameToUuid.class
|
||||||
cc\fascinated\model\player\Skin$Model.class
|
cc\fascinated\model\player\Skin$Model.class
|
||||||
cc\fascinated\model\response\ErrorResponse.class
|
cc\fascinated\model\response\ErrorResponse.class
|
||||||
|
cc\fascinated\repository\PlayerSkinPartCacheRepository.class
|
||||||
cc\fascinated\exception\ExceptionControllerAdvice.class
|
cc\fascinated\exception\ExceptionControllerAdvice.class
|
||||||
cc\fascinated\controller\HomeController.class
|
cc\fascinated\controller\HomeController.class
|
||||||
cc\fascinated\model\server\MinecraftServer.class
|
cc\fascinated\model\server\MinecraftServer.class
|
||||||
cc\fascinated\exception\impl\RateLimitException.class
|
cc\fascinated\exception\impl\RateLimitException.class
|
||||||
cc\fascinated\model\server\JavaMinecraftServer$Version.class
|
cc\fascinated\model\server\JavaMinecraftServer$Version.class
|
||||||
|
cc\fascinated\common\ExpiringSet.class
|
||||||
cc\fascinated\model\server\MinecraftServer$MOTD.class
|
cc\fascinated\model\server\MinecraftServer$MOTD.class
|
||||||
cc\fascinated\common\packet\MinecraftJavaPacket.class
|
cc\fascinated\common\packet\MinecraftJavaPacket.class
|
||||||
cc\fascinated\repository\MinecraftServerCacheRepository.class
|
cc\fascinated\repository\MinecraftServerCacheRepository.class
|
||||||
|
cc\fascinated\model\token\JavaServerStatusToken.class
|
||||||
cc\fascinated\common\IPUtils.class
|
cc\fascinated\common\IPUtils.class
|
||||||
cc\fascinated\exception\impl\BadRequestException.class
|
cc\fascinated\exception\impl\BadRequestException.class
|
||||||
cc\fascinated\common\UUIDUtils.class
|
cc\fascinated\common\UUIDUtils.class
|
||||||
@ -32,22 +42,39 @@ cc\fascinated\model\cache\CachedPlayer.class
|
|||||||
cc\fascinated\common\packet\impl\java\JavaPacketStatusInStart.class
|
cc\fascinated\common\packet\impl\java\JavaPacketStatusInStart.class
|
||||||
cc\fascinated\common\PlayerUtils.class
|
cc\fascinated\common\PlayerUtils.class
|
||||||
cc\fascinated\Main.class
|
cc\fascinated\Main.class
|
||||||
|
cc\fascinated\model\server\MinecraftServer$Players$Sample.class
|
||||||
|
cc\fascinated\service\skin\impl\IsometricHeadRenderer.class
|
||||||
|
cc\fascinated\service\MojangService$1.class
|
||||||
cc\fascinated\common\Tuple.class
|
cc\fascinated\common\Tuple.class
|
||||||
|
cc\fascinated\model\server\JavaMinecraftServer$ForgeData$Channel.class
|
||||||
|
cc\fascinated\model\server\JavaMinecraftServer$ForgeData.class
|
||||||
|
cc\fascinated\model\dns\impl\ARecord.class
|
||||||
cc\fascinated\controller\ServerController.class
|
cc\fascinated\controller\ServerController.class
|
||||||
cc\fascinated\model\server\JavaMinecraftServer$Favicon.class
|
cc\fascinated\model\server\JavaMinecraftServer$Favicon.class
|
||||||
cc\fascinated\common\ServerUtils.class
|
cc\fascinated\common\ServerUtils.class
|
||||||
cc\fascinated\model\cache\CachedMinecraftServer.class
|
cc\fascinated\model\cache\CachedMinecraftServer.class
|
||||||
cc\fascinated\repository\PlayerNameCacheRepository.class
|
cc\fascinated\repository\PlayerNameCacheRepository.class
|
||||||
|
cc\fascinated\Main$1.class
|
||||||
cc\fascinated\common\ColorUtils.class
|
cc\fascinated\common\ColorUtils.class
|
||||||
cc\fascinated\config\RedisConfig.class
|
cc\fascinated\config\RedisConfig.class
|
||||||
cc\fascinated\model\mojang\MojangProfile.class
|
cc\fascinated\model\mojang\MojangProfile.class
|
||||||
cc\fascinated\model\server\JavaMinecraftServer.class
|
cc\fascinated\model\server\JavaMinecraftServer.class
|
||||||
|
cc\fascinated\common\ImageUtils.class
|
||||||
|
cc\fascinated\service\skin\SkinPartRenderer.class
|
||||||
cc\fascinated\exception\impl\MojangAPIRateLimitException.class
|
cc\fascinated\exception\impl\MojangAPIRateLimitException.class
|
||||||
|
cc\fascinated\model\server\JavaMinecraftServer$ForgeData$Mod.class
|
||||||
|
cc\fascinated\common\packet\impl\bedrock\BedrockPacketUnconnectedPing.class
|
||||||
|
cc\fascinated\common\packet\impl\bedrock\BedrockPacketUnconnectedPong.class
|
||||||
|
cc\fascinated\model\server\MinecraftServer$Players.class
|
||||||
|
cc\fascinated\model\dns\impl\SRVRecord.class
|
||||||
cc\fascinated\model\player\Skin.class
|
cc\fascinated\model\player\Skin.class
|
||||||
cc\fascinated\model\player\Player.class
|
cc\fascinated\model\player\Player.class
|
||||||
|
cc\fascinated\model\server\BedrockMinecraftServer$Version.class
|
||||||
|
cc\fascinated\service\skin\impl\FlatRenderer.class
|
||||||
cc\fascinated\common\DNSUtils.class
|
cc\fascinated\common\DNSUtils.class
|
||||||
cc\fascinated\service\PlayerService.class
|
cc\fascinated\service\PlayerService.class
|
||||||
cc\fascinated\config\Config.class
|
cc\fascinated\config\Config.class
|
||||||
|
cc\fascinated\model\server\BedrockMinecraftServer$GameMode.class
|
||||||
cc\fascinated\service\ServerService.class
|
cc\fascinated\service\ServerService.class
|
||||||
cc\fascinated\common\EnumUtils.class
|
cc\fascinated\common\EnumUtils.class
|
||||||
cc\fascinated\model\cache\CachedPlayerName.class
|
cc\fascinated\model\cache\CachedPlayerName.class
|
||||||
|
@ -1,46 +1,61 @@
|
|||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\PlayerUtils.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\repository\PlayerSkinPartCacheRepository.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\service\pinger\impl\JavaMinecraftServerPinger.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\packet\MinecraftBedrockPacket.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\cache\CachedPlayer.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\cache\CachedPlayer.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\packet\MinecraftJavaPacket.java
|
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\service\MojangAPIService.java
|
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\controller\PlayerController.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\controller\PlayerController.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\player\Player.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\player\Player.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\log\TransactionLogger.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\log\TransactionLogger.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\ServerUtils.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\token\JavaServerStatusToken.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\WebRequest.java
|
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\repository\PlayerNameCacheRepository.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\repository\PlayerNameCacheRepository.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\mojang\MojangUsernameToUuid.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\mojang\MojangUsernameToUuid.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\service\ServerService.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\service\ServerService.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\ImageUtils.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\config\RedisConfig.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\config\RedisConfig.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\dns\DNSRecord.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\JavaMinecraftVersion.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\server\MinecraftServer.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\service\skin\impl\IsometricHeadRenderer.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\packet\impl\java\JavaPacketStatusInStart.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\server\BedrockMinecraftServer.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\player\Cape.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\Tuple.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\cache\CachedPlayerSkinPart.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\packet\impl\bedrock\BedrockPacketUnconnectedPing.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\exception\impl\ResourceNotFoundException.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\config\OpenAPIConfiguration.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\cache\CachedPlayerName.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\service\pinger\MinecraftServerPinger.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\config\Config.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\exception\impl\RateLimitException.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\response\ErrorResponse.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\Main.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\DNSUtils.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\packet\impl\bedrock\BedrockPacketUnconnectedPong.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\service\PlayerService.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\IPUtils.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\UUIDUtils.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\dns\impl\ARecord.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\PlayerUtils.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\service\pinger\impl\JavaMinecraftServerPinger.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\packet\MinecraftJavaPacket.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\service\MojangService.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\ServerUtils.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\WebRequest.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\dns\impl\SRVRecord.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\repository\PlayerCacheRepository.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\repository\PlayerCacheRepository.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\mojang\MojangProfile.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\mojang\MojangProfile.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\repository\MinecraftServerCacheRepository.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\repository\MinecraftServerCacheRepository.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\JavaMinecraftVersion.java
|
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\exception\impl\BadRequestException.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\exception\impl\BadRequestException.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\server\MinecraftServer.java
|
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\packet\impl\java\JavaPacketStatusInStart.java
|
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\server\JavaMinecraftServer.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\server\JavaMinecraftServer.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\player\Cape.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\service\skin\impl\FlatRenderer.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\Tuple.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\ExpiringSet.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\exception\impl\ResourceNotFoundException.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\service\skin\SkinPartRenderer.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\ColorUtils.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\ColorUtils.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\config\OpenAPIConfiguration.java
|
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\mojang\JavaServerStatusToken.java
|
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\packet\impl\java\JavaPacketHandshakingInSetProtocol.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\packet\impl\java\JavaPacketHandshakingInSetProtocol.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\controller\HomeController.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\controller\HomeController.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\service\pinger\impl\BedrockMinecraftServerPinger.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\exception\ExceptionControllerAdvice.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\exception\ExceptionControllerAdvice.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\cache\CachedPlayerName.java
|
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\service\pinger\MinecraftServerPinger.java
|
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\EnumUtils.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\EnumUtils.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\config\Config.java
|
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\exception\impl\MojangAPIRateLimitException.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\exception\impl\MojangAPIRateLimitException.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\exception\impl\RateLimitException.java
|
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\response\ErrorResponse.java
|
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\controller\ServerController.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\controller\ServerController.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\Main.java
|
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\DNSUtils.java
|
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\service\PlayerService.java
|
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\IPUtils.java
|
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\cache\CachedMinecraftServer.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\cache\CachedMinecraftServer.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\player\Skin.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\model\player\Skin.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\main\java\cc.fascinated\common\UUIDUtils.java
|
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
cc\fascinated\PlayerControllerTests.class
|
cc\fascinated\tests\PlayerControllerTests.class
|
||||||
cc\fascinated\TestRedisConfig.class
|
cc\fascinated\tests\ServerControllerTests.class
|
||||||
|
cc\fascinated\config\TestRedisConfig.class
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\test\java\cc\fascinated\TestRedisConfig.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\test\java\cc\fascinated\tests\PlayerControllerTests.java
|
||||||
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\test\java\cc\fascinated\PlayerControllerTests.java
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\test\java\cc\fascinated\config\TestRedisConfig.java
|
||||||
|
C:\Users\Liam\Desktop\Projects\Minecraft-Helper\src\test\java\cc\fascinated\tests\ServerControllerTests.java
|
||||||
|
Loading…
Reference in New Issue
Block a user