alpha-blend translucent block and entity texels (stained glass, slime skin, text backgrounds)

This commit is contained in:
MineTec committed 2026-11-04 13:49:45 +01:00
1 parent 37fa1d8f56
commit 9a6c8b538d
8 files changed
+283 -110

No files matched your search

+3 -2
View File
@@ -82,9 +82,10 @@ public class ObjectTestRender {
objs.add(obj(ObjectState.Kind.TEXT,
Affine.translation(1.5, 3.0, 0).mul(Affine.rotY(Math.PI)).mul(Affine.scale(0.025)), null, null,
List.of("Hallo PixelPics!", "Zeile zwei äöü"), 0xFF203040));
// Text seen from the BACK (front faces +Z, camera is on -Z) and a shield item.
// Text seen from the BACK (front faces +Z, camera is on -Z) on the vanilla default 25% black
// background (blended), and a shield item.
objs.add(obj(ObjectState.Kind.TEXT, Affine.translation(-0.5, 3.0, 0).mul(Affine.scale(0.025)), null, null,
List.of("Rueckseite"), 0));
List.of("Rueckseite"), 0x40000000));
objs.add(obj(ObjectState.Kind.ITEM, Affine.translation(4, 1.0, 0.5), null, "shield", List.of(), 0));
// Dropped item (flat) on the ground.
objs.add(obj(ObjectState.Kind.ITEM, Affine.translation(-1, 0.3, 0.5).mul(Affine.scale(0.5)), null, "apple", List.of(), 0));
+36
View File
@@ -56,6 +56,7 @@ public class PPTest extends JavaPlugin {
scenes.put("pistondown", new Scene("pistondown", this::piston, -1.6, 2.6, -1.6, 0.5, 1.4, 0.5));
scenes.put("pistonup", new Scene("pistonup", this::piston, 0.4, 2.6, -1.6, 2.5, 1.4, 0.5));
scenes.put("vehicles", new Scene("vehicles", this::vehicles, 5, 3, -7, 5, 0.6, 1.5));
scenes.put("translucent", new Scene("translucent", this::translucent, 4.5, 2.8, -5.5, 4.5, 0.8, 2));
}
@Override
@@ -474,4 +475,39 @@ public class PPTest extends JavaPlugin {
spawn(o, 6, 0, 3, 90, EntityType.CHERRY_CHEST_BOAT);
spawn(o, 9, 0, 3, 120, EntityType.MANGROVE_BOAT);
}
/**
* Alpha blending: a stained-glass wall (inner faces culled) and stacked glass colours in front of a striped
* wool wall, ice/tinted glass/slime/honey blocks, connected panes, glass under water, a slime and a sulfur
* cube (translucent outer skins, one behind glass) and a text display with the default background.
*/
private void translucent(Location o) {
java.util.function.BiConsumer<int[], String> put = (p, data) -> o.clone().add(p[0], p[1], p[2]).getBlock()
.setBlockData(Bukkit.createBlockData("minecraft:" + data), false);
for (int x = -1; x <= 10; x++)
for (int y = 0; y <= 4; y++) put.accept(new int[] {x, y, 5}, (x + y) % 2 == 0 ? "white_wool" : "black_wool");
for (int x = 0; x <= 2; x++) for (int y = 0; y <= 1; y++) put.accept(new int[] {x, y, 1}, "red_stained_glass");
put.accept(new int[] {3, 0, 1}, "blue_stained_glass");
put.accept(new int[] {3, 0, 0}, "yellow_stained_glass");
put.accept(new int[] {4, 0, 1}, "ice");
put.accept(new int[] {4, 1, 1}, "tinted_glass");
put.accept(new int[] {5, 0, 1}, "slime_block");
put.accept(new int[] {6, 0, 1}, "honey_block");
put.accept(new int[] {7, 0, 1}, "lime_stained_glass_pane[east=true]");
put.accept(new int[] {8, 0, 1}, "lime_stained_glass_pane[west=true,east=true]");
put.accept(new int[] {9, 0, 1}, "lime_stained_glass_pane[west=true]");
for (int x = 0; x <= 2; x++) put.accept(new int[] {x, -1, -2}, "water");
put.accept(new int[] {1, -2, -2}, "magenta_stained_glass");
put.accept(new int[] {0, -2, -2}, "sand");
put.accept(new int[] {2, -2, -2}, "sand");
Slime slime = spawn(o, 1.5, 0, 3, 200, Slime.class);
slime.setSize(2);
Slime front = spawn(o, 7.5, 0, -1.5, 160, Slime.class);
front.setSize(1);
EntityType sulfur = Registry.ENTITY_TYPE.get(NamespacedKey.minecraft("sulfur_cube"));
if (sulfur != null) spawn(o, 5.5, 0, -1.5, 200, sulfur);
TextDisplay t = spawn(o, 4.5, 2.6, 0, 0, TextDisplay.class);
t.text(Component.text("Default background"));
t.setBillboard(Display.Billboard.CENTER);
}
}