This texture loader is only used if a post-1.12 red bed texture is not found.
*/
-public class BedTextureAdapter extends TextureLoader {
+public class BedTextureAdapter1_12 extends TextureLoader {
private final Texture bedHeadTop = new Texture();
private final Texture bedFootTop = new Texture();
private final Texture bedFootEnd = new Texture();
@@ -48,38 +47,42 @@ public class BedTextureAdapter extends TextureLoader {
private final AlternateTextures headSideLoader;
private final AlternateTextures headEndLoader;
- public BedTextureAdapter() {
+ private final Texture targetTexture;
+
+ public BedTextureAdapter1_12(Texture targetTexture) {
+ this.targetTexture = targetTexture;
bottomLoader = new AlternateTextures(
- new SimpleTexture("assets/minecraft/textures/blocks/planks_oak", bottom),
- new SimpleTexture("textures/blocks/wood", bottom),
- new IndexedTexture(0x04, bottom));
+ new SimpleTexture("assets/minecraft/textures/blocks/planks_oak", bottom),
+ new SimpleTexture("textures/blocks/wood", bottom),
+ new IndexedTexture(0x04, bottom));
footTopLoader = new AlternateTextures(
- new SimpleTexture("assets/minecraft/textures/blocks/bed_feet_top", bedFootTop),
- new SimpleTexture("textures/blocks/bed_feet_top", bedFootTop),
- new IndexedTexture(0x86, bedFootTop));
+ new SimpleTexture("assets/minecraft/textures/blocks/bed_feet_top", bedFootTop),
+ new SimpleTexture("textures/blocks/bed_feet_top", bedFootTop),
+ new IndexedTexture(0x86, bedFootTop));
headTopLoader = new AlternateTextures(
- new SimpleTexture("assets/minecraft/textures/blocks/bed_head_top", bedHeadTop),
- new SimpleTexture("textures/blocks/bed_head_top", bedHeadTop),
- new IndexedTexture(0x87, bedHeadTop));
+ new SimpleTexture("assets/minecraft/textures/blocks/bed_head_top", bedHeadTop),
+ new SimpleTexture("textures/blocks/bed_head_top", bedHeadTop),
+ new IndexedTexture(0x87, bedHeadTop));
footEndLoader = new AlternateTextures(
- new SimpleTexture("assets/minecraft/textures/blocks/bed_feet_end", bedFootEnd),
- new SimpleTexture("textures/blocks/bed_feet_end", bedFootEnd),
- new IndexedTexture(0x95, bedFootEnd));
+ new SimpleTexture("assets/minecraft/textures/blocks/bed_feet_end", bedFootEnd),
+ new SimpleTexture("textures/blocks/bed_feet_end", bedFootEnd),
+ new IndexedTexture(0x95, bedFootEnd));
footSideLoader = new AlternateTextures(
- new SimpleTexture("assets/minecraft/textures/blocks/bed_feet_side", bedFootSide),
- new SimpleTexture("textures/blocks/bed_feet_side", bedFootSide),
- new IndexedTexture(0x96, bedFootSide));
+ new SimpleTexture("assets/minecraft/textures/blocks/bed_feet_side", bedFootSide),
+ new SimpleTexture("textures/blocks/bed_feet_side", bedFootSide),
+ new IndexedTexture(0x96, bedFootSide));
headSideLoader = new AlternateTextures(
- new SimpleTexture("assets/minecraft/textures/blocks/bed_head_side", bedHeadSide),
- new SimpleTexture("textures/blocks/bed_head_side", bedHeadSide),
- new IndexedTexture(0x97, bedHeadSide));
+ new SimpleTexture("assets/minecraft/textures/blocks/bed_head_side", bedHeadSide),
+ new SimpleTexture("textures/blocks/bed_head_side", bedHeadSide),
+ new IndexedTexture(0x97, bedHeadSide));
headEndLoader = new AlternateTextures(
- new SimpleTexture("assets/minecraft/textures/blocks/bed_head_end", bedHeadEnd),
- new SimpleTexture("textures/blocks/bed_head_end", bedHeadEnd),
- new IndexedTexture(0x98, bedHeadEnd));
+ new SimpleTexture("assets/minecraft/textures/blocks/bed_head_end", bedHeadEnd),
+ new SimpleTexture("textures/blocks/bed_head_end", bedHeadEnd),
+ new IndexedTexture(0x98, bedHeadEnd));
}
- @Override public boolean load(LayeredResourcePacks texturePack) {
+ @Override
+ public boolean load(LayeredResourcePacks texturePack) {
boolean allLoaded = true;
int scale = 1;
BitmapImage bitmap = new BitmapImage(64, 64);
@@ -89,7 +92,7 @@ public BedTextureAdapter() {
scale = bottom.getWidth() / 16;
if (16 * scale != bottom.getWidth()) {
Log.warn("Can't load pre-1.12 bed texture: oak plank texture size must be "
- + "an even multiple of 16.");
+ + "an even multiple of 16.");
return false;
}
bitmap = new BitmapImage(64 * scale, 64 * scale);
@@ -100,41 +103,41 @@ public BedTextureAdapter() {
}
if (footEndLoader.load(texturePack) && checkSize(bedFootEnd, scale)) {
bitmap.blit(bedFootEnd.getBitmap().vFlipped(),
- 22 * scale, 22 * scale,
- 0, 3 * scale,
- 16 * scale, 9 * scale);
+ 22 * scale, 22 * scale,
+ 0, 3 * scale,
+ 16 * scale, 9 * scale);
// Leg 1 (left):
bitmap.blit(bedFootEnd.getBitmap(),
- 53 * scale, 3 * scale,
- 0, 13 * scale,
- 3 * scale, 16 * scale);
+ 53 * scale, 3 * scale,
+ 0, 13 * scale,
+ 3 * scale, 16 * scale);
// Leg 3 (right):
bitmap.blit(bedFootEnd.getBitmap(),
- 50 * scale, 15 * scale,
- 13 * scale, 13 * scale,
- 16 * scale, 16 * scale);
+ 50 * scale, 15 * scale,
+ 13 * scale, 13 * scale,
+ 16 * scale, 16 * scale);
} else {
allLoaded = false;
}
if (footSideLoader.load(texturePack) && checkSize(bedFootSide, scale)) {
bitmap.blit(bedFootSide.getBitmap().rotated().vFlipped(),
- 0, 28 * scale,
- 3 * scale, 0,
- 9 * scale, 16 * scale);
+ 0, 28 * scale,
+ 3 * scale, 0,
+ 9 * scale, 16 * scale);
bitmap.blit(bedFootSide.getBitmap().rotated270(),
- 22 * scale, 28 * scale,
- 7 * scale, 0,
- 13 * scale, 16 * scale);
+ 22 * scale, 28 * scale,
+ 7 * scale, 0,
+ 13 * scale, 16 * scale);
// Leg 1 (bottom left):
bitmap.blit(bedFootSide.getBitmap().hFlipped(),
- 50 * scale, 3 * scale,
- 13 * scale, 13 * scale,
- 16 * scale, 16 * scale);
+ 50 * scale, 3 * scale,
+ 13 * scale, 13 * scale,
+ 16 * scale, 16 * scale);
// Leg 3 (bottom right):
bitmap.blit(bedFootSide.getBitmap(),
- 53 * scale, 15 * scale,
- 0, 13 * scale,
- 3 * scale, 16 * scale);
+ 53 * scale, 15 * scale,
+ 0, 13 * scale,
+ 3 * scale, 16 * scale);
} else {
allLoaded = false;
}
@@ -145,41 +148,41 @@ public BedTextureAdapter() {
}
if (headEndLoader.load(texturePack) && checkSize(bedHeadEnd, scale)) {
bitmap.blit(bedHeadEnd.getBitmap().vFlipped(),
- 6 * scale, 0,
- 0, 3 * scale,
- 16 * scale, 9 * scale);
+ 6 * scale, 0,
+ 0, 3 * scale,
+ 16 * scale, 9 * scale);
// Leg 4 (left):
bitmap.blit(bedHeadEnd.getBitmap(),
- 53 * scale, 21 * scale,
- 0, 13 * scale,
- 3 * scale, 16 * scale);
+ 53 * scale, 21 * scale,
+ 0, 13 * scale,
+ 3 * scale, 16 * scale);
// Leg 2 (right):
bitmap.blit(bedHeadEnd.getBitmap(),
- 50 * scale, 9 * scale,
- 13 * scale, 13 * scale,
- 16 * scale, 16 * scale);
+ 50 * scale, 9 * scale,
+ 13 * scale, 13 * scale,
+ 16 * scale, 16 * scale);
} else {
allLoaded = false;
}
if (headSideLoader.load(texturePack) && checkSize(bedHeadSide, scale)) {
bitmap.blit(bedHeadSide.getBitmap().rotated().vFlipped(),
- 0, 6 * scale,
- 3 * scale, 0,
- 9 * scale, 16 * scale);
+ 0, 6 * scale,
+ 3 * scale, 0,
+ 9 * scale, 16 * scale);
bitmap.blit(bedHeadSide.getBitmap().rotated270(),
- 22 * scale, 6 * scale,
- 7 * scale, 0,
- 13 * scale, 16 * scale);
+ 22 * scale, 6 * scale,
+ 7 * scale, 0,
+ 13 * scale, 16 * scale);
// Leg 4 (top left):
bitmap.blit(bedHeadSide.getBitmap(),
- 50 * scale, 21 * scale,
- 13 * scale, 13 * scale,
- 16 * scale, 16 * scale);
+ 50 * scale, 21 * scale,
+ 13 * scale, 13 * scale,
+ 16 * scale, 16 * scale);
// Leg 2 (top right):
bitmap.blit(bedHeadSide.getBitmap().hFlipped(),
- 53 * scale, 9 * scale,
- 0, 13 * scale,
- 3 * scale, 16 * scale);
+ 53 * scale, 9 * scale,
+ 0, 13 * scale,
+ 3 * scale, 16 * scale);
} else {
allLoaded = false;
}
@@ -188,29 +191,31 @@ public BedTextureAdapter() {
} else {
allLoaded = false;
}
- Texture.bedRed.setTexture(bitmap);
+ this.targetTexture.setTexture(bitmap);
return allLoaded;
}
/**
* Ensures that the bed texture part has the right dimensions.
+ *
* @return {@code true} if the texture has the correct size
*/
private boolean checkSize(Texture texture, int scale) {
if (texture.getWidth() != 16 * scale) {
Log.warnf("Bed texture has wrong scale: expected %d, but was %d.",
- 16 * scale, texture.getWidth());
+ 16 * scale, texture.getWidth());
return false;
}
if (texture.getWidth() != texture.getHeight()) {
Log.warnf("Bed texture is not square: %dx%d",
- texture.getWidth(), texture.getHeight());
+ texture.getWidth(), texture.getHeight());
return false;
}
return true;
}
- @Override protected boolean load(InputStream imageStream) throws IOException, TextureFormatError {
+ @Override
+ protected boolean load(InputStream imageStream) throws IOException, TextureFormatError {
return false;
}
}
diff --git a/chunky/src/java/se/llbit/chunky/resources/texturepack/BedTextureAdapter26_2.java b/chunky/src/java/se/llbit/chunky/resources/texturepack/BedTextureAdapter26_2.java
new file mode 100644
index 0000000000..b96cd88707
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/resources/texturepack/BedTextureAdapter26_2.java
@@ -0,0 +1,107 @@
+package se.llbit.chunky.resources.texturepack;
+
+import se.llbit.chunky.resources.BitmapImage;
+import se.llbit.chunky.resources.LayeredResourcePacks;
+import se.llbit.chunky.resources.Texture;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.function.Function;
+
+/**
+ * This texture loader is an adapter for the 26.2-snapshot-3 (or later) bed textures.
+ * It composes post 26.2-snapshot-3 textures from post-1.12 bed textures.
+ */
+public class BedTextureAdapter26_2 extends TextureLoader {
+ private final BedTexture.Textures targetTextures;
+ private final Function