From e775abb72f37c391ad30198c0d5e2461c2ddc274 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 21 Jun 2025 07:54:23 +0800 Subject: [PATCH 01/15] =?UTF-8?q?feat(block):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=A5=BC=E6=A2=AF=E6=96=B9=E5=9D=97=E8=A1=8C=E4=B8=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../item/recipe/BukkitRecipeManager.java | 1 + common-files/src/main/resources/mappings.yml | 323 +++++++ .../default/configuration/templates.yml | 906 ++++++++++++++++++ 3 files changed, 1230 insertions(+) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/BukkitRecipeManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/BukkitRecipeManager.java index bbbc98c93..9560179ce 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/BukkitRecipeManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/BukkitRecipeManager.java @@ -305,6 +305,7 @@ public class BukkitRecipeManager extends AbstractRecipeManager { super.unload(); try { if (VersionHelper.isOrAbove1_21_2()) { + // TODO: 排查为什么会出现并发修改问题 CoreReflections.method$RecipeManager$finalizeRecipeLoading.invoke(nmsRecipeManager); } } catch (ReflectiveOperationException e) { diff --git a/common-files/src/main/resources/mappings.yml b/common-files/src/main/resources/mappings.yml index 02a6b556b..5859904b5 100644 --- a/common-files/src/main/resources/mappings.yml +++ b/common-files/src/main/resources/mappings.yml @@ -3959,6 +3959,329 @@ $$>=1.20.3#slab: minecraft:oxidized_cut_copper_slab[type=top,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_slab[type=top,waterlogged=true] minecraft:oxidized_cut_copper_slab[type=double,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_slab[type=double,waterlogged=true] +#### Stairs #### +$$>=1.20.3#stairs: + minecraft:cut_copper_stairs[facing=east,half=bottom,shape=straight,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=east,half=bottom,shape=straight,waterlogged=false] + minecraft:cut_copper_stairs[facing=east,half=bottom,shape=straight,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=east,half=bottom,shape=straight,waterlogged=true] + minecraft:cut_copper_stairs[facing=east,half=bottom,shape=inner_left,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=east,half=bottom,shape=inner_left,waterlogged=false] + minecraft:cut_copper_stairs[facing=east,half=bottom,shape=inner_left,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=east,half=bottom,shape=inner_left,waterlogged=true] + minecraft:cut_copper_stairs[facing=east,half=bottom,shape=inner_right,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=east,half=bottom,shape=inner_right,waterlogged=false] + minecraft:cut_copper_stairs[facing=east,half=bottom,shape=inner_right,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=east,half=bottom,shape=inner_right,waterlogged=true] + minecraft:cut_copper_stairs[facing=east,half=bottom,shape=outer_left,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=east,half=bottom,shape=outer_left,waterlogged=false] + minecraft:cut_copper_stairs[facing=east,half=bottom,shape=outer_left,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=east,half=bottom,shape=outer_left,waterlogged=true] + minecraft:cut_copper_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=false] + minecraft:cut_copper_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=true] + minecraft:cut_copper_stairs[facing=east,half=top,shape=straight,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=east,half=top,shape=straight,waterlogged=false] + minecraft:cut_copper_stairs[facing=east,half=top,shape=straight,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=east,half=top,shape=straight,waterlogged=true] + minecraft:cut_copper_stairs[facing=east,half=top,shape=inner_left,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=east,half=top,shape=inner_left,waterlogged=false] + minecraft:cut_copper_stairs[facing=east,half=top,shape=inner_left,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=east,half=top,shape=inner_left,waterlogged=true] + minecraft:cut_copper_stairs[facing=east,half=top,shape=inner_right,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=east,half=top,shape=inner_right,waterlogged=false] + minecraft:cut_copper_stairs[facing=east,half=top,shape=inner_right,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=east,half=top,shape=inner_right,waterlogged=true] + minecraft:cut_copper_stairs[facing=east,half=top,shape=outer_left,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=east,half=top,shape=outer_left,waterlogged=false] + minecraft:cut_copper_stairs[facing=east,half=top,shape=outer_left,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=east,half=top,shape=outer_left,waterlogged=true] + minecraft:cut_copper_stairs[facing=east,half=top,shape=outer_right,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=east,half=top,shape=outer_right,waterlogged=false] + minecraft:cut_copper_stairs[facing=east,half=top,shape=outer_right,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=east,half=top,shape=outer_right,waterlogged=true] + minecraft:cut_copper_stairs[facing=south,half=bottom,shape=straight,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=south,half=bottom,shape=straight,waterlogged=false] + minecraft:cut_copper_stairs[facing=south,half=bottom,shape=straight,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=south,half=bottom,shape=straight,waterlogged=true] + minecraft:cut_copper_stairs[facing=south,half=bottom,shape=inner_left,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=south,half=bottom,shape=inner_left,waterlogged=false] + minecraft:cut_copper_stairs[facing=south,half=bottom,shape=inner_left,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=south,half=bottom,shape=inner_left,waterlogged=true] + minecraft:cut_copper_stairs[facing=south,half=bottom,shape=inner_right,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=south,half=bottom,shape=inner_right,waterlogged=false] + minecraft:cut_copper_stairs[facing=south,half=bottom,shape=inner_right,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=south,half=bottom,shape=inner_right,waterlogged=true] + minecraft:cut_copper_stairs[facing=south,half=bottom,shape=outer_left,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=south,half=bottom,shape=outer_left,waterlogged=false] + minecraft:cut_copper_stairs[facing=south,half=bottom,shape=outer_left,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=south,half=bottom,shape=outer_left,waterlogged=true] + minecraft:cut_copper_stairs[facing=south,half=bottom,shape=outer_right,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=south,half=bottom,shape=outer_right,waterlogged=false] + minecraft:cut_copper_stairs[facing=south,half=bottom,shape=outer_right,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=south,half=bottom,shape=outer_right,waterlogged=true] + minecraft:cut_copper_stairs[facing=south,half=top,shape=straight,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=south,half=top,shape=straight,waterlogged=false] + minecraft:cut_copper_stairs[facing=south,half=top,shape=straight,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=south,half=top,shape=straight,waterlogged=true] + minecraft:cut_copper_stairs[facing=south,half=top,shape=inner_left,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=south,half=top,shape=inner_left,waterlogged=false] + minecraft:cut_copper_stairs[facing=south,half=top,shape=inner_left,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=south,half=top,shape=inner_left,waterlogged=true] + minecraft:cut_copper_stairs[facing=south,half=top,shape=inner_right,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=south,half=top,shape=inner_right,waterlogged=false] + minecraft:cut_copper_stairs[facing=south,half=top,shape=inner_right,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=south,half=top,shape=inner_right,waterlogged=true] + minecraft:cut_copper_stairs[facing=south,half=top,shape=outer_left,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=south,half=top,shape=outer_left,waterlogged=false] + minecraft:cut_copper_stairs[facing=south,half=top,shape=outer_left,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=south,half=top,shape=outer_left,waterlogged=true] + minecraft:cut_copper_stairs[facing=south,half=top,shape=outer_right,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=south,half=top,shape=outer_right,waterlogged=false] + minecraft:cut_copper_stairs[facing=south,half=top,shape=outer_right,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=south,half=top,shape=outer_right,waterlogged=true] + minecraft:cut_copper_stairs[facing=west,half=bottom,shape=straight,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=west,half=bottom,shape=straight,waterlogged=false] + minecraft:cut_copper_stairs[facing=west,half=bottom,shape=straight,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=west,half=bottom,shape=straight,waterlogged=true] + minecraft:cut_copper_stairs[facing=west,half=bottom,shape=inner_left,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=west,half=bottom,shape=inner_left,waterlogged=false] + minecraft:cut_copper_stairs[facing=west,half=bottom,shape=inner_left,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=west,half=bottom,shape=inner_left,waterlogged=true] + minecraft:cut_copper_stairs[facing=west,half=bottom,shape=inner_right,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=west,half=bottom,shape=inner_right,waterlogged=false] + minecraft:cut_copper_stairs[facing=west,half=bottom,shape=inner_right,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=west,half=bottom,shape=inner_right,waterlogged=true] + minecraft:cut_copper_stairs[facing=west,half=bottom,shape=outer_left,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=west,half=bottom,shape=outer_left,waterlogged=false] + minecraft:cut_copper_stairs[facing=west,half=bottom,shape=outer_left,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=west,half=bottom,shape=outer_left,waterlogged=true] + minecraft:cut_copper_stairs[facing=west,half=bottom,shape=outer_right,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=west,half=bottom,shape=outer_right,waterlogged=false] + minecraft:cut_copper_stairs[facing=west,half=bottom,shape=outer_right,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=west,half=bottom,shape=outer_right,waterlogged=true] + minecraft:cut_copper_stairs[facing=west,half=top,shape=straight,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=west,half=top,shape=straight,waterlogged=false] + minecraft:cut_copper_stairs[facing=west,half=top,shape=straight,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=west,half=top,shape=straight,waterlogged=true] + minecraft:cut_copper_stairs[facing=west,half=top,shape=inner_left,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=west,half=top,shape=inner_left,waterlogged=false] + minecraft:cut_copper_stairs[facing=west,half=top,shape=inner_left,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=west,half=top,shape=inner_left,waterlogged=true] + minecraft:cut_copper_stairs[facing=west,half=top,shape=inner_right,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=west,half=top,shape=inner_right,waterlogged=false] + minecraft:cut_copper_stairs[facing=west,half=top,shape=inner_right,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=west,half=top,shape=inner_right,waterlogged=true] + minecraft:cut_copper_stairs[facing=west,half=top,shape=outer_left,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=west,half=top,shape=outer_left,waterlogged=false] + minecraft:cut_copper_stairs[facing=west,half=top,shape=outer_left,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=west,half=top,shape=outer_left,waterlogged=true] + minecraft:cut_copper_stairs[facing=west,half=top,shape=outer_right,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=west,half=top,shape=outer_right,waterlogged=false] + minecraft:cut_copper_stairs[facing=west,half=top,shape=outer_right,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=west,half=top,shape=outer_right,waterlogged=true] + minecraft:cut_copper_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=north,half=bottom,shape=straight,waterlogged=false] + minecraft:cut_copper_stairs[facing=north,half=bottom,shape=straight,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=north,half=bottom,shape=straight,waterlogged=true] + minecraft:cut_copper_stairs[facing=north,half=bottom,shape=inner_left,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=north,half=bottom,shape=inner_left,waterlogged=false] + minecraft:cut_copper_stairs[facing=north,half=bottom,shape=inner_left,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=north,half=bottom,shape=inner_left,waterlogged=true] + minecraft:cut_copper_stairs[facing=north,half=bottom,shape=inner_right,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=north,half=bottom,shape=inner_right,waterlogged=false] + minecraft:cut_copper_stairs[facing=north,half=bottom,shape=inner_right,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=north,half=bottom,shape=inner_right,waterlogged=true] + minecraft:cut_copper_stairs[facing=north,half=bottom,shape=outer_left,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=north,half=bottom,shape=outer_left,waterlogged=false] + minecraft:cut_copper_stairs[facing=north,half=bottom,shape=outer_left,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=north,half=bottom,shape=outer_left,waterlogged=true] + minecraft:cut_copper_stairs[facing=north,half=bottom,shape=outer_right,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=north,half=bottom,shape=outer_right,waterlogged=false] + minecraft:cut_copper_stairs[facing=north,half=bottom,shape=outer_right,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=north,half=bottom,shape=outer_right,waterlogged=true] + minecraft:cut_copper_stairs[facing=north,half=top,shape=straight,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=north,half=top,shape=straight,waterlogged=false] + minecraft:cut_copper_stairs[facing=north,half=top,shape=straight,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=north,half=top,shape=straight,waterlogged=true] + minecraft:cut_copper_stairs[facing=north,half=top,shape=inner_left,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=north,half=top,shape=inner_left,waterlogged=false] + minecraft:cut_copper_stairs[facing=north,half=top,shape=inner_left,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=north,half=top,shape=inner_left,waterlogged=true] + minecraft:cut_copper_stairs[facing=north,half=top,shape=inner_right,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=north,half=top,shape=inner_right,waterlogged=false] + minecraft:cut_copper_stairs[facing=north,half=top,shape=inner_right,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=north,half=top,shape=inner_right,waterlogged=true] + minecraft:cut_copper_stairs[facing=north,half=top,shape=outer_left,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=north,half=top,shape=outer_left,waterlogged=false] + minecraft:cut_copper_stairs[facing=north,half=top,shape=outer_left,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=north,half=top,shape=outer_left,waterlogged=true] + minecraft:cut_copper_stairs[facing=north,half=top,shape=outer_right,waterlogged=false]: minecraft:waxed_cut_copper_stairs[facing=north,half=top,shape=outer_right,waterlogged=false] + minecraft:cut_copper_stairs[facing=north,half=top,shape=outer_right,waterlogged=true]: minecraft:waxed_cut_copper_stairs[facing=north,half=top,shape=outer_right,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=east,half=bottom,shape=straight,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=east,half=bottom,shape=straight,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=east,half=bottom,shape=straight,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=east,half=bottom,shape=straight,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=east,half=bottom,shape=inner_left,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=east,half=bottom,shape=inner_left,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=east,half=bottom,shape=inner_left,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=east,half=bottom,shape=inner_left,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=east,half=bottom,shape=inner_right,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=east,half=bottom,shape=inner_right,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=east,half=bottom,shape=inner_right,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=east,half=bottom,shape=inner_right,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=east,half=bottom,shape=outer_left,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=east,half=bottom,shape=outer_left,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=east,half=bottom,shape=outer_left,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=east,half=bottom,shape=outer_left,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=east,half=top,shape=straight,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=east,half=top,shape=straight,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=east,half=top,shape=straight,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=east,half=top,shape=straight,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=east,half=top,shape=inner_left,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=east,half=top,shape=inner_left,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=east,half=top,shape=inner_left,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=east,half=top,shape=inner_left,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=east,half=top,shape=inner_right,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=east,half=top,shape=inner_right,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=east,half=top,shape=inner_right,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=east,half=top,shape=inner_right,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=east,half=top,shape=outer_left,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=east,half=top,shape=outer_left,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=east,half=top,shape=outer_left,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=east,half=top,shape=outer_left,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=east,half=top,shape=outer_right,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=east,half=top,shape=outer_right,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=east,half=top,shape=outer_right,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=east,half=top,shape=outer_right,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=south,half=bottom,shape=straight,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=south,half=bottom,shape=straight,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=south,half=bottom,shape=straight,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=south,half=bottom,shape=straight,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=south,half=bottom,shape=inner_left,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=south,half=bottom,shape=inner_left,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=south,half=bottom,shape=inner_left,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=south,half=bottom,shape=inner_left,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=south,half=bottom,shape=inner_right,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=south,half=bottom,shape=inner_right,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=south,half=bottom,shape=inner_right,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=south,half=bottom,shape=inner_right,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=south,half=bottom,shape=outer_left,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=south,half=bottom,shape=outer_left,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=south,half=bottom,shape=outer_left,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=south,half=bottom,shape=outer_left,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=south,half=bottom,shape=outer_right,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=south,half=bottom,shape=outer_right,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=south,half=bottom,shape=outer_right,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=south,half=bottom,shape=outer_right,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=south,half=top,shape=straight,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=south,half=top,shape=straight,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=south,half=top,shape=straight,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=south,half=top,shape=straight,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=south,half=top,shape=inner_left,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=south,half=top,shape=inner_left,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=south,half=top,shape=inner_left,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=south,half=top,shape=inner_left,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=south,half=top,shape=inner_right,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=south,half=top,shape=inner_right,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=south,half=top,shape=inner_right,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=south,half=top,shape=inner_right,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=south,half=top,shape=outer_left,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=south,half=top,shape=outer_left,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=south,half=top,shape=outer_left,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=south,half=top,shape=outer_left,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=south,half=top,shape=outer_right,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=south,half=top,shape=outer_right,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=south,half=top,shape=outer_right,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=south,half=top,shape=outer_right,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=west,half=bottom,shape=straight,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=west,half=bottom,shape=straight,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=west,half=bottom,shape=straight,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=west,half=bottom,shape=straight,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=west,half=bottom,shape=inner_left,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=west,half=bottom,shape=inner_left,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=west,half=bottom,shape=inner_left,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=west,half=bottom,shape=inner_left,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=west,half=bottom,shape=inner_right,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=west,half=bottom,shape=inner_right,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=west,half=bottom,shape=inner_right,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=west,half=bottom,shape=inner_right,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=west,half=bottom,shape=outer_left,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=west,half=bottom,shape=outer_left,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=west,half=bottom,shape=outer_left,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=west,half=bottom,shape=outer_left,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=west,half=bottom,shape=outer_right,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=west,half=bottom,shape=outer_right,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=west,half=bottom,shape=outer_right,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=west,half=bottom,shape=outer_right,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=west,half=top,shape=straight,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=west,half=top,shape=straight,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=west,half=top,shape=straight,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=west,half=top,shape=straight,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=west,half=top,shape=inner_left,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=west,half=top,shape=inner_left,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=west,half=top,shape=inner_left,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=west,half=top,shape=inner_left,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=west,half=top,shape=inner_right,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=west,half=top,shape=inner_right,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=west,half=top,shape=inner_right,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=west,half=top,shape=inner_right,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=west,half=top,shape=outer_left,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=west,half=top,shape=outer_left,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=west,half=top,shape=outer_left,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=west,half=top,shape=outer_left,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=west,half=top,shape=outer_right,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=west,half=top,shape=outer_right,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=west,half=top,shape=outer_right,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=west,half=top,shape=outer_right,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=north,half=bottom,shape=straight,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=north,half=bottom,shape=straight,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=north,half=bottom,shape=straight,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=north,half=bottom,shape=inner_left,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=north,half=bottom,shape=inner_left,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=north,half=bottom,shape=inner_left,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=north,half=bottom,shape=inner_left,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=north,half=bottom,shape=inner_right,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=north,half=bottom,shape=inner_right,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=north,half=bottom,shape=inner_right,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=north,half=bottom,shape=inner_right,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=north,half=bottom,shape=outer_left,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=north,half=bottom,shape=outer_left,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=north,half=bottom,shape=outer_left,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=north,half=bottom,shape=outer_left,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=north,half=bottom,shape=outer_right,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=north,half=bottom,shape=outer_right,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=north,half=bottom,shape=outer_right,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=north,half=bottom,shape=outer_right,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=north,half=top,shape=straight,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=north,half=top,shape=straight,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=north,half=top,shape=straight,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=north,half=top,shape=straight,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=north,half=top,shape=inner_left,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=north,half=top,shape=inner_left,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=north,half=top,shape=inner_left,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=north,half=top,shape=inner_left,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=north,half=top,shape=inner_right,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=north,half=top,shape=inner_right,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=north,half=top,shape=inner_right,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=north,half=top,shape=inner_right,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=north,half=top,shape=outer_left,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=north,half=top,shape=outer_left,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=north,half=top,shape=outer_left,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=north,half=top,shape=outer_left,waterlogged=true] + minecraft:exposed_cut_copper_stairs[facing=north,half=top,shape=outer_right,waterlogged=false]: minecraft:waxed_exposed_cut_copper_stairs[facing=north,half=top,shape=outer_right,waterlogged=false] + minecraft:exposed_cut_copper_stairs[facing=north,half=top,shape=outer_right,waterlogged=true]: minecraft:waxed_exposed_cut_copper_stairs[facing=north,half=top,shape=outer_right,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=east,half=bottom,shape=straight,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=east,half=bottom,shape=straight,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=east,half=bottom,shape=straight,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=east,half=bottom,shape=straight,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=east,half=bottom,shape=inner_left,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=east,half=bottom,shape=inner_left,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=east,half=bottom,shape=inner_left,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=east,half=bottom,shape=inner_left,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=east,half=bottom,shape=inner_right,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=east,half=bottom,shape=inner_right,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=east,half=bottom,shape=inner_right,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=east,half=bottom,shape=inner_right,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=east,half=bottom,shape=outer_left,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=east,half=bottom,shape=outer_left,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=east,half=bottom,shape=outer_left,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=east,half=bottom,shape=outer_left,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=east,half=top,shape=straight,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=east,half=top,shape=straight,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=east,half=top,shape=straight,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=east,half=top,shape=straight,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=east,half=top,shape=inner_left,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=east,half=top,shape=inner_left,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=east,half=top,shape=inner_left,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=east,half=top,shape=inner_left,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=east,half=top,shape=inner_right,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=east,half=top,shape=inner_right,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=east,half=top,shape=inner_right,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=east,half=top,shape=inner_right,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=east,half=top,shape=outer_left,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=east,half=top,shape=outer_left,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=east,half=top,shape=outer_left,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=east,half=top,shape=outer_left,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=east,half=top,shape=outer_right,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=east,half=top,shape=outer_right,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=east,half=top,shape=outer_right,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=east,half=top,shape=outer_right,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=south,half=bottom,shape=straight,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=south,half=bottom,shape=straight,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=south,half=bottom,shape=straight,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=south,half=bottom,shape=straight,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=south,half=bottom,shape=inner_left,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=south,half=bottom,shape=inner_left,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=south,half=bottom,shape=inner_left,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=south,half=bottom,shape=inner_left,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=south,half=bottom,shape=inner_right,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=south,half=bottom,shape=inner_right,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=south,half=bottom,shape=inner_right,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=south,half=bottom,shape=inner_right,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=south,half=bottom,shape=outer_left,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=south,half=bottom,shape=outer_left,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=south,half=bottom,shape=outer_left,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=south,half=bottom,shape=outer_left,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=south,half=bottom,shape=outer_right,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=south,half=bottom,shape=outer_right,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=south,half=bottom,shape=outer_right,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=south,half=bottom,shape=outer_right,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=south,half=top,shape=straight,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=south,half=top,shape=straight,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=south,half=top,shape=straight,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=south,half=top,shape=straight,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=south,half=top,shape=inner_left,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=south,half=top,shape=inner_left,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=south,half=top,shape=inner_left,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=south,half=top,shape=inner_left,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=south,half=top,shape=inner_right,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=south,half=top,shape=inner_right,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=south,half=top,shape=inner_right,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=south,half=top,shape=inner_right,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=south,half=top,shape=outer_left,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=south,half=top,shape=outer_left,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=south,half=top,shape=outer_left,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=south,half=top,shape=outer_left,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=south,half=top,shape=outer_right,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=south,half=top,shape=outer_right,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=south,half=top,shape=outer_right,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=south,half=top,shape=outer_right,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=west,half=bottom,shape=straight,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=west,half=bottom,shape=straight,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=west,half=bottom,shape=straight,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=west,half=bottom,shape=straight,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=west,half=bottom,shape=inner_left,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=west,half=bottom,shape=inner_left,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=west,half=bottom,shape=inner_left,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=west,half=bottom,shape=inner_left,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=west,half=bottom,shape=inner_right,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=west,half=bottom,shape=inner_right,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=west,half=bottom,shape=inner_right,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=west,half=bottom,shape=inner_right,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=west,half=bottom,shape=outer_left,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=west,half=bottom,shape=outer_left,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=west,half=bottom,shape=outer_left,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=west,half=bottom,shape=outer_left,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=west,half=bottom,shape=outer_right,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=west,half=bottom,shape=outer_right,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=west,half=bottom,shape=outer_right,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=west,half=bottom,shape=outer_right,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=west,half=top,shape=straight,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=west,half=top,shape=straight,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=west,half=top,shape=straight,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=west,half=top,shape=straight,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=west,half=top,shape=inner_left,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=west,half=top,shape=inner_left,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=west,half=top,shape=inner_left,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=west,half=top,shape=inner_left,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=west,half=top,shape=inner_right,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=west,half=top,shape=inner_right,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=west,half=top,shape=inner_right,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=west,half=top,shape=inner_right,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=west,half=top,shape=outer_left,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=west,half=top,shape=outer_left,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=west,half=top,shape=outer_left,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=west,half=top,shape=outer_left,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=west,half=top,shape=outer_right,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=west,half=top,shape=outer_right,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=west,half=top,shape=outer_right,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=west,half=top,shape=outer_right,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=north,half=bottom,shape=straight,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=north,half=bottom,shape=straight,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=north,half=bottom,shape=straight,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=north,half=bottom,shape=inner_left,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=north,half=bottom,shape=inner_left,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=north,half=bottom,shape=inner_left,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=north,half=bottom,shape=inner_left,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=north,half=bottom,shape=inner_right,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=north,half=bottom,shape=inner_right,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=north,half=bottom,shape=inner_right,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=north,half=bottom,shape=inner_right,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=north,half=bottom,shape=outer_left,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=north,half=bottom,shape=outer_left,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=north,half=bottom,shape=outer_left,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=north,half=bottom,shape=outer_left,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=north,half=bottom,shape=outer_right,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=north,half=bottom,shape=outer_right,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=north,half=bottom,shape=outer_right,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=north,half=bottom,shape=outer_right,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=north,half=top,shape=straight,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=north,half=top,shape=straight,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=north,half=top,shape=straight,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=north,half=top,shape=straight,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=north,half=top,shape=inner_left,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=north,half=top,shape=inner_left,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=north,half=top,shape=inner_left,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=north,half=top,shape=inner_left,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=north,half=top,shape=inner_right,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=north,half=top,shape=inner_right,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=north,half=top,shape=inner_right,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=north,half=top,shape=inner_right,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=north,half=top,shape=outer_left,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=north,half=top,shape=outer_left,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=north,half=top,shape=outer_left,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=north,half=top,shape=outer_left,waterlogged=true] + minecraft:weathered_cut_copper_stairs[facing=north,half=top,shape=outer_right,waterlogged=false]: minecraft:waxed_weathered_cut_copper_stairs[facing=north,half=top,shape=outer_right,waterlogged=false] + minecraft:weathered_cut_copper_stairs[facing=north,half=top,shape=outer_right,waterlogged=true]: minecraft:waxed_weathered_cut_copper_stairs[facing=north,half=top,shape=outer_right,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=east,half=bottom,shape=straight,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=east,half=bottom,shape=straight,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=east,half=bottom,shape=straight,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=east,half=bottom,shape=straight,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=east,half=bottom,shape=inner_left,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=east,half=bottom,shape=inner_left,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=east,half=bottom,shape=inner_left,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=east,half=bottom,shape=inner_left,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=east,half=bottom,shape=inner_right,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=east,half=bottom,shape=inner_right,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=east,half=bottom,shape=inner_right,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=east,half=bottom,shape=inner_right,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=east,half=bottom,shape=outer_left,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=east,half=bottom,shape=outer_left,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=east,half=bottom,shape=outer_left,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=east,half=bottom,shape=outer_left,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=east,half=top,shape=straight,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=east,half=top,shape=straight,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=east,half=top,shape=straight,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=east,half=top,shape=straight,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=east,half=top,shape=inner_left,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=east,half=top,shape=inner_left,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=east,half=top,shape=inner_left,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=east,half=top,shape=inner_left,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=east,half=top,shape=inner_right,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=east,half=top,shape=inner_right,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=east,half=top,shape=inner_right,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=east,half=top,shape=inner_right,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=east,half=top,shape=outer_left,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=east,half=top,shape=outer_left,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=east,half=top,shape=outer_left,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=east,half=top,shape=outer_left,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=east,half=top,shape=outer_right,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=east,half=top,shape=outer_right,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=east,half=top,shape=outer_right,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=east,half=top,shape=outer_right,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=south,half=bottom,shape=straight,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=south,half=bottom,shape=straight,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=south,half=bottom,shape=straight,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=south,half=bottom,shape=straight,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=south,half=bottom,shape=inner_left,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=south,half=bottom,shape=inner_left,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=south,half=bottom,shape=inner_left,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=south,half=bottom,shape=inner_left,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=south,half=bottom,shape=inner_right,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=south,half=bottom,shape=inner_right,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=south,half=bottom,shape=inner_right,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=south,half=bottom,shape=inner_right,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=south,half=bottom,shape=outer_left,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=south,half=bottom,shape=outer_left,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=south,half=bottom,shape=outer_left,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=south,half=bottom,shape=outer_left,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=south,half=bottom,shape=outer_right,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=south,half=bottom,shape=outer_right,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=south,half=bottom,shape=outer_right,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=south,half=bottom,shape=outer_right,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=south,half=top,shape=straight,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=south,half=top,shape=straight,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=south,half=top,shape=straight,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=south,half=top,shape=straight,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=south,half=top,shape=inner_left,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=south,half=top,shape=inner_left,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=south,half=top,shape=inner_left,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=south,half=top,shape=inner_left,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=south,half=top,shape=inner_right,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=south,half=top,shape=inner_right,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=south,half=top,shape=inner_right,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=south,half=top,shape=inner_right,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=south,half=top,shape=outer_left,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=south,half=top,shape=outer_left,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=south,half=top,shape=outer_left,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=south,half=top,shape=outer_left,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=south,half=top,shape=outer_right,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=south,half=top,shape=outer_right,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=south,half=top,shape=outer_right,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=south,half=top,shape=outer_right,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=west,half=bottom,shape=straight,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=west,half=bottom,shape=straight,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=west,half=bottom,shape=straight,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=west,half=bottom,shape=straight,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=west,half=bottom,shape=inner_left,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=west,half=bottom,shape=inner_left,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=west,half=bottom,shape=inner_left,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=west,half=bottom,shape=inner_left,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=west,half=bottom,shape=inner_right,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=west,half=bottom,shape=inner_right,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=west,half=bottom,shape=inner_right,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=west,half=bottom,shape=inner_right,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=west,half=bottom,shape=outer_left,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=west,half=bottom,shape=outer_left,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=west,half=bottom,shape=outer_left,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=west,half=bottom,shape=outer_left,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=west,half=bottom,shape=outer_right,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=west,half=bottom,shape=outer_right,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=west,half=bottom,shape=outer_right,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=west,half=bottom,shape=outer_right,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=west,half=top,shape=straight,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=west,half=top,shape=straight,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=west,half=top,shape=straight,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=west,half=top,shape=straight,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=west,half=top,shape=inner_left,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=west,half=top,shape=inner_left,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=west,half=top,shape=inner_left,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=west,half=top,shape=inner_left,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=west,half=top,shape=inner_right,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=west,half=top,shape=inner_right,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=west,half=top,shape=inner_right,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=west,half=top,shape=inner_right,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=west,half=top,shape=outer_left,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=west,half=top,shape=outer_left,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=west,half=top,shape=outer_left,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=west,half=top,shape=outer_left,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=west,half=top,shape=outer_right,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=west,half=top,shape=outer_right,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=west,half=top,shape=outer_right,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=west,half=top,shape=outer_right,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=north,half=bottom,shape=straight,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=north,half=bottom,shape=straight,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=north,half=bottom,shape=straight,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=north,half=bottom,shape=straight,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=north,half=bottom,shape=inner_left,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=north,half=bottom,shape=inner_left,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=north,half=bottom,shape=inner_left,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=north,half=bottom,shape=inner_left,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=north,half=bottom,shape=inner_right,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=north,half=bottom,shape=inner_right,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=north,half=bottom,shape=inner_right,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=north,half=bottom,shape=inner_right,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=north,half=bottom,shape=outer_left,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=north,half=bottom,shape=outer_left,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=north,half=bottom,shape=outer_left,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=north,half=bottom,shape=outer_left,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=north,half=bottom,shape=outer_right,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=north,half=bottom,shape=outer_right,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=north,half=bottom,shape=outer_right,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=north,half=bottom,shape=outer_right,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=north,half=top,shape=straight,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=north,half=top,shape=straight,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=north,half=top,shape=straight,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=north,half=top,shape=straight,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=north,half=top,shape=inner_left,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=north,half=top,shape=inner_left,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=north,half=top,shape=inner_left,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=north,half=top,shape=inner_left,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=north,half=top,shape=inner_right,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=north,half=top,shape=inner_right,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=north,half=top,shape=inner_right,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=north,half=top,shape=inner_right,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=north,half=top,shape=outer_left,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=north,half=top,shape=outer_left,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=north,half=top,shape=outer_left,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=north,half=top,shape=outer_left,waterlogged=true] + minecraft:oxidized_cut_copper_stairs[facing=north,half=top,shape=outer_right,waterlogged=false]: minecraft:waxed_oxidized_cut_copper_stairs[facing=north,half=top,shape=outer_right,waterlogged=false] + minecraft:oxidized_cut_copper_stairs[facing=north,half=top,shape=outer_right,waterlogged=true]: minecraft:waxed_oxidized_cut_copper_stairs[facing=north,half=top,shape=outer_right,waterlogged=true] + #### Chorus Plant #### # Chorus Plant does support transparent textures, but man... its hitbox is super weird. You're probably better off using leaves. # minecraft:chorus_plant[down=false,east=false,north=false,south=false,up=false,west=false]: minecraft:chorus_plant[down=true,east=true,north=true,south=true,up=true,west=true] diff --git a/common-files/src/main/resources/resources/default/configuration/templates.yml b/common-files/src/main/resources/resources/default/configuration/templates.yml index 8212b791d..4b33c0ce5 100644 --- a/common-files/src/main/resources/resources/default/configuration/templates.yml +++ b/common-files/src/main/resources/resources/default/configuration/templates.yml @@ -2107,6 +2107,912 @@ templates#block_states: resistance: 1200.0 burnable: false fluid-state: water + # stairs block + default:block_state/stairs: + properties: + facing: + type: horizontal_direction + half: + type: single_block_half + shape: + type: stairs_shape + waterlogged: + type: boolean + default: false + appearances: + facing=east,half=bottom,shape=inner_left,waterlogged=false: + state: ${base_block}[facing=east,half=bottom,shape=inner_left,waterlogged=false] + model: + path: ${model_stairs_inner_path} + uvlock: true + y: 270 + generation: ${model_stairs_inner_generation} + facing=east,half=bottom,shape=inner_right,waterlogged=false: + state: ${base_block}[facing=east,half=bottom,shape=inner_right,waterlogged=false] + model: + path: ${model_stairs_inner_path} + facing=east,half=bottom,shape=outer_left,waterlogged=false: + state: ${base_block}[facing=east,half=bottom,shape=outer_left,waterlogged=false] + model: + path: ${model_stairs_outer_path} + uvlock: true + y: 270 + generation: ${model_stairs_outer_generation} + facing=east,half=bottom,shape=outer_right,waterlogged=false: + state: ${base_block}[facing=east,half=bottom,shape=outer_right,waterlogged=false] + model: + path: ${model_stairs_outer_path} + facing=east,half=bottom,shape=straight,waterlogged=false: + state: ${base_block}[facing=east,half=bottom,shape=straight,waterlogged=false] + model: + path: minecraft:block/cherry_stairs + facing=east,half=top,shape=inner_left,waterlogged=false: + state: ${base_block}[facing=east,half=top,shape=inner_left,waterlogged=false] + model: + path: ${model_stairs_inner_path} + uvlock: true + x: 180 + facing=east,half=top,shape=inner_right,waterlogged=false: + state: ${base_block}[facing=east,half=top,shape=inner_right,waterlogged=false] + model: + path: ${model_stairs_inner_path} + uvlock: true + x: 180 + y: 90 + facing=east,half=top,shape=outer_left,waterlogged=false: + state: ${base_block}[facing=east,half=top,shape=outer_left,waterlogged=false] + model: + path: ${model_stairs_outer_path} + uvlock: true + x: 180 + facing=east,half=top,shape=outer_right,waterlogged=false: + state: ${base_block}[facing=east,half=top,shape=outer_right,waterlogged=false] + model: + path: ${model_stairs_outer_path} + uvlock: true + x: 180 + y: 90 + facing=east,half=top,shape=straight,waterlogged=false: + state: ${base_block}[facing=east,half=top,shape=straight,waterlogged=false] + model: + path: minecraft:block/cherry_stairs + uvlock: true + x: 180 + facing=north,half=bottom,shape=inner_left,waterlogged=false: + state: ${base_block}[facing=north,half=bottom,shape=inner_left,waterlogged=false] + model: + path: ${model_stairs_inner_path} + uvlock: true + y: 180 + facing=north,half=bottom,shape=inner_right,waterlogged=false: + state: ${base_block}[facing=north,half=bottom,shape=inner_right,waterlogged=false] + model: + path: ${model_stairs_inner_path} + uvlock: true + y: 270 + facing=north,half=bottom,shape=outer_left,waterlogged=false: + state: ${base_block}[facing=north,half=bottom,shape=outer_left,waterlogged=false] + model: + path: ${model_stairs_outer_path} + uvlock: true + y: 180 + facing=north,half=bottom,shape=outer_right,waterlogged=false: + state: ${base_block}[facing=north,half=bottom,shape=outer_right,waterlogged=false] + model: + path: ${model_stairs_outer_path} + uvlock: true + y: 270 + facing=north,half=bottom,shape=straight,waterlogged=false: + state: ${base_block}[facing=north,half=bottom,shape=straight,waterlogged=false] + model: + path: minecraft:block/cherry_stairs + uvlock: true + y: 270 + facing=north,half=top,shape=inner_left,waterlogged=false: + state: ${base_block}[facing=north,half=top,shape=inner_left,waterlogged=false] + model: + path: ${model_stairs_inner_path} + uvlock: true + x: 180 + y: 270 + facing=north,half=top,shape=inner_right,waterlogged=false: + state: ${base_block}[facing=north,half=top,shape=inner_right,waterlogged=false] + model: + path: ${model_stairs_inner_path} + uvlock: true + x: 180 + facing=north,half=top,shape=outer_left,waterlogged=false: + state: ${base_block}[facing=north,half=top,shape=outer_left,waterlogged=false] + model: + path: ${model_stairs_outer_path} + uvlock: true + x: 180 + y: 270 + facing=north,half=top,shape=outer_right,waterlogged=false: + state: ${base_block}[facing=north,half=top,shape=outer_right,waterlogged=false] + model: + path: ${model_stairs_outer_path} + uvlock: true + x: 180 + facing=north,half=top,shape=straight,waterlogged=false: + state: ${base_block}[facing=north,half=top,shape=straight,waterlogged=false] + model: + path: minecraft:block/cherry_stairs + uvlock: true + x: 180 + y: 270 + facing=south,half=bottom,shape=inner_left,waterlogged=false: + state: ${base_block}[facing=south,half=bottom,shape=inner_left,waterlogged=false] + model: + path: ${model_stairs_inner_path} + facing=south,half=bottom,shape=inner_right,waterlogged=false: + state: ${base_block}[facing=south,half=bottom,shape=inner_right,waterlogged=false] + model: + path: ${model_stairs_inner_path} + uvlock: true + y: 90 + facing=south,half=bottom,shape=outer_left,waterlogged=false: + state: ${base_block}[facing=south,half=bottom,shape=outer_left,waterlogged=false] + model: + path: ${model_stairs_outer_path} + facing=south,half=bottom,shape=outer_right,waterlogged=false: + state: ${base_block}[facing=south,half=bottom,shape=outer_right,waterlogged=false] + model: + path: ${model_stairs_outer_path} + uvlock: true + y: 90 + facing=south,half=bottom,shape=straight,waterlogged=false: + state: ${base_block}[facing=south,half=bottom,shape=straight,waterlogged=false] + model: + path: minecraft:block/cherry_stairs + uvlock: true + y: 90 + facing=south,half=top,shape=inner_left,waterlogged=false: + state: ${base_block}[facing=south,half=top,shape=inner_left,waterlogged=false] + model: + path: ${model_stairs_inner_path} + uvlock: true + x: 180 + y: 90 + facing=south,half=top,shape=inner_right,waterlogged=false: + state: ${base_block}[facing=south,half=top,shape=inner_right,waterlogged=false] + model: + path: ${model_stairs_inner_path} + uvlock: true + x: 180 + y: 180 + facing=south,half=top,shape=outer_left,waterlogged=false: + state: ${base_block}[facing=south,half=top,shape=outer_left,waterlogged=false] + model: + path: ${model_stairs_outer_path} + uvlock: true + x: 180 + y: 90 + facing=south,half=top,shape=outer_right,waterlogged=false: + state: ${base_block}[facing=south,half=top,shape=outer_right,waterlogged=false] + model: + path: ${model_stairs_outer_path} + uvlock: true + x: 180 + y: 180 + facing=south,half=top,shape=straight,waterlogged=false: + state: ${base_block}[facing=south,half=top,shape=straight,waterlogged=false] + model: + path: minecraft:block/cherry_stairs + uvlock: true + x: 180 + y: 90 + facing=west,half=bottom,shape=inner_left,waterlogged=false: + state: ${base_block}[facing=west,half=bottom,shape=inner_left,waterlogged=false] + model: + path: ${model_stairs_inner_path} + uvlock: true + y: 90 + facing=west,half=bottom,shape=inner_right,waterlogged=false: + state: ${base_block}[facing=west,half=bottom,shape=inner_right,waterlogged=false] + model: + path: ${model_stairs_inner_path} + uvlock: true + y: 180 + facing=west,half=bottom,shape=outer_left,waterlogged=false: + state: ${base_block}[facing=west,half=bottom,shape=outer_left,waterlogged=false] + model: + path: ${model_stairs_outer_path} + uvlock: true + y: 90 + facing=west,half=bottom,shape=outer_right,waterlogged=false: + state: ${base_block}[facing=west,half=bottom,shape=outer_right,waterlogged=false] + model: + path: ${model_stairs_outer_path} + uvlock: true + y: 180 + facing=west,half=bottom,shape=straight,waterlogged=false: + state: ${base_block}[facing=west,half=bottom,shape=straight,waterlogged=false] + model: + path: minecraft:block/cherry_stairs + uvlock: true + y: 180 + facing=west,half=top,shape=inner_left,waterlogged=false: + state: ${base_block}[facing=west,half=top,shape=inner_left,waterlogged=false] + model: + path: ${model_stairs_inner_path} + uvlock: true + x: 180 + y: 180 + facing=west,half=top,shape=inner_right,waterlogged=false: + state: ${base_block}[facing=west,half=top,shape=inner_right,waterlogged=false] + model: + path: ${model_stairs_inner_path} + uvlock: true + x: 180 + y: 270 + facing=west,half=top,shape=outer_left,waterlogged=false: + state: ${base_block}[facing=west,half=top,shape=outer_left,waterlogged=false] + model: + path: ${model_stairs_outer_path} + uvlock: true + x: 180 + y: 180 + facing=west,half=top,shape=outer_right,waterlogged=false: + state: ${base_block}[facing=west,half=top,shape=outer_right,waterlogged=false] + model: + path: ${model_stairs_outer_path} + uvlock: true + x: 180 + y: 270 + facing=west,half=top,shape=straight,waterlogged=false: + state: ${base_block}[facing=west,half=top,shape=straight,waterlogged=false] + model: + path: minecraft:block/cherry_stairs + uvlock: true + x: 180 + y: 180 + facing=east,half=bottom,shape=inner_left,waterlogged=true: + state: ${base_block}[facing=east,half=bottom,shape=inner_left,waterlogged=true] + model: + path: ${model_stairs_inner_path} + uvlock: true + y: 270 + facing=east,half=bottom,shape=inner_right,waterlogged=true: + state: ${base_block}[facing=east,half=bottom,shape=inner_right,waterlogged=true] + model: + path: ${model_stairs_inner_path} + facing=east,half=bottom,shape=outer_left,waterlogged=true: + state: ${base_block}[facing=east,half=bottom,shape=outer_left,waterlogged=true] + model: + path: ${model_stairs_outer_path} + uvlock: true + y: 270 + facing=east,half=bottom,shape=outer_right,waterlogged=true: + state: ${base_block}[facing=east,half=bottom,shape=outer_right,waterlogged=true] + model: + path: ${model_stairs_outer_path} + facing=east,half=bottom,shape=straight,waterlogged=true: + state: ${base_block}[facing=east,half=bottom,shape=straight,waterlogged=true] + model: + path: minecraft:block/cherry_stairs + facing=east,half=top,shape=inner_left,waterlogged=true: + state: ${base_block}[facing=east,half=top,shape=inner_left,waterlogged=true] + model: + path: ${model_stairs_inner_path} + uvlock: true + x: 180 + facing=east,half=top,shape=inner_right,waterlogged=true: + state: ${base_block}[facing=east,half=top,shape=inner_right,waterlogged=true] + model: + path: ${model_stairs_inner_path} + uvlock: true + x: 180 + y: 90 + facing=east,half=top,shape=outer_left,waterlogged=true: + state: ${base_block}[facing=east,half=top,shape=outer_left,waterlogged=true] + model: + path: ${model_stairs_outer_path} + uvlock: true + x: 180 + facing=east,half=top,shape=outer_right,waterlogged=true: + state: ${base_block}[facing=east,half=top,shape=outer_right,waterlogged=true] + model: + path: ${model_stairs_outer_path} + uvlock: true + x: 180 + y: 90 + facing=east,half=top,shape=straight,waterlogged=true: + state: ${base_block}[facing=east,half=top,shape=straight,waterlogged=true] + model: + path: minecraft:block/cherry_stairs + uvlock: true + x: 180 + facing=north,half=bottom,shape=inner_left,waterlogged=true: + state: ${base_block}[facing=north,half=bottom,shape=inner_left,waterlogged=true] + model: + path: ${model_stairs_inner_path} + uvlock: true + y: 180 + facing=north,half=bottom,shape=inner_right,waterlogged=true: + state: ${base_block}[facing=north,half=bottom,shape=inner_right,waterlogged=true] + model: + path: ${model_stairs_inner_path} + uvlock: true + y: 270 + facing=north,half=bottom,shape=outer_left,waterlogged=true: + state: ${base_block}[facing=north,half=bottom,shape=outer_left,waterlogged=true] + model: + path: ${model_stairs_outer_path} + uvlock: true + y: 180 + facing=north,half=bottom,shape=outer_right,waterlogged=true: + state: ${base_block}[facing=north,half=bottom,shape=outer_right,waterlogged=true] + model: + path: ${model_stairs_outer_path} + uvlock: true + y: 270 + facing=north,half=bottom,shape=straight,waterlogged=true: + state: ${base_block}[facing=north,half=bottom,shape=straight,waterlogged=true] + model: + path: minecraft:block/cherry_stairs + uvlock: true + y: 270 + facing=north,half=top,shape=inner_left,waterlogged=true: + state: ${base_block}[facing=north,half=top,shape=inner_left,waterlogged=true] + model: + path: ${model_stairs_inner_path} + uvlock: true + x: 180 + y: 270 + facing=north,half=top,shape=inner_right,waterlogged=true: + state: ${base_block}[facing=north,half=top,shape=inner_right,waterlogged=true] + model: + path: ${model_stairs_inner_path} + uvlock: true + x: 180 + facing=north,half=top,shape=outer_left,waterlogged=true: + state: ${base_block}[facing=north,half=top,shape=outer_left,waterlogged=true] + model: + path: ${model_stairs_outer_path} + uvlock: true + x: 180 + y: 270 + facing=north,half=top,shape=outer_right,waterlogged=true: + state: ${base_block}[facing=north,half=top,shape=outer_right,waterlogged=true] + model: + path: ${model_stairs_outer_path} + uvlock: true + x: 180 + facing=north,half=top,shape=straight,waterlogged=true: + state: ${base_block}[facing=north,half=top,shape=straight,waterlogged=true] + model: + path: minecraft:block/cherry_stairs + uvlock: true + x: 180 + y: 270 + facing=south,half=bottom,shape=inner_left,waterlogged=true: + state: ${base_block}[facing=south,half=bottom,shape=inner_left,waterlogged=true] + model: + path: ${model_stairs_inner_path} + facing=south,half=bottom,shape=inner_right,waterlogged=true: + state: ${base_block}[facing=south,half=bottom,shape=inner_right,waterlogged=true] + model: + path: ${model_stairs_inner_path} + uvlock: true + y: 90 + facing=south,half=bottom,shape=outer_left,waterlogged=true: + state: ${base_block}[facing=south,half=bottom,shape=outer_left,waterlogged=true] + model: + path: ${model_stairs_outer_path} + facing=south,half=bottom,shape=outer_right,waterlogged=true: + state: ${base_block}[facing=south,half=bottom,shape=outer_right,waterlogged=true] + model: + path: ${model_stairs_outer_path} + uvlock: true + y: 90 + facing=south,half=bottom,shape=straight,waterlogged=true: + state: ${base_block}[facing=south,half=bottom,shape=straight,waterlogged=true] + model: + path: minecraft:block/cherry_stairs + uvlock: true + y: 90 + facing=south,half=top,shape=inner_left,waterlogged=true: + state: ${base_block}[facing=south,half=top,shape=inner_left,waterlogged=true] + model: + path: ${model_stairs_inner_path} + uvlock: true + x: 180 + y: 90 + facing=south,half=top,shape=inner_right,waterlogged=true: + state: ${base_block}[facing=south,half=top,shape=inner_right,waterlogged=true] + model: + path: ${model_stairs_inner_path} + uvlock: true + x: 180 + y: 180 + facing=south,half=top,shape=outer_left,waterlogged=true: + state: ${base_block}[facing=south,half=top,shape=outer_left,waterlogged=true] + model: + path: ${model_stairs_outer_path} + uvlock: true + x: 180 + y: 90 + facing=south,half=top,shape=outer_right,waterlogged=true: + state: ${base_block}[facing=south,half=top,shape=outer_right,waterlogged=true] + model: + path: ${model_stairs_outer_path} + uvlock: true + x: 180 + y: 180 + facing=south,half=top,shape=straight,waterlogged=true: + state: ${base_block}[facing=south,half=top,shape=straight,waterlogged=true] + model: + path: minecraft:block/cherry_stairs + uvlock: true + x: 180 + y: 90 + facing=west,half=bottom,shape=inner_left,waterlogged=true: + state: ${base_block}[facing=west,half=bottom,shape=inner_left,waterlogged=true] + model: + path: ${model_stairs_inner_path} + uvlock: true + y: 90 + facing=west,half=bottom,shape=inner_right,waterlogged=true: + state: ${base_block}[facing=west,half=bottom,shape=inner_right,waterlogged=true] + model: + path: ${model_stairs_inner_path} + uvlock: true + y: 180 + facing=west,half=bottom,shape=outer_left,waterlogged=true: + state: ${base_block}[facing=west,half=bottom,shape=outer_left,waterlogged=true] + model: + path: ${model_stairs_outer_path} + uvlock: true + y: 90 + facing=west,half=bottom,shape=outer_right,waterlogged=true: + state: ${base_block}[facing=west,half=bottom,shape=outer_right,waterlogged=true] + model: + path: ${model_stairs_outer_path} + uvlock: true + y: 180 + facing=west,half=bottom,shape=straight,waterlogged=true: + state: ${base_block}[facing=west,half=bottom,shape=straight,waterlogged=true] + model: + path: minecraft:block/cherry_stairs + uvlock: true + y: 180 + facing=west,half=top,shape=inner_left,waterlogged=true: + state: ${base_block}[facing=west,half=top,shape=inner_left,waterlogged=true] + model: + path: ${model_stairs_inner_path} + uvlock: true + x: 180 + y: 180 + facing=west,half=top,shape=inner_right,waterlogged=true: + state: ${base_block}[facing=west,half=top,shape=inner_right,waterlogged=true] + model: + path: ${model_stairs_inner_path} + uvlock: true + x: 180 + y: 270 + facing=west,half=top,shape=outer_left,waterlogged=true: + state: ${base_block}[facing=west,half=top,shape=outer_left,waterlogged=true] + model: + path: ${model_stairs_outer_path} + uvlock: true + x: 180 + y: 180 + facing=west,half=top,shape=outer_right,waterlogged=true: + state: ${base_block}[facing=west,half=top,shape=outer_right,waterlogged=true] + model: + path: ${model_stairs_outer_path} + uvlock: true + x: 180 + y: 270 + facing=west,half=top,shape=straight,waterlogged=true: + state: ${base_block}[facing=west,half=top,shape=straight,waterlogged=true] + model: + path: minecraft:block/cherry_stairs + uvlock: true + x: 180 + y: 180 + variants: + facing=east,half=bottom,shape=inner_left,waterlogged=false: + appearance: facing=east,half=bottom,shape=inner_left,waterlogged=false + id: 0 + facing=east,half=bottom,shape=inner_right,waterlogged=false: + appearance: facing=east,half=bottom,shape=inner_right,waterlogged=false + id: 1 + facing=east,half=bottom,shape=outer_left,waterlogged=false: + appearance: facing=east,half=bottom,shape=outer_left,waterlogged=false + id: 2 + facing=east,half=bottom,shape=outer_right,waterlogged=false: + appearance: facing=east,half=bottom,shape=outer_right,waterlogged=false + id: 3 + facing=east,half=bottom,shape=straight,waterlogged=false: + appearance: facing=east,half=bottom,shape=straight,waterlogged=false + id: 4 + facing=east,half=top,shape=inner_left,waterlogged=false: + appearance: facing=east,half=top,shape=inner_left,waterlogged=false + id: 5 + facing=east,half=top,shape=inner_right,waterlogged=false: + appearance: facing=east,half=top,shape=inner_right,waterlogged=false + id: 6 + facing=east,half=top,shape=outer_left,waterlogged=false: + appearance: facing=east,half=top,shape=outer_left,waterlogged=false + id: 7 + facing=east,half=top,shape=outer_right,waterlogged=false: + appearance: facing=east,half=top,shape=outer_right,waterlogged=false + id: 8 + facing=east,half=top,shape=straight,waterlogged=false: + appearance: facing=east,half=top,shape=straight,waterlogged=false + id: 9 + facing=north,half=bottom,shape=inner_left,waterlogged=false: + appearance: facing=north,half=bottom,shape=inner_left,waterlogged=false + id: 10 + facing=north,half=bottom,shape=inner_right,waterlogged=false: + appearance: facing=north,half=bottom,shape=inner_right,waterlogged=false + id: 11 + facing=north,half=bottom,shape=outer_left,waterlogged=false: + appearance: facing=north,half=bottom,shape=outer_left,waterlogged=false + id: 12 + facing=north,half=bottom,shape=outer_right,waterlogged=false: + appearance: facing=north,half=bottom,shape=outer_right,waterlogged=false + id: 13 + facing=north,half=bottom,shape=straight,waterlogged=false: + appearance: facing=north,half=bottom,shape=straight,waterlogged=false + id: 14 + facing=north,half=top,shape=inner_left,waterlogged=false: + appearance: facing=north,half=top,shape=inner_left,waterlogged=false + id: 15 + facing=north,half=top,shape=inner_right,waterlogged=false: + appearance: facing=north,half=top,shape=inner_right,waterlogged=false + id: 16 + facing=north,half=top,shape=outer_left,waterlogged=false: + appearance: facing=north,half=top,shape=outer_left,waterlogged=false + id: 17 + facing=north,half=top,shape=outer_right,waterlogged=false: + appearance: facing=north,half=top,shape=outer_right,waterlogged=false + id: 18 + facing=north,half=top,shape=straight,waterlogged=false: + appearance: facing=north,half=top,shape=straight,waterlogged=false + id: 19 + facing=south,half=bottom,shape=inner_left,waterlogged=false: + appearance: facing=south,half=bottom,shape=inner_left,waterlogged=false + id: 20 + facing=south,half=bottom,shape=inner_right,waterlogged=false: + appearance: facing=south,half=bottom,shape=inner_right,waterlogged=false + id: 21 + facing=south,half=bottom,shape=outer_left,waterlogged=false: + appearance: facing=south,half=bottom,shape=outer_left,waterlogged=false + id: 22 + facing=south,half=bottom,shape=outer_right,waterlogged=false: + appearance: facing=south,half=bottom,shape=outer_right,waterlogged=false + id: 23 + facing=south,half=bottom,shape=straight,waterlogged=false: + appearance: facing=south,half=bottom,shape=straight,waterlogged=false + id: 24 + facing=south,half=top,shape=inner_left,waterlogged=false: + appearance: facing=south,half=top,shape=inner_left,waterlogged=false + id: 25 + facing=south,half=top,shape=inner_right,waterlogged=false: + appearance: facing=south,half=top,shape=inner_right,waterlogged=false + id: 26 + facing=south,half=top,shape=outer_left,waterlogged=false: + appearance: facing=south,half=top,shape=outer_left,waterlogged=false + id: 27 + facing=south,half=top,shape=outer_right,waterlogged=false: + appearance: facing=south,half=top,shape=outer_right,waterlogged=false + id: 28 + facing=south,half=top,shape=straight,waterlogged=false: + appearance: facing=south,half=top,shape=straight,waterlogged=false + id: 29 + facing=west,half=bottom,shape=inner_left,waterlogged=false: + appearance: facing=west,half=bottom,shape=inner_left,waterlogged=false + id: 30 + facing=west,half=bottom,shape=inner_right,waterlogged=false: + appearance: facing=west,half=bottom,shape=inner_right,waterlogged=false + id: 31 + facing=west,half=bottom,shape=outer_left,waterlogged=false: + appearance: facing=west,half=bottom,shape=outer_left,waterlogged=false + id: 32 + facing=west,half=bottom,shape=outer_right,waterlogged=false: + appearance: facing=west,half=bottom,shape=outer_right,waterlogged=false + id: 33 + facing=west,half=bottom,shape=straight,waterlogged=false: + appearance: facing=west,half=bottom,shape=straight,waterlogged=false + id: 34 + facing=west,half=top,shape=inner_left,waterlogged=false: + appearance: facing=west,half=top,shape=inner_left,waterlogged=false + id: 35 + facing=west,half=top,shape=inner_right,waterlogged=false: + appearance: facing=west,half=top,shape=inner_right,waterlogged=false + id: 36 + facing=west,half=top,shape=outer_left,waterlogged=false: + appearance: facing=west,half=top,shape=outer_left,waterlogged=false + id: 37 + facing=west,half=top,shape=outer_right,waterlogged=false: + appearance: facing=west,half=top,shape=outer_right,waterlogged=false + id: 38 + facing=west,half=top,shape=straight,waterlogged=false: + appearance: facing=west,half=top,shape=straight,waterlogged=false + id: 39 + facing=east,half=bottom,shape=inner_left,waterlogged=true: + appearance: facing=east,half=bottom,shape=inner_left,waterlogged=true + id: 40 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=east,half=bottom,shape=inner_right,waterlogged=true: + appearance: facing=east,half=bottom,shape=inner_right,waterlogged=true + id: 41 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=east,half=bottom,shape=outer_left,waterlogged=true: + appearance: facing=east,half=bottom,shape=outer_left,waterlogged=true + id: 42 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=east,half=bottom,shape=outer_right,waterlogged=true: + appearance: facing=east,half=bottom,shape=outer_right,waterlogged=true + id: 43 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=east,half=bottom,shape=straight,waterlogged=true: + appearance: facing=east,half=bottom,shape=straight,waterlogged=true + id: 44 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=east,half=top,shape=inner_left,waterlogged=true: + appearance: facing=east,half=top,shape=inner_left,waterlogged=true + id: 45 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=east,half=top,shape=inner_right,waterlogged=true: + appearance: facing=east,half=top,shape=inner_right,waterlogged=true + id: 46 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=east,half=top,shape=outer_left,waterlogged=true: + appearance: facing=east,half=top,shape=outer_left,waterlogged=true + id: 47 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=east,half=top,shape=outer_right,waterlogged=true: + appearance: facing=east,half=top,shape=outer_right,waterlogged=true + id: 48 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=east,half=top,shape=straight,waterlogged=true: + appearance: facing=east,half=top,shape=straight,waterlogged=true + id: 49 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=north,half=bottom,shape=inner_left,waterlogged=true: + appearance: facing=north,half=bottom,shape=inner_left,waterlogged=true + id: 50 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=north,half=bottom,shape=inner_right,waterlogged=true: + appearance: facing=north,half=bottom,shape=inner_right,waterlogged=true + id: 51 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=north,half=bottom,shape=outer_left,waterlogged=true: + appearance: facing=north,half=bottom,shape=outer_left,waterlogged=true + id: 52 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=north,half=bottom,shape=outer_right,waterlogged=true: + appearance: facing=north,half=bottom,shape=outer_right,waterlogged=true + id: 53 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=north,half=bottom,shape=straight,waterlogged=true: + appearance: facing=north,half=bottom,shape=straight,waterlogged=true + id: 54 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=north,half=top,shape=inner_left,waterlogged=true: + appearance: facing=north,half=top,shape=inner_left,waterlogged=true + id: 55 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=north,half=top,shape=inner_right,waterlogged=true: + appearance: facing=north,half=top,shape=inner_right,waterlogged=true + id: 56 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=north,half=top,shape=outer_left,waterlogged=true: + appearance: facing=north,half=top,shape=outer_left,waterlogged=true + id: 57 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=north,half=top,shape=outer_right,waterlogged=true: + appearance: facing=north,half=top,shape=outer_right,waterlogged=true + id: 58 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=north,half=top,shape=straight,waterlogged=true: + appearance: facing=north,half=top,shape=straight,waterlogged=true + id: 59 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=south,half=bottom,shape=inner_left,waterlogged=true: + appearance: facing=south,half=bottom,shape=inner_left,waterlogged=true + id: 60 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=south,half=bottom,shape=inner_right,waterlogged=true: + appearance: facing=south,half=bottom,shape=inner_right,waterlogged=true + id: 61 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=south,half=bottom,shape=outer_left,waterlogged=true: + appearance: facing=south,half=bottom,shape=outer_left,waterlogged=true + id: 62 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=south,half=bottom,shape=outer_right,waterlogged=true: + appearance: facing=south,half=bottom,shape=outer_right,waterlogged=true + id: 63 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=south,half=bottom,shape=straight,waterlogged=true: + appearance: facing=south,half=bottom,shape=straight,waterlogged=true + id: 64 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=south,half=top,shape=inner_left,waterlogged=true: + appearance: facing=south,half=top,shape=inner_left,waterlogged=true + id: 65 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=south,half=top,shape=inner_right,waterlogged=true: + appearance: facing=south,half=top,shape=inner_right,waterlogged=true + id: 66 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=south,half=top,shape=outer_left,waterlogged=true: + appearance: facing=south,half=top,shape=outer_left,waterlogged=true + id: 67 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=south,half=top,shape=outer_right,waterlogged=true: + appearance: facing=south,half=top,shape=outer_right,waterlogged=true + id: 68 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=south,half=top,shape=straight,waterlogged=true: + appearance: facing=south,half=top,shape=straight,waterlogged=true + id: 69 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=west,half=bottom,shape=inner_left,waterlogged=true: + appearance: facing=west,half=bottom,shape=inner_left,waterlogged=true + id: 70 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=west,half=bottom,shape=inner_right,waterlogged=true: + appearance: facing=west,half=bottom,shape=inner_right,waterlogged=true + id: 71 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=west,half=bottom,shape=outer_left,waterlogged=true: + appearance: facing=west,half=bottom,shape=outer_left,waterlogged=true + id: 72 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=west,half=bottom,shape=outer_right,waterlogged=true: + appearance: facing=west,half=bottom,shape=outer_right,waterlogged=true + id: 73 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=west,half=bottom,shape=straight,waterlogged=true: + appearance: facing=west,half=bottom,shape=straight,waterlogged=true + id: 74 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=west,half=top,shape=inner_left,waterlogged=true: + appearance: facing=west,half=top,shape=inner_left,waterlogged=true + id: 75 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=west,half=top,shape=inner_right,waterlogged=true: + appearance: facing=west,half=top,shape=inner_right,waterlogged=true + id: 76 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=west,half=top,shape=outer_left,waterlogged=true: + appearance: facing=west,half=top,shape=outer_left,waterlogged=true + id: 77 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=west,half=top,shape=outer_right,waterlogged=true: + appearance: facing=west,half=top,shape=outer_right,waterlogged=true + id: 78 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water + facing=west,half=top,shape=straight,waterlogged=true: + appearance: facing=west,half=top,shape=straight,waterlogged=true + id: 79 + settings: + resistance: 1200.0 + burnable: false + fluid-state: water # recipes templates#recipes: From 31c8d68f1069a58c686f601df791411c3560ba8a Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 21 Jun 2025 07:58:44 +0800 Subject: [PATCH 02/15] =?UTF-8?q?fix(block):=20=E4=BF=AE=E5=A4=8D=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../default/configuration/templates.yml | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/common-files/src/main/resources/resources/default/configuration/templates.yml b/common-files/src/main/resources/resources/default/configuration/templates.yml index 4b33c0ce5..d0a7ef4c1 100644 --- a/common-files/src/main/resources/resources/default/configuration/templates.yml +++ b/common-files/src/main/resources/resources/default/configuration/templates.yml @@ -2145,7 +2145,8 @@ templates#block_states: facing=east,half=bottom,shape=straight,waterlogged=false: state: ${base_block}[facing=east,half=bottom,shape=straight,waterlogged=false] model: - path: minecraft:block/cherry_stairs + path: ${model_stairs_path} + generation: ${model_stairs_generation} facing=east,half=top,shape=inner_left,waterlogged=false: state: ${base_block}[facing=east,half=top,shape=inner_left,waterlogged=false] model: @@ -2175,7 +2176,7 @@ templates#block_states: facing=east,half=top,shape=straight,waterlogged=false: state: ${base_block}[facing=east,half=top,shape=straight,waterlogged=false] model: - path: minecraft:block/cherry_stairs + path: ${model_stairs_path} uvlock: true x: 180 facing=north,half=bottom,shape=inner_left,waterlogged=false: @@ -2205,7 +2206,7 @@ templates#block_states: facing=north,half=bottom,shape=straight,waterlogged=false: state: ${base_block}[facing=north,half=bottom,shape=straight,waterlogged=false] model: - path: minecraft:block/cherry_stairs + path: ${model_stairs_path} uvlock: true y: 270 facing=north,half=top,shape=inner_left,waterlogged=false: @@ -2237,7 +2238,7 @@ templates#block_states: facing=north,half=top,shape=straight,waterlogged=false: state: ${base_block}[facing=north,half=top,shape=straight,waterlogged=false] model: - path: minecraft:block/cherry_stairs + path: ${model_stairs_path} uvlock: true x: 180 y: 270 @@ -2264,7 +2265,7 @@ templates#block_states: facing=south,half=bottom,shape=straight,waterlogged=false: state: ${base_block}[facing=south,half=bottom,shape=straight,waterlogged=false] model: - path: minecraft:block/cherry_stairs + path: ${model_stairs_path} uvlock: true y: 90 facing=south,half=top,shape=inner_left,waterlogged=false: @@ -2298,7 +2299,7 @@ templates#block_states: facing=south,half=top,shape=straight,waterlogged=false: state: ${base_block}[facing=south,half=top,shape=straight,waterlogged=false] model: - path: minecraft:block/cherry_stairs + path: ${model_stairs_path} uvlock: true x: 180 y: 90 @@ -2329,7 +2330,7 @@ templates#block_states: facing=west,half=bottom,shape=straight,waterlogged=false: state: ${base_block}[facing=west,half=bottom,shape=straight,waterlogged=false] model: - path: minecraft:block/cherry_stairs + path: ${model_stairs_path} uvlock: true y: 180 facing=west,half=top,shape=inner_left,waterlogged=false: @@ -2363,7 +2364,7 @@ templates#block_states: facing=west,half=top,shape=straight,waterlogged=false: state: ${base_block}[facing=west,half=top,shape=straight,waterlogged=false] model: - path: minecraft:block/cherry_stairs + path: ${model_stairs_path} uvlock: true x: 180 y: 180 @@ -2390,7 +2391,7 @@ templates#block_states: facing=east,half=bottom,shape=straight,waterlogged=true: state: ${base_block}[facing=east,half=bottom,shape=straight,waterlogged=true] model: - path: minecraft:block/cherry_stairs + path: ${model_stairs_path} facing=east,half=top,shape=inner_left,waterlogged=true: state: ${base_block}[facing=east,half=top,shape=inner_left,waterlogged=true] model: @@ -2420,7 +2421,7 @@ templates#block_states: facing=east,half=top,shape=straight,waterlogged=true: state: ${base_block}[facing=east,half=top,shape=straight,waterlogged=true] model: - path: minecraft:block/cherry_stairs + path: ${model_stairs_path} uvlock: true x: 180 facing=north,half=bottom,shape=inner_left,waterlogged=true: @@ -2450,7 +2451,7 @@ templates#block_states: facing=north,half=bottom,shape=straight,waterlogged=true: state: ${base_block}[facing=north,half=bottom,shape=straight,waterlogged=true] model: - path: minecraft:block/cherry_stairs + path: ${model_stairs_path} uvlock: true y: 270 facing=north,half=top,shape=inner_left,waterlogged=true: @@ -2482,7 +2483,7 @@ templates#block_states: facing=north,half=top,shape=straight,waterlogged=true: state: ${base_block}[facing=north,half=top,shape=straight,waterlogged=true] model: - path: minecraft:block/cherry_stairs + path: ${model_stairs_path} uvlock: true x: 180 y: 270 @@ -2509,7 +2510,7 @@ templates#block_states: facing=south,half=bottom,shape=straight,waterlogged=true: state: ${base_block}[facing=south,half=bottom,shape=straight,waterlogged=true] model: - path: minecraft:block/cherry_stairs + path: ${model_stairs_path} uvlock: true y: 90 facing=south,half=top,shape=inner_left,waterlogged=true: @@ -2543,7 +2544,7 @@ templates#block_states: facing=south,half=top,shape=straight,waterlogged=true: state: ${base_block}[facing=south,half=top,shape=straight,waterlogged=true] model: - path: minecraft:block/cherry_stairs + path: ${model_stairs_path} uvlock: true x: 180 y: 90 @@ -2574,7 +2575,7 @@ templates#block_states: facing=west,half=bottom,shape=straight,waterlogged=true: state: ${base_block}[facing=west,half=bottom,shape=straight,waterlogged=true] model: - path: minecraft:block/cherry_stairs + path: ${model_stairs_path} uvlock: true y: 180 facing=west,half=top,shape=inner_left,waterlogged=true: @@ -2608,7 +2609,7 @@ templates#block_states: facing=west,half=top,shape=straight,waterlogged=true: state: ${base_block}[facing=west,half=top,shape=straight,waterlogged=true] model: - path: minecraft:block/cherry_stairs + path: ${model_stairs_path} uvlock: true x: 180 y: 180 From 3112ef1696deb44cefe80f313425a552d81675b3 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 21 Jun 2025 08:07:58 +0800 Subject: [PATCH 03/15] =?UTF-8?q?feat(block):=20=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B=E9=85=8D=E7=BD=AE=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../default/configuration/palm_tree.yml | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/common-files/src/main/resources/resources/default/configuration/palm_tree.yml b/common-files/src/main/resources/resources/default/configuration/palm_tree.yml index 11fdd767d..08e6c92c4 100644 --- a/common-files/src/main/resources/resources/default/configuration/palm_tree.yml +++ b/common-files/src/main/resources/resources/default/configuration/palm_tree.yml @@ -534,6 +534,55 @@ items: side: minecraft:block/custom/palm_planks top: minecraft:block/custom/palm_planks model_double_path: minecraft:block/custom/palm_planks + default:palm_stairs: + material: paper + custom-model-data: 1010 + model: + type: minecraft:model + path: minecraft:item/custom/palm_stairs + generation: + parent: minecraft:block/custom/palm_stairs + data: + item-name: + behavior: + type: block_item + block: + loot: + template: default:loot_table/self + settings: + template: + - default:sound/wood + overrides: + map-color: 2 + instrument: bass + hardness: 2.0 + resistance: 3.0 + burnable: true + tags: + - minecraft:mineable/axe + - minecraft:stairs + - minecraft:wooden_stairs + behaviors: + type: stairs_block + states: + template: default:block_state/stairs + arguments: + base_block: cut_copper_stairs + model_stairs_inner_path: minecraft:block/custom/palm_stairs_inner + model_stairs_inner_generation: + parent: minecraft:block/inner_stairs + textures: &textures + bottom: &block_texture minecraft:block/custom/palm_planks + side: *block_texture + top: *block_texture + model_stairs_outer_path: minecraft:block/custom/palm_stairs_outer + model_stairs_outer_generation: + parent: minecraft:block/outer_stairs + textures: *textures + model_stairs_path: minecraft:block/custom/palm_stairs + model_stairs_generation: + parent: minecraft:block/stairs + textures: *textures recipes: default:palm_planks: template: default:recipe/planks From 2fb8589650b2472a615ccd27e6f34a1ce9680b39 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 21 Jun 2025 08:11:32 +0800 Subject: [PATCH 04/15] =?UTF-8?q?feat(block):=20=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B=E9=85=8D=E7=BD=AE=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../default/configuration/palm_tree.yml | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/common-files/src/main/resources/resources/default/configuration/palm_tree.yml b/common-files/src/main/resources/resources/default/configuration/palm_tree.yml index 08e6c92c4..8ea28a920 100644 --- a/common-files/src/main/resources/resources/default/configuration/palm_tree.yml +++ b/common-files/src/main/resources/resources/default/configuration/palm_tree.yml @@ -535,7 +535,7 @@ items: top: minecraft:block/custom/palm_planks model_double_path: minecraft:block/custom/palm_planks default:palm_stairs: - material: paper + material: nether_brick custom-model-data: 1010 model: type: minecraft:model @@ -626,14 +626,14 @@ recipes: result: id: default:palm_slab count: 6 -# default:palm_stairs: -# type: shaped -# pattern: -# - A -# - AA -# - AAA -# ingredients: -# A: default:palm_planks -# result: -# id: default:palm_stairs -# count: 4 \ No newline at end of file + default:palm_stairs: + type: shaped + pattern: + - A + - AA + - AAA + ingredients: + A: default:palm_planks + result: + id: default:palm_stairs + count: 4 \ No newline at end of file From 607753c8717d67632b33ce53d4df6285eabc6419 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 21 Jun 2025 08:12:08 +0800 Subject: [PATCH 05/15] =?UTF-8?q?feat(block):=20=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B=E9=85=8D=E7=BD=AE=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/resources/default/configuration/palm_tree.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common-files/src/main/resources/resources/default/configuration/palm_tree.yml b/common-files/src/main/resources/resources/default/configuration/palm_tree.yml index 8ea28a920..1de5ce19e 100644 --- a/common-files/src/main/resources/resources/default/configuration/palm_tree.yml +++ b/common-files/src/main/resources/resources/default/configuration/palm_tree.yml @@ -536,7 +536,7 @@ items: model_double_path: minecraft:block/custom/palm_planks default:palm_stairs: material: nether_brick - custom-model-data: 1010 + custom-model-data: 1013 model: type: minecraft:model path: minecraft:item/custom/palm_stairs From 60101cf3408f4fd6a928f4f5707239742eacef79 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 21 Jun 2025 08:13:43 +0800 Subject: [PATCH 06/15] =?UTF-8?q?feat(block):=20=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B=E9=85=8D=E7=BD=AE=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/resources/default/configuration/palm_tree.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/common-files/src/main/resources/resources/default/configuration/palm_tree.yml b/common-files/src/main/resources/resources/default/configuration/palm_tree.yml index 1de5ce19e..982001df1 100644 --- a/common-files/src/main/resources/resources/default/configuration/palm_tree.yml +++ b/common-files/src/main/resources/resources/default/configuration/palm_tree.yml @@ -629,9 +629,9 @@ recipes: default:palm_stairs: type: shaped pattern: - - A - - AA - - AAA + - 'A ' + - 'AA ' + - 'AAA' ingredients: A: default:palm_planks result: From a871aad7825bf00b967ac37fd3e632b9b8ec7cae Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 21 Jun 2025 08:53:35 +0800 Subject: [PATCH 07/15] =?UTF-8?q?feat(block):=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E6=96=B9=E5=9D=97=E8=A1=8C=E4=B8=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../block/behavior/StairsBlockBehavior.java | 117 +++++++++++++++++- .../reflection/minecraft/CoreReflections.java | 7 ++ .../src/main/resources/translations/en.yml | 3 + .../src/main/resources/translations/zh_cn.yml | 3 + gradle.properties | 2 +- 5 files changed, 129 insertions(+), 3 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java index 4ae6829e4..e585501ec 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java @@ -1,23 +1,136 @@ package net.momirealms.craftengine.bukkit.block.behavior; +import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; +import net.momirealms.craftengine.bukkit.nms.FastNMS; +import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections; +import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MFluids; +import net.momirealms.craftengine.bukkit.util.BlockStateUtils; +import net.momirealms.craftengine.bukkit.util.DirectionUtils; +import net.momirealms.craftengine.bukkit.util.LocationUtils; import net.momirealms.craftengine.core.block.BlockBehavior; import net.momirealms.craftengine.core.block.CustomBlock; +import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; +import net.momirealms.craftengine.core.block.properties.Property; +import net.momirealms.craftengine.core.block.state.properties.SingleBlockHalf; +import net.momirealms.craftengine.core.block.state.properties.StairsShape; +import net.momirealms.craftengine.core.item.context.BlockPlaceContext; +import net.momirealms.craftengine.core.util.Direction; +import net.momirealms.craftengine.core.util.HorizontalDirection; +import net.momirealms.craftengine.core.util.ResourceConfigUtils; +import net.momirealms.craftengine.core.util.VersionHelper; +import net.momirealms.craftengine.core.world.BlockPos; +import org.jetbrains.annotations.Nullable; import java.util.Map; +import java.util.concurrent.Callable; public class StairsBlockBehavior extends BukkitBlockBehavior { public static final Factory FACTORY = new Factory(); + private final Property facingProperty; + private final Property halfProperty; + private final Property shapeProperty; - public StairsBlockBehavior(CustomBlock block) { + public StairsBlockBehavior(CustomBlock block, Property facing, Property half, Property shape) { super(block); + this.facingProperty = facing; + this.halfProperty = half; + this.shapeProperty = shape; + } + + @Override + public ImmutableBlockState updateStateForPlacement(BlockPlaceContext context, ImmutableBlockState state) { + Direction clickedFace = context.getClickedFace(); + BlockPos clickedPos = context.getClickedPos(); + Object fluidState = FastNMS.INSTANCE.method$Level$getFluidState(context.getLevel().serverWorld(), LocationUtils.toBlockPos(clickedPos)); + return state.owner().value().defaultState() + .with(this.facingProperty, context.getHorizontalDirection().toHorizontalDirection()) + .with(this.halfProperty, clickedFace != Direction.DOWN && (clickedFace == Direction.UP || !(context.getClickLocation().y - clickedPos.y() > 0.5)) ? SingleBlockHalf.BOTTOM : SingleBlockHalf.TOP) + .with(this.waterloggedProperty, FastNMS.INSTANCE.method$FluidState$getType(fluidState) == MFluids.WATER); + } + + @Override + public Object updateShape(Object thisBlock, Object[] args, Callable superMethod) throws Exception { + Object level; + Object blockPos; + Object blockState = args[0]; + if (VersionHelper.isOrAbove1_21_2()) { + level = args[1]; + blockPos = args[3]; + } else { + level = args[3]; + blockPos = args[4]; + } + int stateId = BlockStateUtils.blockStateToId(blockState); + ImmutableBlockState immutableBlockState = BukkitBlockManager.instance().getImmutableBlockState(stateId); + if (immutableBlockState == null || immutableBlockState.isEmpty()) return blockState; + Direction direction = DirectionUtils.fromNMSDirection(VersionHelper.isOrAbove1_21_2() ? args[4] : args[0]); + return direction.axis().isHorizontal() + ? immutableBlockState.with(this.shapeProperty, getStairsShape(immutableBlockState, level, LocationUtils.fromBlockPos(blockPos))).customBlockState().handle() + : superMethod.call(); + } + + private StairsShape getStairsShape(ImmutableBlockState state, Object level, BlockPos blockPos) { + if (!state.customBlockState().isVanillaBlock()) { + Direction direction = state.get(this.facingProperty).toDirection(); + Object blockState = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(blockPos.relative(direction))); + StairsShape straight1 = getStairsShape(state, level, blockPos, blockState, direction); + if (straight1 != null) return straight1; + Object blockState1 = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(blockPos.relative(direction.opposite()))); + StairsShape straight = getStairsShape(state, level, blockPos, blockState1, direction); + if (straight != null) return straight; + } + return StairsShape.STRAIGHT; + } + + @Nullable + private StairsShape getStairsShape(ImmutableBlockState state, Object level, BlockPos blockPos, Object blockState1, Direction direction) { + if (isStairs(blockState1)) { + int stateId = BlockStateUtils.blockStateToId(blockState1); + ImmutableBlockState immutableBlockState = BukkitBlockManager.instance().getImmutableBlockState(stateId); + if (immutableBlockState == null || immutableBlockState.isEmpty()) return StairsShape.STRAIGHT; + if (state.get(this.facingProperty) == immutableBlockState.get(this.facingProperty)) { + Direction direction1 = immutableBlockState.get(this.facingProperty).toDirection(); + if (direction1.axis() != state.get(this.facingProperty).toDirection().axis() && canTakeShape(state, level, blockPos, direction1.opposite())) { + if (direction1 == direction.counterClockWise()) { + return StairsShape.OUTER_LEFT; + } + return StairsShape.OUTER_RIGHT; + } + } + } + return null; + } + + private boolean isStairs(Object state) { + ImmutableBlockState immutableBlockState = BukkitBlockManager.instance().getImmutableBlockState(BlockStateUtils.blockStateToId(state)); + if (immutableBlockState == null || immutableBlockState.isEmpty()) { + return FastNMS.INSTANCE.method$BlockState$getBlock(state).equals(CoreReflections.clazz$StairBlock); + } + return immutableBlockState.behavior().equals(this); + } + + private boolean canTakeShape(ImmutableBlockState state, Object level, BlockPos blockPos, Direction direction) { + Object blockState = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(blockPos.relative(direction))); + if (!isStairs(blockState)) { + return false; + } + ImmutableBlockState immutableBlockState = BukkitBlockManager.instance().getImmutableBlockState(BlockStateUtils.blockStateToId(blockState)); + if (immutableBlockState == null || immutableBlockState.isEmpty()) { + return false; + } + return immutableBlockState.get(this.facingProperty) != state.get(this.facingProperty) || immutableBlockState.get(this.halfProperty) != state.get(this.halfProperty); } public static class Factory implements BlockBehaviorFactory { @Override + @SuppressWarnings("unchecked") public BlockBehavior create(CustomBlock block, Map arguments) { - return new StairsBlockBehavior(block); + Property facing = (Property) ResourceConfigUtils.requireNonNullOrThrow(block.getProperty("facing"), "warning.config.block.behavior.stairs.missing_facing"); + Property half = (Property) ResourceConfigUtils.requireNonNullOrThrow(block.getProperty("half"), "warning.config.block.behavior.stairs.missing_half"); + Property shape = (Property) ResourceConfigUtils.requireNonNullOrThrow(block.getProperty("shape"), "warning.config.block.behavior.stairs.missing_shape"); + return new StairsBlockBehavior(block, facing, half, shape); } } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java index ed5a93376..0f07d09fa 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java @@ -3347,4 +3347,11 @@ public final class CoreReflections { throw new ReflectionInitException("Failed to init ItemStack$CODEC", e); } } + + public static final Class clazz$StairBlock = requireNonNull( + BukkitReflectionUtils.findReobfOrMojmapClass( + "world.level.block.BlockStairs", + "world.level.block.StairBlock" + ) + ); } diff --git a/common-files/src/main/resources/translations/en.yml b/common-files/src/main/resources/translations/en.yml index 486500104..f00a6c2ed 100644 --- a/common-files/src/main/resources/translations/en.yml +++ b/common-files/src/main/resources/translations/en.yml @@ -263,6 +263,9 @@ warning.config.block.behavior.fence_gate.missing_in_wall: "Issue found i warning.config.block.behavior.fence_gate.missing_open: "Issue found in file - The block '' is missing the required 'powered' argument for 'fence_gate_block' behavior." warning.config.block.behavior.fence_gate.missing_powered: "Issue found in file - The block '' is missing the required 'open' argument for 'fence_gate_block' behavior." warning.config.block.behavior.trapdoor.missing_type: "Issue found in file - The block '' is missing the required 'type' property for 'slab_block' behavior." +warning.config.block.behavior.stairs.missing_facing: "Issue found in file - The block '' is missing the required 'facing' property for 'stairs' behavior." +warning.config.block.behavior.stairs.missing_half: "Issue found in file - The block '' is missing the required 'half' property for 'stairs' behavior." +warning.config.block.behavior.stairs.missing_shape: "Issue found in file - The block '' is missing the required 'shape' property for 'stairs' behavior." warning.config.model.generation.missing_parent: "Issue found in file - The config '' is missing the required 'parent' argument in 'generation' section." warning.config.model.generation.invalid_display_position: "Issue found in file - The config '' is using an invalid display position '' in 'generation.display' section. Allowed display positions: []" warning.config.model.generation.invalid_gui_light: "Issue found in file - The config '' is using an invalid gui-light option '' in 'generation' section. Allowed gui light options: []" diff --git a/common-files/src/main/resources/translations/zh_cn.yml b/common-files/src/main/resources/translations/zh_cn.yml index f4a0bb371..89491c83e 100644 --- a/common-files/src/main/resources/translations/zh_cn.yml +++ b/common-files/src/main/resources/translations/zh_cn.yml @@ -263,6 +263,9 @@ warning.config.block.behavior.fence_gate.missing_in_wall: "在文件 在文件 发现问题 - 方块 '' 的 'fence_gate_block' 行为缺少必需的 'open' 属性" warning.config.block.behavior.fence_gate.missing_powered: "在文件 发现问题 - 方块 '' 的 'fence_gate_block' 行为缺少必需的 'powered' 属性" warning.config.block.behavior.slab.missing_type: "在文件 发现问题 - 方块 '' 的 'slab_block' 行为缺少必需的 'type' 属性" +warning.config.block.behavior.stairs.missing_facing: "在文件 发现问题 - 方块 '' 的 'stairs_block' 行为缺少必需的 'facing' 属性" +warning.config.block.behavior.stairs.missing_half: "在文件 发现问题 - 方块 '' 的 'stairs_block' 行为缺少必需的 'half' 属性" +warning.config.block.behavior.stairs.missing_shape: "在文件 发现问题 - 方块 '' 的 'stairs_block' 行为缺少必需的 'shape' 属性" warning.config.model.generation.missing_parent: "在文件 发现问题 - 配置项 '' 的 'generation' 段落缺少必需的 'parent' 参数" warning.config.model.generation.conflict: "在文件 发现问题 - 无法为 '' 生成模型 存在多个配置尝试使用相同路径 '' 生成不同的 JSON 模型" warning.config.model.generation.invalid_display_position: "在文件 发现问题 - 配置项 '' 在 'generation.display' 区域使用了无效的 display 位置类型 ''. 可用展示类型: []" diff --git a/gradle.properties b/gradle.properties index 159a9f1f2..1c385d86e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.jvmargs=-Xmx1G # Rule: [major update].[feature update].[bug fix] project_version=0.0.57.6 config_version=37 -lang_version=18 +lang_version=19 project_group=net.momirealms latest_supported_version=1.21.6 From 7f863bb9601b47240548aed58bbb8f9d8a1295a9 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 21 Jun 2025 09:34:26 +0800 Subject: [PATCH 08/15] =?UTF-8?q?fix(block):=20=E5=B0=9D=E8=AF=95=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E4=B8=8D=E8=BF=9E=E6=8E=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../block/behavior/BukkitBlockBehavior.java | 1 + .../block/behavior/StairsBlockBehavior.java | 77 +++++++++++++++++-- 2 files changed, 71 insertions(+), 7 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BukkitBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BukkitBlockBehavior.java index dd92dc19c..bdc77da2c 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BukkitBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BukkitBlockBehavior.java @@ -40,6 +40,7 @@ public class BukkitBlockBehavior extends AbstractBlockBehavior { }; }); HARD_CODED_PROPERTY_DATA.put("facing", (behavior, property) -> { + if (behavior instanceof StairsBlockBehavior) return; if (property.valueClass() == HorizontalDirection.class) { @SuppressWarnings("unchecked") Property directionProperty = (Property) property; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java index e585501ec..8a0bf3d54 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java @@ -4,9 +4,7 @@ import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; import net.momirealms.craftengine.bukkit.nms.FastNMS; import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections; import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MFluids; -import net.momirealms.craftengine.bukkit.util.BlockStateUtils; -import net.momirealms.craftengine.bukkit.util.DirectionUtils; -import net.momirealms.craftengine.bukkit.util.LocationUtils; +import net.momirealms.craftengine.bukkit.util.*; import net.momirealms.craftengine.core.block.BlockBehavior; import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; @@ -15,10 +13,8 @@ import net.momirealms.craftengine.core.block.properties.Property; import net.momirealms.craftengine.core.block.state.properties.SingleBlockHalf; import net.momirealms.craftengine.core.block.state.properties.StairsShape; import net.momirealms.craftengine.core.item.context.BlockPlaceContext; -import net.momirealms.craftengine.core.util.Direction; -import net.momirealms.craftengine.core.util.HorizontalDirection; -import net.momirealms.craftengine.core.util.ResourceConfigUtils; -import net.momirealms.craftengine.core.util.VersionHelper; +import net.momirealms.craftengine.core.plugin.CraftEngine; +import net.momirealms.craftengine.core.util.*; import net.momirealms.craftengine.core.world.BlockPos; import org.jetbrains.annotations.Nullable; @@ -70,6 +66,73 @@ public class StairsBlockBehavior extends BukkitBlockBehavior { : superMethod.call(); } + @Override + public Object rotate(Object thisBlock, Object[] args, Callable superMethod) throws Exception { + Object state = args[0]; + Rotation rot = RotationUtils.fromNMSRotation(args[1]); + ImmutableBlockState blockState = rotate(state, rot); + return blockState != null ? blockState.customBlockState().handle() : superMethod.call(); + } + + @Nullable + private ImmutableBlockState rotate(Object state, Rotation rotation) { + int stateId = BlockStateUtils.blockStateToId(state); + ImmutableBlockState immutableBlockState = BukkitBlockManager.instance().getImmutableBlockState(stateId); + if (immutableBlockState == null || immutableBlockState.isEmpty()) return null; + Direction facing = immutableBlockState.get(this.facingProperty).toDirection(); + return immutableBlockState.with(this.facingProperty, rotation.rotate(facing).toHorizontalDirection()); + } + + @Override + public Object mirror(Object thisBlock, Object[] args, Callable superMethod) throws Exception { + Object state = args[0]; + Mirror mirror = MirrorUtils.fromNMSMirror(args[1]); + CraftEngine.instance().logger().warn("DoorBlockBehavior.mirror 1 " + state + " " + mirror); + int stateId = BlockStateUtils.blockStateToId(state); + ImmutableBlockState immutableBlockState = BukkitBlockManager.instance().getImmutableBlockState(stateId); + if (immutableBlockState == null || immutableBlockState.isEmpty()) return superMethod.call(); + Direction direction = immutableBlockState.get(this.facingProperty).toDirection(); + StairsShape stairsShape = immutableBlockState.get(this.shapeProperty); + CraftEngine.instance().logger().warn("DoorBlockBehavior.mirror 2 " + immutableBlockState + " " + direction + " " + stairsShape); + switch (mirror) { + case LEFT_RIGHT: + CraftEngine.instance().logger().warn("DoorBlockBehavior.mirror 3 " + direction.axis()); + if (direction.axis() == Direction.Axis.Z) { + CraftEngine.instance().logger().warn("DoorBlockBehavior.mirror 4 " + stairsShape); + return switch (stairsShape) { + case OUTER_LEFT -> + rotate(state, Rotation.CLOCKWISE_180).with(this.shapeProperty, StairsShape.OUTER_RIGHT).customBlockState().handle(); + case INNER_RIGHT -> + rotate(state, Rotation.CLOCKWISE_180).with(this.shapeProperty, StairsShape.INNER_LEFT).customBlockState().handle(); + case INNER_LEFT -> + rotate(state, Rotation.CLOCKWISE_180).with(this.shapeProperty, StairsShape.INNER_RIGHT).customBlockState().handle(); + case OUTER_RIGHT -> + rotate(state, Rotation.CLOCKWISE_180).with(this.shapeProperty, StairsShape.OUTER_LEFT).customBlockState().handle(); + default -> rotate(state, Rotation.CLOCKWISE_180).customBlockState().handle(); + }; + } + CraftEngine.instance().logger().warn("DoorBlockBehavior.mirror 5"); + case FRONT_BACK: + CraftEngine.instance().logger().warn("DoorBlockBehavior.mirror 6 " + direction.axis()); + if (direction.axis() == Direction.Axis.X) { + CraftEngine.instance().logger().warn("DoorBlockBehavior.mirror 7 " + stairsShape); + return switch (stairsShape) { + case STRAIGHT -> rotate(state, Rotation.CLOCKWISE_180).customBlockState().handle(); + case OUTER_LEFT -> + rotate(state, Rotation.CLOCKWISE_180).with(this.shapeProperty, StairsShape.OUTER_RIGHT).customBlockState().handle(); + case INNER_RIGHT -> + rotate(state, Rotation.CLOCKWISE_180).with(this.shapeProperty, StairsShape.INNER_RIGHT).customBlockState().handle(); + case INNER_LEFT -> rotate(state, Rotation.CLOCKWISE_180).with(this.shapeProperty, StairsShape.INNER_LEFT).customBlockState().handle(); + case OUTER_RIGHT -> + rotate(state, Rotation.CLOCKWISE_180).with(this.shapeProperty, StairsShape.OUTER_LEFT).customBlockState().handle(); + }; + } + CraftEngine.instance().logger().warn("DoorBlockBehavior.mirror 8"); + } + CraftEngine.instance().logger().warn("DoorBlockBehavior.mirror 9"); + return superMethod.call(); + } + private StairsShape getStairsShape(ImmutableBlockState state, Object level, BlockPos blockPos) { if (!state.customBlockState().isVanillaBlock()) { Direction direction = state.get(this.facingProperty).toDirection(); From 837d10f3337d826d37b52d7584b73e239a9816f6 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 21 Jun 2025 09:36:21 +0800 Subject: [PATCH 09/15] =?UTF-8?q?fix(block):=20=E5=B0=9D=E8=AF=95=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E4=B8=8D=E8=BF=9E=E6=8E=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../craftengine/bukkit/block/behavior/BukkitBlockBehavior.java | 1 - 1 file changed, 1 deletion(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BukkitBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BukkitBlockBehavior.java index bdc77da2c..dd92dc19c 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BukkitBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/BukkitBlockBehavior.java @@ -40,7 +40,6 @@ public class BukkitBlockBehavior extends AbstractBlockBehavior { }; }); HARD_CODED_PROPERTY_DATA.put("facing", (behavior, property) -> { - if (behavior instanceof StairsBlockBehavior) return; if (property.valueClass() == HorizontalDirection.class) { @SuppressWarnings("unchecked") Property directionProperty = (Property) property; From db76ee88f56ad7720a0692b4b1692d254f80b8f7 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 21 Jun 2025 10:38:16 +0800 Subject: [PATCH 10/15] =?UTF-8?q?fix(block):=20=E5=B0=9D=E8=AF=95=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E4=B8=8D=E8=BF=9E=E6=8E=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../block/behavior/StairsBlockBehavior.java | 33 +++++++------------ 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java index 8a0bf3d54..346a179d9 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java @@ -13,12 +13,12 @@ import net.momirealms.craftengine.core.block.properties.Property; import net.momirealms.craftengine.core.block.state.properties.SingleBlockHalf; import net.momirealms.craftengine.core.block.state.properties.StairsShape; import net.momirealms.craftengine.core.item.context.BlockPlaceContext; -import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.util.*; import net.momirealms.craftengine.core.world.BlockPos; import org.jetbrains.annotations.Nullable; import java.util.Map; +import java.util.Optional; import java.util.concurrent.Callable; public class StairsBlockBehavior extends BukkitBlockBehavior { @@ -61,8 +61,9 @@ public class StairsBlockBehavior extends BukkitBlockBehavior { ImmutableBlockState immutableBlockState = BukkitBlockManager.instance().getImmutableBlockState(stateId); if (immutableBlockState == null || immutableBlockState.isEmpty()) return blockState; Direction direction = DirectionUtils.fromNMSDirection(VersionHelper.isOrAbove1_21_2() ? args[4] : args[0]); + StairsShape stairsShape = getStairsShape(immutableBlockState, level, LocationUtils.fromBlockPos(blockPos)); return direction.axis().isHorizontal() - ? immutableBlockState.with(this.shapeProperty, getStairsShape(immutableBlockState, level, LocationUtils.fromBlockPos(blockPos))).customBlockState().handle() + ? immutableBlockState.with(this.shapeProperty, stairsShape).customBlockState().handle() : superMethod.call(); } @@ -87,18 +88,14 @@ public class StairsBlockBehavior extends BukkitBlockBehavior { public Object mirror(Object thisBlock, Object[] args, Callable superMethod) throws Exception { Object state = args[0]; Mirror mirror = MirrorUtils.fromNMSMirror(args[1]); - CraftEngine.instance().logger().warn("DoorBlockBehavior.mirror 1 " + state + " " + mirror); int stateId = BlockStateUtils.blockStateToId(state); ImmutableBlockState immutableBlockState = BukkitBlockManager.instance().getImmutableBlockState(stateId); if (immutableBlockState == null || immutableBlockState.isEmpty()) return superMethod.call(); Direction direction = immutableBlockState.get(this.facingProperty).toDirection(); StairsShape stairsShape = immutableBlockState.get(this.shapeProperty); - CraftEngine.instance().logger().warn("DoorBlockBehavior.mirror 2 " + immutableBlockState + " " + direction + " " + stairsShape); switch (mirror) { case LEFT_RIGHT: - CraftEngine.instance().logger().warn("DoorBlockBehavior.mirror 3 " + direction.axis()); if (direction.axis() == Direction.Axis.Z) { - CraftEngine.instance().logger().warn("DoorBlockBehavior.mirror 4 " + stairsShape); return switch (stairsShape) { case OUTER_LEFT -> rotate(state, Rotation.CLOCKWISE_180).with(this.shapeProperty, StairsShape.OUTER_RIGHT).customBlockState().handle(); @@ -111,11 +108,8 @@ public class StairsBlockBehavior extends BukkitBlockBehavior { default -> rotate(state, Rotation.CLOCKWISE_180).customBlockState().handle(); }; } - CraftEngine.instance().logger().warn("DoorBlockBehavior.mirror 5"); case FRONT_BACK: - CraftEngine.instance().logger().warn("DoorBlockBehavior.mirror 6 " + direction.axis()); if (direction.axis() == Direction.Axis.X) { - CraftEngine.instance().logger().warn("DoorBlockBehavior.mirror 7 " + stairsShape); return switch (stairsShape) { case STRAIGHT -> rotate(state, Rotation.CLOCKWISE_180).customBlockState().handle(); case OUTER_LEFT -> @@ -127,22 +121,18 @@ public class StairsBlockBehavior extends BukkitBlockBehavior { rotate(state, Rotation.CLOCKWISE_180).with(this.shapeProperty, StairsShape.OUTER_LEFT).customBlockState().handle(); }; } - CraftEngine.instance().logger().warn("DoorBlockBehavior.mirror 8"); } - CraftEngine.instance().logger().warn("DoorBlockBehavior.mirror 9"); return superMethod.call(); } private StairsShape getStairsShape(ImmutableBlockState state, Object level, BlockPos blockPos) { - if (!state.customBlockState().isVanillaBlock()) { - Direction direction = state.get(this.facingProperty).toDirection(); - Object blockState = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(blockPos.relative(direction))); - StairsShape straight1 = getStairsShape(state, level, blockPos, blockState, direction); - if (straight1 != null) return straight1; - Object blockState1 = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(blockPos.relative(direction.opposite()))); - StairsShape straight = getStairsShape(state, level, blockPos, blockState1, direction); - if (straight != null) return straight; - } + Direction direction = state.get(this.facingProperty).toDirection(); + Object blockState = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(blockPos.relative(direction))); + StairsShape straight1 = getStairsShape(state, level, blockPos, blockState, direction); + if (straight1 != null) return straight1; + Object blockState1 = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(blockPos.relative(direction.opposite()))); + StairsShape straight = getStairsShape(state, level, blockPos, blockState1, direction); + if (straight != null) return straight; return StairsShape.STRAIGHT; } @@ -170,7 +160,8 @@ public class StairsBlockBehavior extends BukkitBlockBehavior { if (immutableBlockState == null || immutableBlockState.isEmpty()) { return FastNMS.INSTANCE.method$BlockState$getBlock(state).equals(CoreReflections.clazz$StairBlock); } - return immutableBlockState.behavior().equals(this); + Optional optionalBehavior = immutableBlockState.behavior().getAs(StairsBlockBehavior.class); + return optionalBehavior.isPresent(); } private boolean canTakeShape(ImmutableBlockState state, Object level, BlockPos blockPos, Direction direction) { From 2f41057c3bd123ad1d8480c6d1a45d65f959012c Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 21 Jun 2025 10:54:28 +0800 Subject: [PATCH 11/15] =?UTF-8?q?fix(block):=20=E5=B0=9D=E8=AF=95=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E4=B8=8D=E8=BF=9E=E6=8E=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../block/behavior/StairsBlockBehavior.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java index 346a179d9..7aa395877 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java @@ -39,10 +39,11 @@ public class StairsBlockBehavior extends BukkitBlockBehavior { Direction clickedFace = context.getClickedFace(); BlockPos clickedPos = context.getClickedPos(); Object fluidState = FastNMS.INSTANCE.method$Level$getFluidState(context.getLevel().serverWorld(), LocationUtils.toBlockPos(clickedPos)); - return state.owner().value().defaultState() + ImmutableBlockState blockState = state.owner().value().defaultState() .with(this.facingProperty, context.getHorizontalDirection().toHorizontalDirection()) .with(this.halfProperty, clickedFace != Direction.DOWN && (clickedFace == Direction.UP || !(context.getClickLocation().y - clickedPos.y() > 0.5)) ? SingleBlockHalf.BOTTOM : SingleBlockHalf.TOP) .with(this.waterloggedProperty, FastNMS.INSTANCE.method$FluidState$getType(fluidState) == MFluids.WATER); + return blockState.with(this.shapeProperty, getStairsShape(blockState, context.getLevel().serverWorld(), clickedPos)); } @Override @@ -128,27 +129,27 @@ public class StairsBlockBehavior extends BukkitBlockBehavior { private StairsShape getStairsShape(ImmutableBlockState state, Object level, BlockPos blockPos) { Direction direction = state.get(this.facingProperty).toDirection(); Object blockState = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(blockPos.relative(direction))); - StairsShape straight1 = getStairsShape(state, level, blockPos, blockState, direction); + StairsShape straight1 = getStairsShape(state, level, blockPos, blockState, direction, true); if (straight1 != null) return straight1; Object blockState1 = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(blockPos.relative(direction.opposite()))); - StairsShape straight = getStairsShape(state, level, blockPos, blockState1, direction); + StairsShape straight = getStairsShape(state, level, blockPos, blockState1, direction, false); if (straight != null) return straight; return StairsShape.STRAIGHT; } @Nullable - private StairsShape getStairsShape(ImmutableBlockState state, Object level, BlockPos blockPos, Object blockState1, Direction direction) { + private StairsShape getStairsShape(ImmutableBlockState state, Object level, BlockPos blockPos, Object blockState1, Direction direction, boolean opposite) { if (isStairs(blockState1)) { int stateId = BlockStateUtils.blockStateToId(blockState1); ImmutableBlockState immutableBlockState = BukkitBlockManager.instance().getImmutableBlockState(stateId); if (immutableBlockState == null || immutableBlockState.isEmpty()) return StairsShape.STRAIGHT; if (state.get(this.facingProperty) == immutableBlockState.get(this.facingProperty)) { Direction direction1 = immutableBlockState.get(this.facingProperty).toDirection(); - if (direction1.axis() != state.get(this.facingProperty).toDirection().axis() && canTakeShape(state, level, blockPos, direction1.opposite())) { + if (direction1.axis() != state.get(this.facingProperty).toDirection().axis() && canTakeShape(state, level, blockPos, opposite ? direction1.opposite() : direction1)) { if (direction1 == direction.counterClockWise()) { - return StairsShape.OUTER_LEFT; + return opposite ? StairsShape.OUTER_LEFT : StairsShape.INNER_LEFT; } - return StairsShape.OUTER_RIGHT; + return opposite ? StairsShape.OUTER_RIGHT : StairsShape.INNER_LEFT; } } } From fa1d4e77c00cde71a91cc5b6a6954845de56bea3 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 21 Jun 2025 11:16:59 +0800 Subject: [PATCH 12/15] =?UTF-8?q?fix(block):=20=E5=B0=9D=E8=AF=95=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E4=B8=8D=E8=BF=9E=E6=8E=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../block/behavior/StairsBlockBehavior.java | 64 ++++++++++--------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java index 7aa395877..3090d0744 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java @@ -126,34 +126,39 @@ public class StairsBlockBehavior extends BukkitBlockBehavior { return superMethod.call(); } - private StairsShape getStairsShape(ImmutableBlockState state, Object level, BlockPos blockPos) { + private StairsShape getStairsShape(ImmutableBlockState state, Object level, BlockPos pos) { Direction direction = state.get(this.facingProperty).toDirection(); - Object blockState = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(blockPos.relative(direction))); - StairsShape straight1 = getStairsShape(state, level, blockPos, blockState, direction, true); - if (straight1 != null) return straight1; - Object blockState1 = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(blockPos.relative(direction.opposite()))); - StairsShape straight = getStairsShape(state, level, blockPos, blockState1, direction, false); - if (straight != null) return straight; - return StairsShape.STRAIGHT; - } - - @Nullable - private StairsShape getStairsShape(ImmutableBlockState state, Object level, BlockPos blockPos, Object blockState1, Direction direction, boolean opposite) { - if (isStairs(blockState1)) { - int stateId = BlockStateUtils.blockStateToId(blockState1); - ImmutableBlockState immutableBlockState = BukkitBlockManager.instance().getImmutableBlockState(stateId); - if (immutableBlockState == null || immutableBlockState.isEmpty()) return StairsShape.STRAIGHT; - if (state.get(this.facingProperty) == immutableBlockState.get(this.facingProperty)) { - Direction direction1 = immutableBlockState.get(this.facingProperty).toDirection(); - if (direction1.axis() != state.get(this.facingProperty).toDirection().axis() && canTakeShape(state, level, blockPos, opposite ? direction1.opposite() : direction1)) { - if (direction1 == direction.counterClockWise()) { - return opposite ? StairsShape.OUTER_LEFT : StairsShape.INNER_LEFT; - } - return opposite ? StairsShape.OUTER_RIGHT : StairsShape.INNER_LEFT; + Object blockState = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(pos.relative(direction))); + int stateId = BlockStateUtils.blockStateToId(blockState); + ImmutableBlockState immutableBlockState = BukkitBlockManager.instance().getImmutableBlockState(stateId); + if (immutableBlockState == null || immutableBlockState.isEmpty()) return StairsShape.STRAIGHT; + if (isStairs(blockState) && state.get(this.halfProperty) == immutableBlockState.get(this.halfProperty)) { + Direction direction1 = immutableBlockState.get(this.facingProperty).toDirection(); + if (direction1.axis() != state.get(this.facingProperty).toDirection().axis() && canTakeShape(state, level, pos, direction1.opposite())) { + if (direction1 == direction.counterClockWise()) { + return StairsShape.OUTER_LEFT; } + + return StairsShape.OUTER_RIGHT; } } - return null; + + Object blockState1 = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(pos.relative(direction.opposite()))); + int stateId1 = BlockStateUtils.blockStateToId(blockState1); + ImmutableBlockState immutableBlockState1 = BukkitBlockManager.instance().getImmutableBlockState(stateId1); + if (immutableBlockState1 == null || immutableBlockState1.isEmpty()) return StairsShape.STRAIGHT; + if (isStairs(blockState1) && state.get(this.halfProperty) == immutableBlockState1.get(this.halfProperty)) { + Direction direction2 = immutableBlockState1.get(this.facingProperty).toDirection(); + if (direction2.axis() != state.get(this.facingProperty).toDirection().axis() && canTakeShape(state, level, pos, direction2)) { + if (direction2 == direction.counterClockWise()) { + return StairsShape.INNER_LEFT; + } + + return StairsShape.INNER_RIGHT; + } + } + + return StairsShape.STRAIGHT; } private boolean isStairs(Object state) { @@ -165,16 +170,13 @@ public class StairsBlockBehavior extends BukkitBlockBehavior { return optionalBehavior.isPresent(); } - private boolean canTakeShape(ImmutableBlockState state, Object level, BlockPos blockPos, Direction direction) { - Object blockState = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(blockPos.relative(direction))); - if (!isStairs(blockState)) { - return false; - } + private boolean canTakeShape(ImmutableBlockState state, Object level, BlockPos pos, Direction face) { + Object blockState = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(pos.relative(face))); ImmutableBlockState immutableBlockState = BukkitBlockManager.instance().getImmutableBlockState(BlockStateUtils.blockStateToId(blockState)); if (immutableBlockState == null || immutableBlockState.isEmpty()) { - return false; + return !isStairs(blockState); } - return immutableBlockState.get(this.facingProperty) != state.get(this.facingProperty) || immutableBlockState.get(this.halfProperty) != state.get(this.halfProperty); + return !isStairs(blockState) || immutableBlockState.get(this.facingProperty) != state.get(this.facingProperty) || immutableBlockState.get(this.halfProperty) != state.get(this.halfProperty); } public static class Factory implements BlockBehaviorFactory { From 50a066b048e2381ac5b10ea9e2981ac03f3bf742 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 21 Jun 2025 12:08:35 +0800 Subject: [PATCH 13/15] =?UTF-8?q?fix(block):=20=E4=BF=AE=E5=A4=8D=E4=B8=8D?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../block/behavior/StairsBlockBehavior.java | 100 ++++-------------- 1 file changed, 23 insertions(+), 77 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java index 3090d0744..efc0ce047 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java @@ -4,7 +4,9 @@ import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; import net.momirealms.craftengine.bukkit.nms.FastNMS; import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections; import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MFluids; -import net.momirealms.craftengine.bukkit.util.*; +import net.momirealms.craftengine.bukkit.util.BlockStateUtils; +import net.momirealms.craftengine.bukkit.util.DirectionUtils; +import net.momirealms.craftengine.bukkit.util.LocationUtils; import net.momirealms.craftengine.core.block.BlockBehavior; import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; @@ -13,9 +15,11 @@ import net.momirealms.craftengine.core.block.properties.Property; import net.momirealms.craftengine.core.block.state.properties.SingleBlockHalf; import net.momirealms.craftengine.core.block.state.properties.StairsShape; import net.momirealms.craftengine.core.item.context.BlockPlaceContext; -import net.momirealms.craftengine.core.util.*; +import net.momirealms.craftengine.core.util.Direction; +import net.momirealms.craftengine.core.util.HorizontalDirection; +import net.momirealms.craftengine.core.util.ResourceConfigUtils; +import net.momirealms.craftengine.core.util.VersionHelper; import net.momirealms.craftengine.core.world.BlockPos; -import org.jetbrains.annotations.Nullable; import java.util.Map; import java.util.Optional; @@ -68,93 +72,35 @@ public class StairsBlockBehavior extends BukkitBlockBehavior { : superMethod.call(); } - @Override - public Object rotate(Object thisBlock, Object[] args, Callable superMethod) throws Exception { - Object state = args[0]; - Rotation rot = RotationUtils.fromNMSRotation(args[1]); - ImmutableBlockState blockState = rotate(state, rot); - return blockState != null ? blockState.customBlockState().handle() : superMethod.call(); - } - - @Nullable - private ImmutableBlockState rotate(Object state, Rotation rotation) { - int stateId = BlockStateUtils.blockStateToId(state); - ImmutableBlockState immutableBlockState = BukkitBlockManager.instance().getImmutableBlockState(stateId); - if (immutableBlockState == null || immutableBlockState.isEmpty()) return null; - Direction facing = immutableBlockState.get(this.facingProperty).toDirection(); - return immutableBlockState.with(this.facingProperty, rotation.rotate(facing).toHorizontalDirection()); - } - - @Override - public Object mirror(Object thisBlock, Object[] args, Callable superMethod) throws Exception { - Object state = args[0]; - Mirror mirror = MirrorUtils.fromNMSMirror(args[1]); - int stateId = BlockStateUtils.blockStateToId(state); - ImmutableBlockState immutableBlockState = BukkitBlockManager.instance().getImmutableBlockState(stateId); - if (immutableBlockState == null || immutableBlockState.isEmpty()) return superMethod.call(); - Direction direction = immutableBlockState.get(this.facingProperty).toDirection(); - StairsShape stairsShape = immutableBlockState.get(this.shapeProperty); - switch (mirror) { - case LEFT_RIGHT: - if (direction.axis() == Direction.Axis.Z) { - return switch (stairsShape) { - case OUTER_LEFT -> - rotate(state, Rotation.CLOCKWISE_180).with(this.shapeProperty, StairsShape.OUTER_RIGHT).customBlockState().handle(); - case INNER_RIGHT -> - rotate(state, Rotation.CLOCKWISE_180).with(this.shapeProperty, StairsShape.INNER_LEFT).customBlockState().handle(); - case INNER_LEFT -> - rotate(state, Rotation.CLOCKWISE_180).with(this.shapeProperty, StairsShape.INNER_RIGHT).customBlockState().handle(); - case OUTER_RIGHT -> - rotate(state, Rotation.CLOCKWISE_180).with(this.shapeProperty, StairsShape.OUTER_LEFT).customBlockState().handle(); - default -> rotate(state, Rotation.CLOCKWISE_180).customBlockState().handle(); - }; - } - case FRONT_BACK: - if (direction.axis() == Direction.Axis.X) { - return switch (stairsShape) { - case STRAIGHT -> rotate(state, Rotation.CLOCKWISE_180).customBlockState().handle(); - case OUTER_LEFT -> - rotate(state, Rotation.CLOCKWISE_180).with(this.shapeProperty, StairsShape.OUTER_RIGHT).customBlockState().handle(); - case INNER_RIGHT -> - rotate(state, Rotation.CLOCKWISE_180).with(this.shapeProperty, StairsShape.INNER_RIGHT).customBlockState().handle(); - case INNER_LEFT -> rotate(state, Rotation.CLOCKWISE_180).with(this.shapeProperty, StairsShape.INNER_LEFT).customBlockState().handle(); - case OUTER_RIGHT -> - rotate(state, Rotation.CLOCKWISE_180).with(this.shapeProperty, StairsShape.OUTER_LEFT).customBlockState().handle(); - }; - } - } - return superMethod.call(); - } - private StairsShape getStairsShape(ImmutableBlockState state, Object level, BlockPos pos) { Direction direction = state.get(this.facingProperty).toDirection(); Object blockState = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(pos.relative(direction))); int stateId = BlockStateUtils.blockStateToId(blockState); ImmutableBlockState immutableBlockState = BukkitBlockManager.instance().getImmutableBlockState(stateId); - if (immutableBlockState == null || immutableBlockState.isEmpty()) return StairsShape.STRAIGHT; - if (isStairs(blockState) && state.get(this.halfProperty) == immutableBlockState.get(this.halfProperty)) { - Direction direction1 = immutableBlockState.get(this.facingProperty).toDirection(); - if (direction1.axis() != state.get(this.facingProperty).toDirection().axis() && canTakeShape(state, level, pos, direction1.opposite())) { - if (direction1 == direction.counterClockWise()) { - return StairsShape.OUTER_LEFT; + if (immutableBlockState != null && !immutableBlockState.isEmpty()) { + if (isStairs(blockState) && state.get(this.halfProperty) == immutableBlockState.get(this.halfProperty)) { + Direction direction1 = immutableBlockState.get(this.facingProperty).toDirection(); + if (direction1.axis() != state.get(this.facingProperty).toDirection().axis() && canTakeShape(state, level, pos, direction1.opposite())) { + if (direction1 == direction.counterClockWise()) { + return StairsShape.OUTER_LEFT; + } + return StairsShape.OUTER_RIGHT; } - - return StairsShape.OUTER_RIGHT; } } Object blockState1 = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(pos.relative(direction.opposite()))); int stateId1 = BlockStateUtils.blockStateToId(blockState1); ImmutableBlockState immutableBlockState1 = BukkitBlockManager.instance().getImmutableBlockState(stateId1); - if (immutableBlockState1 == null || immutableBlockState1.isEmpty()) return StairsShape.STRAIGHT; - if (isStairs(blockState1) && state.get(this.halfProperty) == immutableBlockState1.get(this.halfProperty)) { - Direction direction2 = immutableBlockState1.get(this.facingProperty).toDirection(); - if (direction2.axis() != state.get(this.facingProperty).toDirection().axis() && canTakeShape(state, level, pos, direction2)) { - if (direction2 == direction.counterClockWise()) { - return StairsShape.INNER_LEFT; + if (immutableBlockState1 != null && !immutableBlockState1.isEmpty()) { + if (isStairs(blockState1) && state.get(this.halfProperty) == immutableBlockState1.get(this.halfProperty)) { + Direction direction2 = immutableBlockState1.get(this.facingProperty).toDirection(); + if (direction2.axis() != state.get(this.facingProperty).toDirection().axis() && canTakeShape(state, level, pos, direction2)) { + if (direction2 == direction.counterClockWise()) { + return StairsShape.INNER_LEFT; + } + return StairsShape.INNER_RIGHT; } - - return StairsShape.INNER_RIGHT; } } From 85fce396bef1b5d9cd767df0bb90d7ee3187151d Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 21 Jun 2025 13:12:50 +0800 Subject: [PATCH 14/15] =?UTF-8?q?todo(block):=20=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E4=BB=A3=E5=8A=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../block/behavior/StairsBlockBehavior.java | 47 +++++++++++ .../reflection/minecraft/CoreReflections.java | 82 +++++++++++++++++++ .../bukkit/util/StairsShapeUtils.java | 27 ++++++ 3 files changed, 156 insertions(+) create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/StairsShapeUtils.java diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java index efc0ce047..4f63c48a3 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java @@ -87,6 +87,24 @@ public class StairsBlockBehavior extends BukkitBlockBehavior { return StairsShape.OUTER_RIGHT; } } + } else if (isStairs(blockState)) { + // 处理可能是原版楼梯 + // try { + // Object nmsHalf = CoreReflections.method$StateHolder$getValue.invoke(blockState, CoreReflections.instance$StairBlock$HALF); + // SingleBlockHalf half = SingleBlockHalf.valueOf(nmsHalf.toString().toUpperCase(Locale.ROOT)); + // if (state.get(this.halfProperty).equals(half)) { + // Object nmsFacing = CoreReflections.method$StateHolder$getValue.invoke(blockState, CoreReflections.instance$StairBlock$FACING); + // Direction direction1 = DirectionUtils.fromNMSDirection(nmsFacing); + // if (direction1.axis() != state.get(this.facingProperty).toDirection().axis() && canTakeShape(state, level, pos, direction1.opposite())) { + // if (direction1 == direction.counterClockWise()) { + // return StairsShape.OUTER_LEFT; + // } + // return StairsShape.OUTER_RIGHT; + // } + // } + // } catch (Exception e) { + // CraftEngine.instance().logger().warn("Failed to get facing from blockState", e); + // } } Object blockState1 = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(pos.relative(direction.opposite()))); @@ -102,6 +120,24 @@ public class StairsBlockBehavior extends BukkitBlockBehavior { return StairsShape.INNER_RIGHT; } } + } else if (isStairs(blockState1)) { + // 处理可能是原版楼梯 + // try { + // Object nmsHalf = CoreReflections.method$StateHolder$getValue.invoke(blockState1, CoreReflections.instance$StairBlock$HALF); + // SingleBlockHalf half = SingleBlockHalf.valueOf(nmsHalf.toString().toUpperCase(Locale.ROOT)); + // if (state.get(this.halfProperty).equals(half)) { + // Object nmsFacing = CoreReflections.method$StateHolder$getValue.invoke(blockState1, CoreReflections.instance$StairBlock$FACING); + // Direction direction1 = DirectionUtils.fromNMSDirection(nmsFacing); + // if (direction1.axis() != state.get(this.facingProperty).toDirection().axis() && canTakeShape(state, level, pos, direction1)) { + // if (direction1 == direction.counterClockWise()) { + // return StairsShape.INNER_LEFT; + // } + // return StairsShape.INNER_RIGHT; + // } + // } + // } catch (Exception e) { + // CraftEngine.instance().logger().warn("Failed to get facing from blockState", e); + // } } return StairsShape.STRAIGHT; @@ -120,6 +156,17 @@ public class StairsBlockBehavior extends BukkitBlockBehavior { Object blockState = FastNMS.INSTANCE.method$BlockGetter$getBlockState(level, LocationUtils.toBlockPos(pos.relative(face))); ImmutableBlockState immutableBlockState = BukkitBlockManager.instance().getImmutableBlockState(BlockStateUtils.blockStateToId(blockState)); if (immutableBlockState == null || immutableBlockState.isEmpty()) { + // 处理可能是原版楼梯 + // try { + // Object nmsFacing = CoreReflections.method$StateHolder$getValue.invoke(blockState, CoreReflections.instance$StairBlock$FACING); + // Direction direction = DirectionUtils.fromNMSDirection(nmsFacing); + // if (direction != state.get(this.facingProperty).toDirection()) return true; + // Object nmsHalf = CoreReflections.method$StateHolder$getValue.invoke(blockState, CoreReflections.instance$StairBlock$HALF); + // SingleBlockHalf half = SingleBlockHalf.valueOf(nmsHalf.toString().toUpperCase(Locale.ROOT)); + // if (half != state.get(this.halfProperty)) return true; + // } catch (Exception e) { + // CraftEngine.instance().logger().warn("Failed to handle canTakeShape", e); + // } return !isStairs(blockState); } return !isStairs(blockState) || immutableBlockState.get(this.facingProperty) != state.get(this.facingProperty) || immutableBlockState.get(this.halfProperty) != state.get(this.halfProperty); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java index 0f07d09fa..c2a330932 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/CoreReflections.java @@ -3354,4 +3354,86 @@ public final class CoreReflections { "world.level.block.StairBlock" ) ); + + public static final Class clazz$StairsShape = requireNonNull( + BukkitReflectionUtils.findReobfOrMojmapClass( + "world.level.block.state.properties.BlockPropertyStairsShape", + "world.level.block.state.properties.StairsShape" + ) + ); + + public static final Method method$StairsShape$values = requireNonNull( + ReflectionUtils.getStaticMethod(clazz$StairsShape, clazz$StairsShape.arrayType()) + ); + + public static final Method method$StairsShape$ordinal = requireNonNull( + ReflectionUtils.getMethod( + clazz$StairsShape, new String[]{"ordinal"} + ) + ); + + public static final Object instance$StairsShape$STRAIGHT; + public static final Object instance$StairsShape$INNER_LEFT; + public static final Object instance$StairsShape$INNER_RIGHT; + public static final Object instance$StairsShape$OUTER_LEFT; + public static final Object instance$StairsShape$OUTER_RIGHT; + + static { + try { + Object[] values = (Object[]) method$StairsShape$values.invoke(null); + instance$StairsShape$STRAIGHT = values[0]; + instance$StairsShape$INNER_LEFT = values[1]; + instance$StairsShape$INNER_RIGHT = values[2]; + instance$StairsShape$OUTER_LEFT = values[3]; + instance$StairsShape$OUTER_RIGHT = values[4]; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static final Class clazz$EnumProperty = requireNonNull( + BukkitReflectionUtils.findReobfOrMojmapClass( + "world.level.block.state.properties.BlockStateEnum", + "world.level.block.state.properties.EnumProperty" + ) + ); + + // 1.20~1.21.1 + public static final Class clazz$DirectionProperty = + BukkitReflectionUtils.findReobfOrMojmapClass( + "world.level.block.state.properties.BlockStateDirection", + "world.level.block.state.properties.DirectionProperty" + ); + + public static final Field field$StairBlock$FACING = requireNonNull( + VersionHelper.isOrAbove1_21_2() + ? ReflectionUtils.getDeclaredField(clazz$StairBlock, clazz$EnumProperty, 0) + : ReflectionUtils.getDeclaredField(clazz$StairBlock, clazz$DirectionProperty, 0) + ); + + public static final Field field$StairBlock$HALF = requireNonNull( + ReflectionUtils.getDeclaredField( + clazz$StairBlock, clazz$EnumProperty, VersionHelper.isOrAbove1_21_2() ? 1 : 0 + ) + ); + + public static final Field field$StairBlock$SHAPE = requireNonNull( + ReflectionUtils.getDeclaredField( + clazz$StairBlock, clazz$EnumProperty, VersionHelper.isOrAbove1_21_2() ? 2 : 1 + ) + ); + + public static final Object instance$StairBlock$FACING; + public static final Object instance$StairBlock$HALF; + public static final Object instance$StairBlock$SHAPE; + + static { + try { + instance$StairBlock$FACING = requireNonNull(field$StairBlock$FACING.get(null)); + instance$StairBlock$HALF = requireNonNull(field$StairBlock$HALF.get(null)); + instance$StairBlock$SHAPE = requireNonNull(field$StairBlock$SHAPE.get(null)); + } catch (Exception e) { + throw new RuntimeException(e); + } + } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/StairsShapeUtils.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/StairsShapeUtils.java new file mode 100644 index 000000000..c06c548b5 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/StairsShapeUtils.java @@ -0,0 +1,27 @@ +package net.momirealms.craftengine.bukkit.util; + +import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections; +import net.momirealms.craftengine.core.block.state.properties.StairsShape; + +public class StairsShapeUtils { + private StairsShapeUtils() {} + + public static StairsShape fromNMSStairsShape(Object shape) { + try { + int index = (int) CoreReflections.method$StairsShape$ordinal.invoke(shape); + return StairsShape.values()[index]; + } catch (ReflectiveOperationException e) { + throw new RuntimeException(e); + } + } + + public static Object toNMSStairsShape(StairsShape shape) { + return switch (shape) { + case STRAIGHT -> CoreReflections.instance$StairsShape$STRAIGHT; + case INNER_LEFT -> CoreReflections.instance$StairsShape$INNER_LEFT; + case INNER_RIGHT -> CoreReflections.instance$StairsShape$INNER_RIGHT; + case OUTER_LEFT -> CoreReflections.instance$StairsShape$OUTER_LEFT; + case OUTER_RIGHT -> CoreReflections.instance$StairsShape$OUTER_RIGHT; + }; + } +} From e8c8c3ffaee49a894efd2c4a07e4f3d6b82ba64b Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 21 Jun 2025 13:29:41 +0800 Subject: [PATCH 15/15] =?UTF-8?q?fix(block):=20=E4=BF=AE=E5=A4=8D=E5=90=AB?= =?UTF-8?q?=E6=B0=B4=E8=A1=8C=E4=B8=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../craftengine/bukkit/block/behavior/StairsBlockBehavior.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java index 4f63c48a3..790b12541 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java @@ -65,6 +65,9 @@ public class StairsBlockBehavior extends BukkitBlockBehavior { int stateId = BlockStateUtils.blockStateToId(blockState); ImmutableBlockState immutableBlockState = BukkitBlockManager.instance().getImmutableBlockState(stateId); if (immutableBlockState == null || immutableBlockState.isEmpty()) return blockState; + if (immutableBlockState.get(this.waterloggedProperty)) { + FastNMS.INSTANCE.method$LevelAccessor$scheduleFluidTick(VersionHelper.isOrAbove1_21_2() ? args[2] : args[3], VersionHelper.isOrAbove1_21_2() ? args[3] : args[4], MFluids.WATER, 5); + } Direction direction = DirectionUtils.fromNMSDirection(VersionHelper.isOrAbove1_21_2() ? args[4] : args[0]); StairsShape stairsShape = getStairsShape(immutableBlockState, level, LocationUtils.fromBlockPos(blockPos)); return direction.axis().isHorizontal()