From bb22afd0a22a437bd4579454ba16f6eccafd9e92 Mon Sep 17 00:00:00 2001 From: OEOTYAN <1124718975@qq.com> Date: Wed, 6 Dec 2023 21:57:39 +0800 Subject: [PATCH] feat: add nbt reflection API --- src/ll/api/command/DynamicCommand.cpp | 2 +- src/ll/test/ConfigTest.cpp | 4 + src/ll/test/TestNbt.cpp | 3 +- src/mc/nbt/ByteArrayTag.h | 7 +- src/mc/nbt/ByteTag.h | 13 +- src/mc/nbt/CompoundTagVariant.h | 87 +- src/mc/nbt/Int64Tag.h | 9 +- src/mc/nbt/IntArrayTag.h | 7 +- src/mc/nbt/IntTag.h | 9 +- src/mc/nbt/ListTag.h | 5 +- src/mc/nbt/ShortTag.h | 11 +- src/mc/nbt/SnbtDumpImpl.cpp | 49 +- src/mc/nbt/SnbtParseImpl.cpp | 4 +- .../level/block/utils/StaticVanillaBlocks.cpp | 1624 ++++++++--------- 14 files changed, 971 insertions(+), 863 deletions(-) diff --git a/src/ll/api/command/DynamicCommand.cpp b/src/ll/api/command/DynamicCommand.cpp index a3892d6fac..6d08cd8c14 100644 --- a/src/ll/api/command/DynamicCommand.cpp +++ b/src/ll/api/command/DynamicCommand.cpp @@ -198,7 +198,7 @@ CommandParameterData DynamicCommand::ParameterData::makeParameterData() const { case ParameterType::Command: return makeParameterData(); default: - return {}; + std::unreachable(); } } diff --git a/src/ll/test/ConfigTest.cpp b/src/ll/test/ConfigTest.cpp index 9cb18066bd..3f4fc2286c 100644 --- a/src/ll/test/ConfigTest.cpp +++ b/src/ll/test/ConfigTest.cpp @@ -20,6 +20,8 @@ #include "ll/api/utils/WinUtils.h" #include "mc/server/commands/standard/FillCommand.h" +#include "mc/nbt/CompoundTag.h" + template class TestClass { @@ -74,6 +76,8 @@ LL_AUTO_TYPED_INSTANCE_HOOK( // ll::config::saveConfig(helloReflection, "plugins/Test/config/testconfig.json"); + ll::logger.debug("reflection NBT: {}", ll::reflection::serialize(helloReflection).dump(SnbtFormat::PrettyConsolePrint)); + ll::logger.debug("0x{:X}", (uintptr_t)ll::memory::resolveIdentifier(&FillCommand::execute)); ll::logger.debug("0x{:X}", (uintptr_t)ll::win_utils::getImageRange().data()); diff --git a/src/ll/test/TestNbt.cpp b/src/ll/test/TestNbt.cpp index 607016c6d5..e0a64bd2a6 100644 --- a/src/ll/test/TestNbt.cpp +++ b/src/ll/test/TestNbt.cpp @@ -63,6 +63,7 @@ LL_AUTO_TYPED_INSTANCE_HOOK(NbtTest, HookPriority::Normal, ServerInstance, &Serv some = { new = { ; hi compound = { + anull = null, "byte" = 127b "bytearray" = [B;1b, 2b, 3b, 4b, 5b, -2b, -3b, -6b], // orld /**/ /* 34t */ "compound" = { @@ -125,5 +126,5 @@ LL_AUTO_TYPED_INSTANCE_HOOK(NbtTest, HookPriority::Normal, ServerInstance, &Serv using namespace ll::string_utils; ll::logger.debug("\n{}", replaceAnsiToMcCode(nbt.toSnbt(SnbtFormat::Colored | SnbtFormat::Console))); - ll::logger.debug("\n{}", (nbt.toSnbt(SnbtFormat::Colored))); + ll::logger.debug("\n{}", (nbt2.toSnbt(SnbtFormat::Colored))); } \ No newline at end of file diff --git a/src/mc/nbt/ByteArrayTag.h b/src/mc/nbt/ByteArrayTag.h index 6112934b50..7a48f4cff6 100644 --- a/src/mc/nbt/ByteArrayTag.h +++ b/src/mc/nbt/ByteArrayTag.h @@ -14,7 +14,10 @@ class ByteArrayTag : public ::Tag { ByteArrayTag() = default; - [[nodiscard]] constexpr ByteArrayTag(TagMemoryChunk mem) : data(std::move(mem)) {} // NOLINT + template + [[nodiscard]] constexpr ByteArrayTag(std::in_place_type_t, TagMemoryChunk mem) : data(std::move(mem)) { + data.mSize = data.mSize * sizeof(T); + } [[nodiscard]] constexpr ByteArrayTag(std::vector const& arr) : data(std::span{arr}) {} // NOLINT @@ -22,6 +25,8 @@ class ByteArrayTag : public ::Tag { [[nodiscard]] constexpr schar& operator[](size_t index) const { return view()[index]; } + [[nodiscard]] constexpr size_t size() const { return data.mSize; } + public: // NOLINTBEGIN // vIndex: 0, symbol: __gen_??1ByteArrayTag@@UEAA@XZ diff --git a/src/mc/nbt/ByteTag.h b/src/mc/nbt/ByteTag.h index d30dc8e802..8c23945aeb 100644 --- a/src/mc/nbt/ByteTag.h +++ b/src/mc/nbt/ByteTag.h @@ -9,19 +9,20 @@ class ByteTag : public ::Tag { public: schar data; - constexpr ByteTag& operator=(schar value) { - data = value; + template + constexpr ByteTag& operator=(T value) { + data = (schar)value; return *this; } - constexpr operator schar() const { return data; } // NOLINT + template + constexpr operator T() const { + return (T)data; + } template - requires(sizeof(T) == 1) [[nodiscard]] constexpr explicit ByteTag(T value = 0) : data((schar)value) {} - constexpr explicit operator bool() const { return data != 0; } - ByteTag operator-() const { return ByteTag{(schar)-data}; } public: diff --git a/src/mc/nbt/CompoundTagVariant.h b/src/mc/nbt/CompoundTagVariant.h index f4f7449857..34e779314f 100644 --- a/src/mc/nbt/CompoundTagVariant.h +++ b/src/mc/nbt/CompoundTagVariant.h @@ -71,8 +71,9 @@ class CompoundTagVariant { case Tag::Type::IntArray: mTagStorage = std::move((IntArrayTag&)*tag); case Tag::Type::End: - default: mTagStorage = std::move((EndTag&)*tag); + default: + std::unreachable(); } } [[nodiscard]] CompoundTagVariant(std::unique_ptr const& tag) : CompoundTagVariant(std::move(tag->copy())) {} @@ -97,12 +98,60 @@ class CompoundTagVariant { [[nodiscard]] inline CompoundTagVariant(std::string s) : mTagStorage(StringTag{std::move(s)}) {} // NOLINT - [[nodiscard]] Tag::Type index() const { return (Tag::Type)mTagStorage.index(); } + [[nodiscard]] inline CompoundTagVariant(std::string_view s) : mTagStorage(StringTag{std::string(s)}) {} // NOLINT + + [[nodiscard]] Tag::Type index() const noexcept { return (Tag::Type)mTagStorage.index(); } template T> - [[nodiscard]] bool hold() const { + [[nodiscard]] bool hold() const noexcept { return std::holds_alternative(mTagStorage); } + [[nodiscard]] bool is_array() const noexcept { return hold(); } + [[nodiscard]] bool is_binary() const noexcept { return hold() || hold(); } + [[nodiscard]] bool is_boolean() const noexcept { return hold(); } + [[nodiscard]] bool is_null() const noexcept { return hold(); } + [[nodiscard]] bool is_number_float() const noexcept { return hold() || hold(); } + [[nodiscard]] bool is_number_integer() const noexcept { + return hold() || hold() || hold() || hold(); + } + [[nodiscard]] bool is_number() const noexcept { return is_number_float() || is_number_integer(); } + [[nodiscard]] bool is_object() const noexcept { return hold(); } + [[nodiscard]] bool is_string() const noexcept { return hold(); } + [[nodiscard]] bool is_primitive() const noexcept { return is_null() || is_string() || is_number() || is_binary(); } + [[nodiscard]] bool is_structured() const noexcept { return is_array() || is_object(); } + + [[nodiscard]] bool contains(std::string_view key) const noexcept { + if (is_object()) { + return get().contains(key); + } + return false; + } + + [[nodiscard]] size_t size() const noexcept { + switch (index()) { + case Tag::Type::Byte: + case Tag::Type::Short: + case Tag::Type::Int: + case Tag::Type::Int64: + case Tag::Type::Float: + case Tag::Type::Double: + case Tag::Type::String: + return 1; + case Tag::Type::List: + return get().size(); + case Tag::Type::Compound: + return get().size(); + case Tag::Type::IntArray: + return get().size(); + case Tag::Type::ByteArray: + return get().size(); + case Tag::Type::End: + return 0; + default: + std::unreachable(); + } + } + template T> [[nodiscard]] T& get() { return std::get(mTagStorage); @@ -129,25 +178,49 @@ class CompoundTagVariant { } else if (hold()) { return get()[index]; } else { - throw std::range_error("tag not hold a integer index range"); + throw std::range_error("tag not hold an array"); } } [[nodiscard]] CompoundTagVariant& operator[](std::string const& index) { - if (!hold()) { + if (hold()) { mTagStorage = CompoundTag{}; } + if (!hold()) { + throw std::range_error("tag not hold an object"); + } return get()[index]; } - std::unique_ptr toUnique() const { + std::unique_ptr toUnique() const& { + return std::visit( + [](auto& val) -> std::unique_ptr { return std::make_unique>(val); }, + mTagStorage + ); + } + + std::unique_ptr toUnique() && { return std::visit( [](auto&& val) -> std::unique_ptr { - return std::make_unique>(std::forward(val)); + return std::make_unique>(std::move(val)); }, mTagStorage ); } + + std::string dump(SnbtFormat snbtFormat = SnbtFormat::PrettyFilePrint, uchar indent = 4) const { + return toUnique()->toSnbt(snbtFormat, indent); + } + + void push_back(CompoundTagVariant val) { + if (hold()) { + mTagStorage = ListTag{}; + } + if (!hold()) { + throw std::range_error("tag not hold an array"); + } + get().add(std::move(val).toUnique()); + } }; #endif // COMPOUND_TAG_VARIANT_HEADER diff --git a/src/mc/nbt/Int64Tag.h b/src/mc/nbt/Int64Tag.h index 067b162132..6e507a9cac 100644 --- a/src/mc/nbt/Int64Tag.h +++ b/src/mc/nbt/Int64Tag.h @@ -9,15 +9,18 @@ class Int64Tag : public ::Tag { public: int64 data; + template constexpr Int64Tag& operator=(int64 value) { - data = value; + data = (int64)value; return *this; } - constexpr operator int64() const { return data; } // NOLINT + template + constexpr operator T() const { + return (T)data; + } template - requires(sizeof(T) == 8) [[nodiscard]] constexpr explicit Int64Tag(T value = 0) : data((int64)value) {} Int64Tag operator-() const { return Int64Tag{(int64)-data}; } diff --git a/src/mc/nbt/IntArrayTag.h b/src/mc/nbt/IntArrayTag.h index d9ce820293..92eee3980c 100644 --- a/src/mc/nbt/IntArrayTag.h +++ b/src/mc/nbt/IntArrayTag.h @@ -14,7 +14,10 @@ class IntArrayTag : public ::Tag { [[nodiscard]] constexpr IntArrayTag() = default; - [[nodiscard]] constexpr IntArrayTag(TagMemoryChunk mem) : data(std::move(mem)) {} // NOLINT + template + [[nodiscard]] constexpr IntArrayTag(std::in_place_type_t, TagMemoryChunk mem) : data(std::move(mem)) { + data.mSize = (data.mSize * sizeof(T)) / sizeof(int); + } [[nodiscard]] constexpr IntArrayTag(std::vector const& arr) : data(std::span{arr}) { // NOLINT data.mSize = arr.size(); @@ -24,6 +27,8 @@ class IntArrayTag : public ::Tag { [[nodiscard]] constexpr int& operator[](size_t index) const { return view()[index]; } + [[nodiscard]] constexpr size_t size() const { return data.mSize; } + public: // NOLINTBEGIN // vIndex: 0, symbol: __gen_??1IntArrayTag@@UEAA@XZ diff --git a/src/mc/nbt/IntTag.h b/src/mc/nbt/IntTag.h index bc3cdf12f0..13b70d756a 100644 --- a/src/mc/nbt/IntTag.h +++ b/src/mc/nbt/IntTag.h @@ -9,15 +9,18 @@ class IntTag : public ::Tag { public: int data; + template constexpr IntTag& operator=(int value) { - data = value; + data = (int)value; return *this; } - [[nodiscard]] constexpr operator int() const { return data; } // NOLINT + template + constexpr operator T() const { + return (T)data; + } template - requires(sizeof(T) == 4) [[nodiscard]] constexpr explicit IntTag(T value = 0) : data((int)value) {} IntTag operator-() const { return IntTag{(int)-data}; } diff --git a/src/mc/nbt/ListTag.h b/src/mc/nbt/ListTag.h index f646562e8e..3edb533514 100644 --- a/src/mc/nbt/ListTag.h +++ b/src/mc/nbt/ListTag.h @@ -53,6 +53,8 @@ class ListTag : public ::Tag { [[nodiscard]] constexpr std::unique_ptr& operator[](size_t index) { return mList[index]; } [[nodiscard]] constexpr std::unique_ptr const& operator[](size_t index) const { return mList[index]; } + [[nodiscard]] constexpr size_t size() const { return mList.size(); } + public: // NOLINTBEGIN // vIndex: 0, symbol: ??1ListTag@@UEAA@XZ @@ -125,8 +127,5 @@ class ListTag : public ::Tag { // symbol: ?popBack@ListTag@@QEAAXXZ MCAPI void popBack(); - // symbol: ?size@ListTag@@QEBAHXZ - MCAPI int size() const; - // NOLINTEND }; diff --git a/src/mc/nbt/ShortTag.h b/src/mc/nbt/ShortTag.h index 6de2dcc0c7..cb12a083ba 100644 --- a/src/mc/nbt/ShortTag.h +++ b/src/mc/nbt/ShortTag.h @@ -9,15 +9,18 @@ class ShortTag : public ::Tag { public: short data; - constexpr ShortTag& operator=(short value) { - data = value; + template + constexpr ShortTag& operator=(T value) { + data = (short)value; return *this; } - [[nodiscard]] constexpr operator short() const { return data; } // NOLINT + template + constexpr operator T() const { + return (T)data; + } template - requires(sizeof(T) == 2) [[nodiscard]] constexpr explicit ShortTag(T value = 0) : data((short)value) {} ShortTag operator-() const { return ShortTag{(short)-data}; } diff --git a/src/mc/nbt/SnbtDumpImpl.cpp b/src/mc/nbt/SnbtDumpImpl.cpp index d92b328759..39db21d647 100644 --- a/src/mc/nbt/SnbtDumpImpl.cpp +++ b/src/mc/nbt/SnbtDumpImpl.cpp @@ -44,28 +44,39 @@ std::string toDumpString(std::string const& str, fmt::color defaultc, std::strin std::string res; bool base64 = false; - - bool isTrivial = true; - if (!static_cast(format & SnbtFormat::Jsonify)) { - for (auto c : str) { - if (!ll::nbt::detail::isTrivialNbtStringChar(c)) { + if (str.empty()) { + res = "\"\""; + } else { + bool isTrivial = true; + if (!static_cast(format & SnbtFormat::Jsonify)) { + if (str[0] == '-' || isdigit(str[0])) { isTrivial = false; - break; + } else { + for (auto c : str) { + if (!ll::nbt::detail::isTrivialNbtStringChar(c)) { + isTrivial = false; + break; + } + } } + } else { + isTrivial = false; } - } else { - isTrivial = false; - } - if (isTrivial) { - res = str; - } else { - try { - res = nlohmann::json{str} - .dump(-1, ' ', (bool)(format & SnbtFormat::ForceAscii), nlohmann::json::error_handler_t::strict); - res = res.substr(1, res.size() - 2); - } catch (...) { - base64 = true; - res = "\"" + ll::base64::encode(str) + "\""; + if (isTrivial) { + res = str; + } else { + try { + res = nlohmann::json{str}.dump( + -1, + ' ', + (bool)(format & SnbtFormat::ForceAscii), + nlohmann::json::error_handler_t::strict + ); + res = res.substr(1, res.size() - 2); + } catch (...) { + base64 = true; + res = "\"" + ll::base64::encode(str) + "\""; + } } } diff --git a/src/mc/nbt/SnbtParseImpl.cpp b/src/mc/nbt/SnbtParseImpl.cpp index 49c261b6a9..96281b15fa 100644 --- a/src/mc/nbt/SnbtParseImpl.cpp +++ b/src/mc/nbt/SnbtParseImpl.cpp @@ -524,7 +524,7 @@ std::optional parseLongArray(std::string_view& s) { } if (s.front() == ']') { s.remove_prefix(1); - return TagMemoryChunk{std::span{res}}; + return ByteArrayTag{std::in_place_type, std::span{res}}; } auto value = parseNumber(s); if (!skipWhitespace(s)) { @@ -540,7 +540,7 @@ std::optional parseLongArray(std::string_view& s) { switch (s.front()) { case ']': s.remove_prefix(1); - return TagMemoryChunk{std::span{res}}; + return ByteArrayTag{std::in_place_type, std::span{res}}; case ',': s.remove_prefix(1); default: diff --git a/src/mc/world/level/block/utils/StaticVanillaBlocks.cpp b/src/mc/world/level/block/utils/StaticVanillaBlocks.cpp index 43824e96e1..623e2d07a8 100644 --- a/src/mc/world/level/block/utils/StaticVanillaBlocks.cpp +++ b/src/mc/world/level/block/utils/StaticVanillaBlocks.cpp @@ -102,818 +102,818 @@ LL_AUTO_STATIC_HOOK(GenerateHook, HookPriority::Normal, "main", int, int a, char #pragma region StaticVanillaBlocksFn -#define GENERATE_FUNC(FUNC) \ - FUNC(AcaciaButton); \ - FUNC(AcaciaDoor); \ - FUNC(AcaciaFence); \ - FUNC(AcaciaFenceGate); \ - FUNC(AcaciaHangingSign); \ - FUNC(AcaciaLog); \ - FUNC(AcaciaPressurePlate); \ - FUNC(AcaciaStairs); \ - FUNC(AcaciaStandingSign); \ - FUNC(AcaciaTrapdoor); \ - FUNC(AcaciaWallSign); \ - FUNC(ActivatorRail); \ - FUNC(Allow); \ - FUNC(AmethystBlock); \ - FUNC(AmethystCluster); \ - FUNC(AncientDebris); \ - FUNC(AndesiteStairs); \ - FUNC(Anvil); \ - FUNC(Azalea); \ - FUNC(AzaleaLeaves); \ - FUNC(AzaleaLeavesFlowered); \ - FUNC(Bamboo); \ - FUNC(BambooBlock); \ - FUNC(BambooButton); \ - FUNC(BambooDoor); \ - FUNC(BambooDoubleSlab); \ - FUNC(BambooFence); \ - FUNC(BambooFenceGate); \ - FUNC(BambooHangingSign); \ - FUNC(BambooMosaic); \ - FUNC(BambooMosaicDoubleSlab); \ - FUNC(BambooMosaicSlab); \ - FUNC(BambooMosaicStairs); \ - FUNC(BambooPlanks); \ - FUNC(BambooPressurePlate); \ - FUNC(BambooSapling); \ - FUNC(BambooSlab); \ - FUNC(BambooStairs); \ - FUNC(BambooStandingSign); \ - FUNC(BambooTrapdoor); \ - FUNC(BambooWallSign); \ - FUNC(Barrel); \ - FUNC(Barrier); \ - FUNC(Basalt); \ - FUNC(Beacon); \ - FUNC(Bed); \ - FUNC(Bedrock); \ - FUNC(BeeNest); \ - FUNC(Beehive); \ - FUNC(Beetroot); \ - FUNC(Bell); \ - FUNC(BigDripleaf); \ - FUNC(BirchButton); \ - FUNC(BirchDoor); \ - FUNC(BirchFence); \ - FUNC(BirchFenceGate); \ - FUNC(BirchHangingSign); \ - FUNC(BirchLog); \ - FUNC(BirchPressurePlate); \ - FUNC(BirchStairs); \ - FUNC(BirchStandingSign); \ - FUNC(BirchTrapdoor); \ - FUNC(BirchWallSign); \ - FUNC(BlackCandle); \ - FUNC(BlackCandleCake); \ - FUNC(BlackCarpet); \ - FUNC(BlackConcrete); \ - FUNC(BlackConcretePowder); \ - FUNC(BlackGlazedTerracotta); \ - FUNC(BlackShulkerBox); \ - FUNC(BlackStainedGlass); \ - FUNC(BlackStainedGlassPane); \ - FUNC(BlackTerracotta); \ - FUNC(BlackWool); \ - FUNC(Blackstone); \ - FUNC(BlackstoneDoubleSlab); \ - FUNC(BlackstoneSlab); \ - FUNC(BlackstoneStairs); \ - FUNC(BlackstoneWall); \ - FUNC(BlastFurnace); \ - FUNC(BlueCandle); \ - FUNC(BlueCandleCake); \ - FUNC(BlueCarpet); \ - FUNC(BlueConcrete); \ - FUNC(BlueConcretePowder); \ - FUNC(BlueGlazedTerracotta); \ - FUNC(BlueIce); \ - FUNC(BlueShulkerBox); \ - FUNC(BlueStainedGlass); \ - FUNC(BlueStainedGlassPane); \ - FUNC(BlueTerracotta); \ - FUNC(BlueWool); \ - FUNC(BoneBlock); \ - FUNC(Bookshelf); \ - FUNC(BorderBlock); \ - FUNC(BrainCoral); \ - FUNC(BrewingStand); \ - FUNC(BrickBlock); \ - FUNC(BrickStairs); \ - FUNC(BrownCandle); \ - FUNC(BrownCandleCake); \ - FUNC(BrownCarpet); \ - FUNC(BrownConcrete); \ - FUNC(BrownConcretePowder); \ - FUNC(BrownGlazedTerracotta); \ - FUNC(BrownMushroom); \ - FUNC(BrownMushroomBlock); \ - FUNC(BrownShulkerBox); \ - FUNC(BrownStainedGlass); \ - FUNC(BrownStainedGlassPane); \ - FUNC(BrownTerracotta); \ - FUNC(BrownWool); \ - FUNC(BubbleColumn); \ - FUNC(BubbleCoral); \ - FUNC(BuddingAmethyst); \ - FUNC(Cactus); \ - FUNC(Cake); \ - FUNC(Calcite); \ - FUNC(CalibratedSculkSensor); \ - FUNC(Camera); \ - FUNC(CampFire); \ - FUNC(Candle); \ - FUNC(CandleCake); \ - FUNC(Carrots); \ - FUNC(CartographyTable); \ - FUNC(CarvedPumpkin); \ - FUNC(Cauldron); \ - FUNC(CaveVines); \ - FUNC(CaveVinesBodyWithBerries); \ - FUNC(CaveVinesHeadWithBerries); \ - FUNC(Chain); \ - FUNC(ChainCommandBlock); \ - FUNC(Chalkboard); \ - FUNC(ChemicalHeat); \ - FUNC(ChemistryTable); \ - FUNC(CherryButton); \ - FUNC(CherryDoor); \ - FUNC(CherryDoubleSlab); \ - FUNC(CherryFence); \ - FUNC(CherryFenceGate); \ - FUNC(CherryHangingSign); \ - FUNC(CherryLeaves); \ - FUNC(CherryLog); \ - FUNC(CherryPlanks); \ - FUNC(CherryPressurePlate); \ - FUNC(CherrySapling); \ - FUNC(CherrySlab); \ - FUNC(CherryStairs); \ - FUNC(CherryStandingSign); \ - FUNC(CherryTrapdoor); \ - FUNC(CherryWallSign); \ - FUNC(CherryWood); \ - FUNC(Chest); \ - FUNC(ChiseledBookshelf); \ - FUNC(ChiseledDeepslate); \ - FUNC(ChiseledNetherBricks); \ - FUNC(ChiseledPolishedBlackstone); \ - FUNC(ChorusFlower); \ - FUNC(ChorusPlant); \ - FUNC(Clay); \ - FUNC(ClientRequestPlaceholderBlock); \ - FUNC(CoalBlock); \ - FUNC(CoalOre); \ - FUNC(CobbledDeepslate); \ - FUNC(CobbledDeepslateDoubleSlab); \ - FUNC(CobbledDeepslateSlab); \ - FUNC(CobbledDeepslateStairs); \ - FUNC(CobbledDeepslateWall); \ - FUNC(Cobblestone); \ - FUNC(CobblestoneWall); \ - FUNC(Cocoa); \ - FUNC(ColoredTorchBp); \ - FUNC(ColoredTorchRg); \ - FUNC(CommandBlock); \ - FUNC(Composter); \ - FUNC(Conduit); \ - FUNC(CopperBlock); \ - FUNC(CopperOre); \ - FUNC(CoralBlock); \ - FUNC(CoralFan); \ - FUNC(CoralFanDead); \ - FUNC(CoralFanHang); \ - FUNC(CoralFanHang2); \ - FUNC(CoralFanHang3); \ - FUNC(CrackedDeepslateBricks); \ - FUNC(CrackedDeepslateTiles); \ - FUNC(CrackedNetherBricks); \ - FUNC(CrackedPolishedBlackstoneBricks); \ - FUNC(CraftingTable); \ - FUNC(CrimsonButton); \ - FUNC(CrimsonDoor); \ - FUNC(CrimsonDoubleSlab); \ - FUNC(CrimsonFence); \ - FUNC(CrimsonFenceGate); \ - FUNC(CrimsonFungus); \ - FUNC(CrimsonHangingSign); \ - FUNC(CrimsonHyphae); \ - FUNC(CrimsonNylium); \ - FUNC(CrimsonPlanks); \ - FUNC(CrimsonPressurePlate); \ - FUNC(CrimsonRoots); \ - FUNC(CrimsonSlab); \ - FUNC(CrimsonStairs); \ - FUNC(CrimsonStandingSign); \ - FUNC(CrimsonStem); \ - FUNC(CrimsonTrapdoor); \ - FUNC(CrimsonWallSign); \ - FUNC(CryingObsidian); \ - FUNC(CutCopper); \ - FUNC(CutCopperSlab); \ - FUNC(CutCopperStairs); \ - FUNC(CyanCandle); \ - FUNC(CyanCandleCake); \ - FUNC(CyanCarpet); \ - FUNC(CyanConcrete); \ - FUNC(CyanConcretePowder); \ - FUNC(CyanGlazedTerracotta); \ - FUNC(CyanShulkerBox); \ - FUNC(CyanStainedGlass); \ - FUNC(CyanStainedGlassPane); \ - FUNC(CyanTerracotta); \ - FUNC(CyanWool); \ - FUNC(DarkOakButton); \ - FUNC(DarkOakDoor); \ - FUNC(DarkOakFence); \ - FUNC(DarkOakFenceGate); \ - FUNC(DarkOakLog); \ - FUNC(DarkOakPressurePlate); \ - FUNC(DarkOakStairs); \ - FUNC(DarkOakTrapdoor); \ - FUNC(DarkPrismarineStairs); \ - FUNC(DarkoakHangingSign); \ - FUNC(DarkoakStandingSign); \ - FUNC(DarkoakWallSign); \ - FUNC(DaylightDetector); \ - FUNC(DaylightDetectorInverted); \ - FUNC(DeadBrainCoral); \ - FUNC(DeadBubbleCoral); \ - FUNC(DeadFireCoral); \ - FUNC(DeadHornCoral); \ - FUNC(DeadTubeCoral); \ - FUNC(Deadbush); \ - FUNC(DecoratedPot); \ - FUNC(Deepslate); \ - FUNC(DeepslateBrickDoubleSlab); \ - FUNC(DeepslateBrickSlab); \ - FUNC(DeepslateBrickStairs); \ - FUNC(DeepslateBrickWall); \ - FUNC(DeepslateBricks); \ - FUNC(DeepslateCoalOre); \ - FUNC(DeepslateCopperOre); \ - FUNC(DeepslateDiamondOre); \ - FUNC(DeepslateEmeraldOre); \ - FUNC(DeepslateGoldOre); \ - FUNC(DeepslateIronOre); \ - FUNC(DeepslateLapisOre); \ - FUNC(DeepslateRedstoneOre); \ - FUNC(DeepslateTileDoubleSlab); \ - FUNC(DeepslateTileSlab); \ - FUNC(DeepslateTileStairs); \ - FUNC(DeepslateTileWall); \ - FUNC(DeepslateTiles); \ - FUNC(Deny); \ - FUNC(DetectorRail); \ - FUNC(DiamondBlock); \ - FUNC(DiamondOre); \ - FUNC(DioriteStairs); \ - FUNC(Dirt); \ - FUNC(DirtWithRoots); \ - FUNC(Dispenser); \ - FUNC(DoubleCutCopperSlab); \ - FUNC(DoublePlant); \ - FUNC(DoubleStoneSlab); \ - FUNC(DoubleStoneSlab2); \ - FUNC(DoubleStoneSlab3); \ - FUNC(DoubleStoneSlab4); \ - FUNC(DoubleWoodenSlab); \ - FUNC(DragonEgg); \ - FUNC(DriedKelpBlock); \ - FUNC(Dripstone); \ - FUNC(Dropper); \ - FUNC(EmeraldBlock); \ - FUNC(EmeraldOre); \ - FUNC(EnchantingTable); \ - FUNC(EndBrickStairs); \ - FUNC(EndBricks); \ - FUNC(EndGateway); \ - FUNC(EndPortal); \ - FUNC(EndPortalFrame); \ - FUNC(EndRod); \ - FUNC(EndStone); \ - FUNC(EnderChest); \ - FUNC(ExposedCopper); \ - FUNC(ExposedCutCopper); \ - FUNC(ExposedCutCopperSlab); \ - FUNC(ExposedCutCopperStairs); \ - FUNC(ExposedDoubleCutCopperSlab); \ - FUNC(FarmlandBlock); \ - FUNC(FenceGate); \ - FUNC(Fire); \ - FUNC(FireCoral); \ - FUNC(FletchingTable); \ - FUNC(FlowerPot); \ - FUNC(FloweringAzalea); \ - FUNC(FlowingLava); \ - FUNC(FlowingWater); \ - FUNC(FrogSpawn); \ - FUNC(FrostedIce); \ - FUNC(Furnace); \ - FUNC(GildedBlackstone); \ - FUNC(Glass); \ - FUNC(GlassPane); \ - FUNC(GlowItemFrame); \ - FUNC(GlowLichen); \ - FUNC(GlowingObsidian); \ - FUNC(Glowstone); \ - FUNC(GoldBlock); \ - FUNC(GoldOre); \ - FUNC(GoldenRail); \ - FUNC(GraniteStairs); \ - FUNC(Grass); \ - FUNC(GrassPath); \ - FUNC(Gravel); \ - FUNC(GrayCandle); \ - FUNC(GrayCandleCake); \ - FUNC(GrayCarpet); \ - FUNC(GrayConcrete); \ - FUNC(GrayConcretePowder); \ - FUNC(GrayGlazedTerracotta); \ - FUNC(GrayShulkerBox); \ - FUNC(GrayStainedGlass); \ - FUNC(GrayStainedGlassPane); \ - FUNC(GrayTerracotta); \ - FUNC(GrayWool); \ - FUNC(GreenCandle); \ - FUNC(GreenCandleCake); \ - FUNC(GreenCarpet); \ - FUNC(GreenConcrete); \ - FUNC(GreenConcretePowder); \ - FUNC(GreenGlazedTerracotta); \ - FUNC(GreenShulkerBox); \ - FUNC(GreenStainedGlass); \ - FUNC(GreenStainedGlassPane); \ - FUNC(GreenTerracotta); \ - FUNC(GreenWool); \ - FUNC(Grindstone); \ - FUNC(HangingRoots); \ - FUNC(HardGlass); \ - FUNC(HardGlassPane); \ - FUNC(HardStainedGlass); \ - FUNC(HardStainedGlassPane); \ - FUNC(HardenedClay); \ - FUNC(HayBlock); \ - FUNC(HeavyWeightedPressurePlate); \ - FUNC(HoneyBlock); \ - FUNC(HoneycombBlock); \ - FUNC(Hopper); \ - FUNC(HornCoral); \ - FUNC(Ice); \ - FUNC(InfestedDeepslate); \ - FUNC(InfoUpdate); \ - FUNC(InfoUpdate2); \ - FUNC(InvisibleBedrock); \ - FUNC(IronBars); \ - FUNC(IronBlock); \ - FUNC(IronDoor); \ - FUNC(IronOre); \ - FUNC(IronTrapdoor); \ - FUNC(ItemFrame); \ - FUNC(Jigsaw); \ - FUNC(Jukebox); \ - FUNC(JungleButton); \ - FUNC(JungleDoor); \ - FUNC(JungleFence); \ - FUNC(JungleFenceGate); \ - FUNC(JungleHangingSign); \ - FUNC(JungleLog); \ - FUNC(JunglePressurePlate); \ - FUNC(JungleStairs); \ - FUNC(JungleStandingSign); \ - FUNC(JungleTrapdoor); \ - FUNC(JungleWallSign); \ - FUNC(Kelp); \ - FUNC(Ladder); \ - FUNC(Lantern); \ - FUNC(LapisBlock); \ - FUNC(LapisOre); \ - FUNC(LargeAmethystBud); \ - FUNC(Lava); \ - FUNC(Leaves); \ - FUNC(Leaves2); \ - FUNC(Lectern); \ - FUNC(Lever); \ - FUNC(LightBlock); \ - FUNC(LightBlueCandle); \ - FUNC(LightBlueCandleCake); \ - FUNC(LightBlueCarpet); \ - FUNC(LightBlueConcrete); \ - FUNC(LightBlueConcretePowder); \ - FUNC(LightBlueGlazedTerracotta); \ - FUNC(LightBlueShulkerBox); \ - FUNC(LightBlueStainedGlass); \ - FUNC(LightBlueStainedGlassPane); \ - FUNC(LightBlueTerracotta); \ - FUNC(LightBlueWool); \ - FUNC(LightGrayCandle); \ - FUNC(LightGrayCandleCake); \ - FUNC(LightGrayCarpet); \ - FUNC(LightGrayConcrete); \ - FUNC(LightGrayConcretePowder); \ - FUNC(LightGrayShulkerBox); \ - FUNC(LightGrayStainedGlass); \ - FUNC(LightGrayStainedGlassPane); \ - FUNC(LightGrayTerracotta); \ - FUNC(LightGrayWool); \ - FUNC(LightWeightedPressurePlate); \ - FUNC(LightningRod); \ - FUNC(LimeCandle); \ - FUNC(LimeCandleCake); \ - FUNC(LimeCarpet); \ - FUNC(LimeConcrete); \ - FUNC(LimeConcretePowder); \ - FUNC(LimeGlazedTerracotta); \ - FUNC(LimeShulkerBox); \ - FUNC(LimeStainedGlass); \ - FUNC(LimeStainedGlassPane); \ - FUNC(LimeTerracotta); \ - FUNC(LimeWool); \ - FUNC(LitBlastFurnace); \ - FUNC(LitDeepslateRedstoneOre); \ - FUNC(LitFurnace); \ - FUNC(LitPumpkin); \ - FUNC(LitRedstoneLamp); \ - FUNC(LitRedstoneOre); \ - FUNC(LitSmoker); \ - FUNC(Lodestone); \ - FUNC(Loom); \ - FUNC(MagentaCandle); \ - FUNC(MagentaCandleCake); \ - FUNC(MagentaCarpet); \ - FUNC(MagentaConcrete); \ - FUNC(MagentaConcretePowder); \ - FUNC(MagentaGlazedTerracotta); \ - FUNC(MagentaShulkerBox); \ - FUNC(MagentaStainedGlass); \ - FUNC(MagentaStainedGlassPane); \ - FUNC(MagentaTerracotta); \ - FUNC(MagentaWool); \ - FUNC(Magma); \ - FUNC(MangroveButton); \ - FUNC(MangroveDoor); \ - FUNC(MangroveDoubleSlab); \ - FUNC(MangroveFence); \ - FUNC(MangroveFenceGate); \ - FUNC(MangroveHangingSign); \ - FUNC(MangroveLeaves); \ - FUNC(MangroveLog); \ - FUNC(MangrovePlanks); \ - FUNC(MangrovePressurePlate); \ - FUNC(MangrovePropagule); \ - FUNC(MangroveRoots); \ - FUNC(MangroveSlab); \ - FUNC(MangroveStairs); \ - FUNC(MangroveStandingSign); \ - FUNC(MangroveTrapdoor); \ - FUNC(MangroveWallSign); \ - FUNC(MangroveWood); \ - FUNC(MediumAmethystBud); \ - FUNC(MelonBlock); \ - FUNC(MelonStem); \ - FUNC(MobSpawner); \ - FUNC(MonsterEgg); \ - FUNC(MossBlock); \ - FUNC(MossCarpet); \ - FUNC(MossyCobblestone); \ - FUNC(MossyCobblestoneStairs); \ - FUNC(MossyStoneBrickStairs); \ - FUNC(MovingBlock); \ - FUNC(Mud); \ - FUNC(MudBrickDoubleSlab); \ - FUNC(MudBrickSlab); \ - FUNC(MudBrickStairs); \ - FUNC(MudBrickWall); \ - FUNC(MudBricks); \ - FUNC(MuddyMangroveRoots); \ - FUNC(Mycelium); \ - FUNC(MysteriousFrame); \ - FUNC(MysteriousFrameSlot); \ - FUNC(NetherBrickBlockName); \ - FUNC(NetherBrickFence); \ - FUNC(NetherBrickStairs); \ - FUNC(NetherGoldOre); \ - FUNC(NetherSprouts); \ - FUNC(NetherWart); \ - FUNC(NetherWartBlock); \ - FUNC(NetheriteBlock); \ - FUNC(Netherrack); \ - FUNC(Netherreactor); \ - FUNC(NormalStoneStairs); \ - FUNC(Noteblock); \ - FUNC(OakFence); \ - FUNC(OakHangingSign); \ - FUNC(OakLog); \ - FUNC(OakStairs); \ - FUNC(Observer); \ - FUNC(Obsidian); \ - FUNC(OchreFroglight); \ - FUNC(OrangeCandle); \ - FUNC(OrangeCandleCake); \ - FUNC(OrangeCarpet); \ - FUNC(OrangeConcrete); \ - FUNC(OrangeConcretePowder); \ - FUNC(OrangeGlazedTerracotta); \ - FUNC(OrangeShulkerBox); \ - FUNC(OrangeStainedGlass); \ - FUNC(OrangeStainedGlassPane); \ - FUNC(OrangeTerracotta); \ - FUNC(OrangeWool); \ - FUNC(OxidizedCopper); \ - FUNC(OxidizedCutCopper); \ - FUNC(OxidizedCutCopperSlab); \ - FUNC(OxidizedCutCopperStairs); \ - FUNC(OxidizedDoubleCutCopperSlab); \ - FUNC(PackedIce); \ - FUNC(PackedMud); \ - FUNC(PearlescentFroglight); \ - FUNC(PinkCandle); \ - FUNC(PinkCandleCake); \ - FUNC(PinkCarpet); \ - FUNC(PinkConcrete); \ - FUNC(PinkConcretePowder); \ - FUNC(PinkGlazedTerracotta); \ - FUNC(PinkPetals); \ - FUNC(PinkShulkerBox); \ - FUNC(PinkStainedGlass); \ - FUNC(PinkStainedGlassPane); \ - FUNC(PinkTerracotta); \ - FUNC(PinkWool); \ - FUNC(Piston); \ - FUNC(PistonArmCollision); \ - FUNC(PitcherCrop); \ - FUNC(PitcherPlant); \ - FUNC(Planks); \ - FUNC(Podzol); \ - FUNC(PointedDripstone); \ - FUNC(PolishedAndesiteStairs); \ - FUNC(PolishedBasalt); \ - FUNC(PolishedBlackstone); \ - FUNC(PolishedBlackstoneBrickDoubleSlab); \ - FUNC(PolishedBlackstoneBrickSlab); \ - FUNC(PolishedBlackstoneBrickStairs); \ - FUNC(PolishedBlackstoneBrickWall); \ - FUNC(PolishedBlackstoneBricks); \ - FUNC(PolishedBlackstoneButton); \ - FUNC(PolishedBlackstoneDoubleSlab); \ - FUNC(PolishedBlackstonePressurePlate); \ - FUNC(PolishedBlackstoneSlab); \ - FUNC(PolishedBlackstoneStairs); \ - FUNC(PolishedBlackstoneWall); \ - FUNC(PolishedDeepslate); \ - FUNC(PolishedDeepslateDoubleSlab); \ - FUNC(PolishedDeepslateSlab); \ - FUNC(PolishedDeepslateStairs); \ - FUNC(PolishedDeepslateWall); \ - FUNC(PolishedDioriteStairs); \ - FUNC(PolishedGraniteStairs); \ - FUNC(Portal); \ - FUNC(Potatoes); \ - FUNC(PowderSnow); \ - FUNC(PoweredComparator); \ - FUNC(PoweredRepeater); \ - FUNC(Prismarine); \ - FUNC(PrismarineBricksStairs); \ - FUNC(PrismarineStairs); \ - FUNC(Pumpkin); \ - FUNC(PumpkinStem); \ - FUNC(PurpleCandle); \ - FUNC(PurpleCandleCake); \ - FUNC(PurpleCarpet); \ - FUNC(PurpleConcrete); \ - FUNC(PurpleConcretePowder); \ - FUNC(PurpleGlazedTerracotta); \ - FUNC(PurpleShulkerBox); \ - FUNC(PurpleStainedGlass); \ - FUNC(PurpleStainedGlassPane); \ - FUNC(PurpleTerracotta); \ - FUNC(PurpleWool); \ - FUNC(PurpurBlock); \ - FUNC(PurpurStairs); \ - FUNC(QuartzBlock); \ - FUNC(QuartzBricks); \ - FUNC(QuartzOre); \ - FUNC(QuartzStairs); \ - FUNC(Rail); \ - FUNC(RawCopperBlock); \ - FUNC(RawGoldBlock); \ - FUNC(RawIronBlock); \ - FUNC(RedCandle); \ - FUNC(RedCandleCake); \ - FUNC(RedCarpet); \ - FUNC(RedConcrete); \ - FUNC(RedConcretePowder); \ - FUNC(RedFlower); \ - FUNC(RedGlazedTerracotta); \ - FUNC(RedMushroom); \ - FUNC(RedMushroomBlock); \ - FUNC(RedNetherBrick); \ - FUNC(RedNetherBrickStairs); \ - FUNC(RedSandstone); \ - FUNC(RedSandstoneStairs); \ - FUNC(RedShulkerBox); \ - FUNC(RedStainedGlass); \ - FUNC(RedStainedGlassPane); \ - FUNC(RedTerracotta); \ - FUNC(RedWool); \ - FUNC(RedstoneBlock); \ - FUNC(RedstoneLamp); \ - FUNC(RedstoneOre); \ - FUNC(RedstoneTorch); \ - FUNC(RedstoneWire); \ - FUNC(Reeds); \ - FUNC(ReinforcedDeepslate); \ - FUNC(RepeatingCommandBlock); \ - FUNC(Reserved6); \ - FUNC(RespawnAnchor); \ - FUNC(Sand); \ - FUNC(Sandstone); \ - FUNC(SandstoneStairs); \ - FUNC(Sapling); \ - FUNC(Scaffolding); \ - FUNC(Sculk); \ - FUNC(SculkCatalyst); \ - FUNC(SculkSensor); \ - FUNC(SculkShrieker); \ - FUNC(SculkVein); \ - FUNC(SeaLantern); \ - FUNC(SeaPickle); \ - FUNC(Seagrass); \ - FUNC(Shroomlight); \ - FUNC(SilverGlazedTerracotta); \ - FUNC(Skull); \ - FUNC(SlimeBlock); \ - FUNC(SmallAmethystBud); \ - FUNC(SmallDripleaf); \ - FUNC(SmithingTable); \ - FUNC(Smoker); \ - FUNC(SmoothBasalt); \ - FUNC(SmoothQuartzStairs); \ - FUNC(SmoothRedSandstoneStairs); \ - FUNC(SmoothSandstoneStairs); \ - FUNC(SmoothStone); \ - FUNC(SnifferEgg); \ - FUNC(Snow); \ - FUNC(SnowLayer); \ - FUNC(SoulCampfire); \ - FUNC(SoulFire); \ - FUNC(SoulLantern); \ - FUNC(SoulSand); \ - FUNC(SoulSoil); \ - FUNC(SoulTorch); \ - FUNC(Sponge); \ - FUNC(SporeBlossom); \ - FUNC(SpruceButton); \ - FUNC(SpruceDoor); \ - FUNC(SpruceFence); \ - FUNC(SpruceFenceGate); \ - FUNC(SpruceHangingSign); \ - FUNC(SpruceLog); \ - FUNC(SprucePressurePlate); \ - FUNC(SpruceStairs); \ - FUNC(SpruceStandingSign); \ - FUNC(SpruceTrapdoor); \ - FUNC(SpruceWallSign); \ - FUNC(StandingBanner); \ - FUNC(StandingSign); \ - FUNC(StickyPiston); \ - FUNC(StickyPistonArmCollision); \ - FUNC(Stone); \ - FUNC(StoneBrickStairs); \ - FUNC(StoneBricks); \ - FUNC(StoneButton); \ - FUNC(StonePressurePlate); \ - FUNC(StoneSlab); \ - FUNC(StoneSlab2); \ - FUNC(StoneSlab3); \ - FUNC(StoneSlab4); \ - FUNC(StoneStairs); \ - FUNC(Stonecutter); \ - FUNC(StonecutterBlock); \ - FUNC(StrippedAcaciaLog); \ - FUNC(StrippedBambooBlock); \ - FUNC(StrippedBirchLog); \ - FUNC(StrippedCherryLog); \ - FUNC(StrippedCherryWood); \ - FUNC(StrippedCrimsonHyphae); \ - FUNC(StrippedCrimsonStem); \ - FUNC(StrippedDarkOakLog); \ - FUNC(StrippedJungleLog); \ - FUNC(StrippedMangroveLog); \ - FUNC(StrippedMangroveWood); \ - FUNC(StrippedOakLog); \ - FUNC(StrippedSpruceLog); \ - FUNC(StrippedWarpedHyphae); \ - FUNC(StrippedWarpedStem); \ - FUNC(StructureBlock); \ - FUNC(StructureVoid); \ - FUNC(SuspiciousGravel); \ - FUNC(SuspiciousSand); \ - FUNC(SweetBerryBush); \ - FUNC(TallGrass); \ - FUNC(Target); \ - FUNC(TintedGlass); \ - FUNC(Tnt); \ - FUNC(Torch); \ - FUNC(Torchflower); \ - FUNC(TorchflowerCrop); \ - FUNC(Trapdoor); \ - FUNC(TrappedChest); \ - FUNC(TripWire); \ - FUNC(TripWireHook); \ - FUNC(TubeCoral); \ - FUNC(Tuff); \ - FUNC(TurtleEgg); \ - FUNC(TwistingVines); \ - FUNC(UnderwaterTorch); \ - FUNC(UndyedShulkerBox); \ - FUNC(UnlitRedstoneTorch); \ - FUNC(UnpoweredComparator); \ - FUNC(UnpoweredRepeater); \ - FUNC(VerdantFroglight); \ - FUNC(Vine); \ - FUNC(WallBanner); \ - FUNC(WallSign); \ - FUNC(WarpedButton); \ - FUNC(WarpedDoor); \ - FUNC(WarpedDoubleSlab); \ - FUNC(WarpedFence); \ - FUNC(WarpedFenceGate); \ - FUNC(WarpedFungus); \ - FUNC(WarpedHangingSign); \ - FUNC(WarpedHyphae); \ - FUNC(WarpedNylium); \ - FUNC(WarpedPlanks); \ - FUNC(WarpedPressurePlate); \ - FUNC(WarpedRoots); \ - FUNC(WarpedSlab); \ - FUNC(WarpedStairs); \ - FUNC(WarpedStandingSign); \ - FUNC(WarpedStem); \ - FUNC(WarpedTrapdoor); \ - FUNC(WarpedWallSign); \ - FUNC(WarpedWartBlock); \ - FUNC(Water); \ - FUNC(WaterLily); \ - FUNC(WaxedCopper); \ - FUNC(WaxedCutCopper); \ - FUNC(WaxedCutCopperSlab); \ - FUNC(WaxedCutCopperStairs); \ - FUNC(WaxedDoubleCutCopperSlab); \ - FUNC(WaxedExposedCopper); \ - FUNC(WaxedExposedCutCopper); \ - FUNC(WaxedExposedCutCopperSlab); \ - FUNC(WaxedExposedCutCopperStairs); \ - FUNC(WaxedExposedDoubleCutCopperSlab); \ - FUNC(WaxedOxidizedCopper); \ - FUNC(WaxedOxidizedCutCopper); \ - FUNC(WaxedOxidizedCutCopperSlab); \ - FUNC(WaxedOxidizedCutCopperStairs); \ - FUNC(WaxedOxidizedDoubleCutCopperSlab); \ - FUNC(WaxedWeatheredCopper); \ - FUNC(WaxedWeatheredCutCopper); \ - FUNC(WaxedWeatheredCutCopperSlab); \ - FUNC(WaxedWeatheredCutCopperStairs); \ - FUNC(WaxedWeatheredDoubleCutCopperSlab); \ - FUNC(WeatheredCopper); \ - FUNC(WeatheredCutCopper); \ - FUNC(WeatheredCutCopperSlab); \ - FUNC(WeatheredCutCopperStairs); \ - FUNC(WeatheredDoubleCutCopperSlab); \ - FUNC(Web); \ - FUNC(WeepingVines); \ - FUNC(Wheat); \ - FUNC(WhiteCandle); \ - FUNC(WhiteCandleCake); \ - FUNC(WhiteCarpet); \ - FUNC(WhiteConcrete); \ - FUNC(WhiteConcretePowder); \ - FUNC(WhiteGlazedTerracotta); \ - FUNC(WhiteShulkerBox); \ - FUNC(WhiteStainedGlass); \ - FUNC(WhiteStainedGlassPane); \ - FUNC(WhiteTerracotta); \ - FUNC(WhiteWool); \ - FUNC(WitherRose); \ - FUNC(Wood); \ - FUNC(WoodenButton); \ - FUNC(WoodenDoor); \ - FUNC(WoodenPressurePlate); \ - FUNC(WoodenSlab); \ - FUNC(YellowCandle); \ - FUNC(YellowCandleCake); \ - FUNC(YellowCarpet); \ - FUNC(YellowConcrete); \ - FUNC(YellowConcretePowder); \ - FUNC(YellowFlower); \ - FUNC(YellowGlazedTerracotta); \ - FUNC(YellowShulkerBox); \ - FUNC(YellowStainedGlass); \ - FUNC(YellowStainedGlassPane); \ - FUNC(YellowTerracotta); \ - FUNC(YellowWool); +#define GENERATE_FUNC(FUNC)\ + FUNC(AcaciaButton);\ + FUNC(AcaciaDoor);\ + FUNC(AcaciaFence);\ + FUNC(AcaciaFenceGate);\ + FUNC(AcaciaHangingSign);\ + FUNC(AcaciaLog);\ + FUNC(AcaciaPressurePlate);\ + FUNC(AcaciaStairs);\ + FUNC(AcaciaStandingSign);\ + FUNC(AcaciaTrapdoor);\ + FUNC(AcaciaWallSign);\ + FUNC(ActivatorRail);\ + FUNC(Allow);\ + FUNC(AmethystBlock);\ + FUNC(AmethystCluster);\ + FUNC(AncientDebris);\ + FUNC(AndesiteStairs);\ + FUNC(Anvil);\ + FUNC(Azalea);\ + FUNC(AzaleaLeaves);\ + FUNC(AzaleaLeavesFlowered);\ + FUNC(Bamboo);\ + FUNC(BambooBlock);\ + FUNC(BambooButton);\ + FUNC(BambooDoor);\ + FUNC(BambooDoubleSlab);\ + FUNC(BambooFence);\ + FUNC(BambooFenceGate);\ + FUNC(BambooHangingSign);\ + FUNC(BambooMosaic);\ + FUNC(BambooMosaicDoubleSlab);\ + FUNC(BambooMosaicSlab);\ + FUNC(BambooMosaicStairs);\ + FUNC(BambooPlanks);\ + FUNC(BambooPressurePlate);\ + FUNC(BambooSapling);\ + FUNC(BambooSlab);\ + FUNC(BambooStairs);\ + FUNC(BambooStandingSign);\ + FUNC(BambooTrapdoor);\ + FUNC(BambooWallSign);\ + FUNC(Barrel);\ + FUNC(Barrier);\ + FUNC(Basalt);\ + FUNC(Beacon);\ + FUNC(Bed);\ + FUNC(Bedrock);\ + FUNC(BeeNest);\ + FUNC(Beehive);\ + FUNC(Beetroot);\ + FUNC(Bell);\ + FUNC(BigDripleaf);\ + FUNC(BirchButton);\ + FUNC(BirchDoor);\ + FUNC(BirchFence);\ + FUNC(BirchFenceGate);\ + FUNC(BirchHangingSign);\ + FUNC(BirchLog);\ + FUNC(BirchPressurePlate);\ + FUNC(BirchStairs);\ + FUNC(BirchStandingSign);\ + FUNC(BirchTrapdoor);\ + FUNC(BirchWallSign);\ + FUNC(BlackCandle);\ + FUNC(BlackCandleCake);\ + FUNC(BlackCarpet);\ + FUNC(BlackConcrete);\ + FUNC(BlackConcretePowder);\ + FUNC(BlackGlazedTerracotta);\ + FUNC(BlackShulkerBox);\ + FUNC(BlackStainedGlass);\ + FUNC(BlackStainedGlassPane);\ + FUNC(BlackTerracotta);\ + FUNC(BlackWool);\ + FUNC(Blackstone);\ + FUNC(BlackstoneDoubleSlab);\ + FUNC(BlackstoneSlab);\ + FUNC(BlackstoneStairs);\ + FUNC(BlackstoneWall);\ + FUNC(BlastFurnace);\ + FUNC(BlueCandle);\ + FUNC(BlueCandleCake);\ + FUNC(BlueCarpet);\ + FUNC(BlueConcrete);\ + FUNC(BlueConcretePowder);\ + FUNC(BlueGlazedTerracotta);\ + FUNC(BlueIce);\ + FUNC(BlueShulkerBox);\ + FUNC(BlueStainedGlass);\ + FUNC(BlueStainedGlassPane);\ + FUNC(BlueTerracotta);\ + FUNC(BlueWool);\ + FUNC(BoneBlock);\ + FUNC(Bookshelf);\ + FUNC(BorderBlock);\ + FUNC(BrainCoral);\ + FUNC(BrewingStand);\ + FUNC(BrickBlock);\ + FUNC(BrickStairs);\ + FUNC(BrownCandle);\ + FUNC(BrownCandleCake);\ + FUNC(BrownCarpet);\ + FUNC(BrownConcrete);\ + FUNC(BrownConcretePowder);\ + FUNC(BrownGlazedTerracotta);\ + FUNC(BrownMushroom);\ + FUNC(BrownMushroomBlock);\ + FUNC(BrownShulkerBox);\ + FUNC(BrownStainedGlass);\ + FUNC(BrownStainedGlassPane);\ + FUNC(BrownTerracotta);\ + FUNC(BrownWool);\ + FUNC(BubbleColumn);\ + FUNC(BubbleCoral);\ + FUNC(BuddingAmethyst);\ + FUNC(Cactus);\ + FUNC(Cake);\ + FUNC(Calcite);\ + FUNC(CalibratedSculkSensor);\ + FUNC(Camera);\ + FUNC(CampFire);\ + FUNC(Candle);\ + FUNC(CandleCake);\ + FUNC(Carrots);\ + FUNC(CartographyTable);\ + FUNC(CarvedPumpkin);\ + FUNC(Cauldron);\ + FUNC(CaveVines);\ + FUNC(CaveVinesBodyWithBerries);\ + FUNC(CaveVinesHeadWithBerries);\ + FUNC(Chain);\ + FUNC(ChainCommandBlock);\ + FUNC(Chalkboard);\ + FUNC(ChemicalHeat);\ + FUNC(ChemistryTable);\ + FUNC(CherryButton);\ + FUNC(CherryDoor);\ + FUNC(CherryDoubleSlab);\ + FUNC(CherryFence);\ + FUNC(CherryFenceGate);\ + FUNC(CherryHangingSign);\ + FUNC(CherryLeaves);\ + FUNC(CherryLog);\ + FUNC(CherryPlanks);\ + FUNC(CherryPressurePlate);\ + FUNC(CherrySapling);\ + FUNC(CherrySlab);\ + FUNC(CherryStairs);\ + FUNC(CherryStandingSign);\ + FUNC(CherryTrapdoor);\ + FUNC(CherryWallSign);\ + FUNC(CherryWood);\ + FUNC(Chest);\ + FUNC(ChiseledBookshelf);\ + FUNC(ChiseledDeepslate);\ + FUNC(ChiseledNetherBricks);\ + FUNC(ChiseledPolishedBlackstone);\ + FUNC(ChorusFlower);\ + FUNC(ChorusPlant);\ + FUNC(Clay);\ + FUNC(ClientRequestPlaceholderBlock);\ + FUNC(CoalBlock);\ + FUNC(CoalOre);\ + FUNC(CobbledDeepslate);\ + FUNC(CobbledDeepslateDoubleSlab);\ + FUNC(CobbledDeepslateSlab);\ + FUNC(CobbledDeepslateStairs);\ + FUNC(CobbledDeepslateWall);\ + FUNC(Cobblestone);\ + FUNC(CobblestoneWall);\ + FUNC(Cocoa);\ + FUNC(ColoredTorchBp);\ + FUNC(ColoredTorchRg);\ + FUNC(CommandBlock);\ + FUNC(Composter);\ + FUNC(Conduit);\ + FUNC(CopperBlock);\ + FUNC(CopperOre);\ + FUNC(CoralBlock);\ + FUNC(CoralFan);\ + FUNC(CoralFanDead);\ + FUNC(CoralFanHang);\ + FUNC(CoralFanHang2);\ + FUNC(CoralFanHang3);\ + FUNC(CrackedDeepslateBricks);\ + FUNC(CrackedDeepslateTiles);\ + FUNC(CrackedNetherBricks);\ + FUNC(CrackedPolishedBlackstoneBricks);\ + FUNC(CraftingTable);\ + FUNC(CrimsonButton);\ + FUNC(CrimsonDoor);\ + FUNC(CrimsonDoubleSlab);\ + FUNC(CrimsonFence);\ + FUNC(CrimsonFenceGate);\ + FUNC(CrimsonFungus);\ + FUNC(CrimsonHangingSign);\ + FUNC(CrimsonHyphae);\ + FUNC(CrimsonNylium);\ + FUNC(CrimsonPlanks);\ + FUNC(CrimsonPressurePlate);\ + FUNC(CrimsonRoots);\ + FUNC(CrimsonSlab);\ + FUNC(CrimsonStairs);\ + FUNC(CrimsonStandingSign);\ + FUNC(CrimsonStem);\ + FUNC(CrimsonTrapdoor);\ + FUNC(CrimsonWallSign);\ + FUNC(CryingObsidian);\ + FUNC(CutCopper);\ + FUNC(CutCopperSlab);\ + FUNC(CutCopperStairs);\ + FUNC(CyanCandle);\ + FUNC(CyanCandleCake);\ + FUNC(CyanCarpet);\ + FUNC(CyanConcrete);\ + FUNC(CyanConcretePowder);\ + FUNC(CyanGlazedTerracotta);\ + FUNC(CyanShulkerBox);\ + FUNC(CyanStainedGlass);\ + FUNC(CyanStainedGlassPane);\ + FUNC(CyanTerracotta);\ + FUNC(CyanWool);\ + FUNC(DarkOakButton);\ + FUNC(DarkOakDoor);\ + FUNC(DarkOakFence);\ + FUNC(DarkOakFenceGate);\ + FUNC(DarkOakLog);\ + FUNC(DarkOakPressurePlate);\ + FUNC(DarkOakStairs);\ + FUNC(DarkOakTrapdoor);\ + FUNC(DarkPrismarineStairs);\ + FUNC(DarkoakHangingSign);\ + FUNC(DarkoakStandingSign);\ + FUNC(DarkoakWallSign);\ + FUNC(DaylightDetector);\ + FUNC(DaylightDetectorInverted);\ + FUNC(DeadBrainCoral);\ + FUNC(DeadBubbleCoral);\ + FUNC(DeadFireCoral);\ + FUNC(DeadHornCoral);\ + FUNC(DeadTubeCoral);\ + FUNC(Deadbush);\ + FUNC(DecoratedPot);\ + FUNC(Deepslate);\ + FUNC(DeepslateBrickDoubleSlab);\ + FUNC(DeepslateBrickSlab);\ + FUNC(DeepslateBrickStairs);\ + FUNC(DeepslateBrickWall);\ + FUNC(DeepslateBricks);\ + FUNC(DeepslateCoalOre);\ + FUNC(DeepslateCopperOre);\ + FUNC(DeepslateDiamondOre);\ + FUNC(DeepslateEmeraldOre);\ + FUNC(DeepslateGoldOre);\ + FUNC(DeepslateIronOre);\ + FUNC(DeepslateLapisOre);\ + FUNC(DeepslateRedstoneOre);\ + FUNC(DeepslateTileDoubleSlab);\ + FUNC(DeepslateTileSlab);\ + FUNC(DeepslateTileStairs);\ + FUNC(DeepslateTileWall);\ + FUNC(DeepslateTiles);\ + FUNC(Deny);\ + FUNC(DetectorRail);\ + FUNC(DiamondBlock);\ + FUNC(DiamondOre);\ + FUNC(DioriteStairs);\ + FUNC(Dirt);\ + FUNC(DirtWithRoots);\ + FUNC(Dispenser);\ + FUNC(DoubleCutCopperSlab);\ + FUNC(DoublePlant);\ + FUNC(DoubleStoneSlab);\ + FUNC(DoubleStoneSlab2);\ + FUNC(DoubleStoneSlab3);\ + FUNC(DoubleStoneSlab4);\ + FUNC(DoubleWoodenSlab);\ + FUNC(DragonEgg);\ + FUNC(DriedKelpBlock);\ + FUNC(Dripstone);\ + FUNC(Dropper);\ + FUNC(EmeraldBlock);\ + FUNC(EmeraldOre);\ + FUNC(EnchantingTable);\ + FUNC(EndBrickStairs);\ + FUNC(EndBricks);\ + FUNC(EndGateway);\ + FUNC(EndPortal);\ + FUNC(EndPortalFrame);\ + FUNC(EndRod);\ + FUNC(EndStone);\ + FUNC(EnderChest);\ + FUNC(ExposedCopper);\ + FUNC(ExposedCutCopper);\ + FUNC(ExposedCutCopperSlab);\ + FUNC(ExposedCutCopperStairs);\ + FUNC(ExposedDoubleCutCopperSlab);\ + FUNC(FarmlandBlock);\ + FUNC(FenceGate);\ + FUNC(Fire);\ + FUNC(FireCoral);\ + FUNC(FletchingTable);\ + FUNC(FlowerPot);\ + FUNC(FloweringAzalea);\ + FUNC(FlowingLava);\ + FUNC(FlowingWater);\ + FUNC(FrogSpawn);\ + FUNC(FrostedIce);\ + FUNC(Furnace);\ + FUNC(GildedBlackstone);\ + FUNC(Glass);\ + FUNC(GlassPane);\ + FUNC(GlowItemFrame);\ + FUNC(GlowLichen);\ + FUNC(GlowingObsidian);\ + FUNC(Glowstone);\ + FUNC(GoldBlock);\ + FUNC(GoldOre);\ + FUNC(GoldenRail);\ + FUNC(GraniteStairs);\ + FUNC(Grass);\ + FUNC(GrassPath);\ + FUNC(Gravel);\ + FUNC(GrayCandle);\ + FUNC(GrayCandleCake);\ + FUNC(GrayCarpet);\ + FUNC(GrayConcrete);\ + FUNC(GrayConcretePowder);\ + FUNC(GrayGlazedTerracotta);\ + FUNC(GrayShulkerBox);\ + FUNC(GrayStainedGlass);\ + FUNC(GrayStainedGlassPane);\ + FUNC(GrayTerracotta);\ + FUNC(GrayWool);\ + FUNC(GreenCandle);\ + FUNC(GreenCandleCake);\ + FUNC(GreenCarpet);\ + FUNC(GreenConcrete);\ + FUNC(GreenConcretePowder);\ + FUNC(GreenGlazedTerracotta);\ + FUNC(GreenShulkerBox);\ + FUNC(GreenStainedGlass);\ + FUNC(GreenStainedGlassPane);\ + FUNC(GreenTerracotta);\ + FUNC(GreenWool);\ + FUNC(Grindstone);\ + FUNC(HangingRoots);\ + FUNC(HardGlass);\ + FUNC(HardGlassPane);\ + FUNC(HardStainedGlass);\ + FUNC(HardStainedGlassPane);\ + FUNC(HardenedClay);\ + FUNC(HayBlock);\ + FUNC(HeavyWeightedPressurePlate);\ + FUNC(HoneyBlock);\ + FUNC(HoneycombBlock);\ + FUNC(Hopper);\ + FUNC(HornCoral);\ + FUNC(Ice);\ + FUNC(InfestedDeepslate);\ + FUNC(InfoUpdate);\ + FUNC(InfoUpdate2);\ + FUNC(InvisibleBedrock);\ + FUNC(IronBars);\ + FUNC(IronBlock);\ + FUNC(IronDoor);\ + FUNC(IronOre);\ + FUNC(IronTrapdoor);\ + FUNC(ItemFrame);\ + FUNC(Jigsaw);\ + FUNC(Jukebox);\ + FUNC(JungleButton);\ + FUNC(JungleDoor);\ + FUNC(JungleFence);\ + FUNC(JungleFenceGate);\ + FUNC(JungleHangingSign);\ + FUNC(JungleLog);\ + FUNC(JunglePressurePlate);\ + FUNC(JungleStairs);\ + FUNC(JungleStandingSign);\ + FUNC(JungleTrapdoor);\ + FUNC(JungleWallSign);\ + FUNC(Kelp);\ + FUNC(Ladder);\ + FUNC(Lantern);\ + FUNC(LapisBlock);\ + FUNC(LapisOre);\ + FUNC(LargeAmethystBud);\ + FUNC(Lava);\ + FUNC(Leaves);\ + FUNC(Leaves2);\ + FUNC(Lectern);\ + FUNC(Lever);\ + FUNC(LightBlock);\ + FUNC(LightBlueCandle);\ + FUNC(LightBlueCandleCake);\ + FUNC(LightBlueCarpet);\ + FUNC(LightBlueConcrete);\ + FUNC(LightBlueConcretePowder);\ + FUNC(LightBlueGlazedTerracotta);\ + FUNC(LightBlueShulkerBox);\ + FUNC(LightBlueStainedGlass);\ + FUNC(LightBlueStainedGlassPane);\ + FUNC(LightBlueTerracotta);\ + FUNC(LightBlueWool);\ + FUNC(LightGrayCandle);\ + FUNC(LightGrayCandleCake);\ + FUNC(LightGrayCarpet);\ + FUNC(LightGrayConcrete);\ + FUNC(LightGrayConcretePowder);\ + FUNC(LightGrayShulkerBox);\ + FUNC(LightGrayStainedGlass);\ + FUNC(LightGrayStainedGlassPane);\ + FUNC(LightGrayTerracotta);\ + FUNC(LightGrayWool);\ + FUNC(LightWeightedPressurePlate);\ + FUNC(LightningRod);\ + FUNC(LimeCandle);\ + FUNC(LimeCandleCake);\ + FUNC(LimeCarpet);\ + FUNC(LimeConcrete);\ + FUNC(LimeConcretePowder);\ + FUNC(LimeGlazedTerracotta);\ + FUNC(LimeShulkerBox);\ + FUNC(LimeStainedGlass);\ + FUNC(LimeStainedGlassPane);\ + FUNC(LimeTerracotta);\ + FUNC(LimeWool);\ + FUNC(LitBlastFurnace);\ + FUNC(LitDeepslateRedstoneOre);\ + FUNC(LitFurnace);\ + FUNC(LitPumpkin);\ + FUNC(LitRedstoneLamp);\ + FUNC(LitRedstoneOre);\ + FUNC(LitSmoker);\ + FUNC(Lodestone);\ + FUNC(Loom);\ + FUNC(MagentaCandle);\ + FUNC(MagentaCandleCake);\ + FUNC(MagentaCarpet);\ + FUNC(MagentaConcrete);\ + FUNC(MagentaConcretePowder);\ + FUNC(MagentaGlazedTerracotta);\ + FUNC(MagentaShulkerBox);\ + FUNC(MagentaStainedGlass);\ + FUNC(MagentaStainedGlassPane);\ + FUNC(MagentaTerracotta);\ + FUNC(MagentaWool);\ + FUNC(Magma);\ + FUNC(MangroveButton);\ + FUNC(MangroveDoor);\ + FUNC(MangroveDoubleSlab);\ + FUNC(MangroveFence);\ + FUNC(MangroveFenceGate);\ + FUNC(MangroveHangingSign);\ + FUNC(MangroveLeaves);\ + FUNC(MangroveLog);\ + FUNC(MangrovePlanks);\ + FUNC(MangrovePressurePlate);\ + FUNC(MangrovePropagule);\ + FUNC(MangroveRoots);\ + FUNC(MangroveSlab);\ + FUNC(MangroveStairs);\ + FUNC(MangroveStandingSign);\ + FUNC(MangroveTrapdoor);\ + FUNC(MangroveWallSign);\ + FUNC(MangroveWood);\ + FUNC(MediumAmethystBud);\ + FUNC(MelonBlock);\ + FUNC(MelonStem);\ + FUNC(MobSpawner);\ + FUNC(MonsterEgg);\ + FUNC(MossBlock);\ + FUNC(MossCarpet);\ + FUNC(MossyCobblestone);\ + FUNC(MossyCobblestoneStairs);\ + FUNC(MossyStoneBrickStairs);\ + FUNC(MovingBlock);\ + FUNC(Mud);\ + FUNC(MudBrickDoubleSlab);\ + FUNC(MudBrickSlab);\ + FUNC(MudBrickStairs);\ + FUNC(MudBrickWall);\ + FUNC(MudBricks);\ + FUNC(MuddyMangroveRoots);\ + FUNC(Mycelium);\ + FUNC(MysteriousFrame);\ + FUNC(MysteriousFrameSlot);\ + FUNC(NetherBrickBlockName);\ + FUNC(NetherBrickFence);\ + FUNC(NetherBrickStairs);\ + FUNC(NetherGoldOre);\ + FUNC(NetherSprouts);\ + FUNC(NetherWart);\ + FUNC(NetherWartBlock);\ + FUNC(NetheriteBlock);\ + FUNC(Netherrack);\ + FUNC(Netherreactor);\ + FUNC(NormalStoneStairs);\ + FUNC(Noteblock);\ + FUNC(OakFence);\ + FUNC(OakHangingSign);\ + FUNC(OakLog);\ + FUNC(OakStairs);\ + FUNC(Observer);\ + FUNC(Obsidian);\ + FUNC(OchreFroglight);\ + FUNC(OrangeCandle);\ + FUNC(OrangeCandleCake);\ + FUNC(OrangeCarpet);\ + FUNC(OrangeConcrete);\ + FUNC(OrangeConcretePowder);\ + FUNC(OrangeGlazedTerracotta);\ + FUNC(OrangeShulkerBox);\ + FUNC(OrangeStainedGlass);\ + FUNC(OrangeStainedGlassPane);\ + FUNC(OrangeTerracotta);\ + FUNC(OrangeWool);\ + FUNC(OxidizedCopper);\ + FUNC(OxidizedCutCopper);\ + FUNC(OxidizedCutCopperSlab);\ + FUNC(OxidizedCutCopperStairs);\ + FUNC(OxidizedDoubleCutCopperSlab);\ + FUNC(PackedIce);\ + FUNC(PackedMud);\ + FUNC(PearlescentFroglight);\ + FUNC(PinkCandle);\ + FUNC(PinkCandleCake);\ + FUNC(PinkCarpet);\ + FUNC(PinkConcrete);\ + FUNC(PinkConcretePowder);\ + FUNC(PinkGlazedTerracotta);\ + FUNC(PinkPetals);\ + FUNC(PinkShulkerBox);\ + FUNC(PinkStainedGlass);\ + FUNC(PinkStainedGlassPane);\ + FUNC(PinkTerracotta);\ + FUNC(PinkWool);\ + FUNC(Piston);\ + FUNC(PistonArmCollision);\ + FUNC(PitcherCrop);\ + FUNC(PitcherPlant);\ + FUNC(Planks);\ + FUNC(Podzol);\ + FUNC(PointedDripstone);\ + FUNC(PolishedAndesiteStairs);\ + FUNC(PolishedBasalt);\ + FUNC(PolishedBlackstone);\ + FUNC(PolishedBlackstoneBrickDoubleSlab);\ + FUNC(PolishedBlackstoneBrickSlab);\ + FUNC(PolishedBlackstoneBrickStairs);\ + FUNC(PolishedBlackstoneBrickWall);\ + FUNC(PolishedBlackstoneBricks);\ + FUNC(PolishedBlackstoneButton);\ + FUNC(PolishedBlackstoneDoubleSlab);\ + FUNC(PolishedBlackstonePressurePlate);\ + FUNC(PolishedBlackstoneSlab);\ + FUNC(PolishedBlackstoneStairs);\ + FUNC(PolishedBlackstoneWall);\ + FUNC(PolishedDeepslate);\ + FUNC(PolishedDeepslateDoubleSlab);\ + FUNC(PolishedDeepslateSlab);\ + FUNC(PolishedDeepslateStairs);\ + FUNC(PolishedDeepslateWall);\ + FUNC(PolishedDioriteStairs);\ + FUNC(PolishedGraniteStairs);\ + FUNC(Portal);\ + FUNC(Potatoes);\ + FUNC(PowderSnow);\ + FUNC(PoweredComparator);\ + FUNC(PoweredRepeater);\ + FUNC(Prismarine);\ + FUNC(PrismarineBricksStairs);\ + FUNC(PrismarineStairs);\ + FUNC(Pumpkin);\ + FUNC(PumpkinStem);\ + FUNC(PurpleCandle);\ + FUNC(PurpleCandleCake);\ + FUNC(PurpleCarpet);\ + FUNC(PurpleConcrete);\ + FUNC(PurpleConcretePowder);\ + FUNC(PurpleGlazedTerracotta);\ + FUNC(PurpleShulkerBox);\ + FUNC(PurpleStainedGlass);\ + FUNC(PurpleStainedGlassPane);\ + FUNC(PurpleTerracotta);\ + FUNC(PurpleWool);\ + FUNC(PurpurBlock);\ + FUNC(PurpurStairs);\ + FUNC(QuartzBlock);\ + FUNC(QuartzBricks);\ + FUNC(QuartzOre);\ + FUNC(QuartzStairs);\ + FUNC(Rail);\ + FUNC(RawCopperBlock);\ + FUNC(RawGoldBlock);\ + FUNC(RawIronBlock);\ + FUNC(RedCandle);\ + FUNC(RedCandleCake);\ + FUNC(RedCarpet);\ + FUNC(RedConcrete);\ + FUNC(RedConcretePowder);\ + FUNC(RedFlower);\ + FUNC(RedGlazedTerracotta);\ + FUNC(RedMushroom);\ + FUNC(RedMushroomBlock);\ + FUNC(RedNetherBrick);\ + FUNC(RedNetherBrickStairs);\ + FUNC(RedSandstone);\ + FUNC(RedSandstoneStairs);\ + FUNC(RedShulkerBox);\ + FUNC(RedStainedGlass);\ + FUNC(RedStainedGlassPane);\ + FUNC(RedTerracotta);\ + FUNC(RedWool);\ + FUNC(RedstoneBlock);\ + FUNC(RedstoneLamp);\ + FUNC(RedstoneOre);\ + FUNC(RedstoneTorch);\ + FUNC(RedstoneWire);\ + FUNC(Reeds);\ + FUNC(ReinforcedDeepslate);\ + FUNC(RepeatingCommandBlock);\ + FUNC(Reserved6);\ + FUNC(RespawnAnchor);\ + FUNC(Sand);\ + FUNC(Sandstone);\ + FUNC(SandstoneStairs);\ + FUNC(Sapling);\ + FUNC(Scaffolding);\ + FUNC(Sculk);\ + FUNC(SculkCatalyst);\ + FUNC(SculkSensor);\ + FUNC(SculkShrieker);\ + FUNC(SculkVein);\ + FUNC(SeaLantern);\ + FUNC(SeaPickle);\ + FUNC(Seagrass);\ + FUNC(Shroomlight);\ + FUNC(SilverGlazedTerracotta);\ + FUNC(Skull);\ + FUNC(SlimeBlock);\ + FUNC(SmallAmethystBud);\ + FUNC(SmallDripleaf);\ + FUNC(SmithingTable);\ + FUNC(Smoker);\ + FUNC(SmoothBasalt);\ + FUNC(SmoothQuartzStairs);\ + FUNC(SmoothRedSandstoneStairs);\ + FUNC(SmoothSandstoneStairs);\ + FUNC(SmoothStone);\ + FUNC(SnifferEgg);\ + FUNC(Snow);\ + FUNC(SnowLayer);\ + FUNC(SoulCampfire);\ + FUNC(SoulFire);\ + FUNC(SoulLantern);\ + FUNC(SoulSand);\ + FUNC(SoulSoil);\ + FUNC(SoulTorch);\ + FUNC(Sponge);\ + FUNC(SporeBlossom);\ + FUNC(SpruceButton);\ + FUNC(SpruceDoor);\ + FUNC(SpruceFence);\ + FUNC(SpruceFenceGate);\ + FUNC(SpruceHangingSign);\ + FUNC(SpruceLog);\ + FUNC(SprucePressurePlate);\ + FUNC(SpruceStairs);\ + FUNC(SpruceStandingSign);\ + FUNC(SpruceTrapdoor);\ + FUNC(SpruceWallSign);\ + FUNC(StandingBanner);\ + FUNC(StandingSign);\ + FUNC(StickyPiston);\ + FUNC(StickyPistonArmCollision);\ + FUNC(Stone);\ + FUNC(StoneBrickStairs);\ + FUNC(StoneBricks);\ + FUNC(StoneButton);\ + FUNC(StonePressurePlate);\ + FUNC(StoneSlab);\ + FUNC(StoneSlab2);\ + FUNC(StoneSlab3);\ + FUNC(StoneSlab4);\ + FUNC(StoneStairs);\ + FUNC(Stonecutter);\ + FUNC(StonecutterBlock);\ + FUNC(StrippedAcaciaLog);\ + FUNC(StrippedBambooBlock);\ + FUNC(StrippedBirchLog);\ + FUNC(StrippedCherryLog);\ + FUNC(StrippedCherryWood);\ + FUNC(StrippedCrimsonHyphae);\ + FUNC(StrippedCrimsonStem);\ + FUNC(StrippedDarkOakLog);\ + FUNC(StrippedJungleLog);\ + FUNC(StrippedMangroveLog);\ + FUNC(StrippedMangroveWood);\ + FUNC(StrippedOakLog);\ + FUNC(StrippedSpruceLog);\ + FUNC(StrippedWarpedHyphae);\ + FUNC(StrippedWarpedStem);\ + FUNC(StructureBlock);\ + FUNC(StructureVoid);\ + FUNC(SuspiciousGravel);\ + FUNC(SuspiciousSand);\ + FUNC(SweetBerryBush);\ + FUNC(TallGrass);\ + FUNC(Target);\ + FUNC(TintedGlass);\ + FUNC(Tnt);\ + FUNC(Torch);\ + FUNC(Torchflower);\ + FUNC(TorchflowerCrop);\ + FUNC(Trapdoor);\ + FUNC(TrappedChest);\ + FUNC(TripWire);\ + FUNC(TripWireHook);\ + FUNC(TubeCoral);\ + FUNC(Tuff);\ + FUNC(TurtleEgg);\ + FUNC(TwistingVines);\ + FUNC(UnderwaterTorch);\ + FUNC(UndyedShulkerBox);\ + FUNC(UnlitRedstoneTorch);\ + FUNC(UnpoweredComparator);\ + FUNC(UnpoweredRepeater);\ + FUNC(VerdantFroglight);\ + FUNC(Vine);\ + FUNC(WallBanner);\ + FUNC(WallSign);\ + FUNC(WarpedButton);\ + FUNC(WarpedDoor);\ + FUNC(WarpedDoubleSlab);\ + FUNC(WarpedFence);\ + FUNC(WarpedFenceGate);\ + FUNC(WarpedFungus);\ + FUNC(WarpedHangingSign);\ + FUNC(WarpedHyphae);\ + FUNC(WarpedNylium);\ + FUNC(WarpedPlanks);\ + FUNC(WarpedPressurePlate);\ + FUNC(WarpedRoots);\ + FUNC(WarpedSlab);\ + FUNC(WarpedStairs);\ + FUNC(WarpedStandingSign);\ + FUNC(WarpedStem);\ + FUNC(WarpedTrapdoor);\ + FUNC(WarpedWallSign);\ + FUNC(WarpedWartBlock);\ + FUNC(Water);\ + FUNC(WaterLily);\ + FUNC(WaxedCopper);\ + FUNC(WaxedCutCopper);\ + FUNC(WaxedCutCopperSlab);\ + FUNC(WaxedCutCopperStairs);\ + FUNC(WaxedDoubleCutCopperSlab);\ + FUNC(WaxedExposedCopper);\ + FUNC(WaxedExposedCutCopper);\ + FUNC(WaxedExposedCutCopperSlab);\ + FUNC(WaxedExposedCutCopperStairs);\ + FUNC(WaxedExposedDoubleCutCopperSlab);\ + FUNC(WaxedOxidizedCopper);\ + FUNC(WaxedOxidizedCutCopper);\ + FUNC(WaxedOxidizedCutCopperSlab);\ + FUNC(WaxedOxidizedCutCopperStairs);\ + FUNC(WaxedOxidizedDoubleCutCopperSlab);\ + FUNC(WaxedWeatheredCopper);\ + FUNC(WaxedWeatheredCutCopper);\ + FUNC(WaxedWeatheredCutCopperSlab);\ + FUNC(WaxedWeatheredCutCopperStairs);\ + FUNC(WaxedWeatheredDoubleCutCopperSlab);\ + FUNC(WeatheredCopper);\ + FUNC(WeatheredCutCopper);\ + FUNC(WeatheredCutCopperSlab);\ + FUNC(WeatheredCutCopperStairs);\ + FUNC(WeatheredDoubleCutCopperSlab);\ + FUNC(Web);\ + FUNC(WeepingVines);\ + FUNC(Wheat);\ + FUNC(WhiteCandle);\ + FUNC(WhiteCandleCake);\ + FUNC(WhiteCarpet);\ + FUNC(WhiteConcrete);\ + FUNC(WhiteConcretePowder);\ + FUNC(WhiteGlazedTerracotta);\ + FUNC(WhiteShulkerBox);\ + FUNC(WhiteStainedGlass);\ + FUNC(WhiteStainedGlassPane);\ + FUNC(WhiteTerracotta);\ + FUNC(WhiteWool);\ + FUNC(WitherRose);\ + FUNC(Wood);\ + FUNC(WoodenButton);\ + FUNC(WoodenDoor);\ + FUNC(WoodenPressurePlate);\ + FUNC(WoodenSlab);\ + FUNC(YellowCandle);\ + FUNC(YellowCandleCake);\ + FUNC(YellowCarpet);\ + FUNC(YellowConcrete);\ + FUNC(YellowConcretePowder);\ + FUNC(YellowFlower);\ + FUNC(YellowGlazedTerracotta);\ + FUNC(YellowShulkerBox);\ + FUNC(YellowStainedGlass);\ + FUNC(YellowStainedGlassPane);\ + FUNC(YellowTerracotta);\ + FUNC(YellowWool);\ #pragma endregion