cleanup isometric skin renderer

This commit is contained in:
Lee 2024-04-11 03:51:21 +01:00
parent b682153ebb
commit e9fa275002
5 changed files with 10 additions and 17 deletions

@ -1,11 +1,13 @@
package cc.fascinated.common; package cc.fascinated.common;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.extern.log4j.Log4j2;
import java.awt.*; import java.awt.*;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
@Log4j2
public class ImageUtils { public class ImageUtils {
/** /**

@ -3,7 +3,7 @@ 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.SkinPartRenderer; import cc.fascinated.service.skin.SkinRenderer;
import cc.fascinated.service.skin.impl.FlatRenderer; import cc.fascinated.service.skin.impl.FlatRenderer;
import cc.fascinated.service.skin.impl.IsometricHeadRenderer; import cc.fascinated.service.skin.impl.IsometricHeadRenderer;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
@ -101,7 +101,7 @@ public class Skin {
/** /**
* The skin part parser for the part. * The skin part parser for the part.
*/ */
private final SkinPartRenderer skinPartParser; private final SkinRenderer skinPartParser;
/** /**
* Gets the name of the part. * Gets the name of the part.

@ -13,7 +13,7 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
@AllArgsConstructor @Getter @Log4j2 @AllArgsConstructor @Getter @Log4j2
public abstract class SkinPartRenderer { public abstract class SkinRenderer {
/** /**
* Gets the skin part image. * Gets the skin part image.

@ -1,18 +1,16 @@
package cc.fascinated.service.skin.impl; package cc.fascinated.service.skin.impl;
import cc.fascinated.model.player.Skin; import cc.fascinated.model.player.Skin;
import cc.fascinated.service.skin.SkinPartRenderer; import cc.fascinated.service.skin.SkinRenderer;
import lombok.Getter; import lombok.Getter;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import javax.imageio.ImageIO;
import java.awt.*; import java.awt.*;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
@Getter @Log4j2 @Getter @Log4j2
public class FlatRenderer extends SkinPartRenderer { public class FlatRenderer extends SkinRenderer {
/** /**
* The x and y position of the part. * The x and y position of the part.
@ -49,14 +47,7 @@ public class FlatRenderer extends SkinPartRenderer {
graphics.setTransform(AffineTransform.getScaleInstance(scale, scale)); graphics.setTransform(AffineTransform.getScaleInstance(scale, scale));
graphics.drawImage(this.getSkinPart(skin, this.x, this.y, this.widthAndHeight, this.widthAndHeight, 1), 0, 0, null); graphics.drawImage(this.getSkinPart(skin, this.x, this.y, this.widthAndHeight, this.widthAndHeight, 1), 0, 0, null);
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { return super.getBytes(outputImage, skin, partName);
ImageIO.write(outputImage, "png", outputStream);
// Cleanup
outputStream.flush();
graphics.dispose();
log.info("Successfully got {} part bytes for {}", partName, skin.getUrl());
return outputStream.toByteArray();
}
} 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);
throw new RuntimeException("Failed to get " + partName + " part for " + skin.getUrl()); throw new RuntimeException("Failed to get " + partName + " part for " + skin.getUrl());

@ -2,7 +2,7 @@ package cc.fascinated.service.skin.impl;
import cc.fascinated.common.ImageUtils; import cc.fascinated.common.ImageUtils;
import cc.fascinated.model.player.Skin; import cc.fascinated.model.player.Skin;
import cc.fascinated.service.skin.SkinPartRenderer; import cc.fascinated.service.skin.SkinRenderer;
import lombok.Getter; import lombok.Getter;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
@ -11,7 +11,7 @@ import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
@Getter @Log4j2 @Getter @Log4j2
public class IsometricHeadRenderer extends SkinPartRenderer { public class IsometricHeadRenderer extends SkinRenderer {
private static final double SKEW_A = 26d / 45d; // 0.57777777 private static final double SKEW_A = 26d / 45d; // 0.57777777
private static final double SKEW_B = SKEW_A * 2d; // 1.15555555 private static final double SKEW_B = SKEW_A * 2d; // 1.15555555