rescale rotated block elements like vanilla (cross plants, amethyst, campfire, fire, raised rails), euler x/y/z element rotations (hanging sign chains), inverted inner-face elements (spawner, vault), vanilla-like water: single surface blend with depth sky light instead of path-length density, water faces against glass/ice/leaves, block geometry and water test scenes

This commit is contained in:
MineTec committed 2026-11-04 19:25:17 +01:00
1 parent 2c2e9e2e32
commit 318a309580
7 files changed
+510 -38

No files matched your search

+110 -1
View File
@@ -176,6 +176,19 @@ public class PPTest extends JavaPlugin {
scenes.put("rf_vlayers_close", new Scene("rf_vlayers_close", this::rfVisualLayers, 3.2, 1.5, -2.4, 3.2, 0.5, 1));
scenes.put("rf_vstates", new Scene("rf_vstates", this::rfVisualStates, 5.5, 3.4, -6, 5.5, 0.9, 2.5));
scenes.put("rf_vstates_close", new Scene("rf_vstates_close", this::rfVisualStates, 3.2, 1.7, -2.6, 3.2, 0.9, 0.5));
// Block geometry (vanilla FaceBakery): rescaled element rotations (cross plants, amethyst, campfire, fire,
// raised rails, tripwire hooks, coral wall fans, dripleaf, stems, sea pickles), Euler x/y/z element
// rotations (hanging sign rot 3/7/11/15 chains), inverted elements (spawner/vault inner faces), 22.5° steps.
scenes.put("geo_plants", new Scene("geo_plants", this::geoPlants, 5.5, 2.6, -3.2, 5.5, 0.4, 2.2));
scenes.put("geo_plants_close", new Scene("geo_plants_close", this::geoPlants, 2.5, 1.1, -0.9, 2.5, 0.5, 1));
scenes.put("geo_misc", new Scene("geo_misc", this::geoMisc, 6, 3.4, -4.5, 6, 0.5, 3));
scenes.put("geo_misc_close", new Scene("geo_misc_close", this::geoMisc, 3, 1.6, -1.6, 3, 0.4, 1));
scenes.put("geo_misc_signs", new Scene("geo_misc_signs", this::geoMisc, 4, 2.4, 3.5, 4, 2.2, 7));
// Water depth vs. translucency: a pool with columns 1-6 blocks deep (x pairs), each with a glass block,
// a gold block and white stained glass on the sand bottom; seen from the shore, from above and from inside.
scenes.put("geo_water", new Scene("geo_water", this::geoWater, 6, 3.5, -5, 6, -3, 2.5));
scenes.put("geo_water_top", new Scene("geo_water_top", this::geoWater, 6, 9, 2.4, 6, -4, 2.5));
scenes.put("geo_water_under", new Scene("geo_water_under", this::geoWater, 11.5, -3.3, 0.3, 4, -5, 3));
}
private void rfVisualLayers(Location o) {
@@ -587,7 +600,7 @@ public class PPTest extends JavaPlugin {
Location eye = o.clone().add(sc.camX, sc.camY, sc.camZ);
Vector look = o.clone().add(sc.lookX, sc.lookY, sc.lookZ).toVector().subtract(eye.toVector());
eye.setDirection(look);
RenderJob job = r.prepare(eye, sc.name.endsWith("_sq") ? new Resolution(384, 384) : sc.name.startsWith("proj_") || sc.name.startsWith("rf_") || sc.name.startsWith("pose_") || sc.name.startsWith("frames") ? new Resolution(960, 640) : new Resolution(480, 320), null);
RenderJob job = r.prepare(eye, sc.name.endsWith("_sq") ? new Resolution(384, 384) : sc.name.startsWith("proj_") || sc.name.startsWith("rf_") || sc.name.startsWith("pose_") || sc.name.startsWith("frames") || sc.name.startsWith("geo_") ? new Resolution(960, 640) : new Resolution(480, 320), null);
if (sc.name.equals("dbg")) {
try {
java.lang.reflect.Field f = DefaultScreenRenderer.class.getDeclaredField("objectBaker");
@@ -1588,6 +1601,102 @@ public class PPTest extends JavaPlugin {
frame(o, 5, 5, 5, BlockFace.NORTH, false, synthMap(), 0, true);
}
/** Rows of cross/rescaled plants on grass (z=0..3), potted plants and stems; see the geo_* scenes. */
private void geoPlants(Location o) {
for (int x = -1; x <= 12; x++) for (int z = -1; z <= 5; z++) put(o, x, -1, z, "grass_block");
String[] row0 = {"short_grass", "fern", "dandelion", "poppy", "azure_bluet", "oxeye_daisy", "cornflower",
"oak_sapling", "birch_sapling", "cherry_sapling", "dead_bush", "brown_mushroom"};
String[] row1 = {"sweet_berry_bush[age=3]", "sugar_cane", "cobweb", "red_tulip", "wither_rose", "bush",
"short_dry_grass", "firefly_bush", "mangrove_propagule[hanging=false,stage=1]", "lily_of_the_valley",
"pumpkin_stem[age=7]", "crimson_roots"};
String[] row3 = {"potted_fern", "potted_oak_sapling", "potted_red_tulip", "potted_dead_bush",
"potted_azalea_bush", "potted_mangrove_propagule", "big_dripleaf_stem[facing=north]",
"sea_pickle[pickles=4,waterlogged=false]", "sea_pickle[pickles=1,waterlogged=false]", "azalea",
"flowering_azalea", "pointed_dripstone[thickness=tip,vertical_direction=up]"};
for (int x = 0; x < 12; x++) {
put(o, x, 0, 0, row0[x]);
put(o, x, 0, 1, row1[x]);
put(o, x, 0, 3, row3[x]);
}
for (int x = 0; x < 12; x += 3) {
put(o, x, 0, 2, "tall_grass[half=lower]");
put(o, x, 1, 2, "tall_grass[half=upper]");
put(o, x + 1, 0, 2, "sunflower[half=lower]");
put(o, x + 1, 1, 2, "sunflower[half=upper]");
}
put(o, 2, 0, 2, "big_dripleaf[facing=north,tilt=none]");
put(o, 5, 0, 2, "melon_stem[age=4]");
put(o, 8, 0, 2, "attached_pumpkin_stem[facing=east]");
put(o, 9, 0, 2, "pumpkin");
put(o, 11, 0, 2, "large_fern[half=lower]");
put(o, 11, 1, 2, "large_fern[half=upper]");
}
/**
* Row z=0: amethyst cluster/buds (up/north/east), campfires, fire; z=2: raised rails, tripwire hooks, coral wall
* fans, spawner/vault/trial spawner (inverted inner faces), snow layer 2; z=6/7: hanging signs rot 0-15 under a
* stone ceiling (rot 3/7/11/15 = Euler chain rotation).
*/
private void geoMisc(Location o) {
put(o, 0, 0, 0, "amethyst_cluster[facing=up]");
put(o, 1, 0, 0, "large_amethyst_bud[facing=up]");
put(o, 2, 0, 0, "medium_amethyst_bud[facing=up]");
put(o, 3, 0, 0, "small_amethyst_bud[facing=up]");
put(o, 4, 0, 1, "amethyst_block");
put(o, 4, 0, 0, "amethyst_cluster[facing=north]");
put(o, 5, 0, 1, "amethyst_block");
put(o, 5, 1, 1, "large_amethyst_bud[facing=up]");
put(o, 6, 0, 0, "campfire[lit=true,facing=south]");
put(o, 7, 0, 0, "campfire[lit=false,facing=east]");
put(o, 8, 0, 0, "soul_campfire[lit=true,facing=south]");
put(o, 9, 0, 0, "netherrack");
put(o, 9, 1, 0, "fire");
put(o, 10, 0, 1, "stone");
put(o, 10, 0, 0, "fire[north=true]");
put(o, 11, 0, 0, "soul_fire");
put(o, 11, -1, 0, "soul_sand");
put(o, 0, 0, 2, "rail[shape=ascending_east]");
put(o, 1, 0, 2, "stone");
put(o, 2, 0, 2, "powered_rail[shape=ascending_north,powered=true]");
put(o, 2, 0, 1, "stone");
put(o, 3, 0, 2, "detector_rail[shape=ascending_west]");
put(o, 2, 0, 3, "stone");
put(o, 4, 0, 3, "stone");
put(o, 4, 0, 2, "tripwire_hook[attached=true,facing=north,powered=false]");
put(o, 5, 0, 3, "stone");
put(o, 5, 0, 2, "tripwire_hook[attached=true,facing=north,powered=true]");
put(o, 6, 0, 3, "stone");
put(o, 6, 0, 2, "tube_coral_wall_fan[facing=north,waterlogged=false]");
put(o, 7, 0, 3, "stone");
put(o, 7, 0, 2, "fire_coral_wall_fan[facing=north,waterlogged=false]");
put(o, 8, 0, 2, "spawner");
put(o, 9, 0, 2, "vault[facing=north]");
put(o, 10, 0, 2, "trial_spawner");
put(o, 11, 0, 2, "snow[layers=2]");
for (int x = -1; x <= 9; x++) for (int z = 5; z <= 8; z++) put(o, x, 4, z, "stone");
for (int r = 0; r < 16; r++) put(o, r % 8, 3, 6 + r / 8, "oak_hanging_sign[rotation=" + r + ",attached=false]");
}
/** Pool: water columns 1..6 deep (two blocks wide each) on sand, with glass/gold/white stained glass at the bottom. */
private void geoWater(Location o) {
for (int x = -1; x <= 12; x++)
for (int z = -1; z <= 5; z++)
for (int y = -8; y <= -1; y++) {
boolean wall = x == -1 || x == 12 || z == -1 || z == 5;
int depth = x < 0 || x > 11 ? 0 : x / 2 + 1;
String b = wall ? "smooth_stone" : y >= -depth ? "water" : y == -depth - 1 ? "sand" : "stone";
put(o, x, y, z, b);
}
for (int x = 0; x < 12; x += 2) {
int y = -(x / 2 + 1);
put(o, x, y, 1, "glass");
put(o, x + 1, y, 1, "glass");
put(o, x, y, 2, "gold_block");
put(o, x + 1, y, 3, "white_stained_glass");
}
for (int x = -1; x <= 12; x++) put(o, x, 0, 6, "stone");
}
/** Black wall z=6 with a white vertical stripe (x=5) and a white horizontal stripe (y=5). */
private void camStripes(Location o) {
for (int a = -6; a < 18; a++)