All checks were successful
Deploy App / docker (ubuntu-latest, 2.44.0, 17, 3.8.5) (push) Successful in 1m42s
58 lines
2.8 KiB
Java
58 lines
2.8 KiB
Java
package cc.fascinated.service.skin.impl;
|
|
|
|
import cc.fascinated.common.ImageUtils;
|
|
import cc.fascinated.model.player.Skin;
|
|
import cc.fascinated.service.skin.SkinRenderer;
|
|
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 BodyRenderer extends SkinRenderer {
|
|
|
|
private static final int WIDTH = 16;
|
|
private static final int HEIGHT = 32;
|
|
|
|
@Override
|
|
public byte[] renderPart(Skin skin, String partName, boolean renderOverlay, int size) {
|
|
log.info("Getting {} part bytes for {} with size {}", partName, skin.getUrl(), size);
|
|
try {
|
|
BufferedImage outputImage = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB);
|
|
Graphics2D graphics = outputImage.createGraphics();
|
|
|
|
// Get all the required body parts
|
|
BufferedImage head = this.getSkinPart(skin, Skin.PartPosition.HEAD, 1);
|
|
BufferedImage body = this.getSkinPart(skin, Skin.PartPosition.BODY, 1);
|
|
BufferedImage rightArm = this.getSkinPart(skin, Skin.PartPosition.RIGHT_ARM, 1);
|
|
BufferedImage leftArm = this.getSkinPart(skin, Skin.PartPosition.LEFT_ARM, 1);
|
|
BufferedImage rightLeg = this.getSkinPart(skin, Skin.PartPosition.RIGHT_LEG, 1);
|
|
BufferedImage leftLeg = this.getSkinPart(skin, Skin.PartPosition.LEFT_LEG, 1);
|
|
|
|
if (renderOverlay) { // Render the skin layers
|
|
applyOverlay(head, this.getSkinPart(skin, Skin.PartPosition.HEAD_OVERLAY_FRONT, 1));
|
|
applyOverlay(body, this.getSkinPart(skin, Skin.PartPosition.BODY_OVERLAY_FRONT, 1));
|
|
applyOverlay(rightArm, this.getSkinPart(skin, Skin.PartPosition.RIGHT_ARM_OVERLAY, 1));
|
|
applyOverlay(leftArm, this.getSkinPart(skin, Skin.PartPosition.LEFT_ARM_OVERLAY, 1));
|
|
applyOverlay(rightLeg, this.getSkinPart(skin, Skin.PartPosition.RIGHT_LEG_OVERLAY, 1));
|
|
applyOverlay(leftLeg, this.getSkinPart(skin, Skin.PartPosition.LEFT_LEG_OVERLAY, 1));
|
|
}
|
|
|
|
// Draw the body
|
|
graphics.drawImage(head, 4, 0, null);
|
|
graphics.drawImage(body, 4, 8, null);
|
|
graphics.drawImage(rightArm, skin.getModel() == Skin.Model.SLIM ? 1 : 0, 8, null);
|
|
graphics.drawImage(leftArm, 12, 8, null);
|
|
graphics.drawImage(rightLeg, 4, 20, null);
|
|
graphics.drawImage(leftLeg, 8, 20, null);
|
|
|
|
graphics.dispose(); // Clean up
|
|
return super.getBytes(ImageUtils.resize(outputImage, (double) size / HEIGHT), 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());
|
|
}
|
|
}
|
|
} |