Fix capes being scaled wrong and invisible skins (#1940)

* Fix capes being scaled wrong and invisible skins

* Flush old image objects

* Remove alpha workaround and fix more scaling issues

* Remove unnecessary scale

* Reduce diff

Co-authored-by: Camotoy <20743703+Camotoy@users.noreply.github.com>
This commit is contained in:
rtm516 2021-03-03 23:00:29 +00:00 committed by GitHub
parent e4e9758950
commit e0e435fdc5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -413,14 +413,23 @@ public class SkinProvider {
// if the requested image is a cape // if the requested image is a cape
if (provider != null) { if (provider != null) {
if (image.getWidth() > 64) { if (image.getWidth() > 64) {
image = scale(image, 64, 32); // Prevent weirdly-scaled capes from being cut off
BufferedImage newImage = new BufferedImage(128, 64, BufferedImage.TYPE_INT_ARGB);
Graphics g = newImage.createGraphics();
g.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);
g.dispose();
image.flush();
image = scale(newImage, 64, 32);
} }
} else { } else {
// Very rarely, skins can be larger than Minecraft's default. // Very rarely, skins can be larger than Minecraft's default.
// Bedrock will not render anything above a width of 128. // Bedrock will not render anything above a width of 128.
if (image.getWidth() > 128) { if (image.getWidth() > 128) {
image = scale(image, 128, image.getHeight() / (image.getWidth() / 128)); // On Height: Scale by the amount we divided width by, or simply cut down to 128
image = scale(image, 128, image.getHeight() >= 256 ? (image.getHeight() / (image.getWidth() / 128)) : 128);
} }
// TODO remove alpha channel
} }
byte[] data = bufferedImageToImageData(image); byte[] data = bufferedImageToImageData(image);