From 2aca4247c5d0c7061a300517178dd31316b65fab Mon Sep 17 00:00:00 2001 From: Leonardo Bishop Date: Thu, 15 Feb 2024 14:01:30 +0000 Subject: Initial commit --- src/App.vue | 12 + src/assets/base.css | 205 +++ src/assets/main.css | 2 + src/assets/quests-logo.png | Bin 0 -> 54415 bytes src/components/Control/Button.vue | 54 + src/components/Control/Checkbox.vue | 42 + src/components/Control/TrueFalseSwitch.vue | 54 + .../Category/CategoryChildrenOptionsPanel.vue | 53 + .../Editor/Category/CategoryOptionsPanel.vue | 54 + src/components/Editor/EditorOptionsPanel.vue | 18 + src/components/Editor/EditorPane.vue | 157 ++ src/components/Editor/EditorSidebar.vue | 28 + src/components/Editor/EditorSidebarCategory.vue | 94 + src/components/Editor/EditorSidebarQuest.vue | 68 + src/components/Editor/Quest/QuestOptionsPanel.vue | 154 ++ .../Editor/Quest/QuestTasksOptionsPanel.vue | 75 + .../Editor/Quest/Task/TaskConfiguration.vue | 191 ++ .../Editor/Quest/Task/TaskConfigurationRow.vue | 156 ++ src/components/Header/SiteHeader.vue | 43 + src/data/materials.json | 1924 ++++++++++++++++++++ src/data/taskDefinitions.json | 53 + src/data/testData.json | 384 ++++ src/lib/questsLoader.ts | 68 + src/lib/util.ts | 3 + src/main.ts | 35 + src/router/index.ts | 23 + src/stores/session.ts | 149 ++ src/views/EditorView.vue | 37 + 28 files changed, 4136 insertions(+) create mode 100644 src/App.vue create mode 100644 src/assets/base.css create mode 100644 src/assets/main.css create mode 100644 src/assets/quests-logo.png create mode 100644 src/components/Control/Button.vue create mode 100644 src/components/Control/Checkbox.vue create mode 100644 src/components/Control/TrueFalseSwitch.vue create mode 100644 src/components/Editor/Category/CategoryChildrenOptionsPanel.vue create mode 100644 src/components/Editor/Category/CategoryOptionsPanel.vue create mode 100644 src/components/Editor/EditorOptionsPanel.vue create mode 100644 src/components/Editor/EditorPane.vue create mode 100644 src/components/Editor/EditorSidebar.vue create mode 100644 src/components/Editor/EditorSidebarCategory.vue create mode 100644 src/components/Editor/EditorSidebarQuest.vue create mode 100644 src/components/Editor/Quest/QuestOptionsPanel.vue create mode 100644 src/components/Editor/Quest/QuestTasksOptionsPanel.vue create mode 100644 src/components/Editor/Quest/Task/TaskConfiguration.vue create mode 100644 src/components/Editor/Quest/Task/TaskConfigurationRow.vue create mode 100644 src/components/Header/SiteHeader.vue create mode 100644 src/data/materials.json create mode 100644 src/data/taskDefinitions.json create mode 100644 src/data/testData.json create mode 100644 src/lib/questsLoader.ts create mode 100644 src/lib/util.ts create mode 100644 src/main.ts create mode 100644 src/router/index.ts create mode 100644 src/stores/session.ts create mode 100644 src/views/EditorView.vue (limited to 'src') diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..0b4985d --- /dev/null +++ b/src/App.vue @@ -0,0 +1,12 @@ + + + + + diff --git a/src/assets/base.css b/src/assets/base.css new file mode 100644 index 0000000..145d7cc --- /dev/null +++ b/src/assets/base.css @@ -0,0 +1,205 @@ +/* color palette from */ +:root { + --c-white: #ffffff; + --c-white-soft: #f8f8f8; + --c-white-mute: #f2f2f2; + + --c-black: #181818; + --c-black-soft: #222222; + --c-black-mute: #282828; + + --c-indigo: #2c3e50; + + --c-divider-light-1: rgba(60, 60, 60, 0.2); + --c-divider-light-2: rgba(60, 60, 60, 0.4); + --c-divider-dark-1: rgba(84, 84, 84, 0.2); + --c-divider-dark-2: rgba(84, 84, 84, 0.4); + + --c-text-light-1: #f8f8f8; + --c-text-light-2: #a7a7a7; + --c-text-dark-1: #181818; + --c-text-dark-2: #222222; + + --c-brand: #8b72f0; + --c-brand-light: #a08df5; + --c-brand-dark: #7058d1; + --c-brand-mute: #866ee755; + --c-brand-highlight: #9885e463; + + --c-true: #2ecc71; + --c-false: #e74c3c; +} + +/* semantic color variables for this project */ +:root { + --color-background: var(--c-white); + --color-background-soft: var(--c-white-soft); + --color-background-mute: var(--c-white-mute); + + --color-border: var(--c-divider-light-2); + --color-border-soft: var(--c-divider-light-1); + + --color-heading: var(--c-text-dark-1); + --color-text: var(--c-text-dark-1); + --color-text-mute: var(--c-text-dark-2); + --color-text-primary: var(--c-brand-dark); + + --color-primary: var(--c-brand); + --color-primary-light: var(--c-brand-light); + --color-primary-dark: var(--c-brand-dark); + --color-primary-mute: var(--c-brand-mute); + + --color-hover: var(--c-brand-highlight); + + --color-true: var(--c-true); + --color-false: var(--c-false); + + --section-gap: 160px; +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: var(--c-black); + --color-background-soft: var(--c-black-soft); + --color-background-mute: var(--c-black-mute); + + --color-border: var(--c-divider-dark-2); + --color-border-soft: var(--c-divider-dark-1); + + --color-heading: var(--c-text-light-1); + --color-text: var(--c-text-light-1); + --color-text-mute: var(--c-text-light-2); + --color-text-primary: var(--c-brand-light); + } +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + font-weight: normal; +} + +body { + min-height: 100vh; + color: var(--color-text); + background: var(--color-background); + transition: + color 0.5s, + background-color 0.5s; + line-height: 1.6; + font-family: + Inter, + -apple-system, + BlinkMacSystemFont, + 'Segoe UI', + Roboto, + Oxygen, + Ubuntu, + Cantarell, + 'Fira Sans', + 'Droid Sans', + 'Helvetica Neue', + sans-serif; + font-size: 15px; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: 'Fira Code', monospace; +} + +input { + font-family: inherit; + font-size: inherit; + color: inherit; + background: var(--color-background-soft); + border: 1px solid var(--color-border); + padding: 0.5em 1em; + border-radius: 4px; + transition: border-color 0.5s; +} + +input:focus { + outline: none; + border-color: var(--color-primary); +} + +input:disabled { + background: var(--color-background-mute); + border-color: var(--color-border); + color: var(--color-text-mute); + cursor: not-allowed; +} + +fieldset { + border: 1px solid var(--color-border); +} + +input[type="checkbox"] { + accent-color: var(--color-primary); +} + +.multiselect__input { + background: var(--color-background-soft) !important ; + color: inherit !important; + + &::placeholder { + color: rgba(255, 255, 255, .2) !important; + } +} + +.multiselect__tags { + background: var(--color-background-soft) !important; + border: 1px solid var(--color-border) !important; + border-radius: 4px !important; + overflow-y: auto !important; +} + +.multiselect__single { + font-family: monospace !important; + background: var(--color-background-soft) !important; + color: var(--color-text) !important; + font-size: 0.8rem !important; +} + +.multiselect__content { + font-family: monospace; + + &-wrapper { + background: var(--color-background); + border: 0; + border-top-left-radius: 2px; + border-top-right-radius: 2px; + box-shadow: 0 -1rem 2rem rgba(0, 0, 0, .1); + } +} + +.multiselect__element { + &:not(:first-child) { + border-top: 1px solid rgba(0, 0, 0, .2); + } +} + +.multiselect__option { + &--highlight { + background: rgba(255, 255, 255, .2); + + &:after { + background: rgba(0, 0, 0, .2); + } + } + + &--selected { + background: var(--color-primary); + color: white; + + &:after { + color: rgba(0, 0, 0, .5); + } + + } +} \ No newline at end of file diff --git a/src/assets/main.css b/src/assets/main.css new file mode 100644 index 0000000..37a2a09 --- /dev/null +++ b/src/assets/main.css @@ -0,0 +1,2 @@ +@import 'vue-multiselect/dist/vue-multiselect.css'; +@import './base.css'; \ No newline at end of file diff --git a/src/assets/quests-logo.png b/src/assets/quests-logo.png new file mode 100644 index 0000000..0d0194f Binary files /dev/null and b/src/assets/quests-logo.png differ diff --git a/src/components/Control/Button.vue b/src/components/Control/Button.vue new file mode 100644 index 0000000..044cca1 --- /dev/null +++ b/src/components/Control/Button.vue @@ -0,0 +1,54 @@ + + + + + \ No newline at end of file diff --git a/src/components/Control/Checkbox.vue b/src/components/Control/Checkbox.vue new file mode 100644 index 0000000..e0325e7 --- /dev/null +++ b/src/components/Control/Checkbox.vue @@ -0,0 +1,42 @@ + + + + + \ No newline at end of file diff --git a/src/components/Control/TrueFalseSwitch.vue b/src/components/Control/TrueFalseSwitch.vue new file mode 100644 index 0000000..a0a3392 --- /dev/null +++ b/src/components/Control/TrueFalseSwitch.vue @@ -0,0 +1,54 @@ + + + + + \ No newline at end of file diff --git a/src/components/Editor/Category/CategoryChildrenOptionsPanel.vue b/src/components/Editor/Category/CategoryChildrenOptionsPanel.vue new file mode 100644 index 0000000..6e96f64 --- /dev/null +++ b/src/components/Editor/Category/CategoryChildrenOptionsPanel.vue @@ -0,0 +1,53 @@ + + + + + + diff --git a/src/components/Editor/Category/CategoryOptionsPanel.vue b/src/components/Editor/Category/CategoryOptionsPanel.vue new file mode 100644 index 0000000..f7d548c --- /dev/null +++ b/src/components/Editor/Category/CategoryOptionsPanel.vue @@ -0,0 +1,54 @@ + + + + + + diff --git a/src/components/Editor/EditorOptionsPanel.vue b/src/components/Editor/EditorOptionsPanel.vue new file mode 100644 index 0000000..1415d84 --- /dev/null +++ b/src/components/Editor/EditorOptionsPanel.vue @@ -0,0 +1,18 @@ + + + + + \ No newline at end of file diff --git a/src/components/Editor/EditorPane.vue b/src/components/Editor/EditorPane.vue new file mode 100644 index 0000000..6245e56 --- /dev/null +++ b/src/components/Editor/EditorPane.vue @@ -0,0 +1,157 @@ + + + + + \ No newline at end of file diff --git a/src/components/Editor/EditorSidebar.vue b/src/components/Editor/EditorSidebar.vue new file mode 100644 index 0000000..c9539fa --- /dev/null +++ b/src/components/Editor/EditorSidebar.vue @@ -0,0 +1,28 @@ + + + + + \ No newline at end of file diff --git a/src/components/Editor/EditorSidebarCategory.vue b/src/components/Editor/EditorSidebarCategory.vue new file mode 100644 index 0000000..932b36b --- /dev/null +++ b/src/components/Editor/EditorSidebarCategory.vue @@ -0,0 +1,94 @@ + + + + + \ No newline at end of file diff --git a/src/components/Editor/EditorSidebarQuest.vue b/src/components/Editor/EditorSidebarQuest.vue new file mode 100644 index 0000000..08f1625 --- /dev/null +++ b/src/components/Editor/EditorSidebarQuest.vue @@ -0,0 +1,68 @@ + + + + + \ No newline at end of file diff --git a/src/components/Editor/Quest/QuestOptionsPanel.vue b/src/components/Editor/Quest/QuestOptionsPanel.vue new file mode 100644 index 0000000..3495d60 --- /dev/null +++ b/src/components/Editor/Quest/QuestOptionsPanel.vue @@ -0,0 +1,154 @@ + + + + + + diff --git a/src/components/Editor/Quest/QuestTasksOptionsPanel.vue b/src/components/Editor/Quest/QuestTasksOptionsPanel.vue new file mode 100644 index 0000000..12b1263 --- /dev/null +++ b/src/components/Editor/Quest/QuestTasksOptionsPanel.vue @@ -0,0 +1,75 @@ + + + + + + + diff --git a/src/components/Editor/Quest/Task/TaskConfiguration.vue b/src/components/Editor/Quest/Task/TaskConfiguration.vue new file mode 100644 index 0000000..5c6613a --- /dev/null +++ b/src/components/Editor/Quest/Task/TaskConfiguration.vue @@ -0,0 +1,191 @@ + + + + + + diff --git a/src/components/Editor/Quest/Task/TaskConfigurationRow.vue b/src/components/Editor/Quest/Task/TaskConfigurationRow.vue new file mode 100644 index 0000000..fb872a8 --- /dev/null +++ b/src/components/Editor/Quest/Task/TaskConfigurationRow.vue @@ -0,0 +1,156 @@ + + + + + \ No newline at end of file diff --git a/src/components/Header/SiteHeader.vue b/src/components/Header/SiteHeader.vue new file mode 100644 index 0000000..f51e970 --- /dev/null +++ b/src/components/Header/SiteHeader.vue @@ -0,0 +1,43 @@ + + + \ No newline at end of file diff --git a/src/data/materials.json b/src/data/materials.json new file mode 100644 index 0000000..1726002 --- /dev/null +++ b/src/data/materials.json @@ -0,0 +1,1924 @@ +[ + "ACACIA_BOAT", + "ACACIA_BUTTON", + "ACACIA_CHEST_BOAT", + "ACACIA_DOOR", + "ACACIA_FENCE", + "ACACIA_FENCE_GATE", + "ACACIA_HANGING_SIGN", + "ACACIA_LEAVES", + "ACACIA_LOG", + "ACACIA_PLANKS", + "ACACIA_PRESSURE_PLATE", + "ACACIA_SAPLING", + "ACACIA_SIGN", + "ACACIA_SLAB", + "ACACIA_STAIRS", + "ACACIA_TRAPDOOR", + "ACACIA_WALL_HANGING_SIGN", + "ACACIA_WALL_SIGN", + "ACACIA_WOOD", + "ACTIVATOR_RAIL", + "AIR", + "ALLAY_SPAWN_EGG", + "ALLIUM", + "AMETHYST_BLOCK", + "AMETHYST_CLUSTER", + "AMETHYST_SHARD", + "ANCIENT_DEBRIS", + "ANDESITE", + "ANDESITE_SLAB", + "ANDESITE_STAIRS", + "ANDESITE_WALL", + "ANGLER_POTTERY_SHERD", + "ANVIL", + "APPLE", + "ARCHER_POTTERY_SHERD", + "ARMOR_STAND", + "ARMS_UP_POTTERY_SHERD", + "ARROW", + "ATTACHED_MELON_STEM", + "ATTACHED_PUMPKIN_STEM", + "AXOLOTL_BUCKET", + "AXOLOTL_SPAWN_EGG", + "AZALEA", + "AZALEA_LEAVES", + "AZURE_BLUET", + "BAKED_POTATO", + "BAMBOO", + "BAMBOO_BLOCK", + "BAMBOO_BUTTON", + "BAMBOO_CHEST_RAFT", + "BAMBOO_DOOR", + "BAMBOO_FENCE", + "BAMBOO_FENCE_GATE", + "BAMBOO_HANGING_SIGN", + "BAMBOO_MOSAIC", + "BAMBOO_MOSAIC_SLAB", + "BAMBOO_MOSAIC_STAIRS", + "BAMBOO_PLANKS", + "BAMBOO_PRESSURE_PLATE", + "BAMBOO_RAFT", + "BAMBOO_SAPLING", + "BAMBOO_SIGN", + "BAMBOO_SLAB", + "BAMBOO_STAIRS", + "BAMBOO_TRAPDOOR", + "BAMBOO_WALL_HANGING_SIGN", + "BAMBOO_WALL_SIGN", + "BARREL", + "BARRIER", + "BASALT", + "BAT_SPAWN_EGG", + "BEACON", + "BEDROCK", + "BEE_NEST", + "BEE_SPAWN_EGG", + "BEEF", + "BEEHIVE", + "BEETROOT", + "BEETROOT_SEEDS", + "BEETROOT_SOUP", + "BEETROOTS", + "BELL", + "BIG_DRIPLEAF", + "BIG_DRIPLEAF_STEM", + "BIRCH_BOAT", + "BIRCH_BUTTON", + "BIRCH_CHEST_BOAT", + "BIRCH_DOOR", + "BIRCH_FENCE", + "BIRCH_FENCE_GATE", + "BIRCH_HANGING_SIGN", + "BIRCH_LEAVES", + "BIRCH_LOG", + "BIRCH_PLANKS", + "BIRCH_PRESSURE_PLATE", + "BIRCH_SAPLING", + "BIRCH_SIGN", + "BIRCH_SLAB", + "BIRCH_STAIRS", + "BIRCH_TRAPDOOR", + "BIRCH_WALL_HANGING_SIGN", + "BIRCH_WALL_SIGN", + "BIRCH_WOOD", + "BLACK_BANNER", + "BLACK_BED", + "BLACK_CANDLE", + "BLACK_CANDLE_CAKE", + "BLACK_CARPET", + "BLACK_CONCRETE", + "BLACK_CONCRETE_POWDER", + "BLACK_DYE", + "BLACK_GLAZED_TERRACOTTA", + "BLACK_SHULKER_BOX", + "BLACK_STAINED_GLASS", + "BLACK_STAINED_GLASS_PANE", + "BLACK_TERRACOTTA", + "BLACK_WALL_BANNER", + "BLACK_WOOL", + "BLACKSTONE", + "BLACKSTONE_SLAB", + "BLACKSTONE_STAIRS", + "BLACKSTONE_WALL", + "BLADE_POTTERY_SHERD", + "BLAST_FURNACE", + "BLAZE_POWDER", + "BLAZE_ROD", + "BLAZE_SPAWN_EGG", + "BLUE_BANNER", + "BLUE_BED", + "BLUE_CANDLE", + "BLUE_CANDLE_CAKE", + "BLUE_CARPET", + "BLUE_CONCRETE", + "BLUE_CONCRETE_POWDER", + "BLUE_DYE", + "BLUE_GLAZED_TERRACOTTA", + "BLUE_ICE", + "BLUE_ORCHID", + "BLUE_SHULKER_BOX", + "BLUE_STAINED_GLASS", + "BLUE_STAINED_GLASS_PANE", + "BLUE_TERRACOTTA", + "BLUE_WALL_BANNER", + "BLUE_WOOL", + "BONE", + "BONE_BLOCK", + "BONE_MEAL", + "BOOK", + "BOOKSHELF", + "BOW", + "BOWL", + "BRAIN_CORAL", + "BRAIN_CORAL_BLOCK", + "BRAIN_CORAL_FAN", + "BRAIN_CORAL_WALL_FAN", + "BREAD", + "BREEZE_SPAWN_EGG", + "BREWER_POTTERY_SHERD", + "BREWING_STAND", + "BRICK", + "BRICK_SLAB", + "BRICK_STAIRS", + "BRICK_WALL", + "BRICKS", + "BROWN_BANNER", + "BROWN_BED", + "BROWN_CANDLE", + "BROWN_CANDLE_CAKE", + "BROWN_CARPET", + "BROWN_CONCRETE", + "BROWN_CONCRETE_POWDER", + "BROWN_DYE", + "BROWN_GLAZED_TERRACOTTA", + "BROWN_MUSHROOM", + "BROWN_MUSHROOM_BLOCK", + "BROWN_SHULKER_BOX", + "BROWN_STAINED_GLASS", + "BROWN_STAINED_GLASS_PANE", + "BROWN_TERRACOTTA", + "BROWN_WALL_BANNER", + "BROWN_WOOL", + "BRUSH", + "BUBBLE_COLUMN", + "BUBBLE_CORAL", + "BUBBLE_CORAL_BLOCK", + "BUBBLE_CORAL_FAN", + "BUBBLE_CORAL_WALL_FAN", + "BUCKET", + "BUDDING_AMETHYST", + "BUNDLE", + "BURN_POTTERY_SHERD", + "CACTUS", + "CAKE", + "CALCITE", + "CALIBRATED_SCULK_SENSOR", + "CAMEL_SPAWN_EGG", + "CAMPFIRE", + "CANDLE", + "CANDLE_CAKE", + "CARROT", + "CARROT_ON_A_STICK", + "CARROTS", + "CARTOGRAPHY_TABLE", + "CARVED_PUMPKIN", + "CAT_SPAWN_EGG", + "CAULDRON", + "CAVE_AIR", + "CAVE_SPIDER_SPAWN_EGG", + "CAVE_VINES", + "CAVE_VINES_PLANT", + "CHAIN", + "CHAIN_COMMAND_BLOCK", + "CHAINMAIL_BOOTS", + "CHAINMAIL_CHESTPLATE", + "CHAINMAIL_HELMET", + "CHAINMAIL_LEGGINGS", + "CHARCOAL", + "CHERRY_BOAT", + "CHERRY_BUTTON", + "CHERRY_CHEST_BOAT", + "CHERRY_DOOR", + "CHERRY_FENCE", + "CHERRY_FENCE_GATE", + "CHERRY_HANGING_SIGN", + "CHERRY_LEAVES", + "CHERRY_LOG", + "CHERRY_PLANKS", + "CHERRY_PRESSURE_PLATE", + "CHERRY_SAPLING", + "CHERRY_SIGN", + "CHERRY_SLAB", + "CHERRY_STAIRS", + "CHERRY_TRAPDOOR", + "CHERRY_WALL_HANGING_SIGN", + "CHERRY_WALL_SIGN", + "CHERRY_WOOD", + "CHEST", + "CHEST_MINECART", + "CHICKEN", + "CHICKEN_SPAWN_EGG", + "CHIPPED_ANVIL", + "CHISELED_BOOKSHELF", + "CHISELED_COPPER", + "CHISELED_DEEPSLATE", + "CHISELED_NETHER_BRICKS", + "CHISELED_POLISHED_BLACKSTONE", + "CHISELED_QUARTZ_BLOCK", + "CHISELED_RED_SANDSTONE", + "CHISELED_SANDSTONE", + "CHISELED_STONE_BRICKS", + "CHISELED_TUFF", + "CHISELED_TUFF_BRICKS", + "CHORUS_FLOWER", + "CHORUS_FRUIT", + "CHORUS_PLANT", + "CLAY", + "CLAY_BALL", + "CLOCK", + "COAL", + "COAL_BLOCK", + "COAL_ORE", + "COARSE_DIRT", + "COAST_ARMOR_TRIM_SMITHING_TEMPLATE", + "COBBLED_DEEPSLATE", + "COBBLED_DEEPSLATE_SLAB", + "COBBLED_DEEPSLATE_STAIRS", + "COBBLED_DEEPSLATE_WALL", + "COBBLESTONE", + "COBBLESTONE_SLAB", + "COBBLESTONE_STAIRS", + "COBBLESTONE_WALL", + "COBWEB", + "COCOA", + "COCOA_BEANS", + "COD", + "COD_BUCKET", + "COD_SPAWN_EGG", + "COMMAND_BLOCK", + "COMMAND_BLOCK_MINECART", + "COMPARATOR", + "COMPASS", + "COMPOSTER", + "CONDUIT", + "COOKED_BEEF", + "COOKED_CHICKEN", + "COOKED_COD", + "COOKED_MUTTON", + "COOKED_PORKCHOP", + "COOKED_RABBIT", + "COOKED_SALMON", + "COOKIE", + "COPPER_BLOCK", + "COPPER_BULB", + "COPPER_DOOR", + "COPPER_GRATE", + "COPPER_INGOT", + "COPPER_ORE", + "COPPER_TRAPDOOR", + "CORNFLOWER", + "COW_SPAWN_EGG", + "CRACKED_DEEPSLATE_BRICKS", + "CRACKED_DEEPSLATE_TILES", + "CRACKED_NETHER_BRICKS", + "CRACKED_POLISHED_BLACKSTONE_BRICKS", + "CRACKED_STONE_BRICKS", + "CRAFTER", + "CRAFTING_TABLE", + "CREEPER_BANNER_PATTERN", + "CREEPER_HEAD", + "CREEPER_SPAWN_EGG", + "CREEPER_WALL_HEAD", + "CRIMSON_BUTTON", + "CRIMSON_DOOR", + "CRIMSON_FENCE", + "CRIMSON_FENCE_GATE", + "CRIMSON_FUNGUS", + "CRIMSON_HANGING_SIGN", + "CRIMSON_HYPHAE", + "CRIMSON_NYLIUM", + "CRIMSON_PLANKS", + "CRIMSON_PRESSURE_PLATE", + "CRIMSON_ROOTS", + "CRIMSON_SIGN", + "CRIMSON_SLAB", + "CRIMSON_STAIRS", + "CRIMSON_STEM", + "CRIMSON_TRAPDOOR", + "CRIMSON_WALL_HANGING_SIGN", + "CRIMSON_WALL_SIGN", + "CROSSBOW", + "CRYING_OBSIDIAN", + "CUT_COPPER", + "CUT_COPPER_SLAB", + "CUT_COPPER_STAIRS", + "CUT_RED_SANDSTONE", + "CUT_RED_SANDSTONE_SLAB", + "CUT_SANDSTONE", + "CUT_SANDSTONE_SLAB", + "CYAN_BANNER", + "CYAN_BED", + "CYAN_CANDLE", + "CYAN_CANDLE_CAKE", + "CYAN_CARPET", + "CYAN_CONCRETE", + "CYAN_CONCRETE_POWDER", + "CYAN_DYE", + "CYAN_GLAZED_TERRACOTTA", + "CYAN_SHULKER_BOX", + "CYAN_STAINED_GLASS", + "CYAN_STAINED_GLASS_PANE", + "CYAN_TERRACOTTA", + "CYAN_WALL_BANNER", + "CYAN_WOOL", + "DAMAGED_ANVIL", + "DANDELION", + "DANGER_POTTERY_SHERD", + "DARK_OAK_BOAT", + "DARK_OAK_BUTTON", + "DARK_OAK_CHEST_BOAT", + "DARK_OAK_DOOR", + "DARK_OAK_FENCE", + "DARK_OAK_FENCE_GATE", + "DARK_OAK_HANGING_SIGN", + "DARK_OAK_LEAVES", + "DARK_OAK_LOG", + "DARK_OAK_PLANKS", + "DARK_OAK_PRESSURE_PLATE", + "DARK_OAK_SAPLING", + "DARK_OAK_SIGN", + "DARK_OAK_SLAB", + "DARK_OAK_STAIRS", + "DARK_OAK_TRAPDOOR", + "DARK_OAK_WALL_HANGING_SIGN", + "DARK_OAK_WALL_SIGN", + "DARK_OAK_WOOD", + "DARK_PRISMARINE", + "DARK_PRISMARINE_SLAB", + "DARK_PRISMARINE_STAIRS", + "DAYLIGHT_DETECTOR", + "DEAD_BRAIN_CORAL", + "DEAD_BRAIN_CORAL_BLOCK", + "DEAD_BRAIN_CORAL_FAN", + "DEAD_BRAIN_CORAL_WALL_FAN", + "DEAD_BUBBLE_CORAL", + "DEAD_BUBBLE_CORAL_BLOCK", + "DEAD_BUBBLE_CORAL_FAN", + "DEAD_BUBBLE_CORAL_WALL_FAN", + "DEAD_BUSH", + "DEAD_FIRE_CORAL", + "DEAD_FIRE_CORAL_BLOCK", + "DEAD_FIRE_CORAL_FAN", + "DEAD_FIRE_CORAL_WALL_FAN", + "DEAD_HORN_CORAL", + "DEAD_HORN_CORAL_BLOCK", + "DEAD_HORN_CORAL_FAN", + "DEAD_HORN_CORAL_WALL_FAN", + "DEAD_TUBE_CORAL", + "DEAD_TUBE_CORAL_BLOCK", + "DEAD_TUBE_CORAL_FAN", + "DEAD_TUBE_CORAL_WALL_FAN", + "DEBUG_STICK", + "DECORATED_POT", + "DEEPSLATE", + "DEEPSLATE_BRICK_SLAB", + "DEEPSLATE_BRICK_STAIRS", + "DEEPSLATE_BRICK_WALL", + "DEEPSLATE_BRICKS", + "DEEPSLATE_COAL_ORE", + "DEEPSLATE_COPPER_ORE", + "DEEPSLATE_DIAMOND_ORE", + "DEEPSLATE_EMERALD_ORE", + "DEEPSLATE_GOLD_ORE", + "DEEPSLATE_IRON_ORE", + "DEEPSLATE_LAPIS_ORE", + "DEEPSLATE_REDSTONE_ORE", + "DEEPSLATE_TILE_SLAB", + "DEEPSLATE_TILE_STAIRS", + "DEEPSLATE_TILE_WALL", + "DEEPSLATE_TILES", + "DETECTOR_RAIL", + "DIAMOND", + "DIAMOND_AXE", + "DIAMOND_BLOCK", + "DIAMOND_BOOTS", + "DIAMOND_CHESTPLATE", + "DIAMOND_HELMET", + "DIAMOND_HOE", + "DIAMOND_HORSE_ARMOR", + "DIAMOND_LEGGINGS", + "DIAMOND_ORE", + "DIAMOND_PICKAXE", + "DIAMOND_SHOVEL", + "DIAMOND_SWORD", + "DIORITE", + "DIORITE_SLAB", + "DIORITE_STAIRS", + "DIORITE_WALL", + "DIRT", + "DIRT_PATH", + "DISC_FRAGMENT_5", + "DISPENSER", + "DOLPHIN_SPAWN_EGG", + "DONKEY_SPAWN_EGG", + "DRAGON_BREATH", + "DRAGON_EGG", + "DRAGON_HEAD", + "DRAGON_WALL_HEAD", + "DRIED_KELP", + "DRIED_KELP_BLOCK", + "DRIPSTONE_BLOCK", + "DROPPER", + "DROWNED_SPAWN_EGG", + "DUNE_ARMOR_TRIM_SMITHING_TEMPLATE", + "ECHO_SHARD", + "EGG", + "ELDER_GUARDIAN_SPAWN_EGG", + "ELYTRA", + "EMERALD", + "EMERALD_BLOCK", + "EMERALD_ORE", + "ENCHANTED_BOOK", + "ENCHANTED_GOLDEN_APPLE", + "ENCHANTING_TABLE", + "END_CRYSTAL", + "END_GATEWAY", + "END_PORTAL", + "END_PORTAL_FRAME", + "END_ROD", + "END_STONE", + "END_STONE_BRICK_SLAB", + "END_STONE_BRICK_STAIRS", + "END_STONE_BRICK_WALL", + "END_STONE_BRICKS", + "ENDER_CHEST", + "ENDER_DRAGON_SPAWN_EGG", + "ENDER_EYE", + "ENDER_PEARL", + "ENDERMAN_SPAWN_EGG", + "ENDERMITE_SPAWN_EGG", + "EVOKER_SPAWN_EGG", + "EXPERIENCE_BOTTLE", + "EXPLORER_POTTERY_SHERD", + "EXPOSED_CHISELED_COPPER", + "EXPOSED_COPPER", + "EXPOSED_COPPER_BULB", + "EXPOSED_COPPER_DOOR", + "EXPOSED_COPPER_GRATE", + "EXPOSED_COPPER_TRAPDOOR", + "EXPOSED_CUT_COPPER", + "EXPOSED_CUT_COPPER_SLAB", + "EXPOSED_CUT_COPPER_STAIRS", + "EYE_ARMOR_TRIM_SMITHING_TEMPLATE", + "FARMLAND", + "FEATHER", + "FERMENTED_SPIDER_EYE", + "FERN", + "FILLED_MAP", + "FIRE", + "FIRE_CHARGE", + "FIRE_CORAL", + "FIRE_CORAL_BLOCK", + "FIRE_CORAL_FAN", + "FIRE_CORAL_WALL_FAN", + "FIREWORK_ROCKET", + "FIREWORK_STAR", + "FISHING_ROD", + "FLETCHING_TABLE", + "FLINT", + "FLINT_AND_STEEL", + "FLOWER_BANNER_PATTERN", + "FLOWER_POT", + "FLOWERING_AZALEA", + "FLOWERING_AZALEA_LEAVES", + "FOX_SPAWN_EGG", + "FRIEND_POTTERY_SHERD", + "FROG_SPAWN_EGG", + "FROGSPAWN", + "FROSTED_ICE", + "FURNACE", + "FURNACE_MINECART", + "GHAST_SPAWN_EGG", + "GHAST_TEAR", + "GILDED_BLACKSTONE", + "GLASS", + "GLASS_BOTTLE", + "GLASS_PANE", + "GLISTERING_MELON_SLICE", + "GLOBE_BANNER_PATTERN", + "GLOW_BERRIES", + "GLOW_INK_SAC", + "GLOW_ITEM_FRAME", + "GLOW_LICHEN", + "GLOW_SQUID_SPAWN_EGG", + "GLOWSTONE", + "GLOWSTONE_DUST", + "GOAT_HORN", + "GOAT_SPAWN_EGG", + "GOLD_BLOCK", + "GOLD_INGOT", + "GOLD_NUGGET", + "GOLD_ORE", + "GOLDEN_APPLE", + "GOLDEN_AXE", + "GOLDEN_BOOTS", + "GOLDEN_CARROT", + "GOLDEN_CHESTPLATE", + "GOLDEN_HELMET", + "GOLDEN_HOE", + "GOLDEN_HORSE_ARMOR", + "GOLDEN_LEGGINGS", + "GOLDEN_PICKAXE", + "GOLDEN_SHOVEL", + "GOLDEN_SWORD", + "GRANITE", + "GRANITE_SLAB", + "GRANITE_STAIRS", + "GRANITE_WALL", + "GRASS_BLOCK", + "GRAVEL", + "GRAY_BANNER", + "GRAY_BED", + "GRAY_CANDLE", + "GRAY_CANDLE_CAKE", + "GRAY_CARPET", + "GRAY_CONCRETE", + "GRAY_CONCRETE_POWDER", + "GRAY_DYE", + "GRAY_GLAZED_TERRACOTTA", + "GRAY_SHULKER_BOX", + "GRAY_STAINED_GLASS", + "GRAY_STAINED_GLASS_PANE", + "GRAY_TERRACOTTA", + "GRAY_WALL_BANNER", + "GRAY_WOOL", + "GREEN_BANNER", + "GREEN_BED", + "GREEN_CANDLE", + "GREEN_CANDLE_CAKE", + "GREEN_CARPET", + "GREEN_CONCRETE", + "GREEN_CONCRETE_POWDER", + "GREEN_DYE", + "GREEN_GLAZED_TERRACOTTA", + "GREEN_SHULKER_BOX", + "GREEN_STAINED_GLASS", + "GREEN_STAINED_GLASS_PANE", + "GREEN_TERRACOTTA", + "GREEN_WALL_BANNER", + "GREEN_WOOL", + "GRINDSTONE", + "GUARDIAN_SPAWN_EGG", + "GUNPOWDER", + "HANGING_ROOTS", + "HAY_BLOCK", + "HEART_OF_THE_SEA", + "HEART_POTTERY_SHERD", + "HEARTBREAK_POTTERY_SHERD", + "HEAVY_WEIGHTED_PRESSURE_PLATE", + "HOGLIN_SPAWN_EGG", + "HONEY_BLOCK", + "HONEY_BOTTLE", + "HONEYCOMB", + "HONEYCOMB_BLOCK", + "HOPPER", + "HOPPER_MINECART", + "HORN_CORAL", + "HORN_CORAL_BLOCK", + "HORN_CORAL_FAN", + "HORN_CORAL_WALL_FAN", + "HORSE_SPAWN_EGG", + "HOST_ARMOR_TRIM_SMITHING_TEMPLATE", + "HOWL_POTTERY_SHERD", + "HUSK_SPAWN_EGG", + "ICE", + "INFESTED_CHISELED_STONE_BRICKS", + "INFESTED_COBBLESTONE", + "INFESTED_CRACKED_STONE_BRICKS", + "INFESTED_DEEPSLATE", + "INFESTED_MOSSY_STONE_BRICKS", + "INFESTED_STONE", + "INFESTED_STONE_BRICKS", + "INK_SAC", + "IRON_AXE", + "IRON_BARS", + "IRON_BLOCK", + "IRON_BOOTS", + "IRON_CHESTPLATE", + "IRON_DOOR", + "IRON_GOLEM_SPAWN_EGG", + "IRON_HELMET", + "IRON_HOE", + "IRON_HORSE_ARMOR", + "IRON_INGOT", + "IRON_LEGGINGS", + "IRON_NUGGET", + "IRON_ORE", + "IRON_PICKAXE", + "IRON_SHOVEL", + "IRON_SWORD", + "IRON_TRAPDOOR", + "ITEM_FRAME", + "JACK_O_LANTERN", + "JIGSAW", + "JUKEBOX", + "JUNGLE_BOAT", + "JUNGLE_BUTTON", + "JUNGLE_CHEST_BOAT", + "JUNGLE_DOOR", + "JUNGLE_FENCE", + "JUNGLE_FENCE_GATE", + "JUNGLE_HANGING_SIGN", + "JUNGLE_LEAVES", + "JUNGLE_LOG", + "JUNGLE_PLANKS", + "JUNGLE_PRESSURE_PLATE", + "JUNGLE_SAPLING", + "JUNGLE_SIGN", + "JUNGLE_SLAB", + "JUNGLE_STAIRS", + "JUNGLE_TRAPDOOR", + "JUNGLE_WALL_HANGING_SIGN", + "JUNGLE_WALL_SIGN", + "JUNGLE_WOOD", + "KELP", + "KELP_PLANT", + "KNOWLEDGE_BOOK", + "LADDER", + "LANTERN", + "LAPIS_BLOCK", + "LAPIS_LAZULI", + "LAPIS_ORE", + "LARGE_AMETHYST_BUD", + "LARGE_FERN", + "LAVA", + "LAVA_BUCKET", + "LAVA_CAULDRON", + "LEAD", + "LEATHER", + "LEATHER_BOOTS", + "LEATHER_CHESTPLATE", + "LEATHER_HELMET", + "LEATHER_HORSE_ARMOR", + "LEATHER_LEGGINGS", + "LECTERN", + "LEGACY_ACACIA_DOOR", + "LEGACY_ACACIA_DOOR_ITEM", + "LEGACY_ACACIA_FENCE", + "LEGACY_ACACIA_FENCE_GATE", + "LEGACY_ACACIA_STAIRS", + "LEGACY_ACTIVATOR_RAIL", + "LEGACY_AIR", + "LEGACY_ANVIL", + "LEGACY_APPLE", + "LEGACY_ARMOR_STAND", + "LEGACY_ARROW", + "LEGACY_BAKED_POTATO", + "LEGACY_BANNER", + "LEGACY_BARRIER", + "LEGACY_BEACON", + "LEGACY_BED", + "LEGACY_BED_BLOCK", + "LEGACY_BEDROCK", + "LEGACY_BEETROOT", + "LEGACY_BEETROOT_BLOCK", + "LEGACY_BEETROOT_SEEDS", + "LEGACY_BEETROOT_SOUP", + "LEGACY_BIRCH_DOOR", + "LEGACY_BIRCH_DOOR_ITEM", + "LEGACY_BIRCH_FENCE", + "LEGACY_BIRCH_FENCE_GATE", + "LEGACY_BIRCH_WOOD_STAIRS", + "LEGACY_BLACK_GLAZED_TERRACOTTA", + "LEGACY_BLACK_SHULKER_BOX", + "LEGACY_BLAZE_POWDER", + "LEGACY_BLAZE_ROD", + "LEGACY_BLUE_GLAZED_TERRACOTTA", + "LEGACY_BLUE_SHULKER_BOX", + "LEGACY_BOAT", + "LEGACY_BOAT_ACACIA", + "LEGACY_BOAT_BIRCH", + "LEGACY_BOAT_DARK_OAK", + "LEGACY_BOAT_JUNGLE", + "LEGACY_BOAT_SPRUCE", + "LEGACY_BONE", + "LEGACY_BONE_BLOCK", + "LEGACY_BOOK", + "LEGACY_BOOK_AND_QUILL", + "LEGACY_BOOKSHELF", + "LEGACY_BOW", + "LEGACY_BOWL", + "LEGACY_BREAD", + "LEGACY_BREWING_STAND", + "LEGACY_BREWING_STAND_ITEM", + "LEGACY_BRICK", + "LEGACY_BRICK_STAIRS", + "LEGACY_BROWN_GLAZED_TERRACOTTA", + "LEGACY_BROWN_MUSHROOM", + "LEGACY_BROWN_SHULKER_BOX", + "LEGACY_BUCKET", + "LEGACY_BURNING_FURNACE", + "LEGACY_CACTUS", + "LEGACY_CAKE", + "LEGACY_CAKE_BLOCK", + "LEGACY_CARPET", + "LEGACY_CARROT", + "LEGACY_CARROT_ITEM", + "LEGACY_CARROT_STICK", + "LEGACY_CAULDRON", + "LEGACY_CAULDRON_ITEM", + "LEGACY_CHAINMAIL_BOOTS", + "LEGACY_CHAINMAIL_CHESTPLATE", + "LEGACY_CHAINMAIL_HELMET", + "LEGACY_CHAINMAIL_LEGGINGS", + "LEGACY_CHEST", + "LEGACY_CHORUS_FLOWER", + "LEGACY_CHORUS_FRUIT", + "LEGACY_CHORUS_FRUIT_POPPED", + "LEGACY_CHORUS_PLANT", + "LEGACY_CLAY", + "LEGACY_CLAY_BALL", + "LEGACY_CLAY_BRICK", + "LEGACY_COAL", + "LEGACY_COAL_BLOCK", + "LEGACY_COAL_ORE", + "LEGACY_COBBLE_WALL", + "LEGACY_COBBLESTONE", + "LEGACY_COBBLESTONE_STAIRS", + "LEGACY_COCOA", + "LEGACY_COMMAND", + "LEGACY_COMMAND_CHAIN", + "LEGACY_COMMAND_MINECART", + "LEGACY_COMMAND_REPEATING", + "LEGACY_COMPASS", + "LEGACY_CONCRETE", + "LEGACY_CONCRETE_POWDER", + "LEGACY_COOKED_BEEF", + "LEGACY_COOKED_CHICKEN", + "LEGACY_COOKED_FISH", + "LEGACY_COOKED_MUTTON", + "LEGACY_COOKED_RABBIT", + "LEGACY_COOKIE", + "LEGACY_CROPS", + "LEGACY_CYAN_GLAZED_TERRACOTTA", + "LEGACY_CYAN_SHULKER_BOX", + "LEGACY_DARK_OAK_DOOR", + "LEGACY_DARK_OAK_DOOR_ITEM", + "LEGACY_DARK_OAK_FENCE", + "LEGACY_DARK_OAK_FENCE_GATE", + "LEGACY_DARK_OAK_STAIRS", + "LEGACY_DAYLIGHT_DETECTOR", + "LEGACY_DAYLIGHT_DETECTOR_INVERTED", + "LEGACY_DEAD_BUSH", + "LEGACY_DETECTOR_RAIL", + "LEGACY_DIAMOND", + "LEGACY_DIAMOND_AXE", + "LEGACY_DIAMOND_BARDING", + "LEGACY_DIAMOND_BLOCK", + "LEGACY_DIAMOND_BOOTS", + "LEGACY_DIAMOND_CHESTPLATE", + "LEGACY_DIAMOND_HELMET", + "LEGACY_DIAMOND_HOE", + "LEGACY_DIAMOND_LEGGINGS", + "LEGACY_DIAMOND_ORE", + "LEGACY_DIAMOND_PICKAXE", + "LEGACY_DIAMOND_SPADE", + "LEGACY_DIAMOND_SWORD", + "LEGACY_DIODE", + "LEGACY_DIODE_BLOCK_OFF", + "LEGACY_DIODE_BLOCK_ON", + "LEGACY_DIRT", + "LEGACY_DISPENSER", + "LEGACY_DOUBLE_PLANT", + "LEGACY_DOUBLE_STEP", + "LEGACY_DOUBLE_STONE_SLAB2", + "LEGACY_DRAGON_EGG", + "LEGACY_DRAGONS_BREATH", + "LEGACY_DROPPER", + "LEGACY_EGG", + "LEGACY_ELYTRA", + "LEGACY_EMERALD", + "LEGACY_EMERALD_BLOCK", + "LEGACY_EMERALD_ORE", + "LEGACY_EMPTY_MAP", + "LEGACY_ENCHANTED_BOOK", + "LEGACY_ENCHANTMENT_TABLE", + "LEGACY_END_BRICKS", + "LEGACY_END_CRYSTAL", + "LEGACY_END_GATEWAY", + "LEGACY_END_ROD", + "LEGACY_ENDER_CHEST", + "LEGACY_ENDER_PEARL", + "LEGACY_ENDER_PORTAL", + "LEGACY_ENDER_PORTAL_FRAME", + "LEGACY_ENDER_STONE", + "LEGACY_EXP_BOTTLE", + "LEGACY_EXPLOSIVE_MINECART", + "LEGACY_EYE_OF_ENDER", + "LEGACY_FEATHER", + "LEGACY_FENCE", + "LEGACY_FENCE_GATE", + "LEGACY_FERMENTED_SPIDER_EYE", + "LEGACY_FIRE", + "LEGACY_FIREBALL", + "LEGACY_FIREWORK", + "LEGACY_FIREWORK_CHARGE", + "LEGACY_FISHING_ROD", + "LEGACY_FLINT", + "LEGACY_FLINT_AND_STEEL", + "LEGACY_FLOWER_POT", + "LEGACY_FLOWER_POT_ITEM", + "LEGACY_FROSTED_ICE", + "LEGACY_FURNACE", + "LEGACY_GHAST_TEAR", + "LEGACY_GLASS", + "LEGACY_GLASS_BOTTLE", + "LEGACY_GLOWING_REDSTONE_ORE", + "LEGACY_GLOWSTONE", + "LEGACY_GLOWSTONE_DUST", + "LEGACY_GOLD_AXE", + "LEGACY_GOLD_BARDING", + "LEGACY_GOLD_BLOCK", + "LEGACY_GOLD_BOOTS", + "LEGACY_GOLD_CHESTPLATE", + "LEGACY_GOLD_HELMET", + "LEGACY_GOLD_HOE", + "LEGACY_GOLD_INGOT", + "LEGACY_GOLD_LEGGINGS", + "LEGACY_GOLD_NUGGET", + "LEGACY_GOLD_ORE", + "LEGACY_GOLD_PICKAXE", + "LEGACY_GOLD_PLATE", + "LEGACY_GOLD_RECORD", + "LEGACY_GOLD_SPADE", + "LEGACY_GOLD_SWORD", + "LEGACY_GOLDEN_APPLE", + "LEGACY_GOLDEN_CARROT", + "LEGACY_GRASS", + "LEGACY_GRASS_PATH", + "LEGACY_GRAVEL", + "LEGACY_GRAY_GLAZED_TERRACOTTA", + "LEGACY_GRAY_SHULKER_BOX", + "LEGACY_GREEN_GLAZED_TERRACOTTA", + "LEGACY_GREEN_RECORD", + "LEGACY_GREEN_SHULKER_BOX", + "LEGACY_GRILLED_PORK", + "LEGACY_HARD_CLAY", + "LEGACY_HAY_BLOCK", + "LEGACY_HOPPER", + "LEGACY_HOPPER_MINECART", + "LEGACY_HUGE_MUSHROOM_1", + "LEGACY_HUGE_MUSHROOM_2", + "LEGACY_ICE", + "LEGACY_INK_SACK", + "LEGACY_IRON_AXE", + "LEGACY_IRON_BARDING", + "LEGACY_IRON_BLOCK", + "LEGACY_IRON_BOOTS", + "LEGACY_IRON_CHESTPLATE", + "LEGACY_IRON_DOOR", + "LEGACY_IRON_DOOR_BLOCK", + "LEGACY_IRON_FENCE", + "LEGACY_IRON_HELMET", + "LEGACY_IRON_HOE", + "LEGACY_IRON_INGOT", + "LEGACY_IRON_LEGGINGS", + "LEGACY_IRON_NUGGET", + "LEGACY_IRON_ORE", + "LEGACY_IRON_PICKAXE", + "LEGACY_IRON_PLATE", + "LEGACY_IRON_SPADE", + "LEGACY_IRON_SWORD", + "LEGACY_IRON_TRAPDOOR", + "LEGACY_ITEM_FRAME", + "LEGACY_JACK_O_LANTERN", + "LEGACY_JUKEBOX", + "LEGACY_JUNGLE_DOOR", + "LEGACY_JUNGLE_DOOR_ITEM", + "LEGACY_JUNGLE_FENCE", + "LEGACY_JUNGLE_FENCE_GATE", + "LEGACY_JUNGLE_WOOD_STAIRS", + "LEGACY_KNOWLEDGE_BOOK", + "LEGACY_LADDER", + "LEGACY_LAPIS_BLOCK", + "LEGACY_LAPIS_ORE", + "LEGACY_LAVA", + "LEGACY_LAVA_BUCKET", + "LEGACY_LEASH", + "LEGACY_LEATHER", + "LEGACY_LEATHER_BOOTS", + "LEGACY_LEATHER_CHESTPLATE", + "LEGACY_LEATHER_HELMET", + "LEGACY_LEATHER_LEGGINGS", + "LEGACY_LEAVES", + "LEGACY_LEAVES_2", + "LEGACY_LEVER", + "LEGACY_LIGHT_BLUE_GLAZED_TERRACOTTA", + "LEGACY_LIGHT_BLUE_SHULKER_BOX", + "LEGACY_LIME_GLAZED_TERRACOTTA", + "LEGACY_LIME_SHULKER_BOX", + "LEGACY_LINGERING_POTION", + "LEGACY_LOG", + "LEGACY_LOG_2", + "LEGACY_LONG_GRASS", + "LEGACY_MAGENTA_GLAZED_TERRACOTTA", + "LEGACY_MAGENTA_SHULKER_BOX", + "LEGACY_MAGMA", + "LEGACY_MAGMA_CREAM", + "LEGACY_MAP", + "LEGACY_MELON", + "LEGACY_MELON_BLOCK", + "LEGACY_MELON_SEEDS", + "LEGACY_MELON_STEM", + "LEGACY_MILK_BUCKET", + "LEGACY_MINECART", + "LEGACY_MOB_SPAWNER", + "LEGACY_MONSTER_EGG", + "LEGACY_MONSTER_EGGS", + "LEGACY_MOSSY_COBBLESTONE", + "LEGACY_MUSHROOM_SOUP", + "LEGACY_MUTTON", + "LEGACY_MYCEL", + "LEGACY_NAME_TAG", + "LEGACY_NETHER_BRICK", + "LEGACY_NETHER_BRICK_ITEM", + "LEGACY_NETHER_BRICK_STAIRS", + "LEGACY_NETHER_FENCE", + "LEGACY_NETHER_STALK", + "LEGACY_NETHER_STAR", + "LEGACY_NETHER_WART_BLOCK", + "LEGACY_NETHER_WARTS", + "LEGACY_NETHERRACK", + "LEGACY_NOTE_BLOCK", + "LEGACY_OBSERVER", + "LEGACY_OBSIDIAN", + "LEGACY_ORANGE_GLAZED_TERRACOTTA", + "LEGACY_ORANGE_SHULKER_BOX", + "LEGACY_PACKED_ICE", + "LEGACY_PAINTING", + "LEGACY_PAPER", + "LEGACY_PINK_GLAZED_TERRACOTTA", + "LEGACY_PINK_SHULKER_BOX", + "LEGACY_PISTON_BASE", + "LEGACY_PISTON_EXTENSION", + "LEGACY_PISTON_MOVING_PIECE", + "LEGACY_PISTON_STICKY_BASE", + "LEGACY_POISONOUS_POTATO", + "LEGACY_PORK", + "LEGACY_PORTAL", + "LEGACY_POTATO", + "LEGACY_POTATO_ITEM", + "LEGACY_POTION", + "LEGACY_POWERED_MINECART", + "LEGACY_POWERED_RAIL", + "LEGACY_PRISMARINE", + "LEGACY_PRISMARINE_CRYSTALS", + "LEGACY_PRISMARINE_SHARD", + "LEGACY_PUMPKIN", + "LEGACY_PUMPKIN_PIE", + "LEGACY_PUMPKIN_SEEDS", + "LEGACY_PUMPKIN_STEM", + "LEGACY_PURPLE_GLAZED_TERRACOTTA", + "LEGACY_PURPLE_SHULKER_BOX", + "LEGACY_PURPUR_BLOCK", + "LEGACY_PURPUR_DOUBLE_SLAB", + "LEGACY_PURPUR_PILLAR", + "LEGACY_PURPUR_SLAB", + "LEGACY_PURPUR_STAIRS", + "LEGACY_QUARTZ", + "LEGACY_QUARTZ_BLOCK", + "LEGACY_QUARTZ_ORE", + "LEGACY_QUARTZ_STAIRS", + "LEGACY_RABBIT", + "LEGACY_RABBIT_FOOT", + "LEGACY_RABBIT_HIDE", + "LEGACY_RABBIT_STEW", + "LEGACY_RAILS", + "LEGACY_RAW_BEEF", + "LEGACY_RAW_CHICKEN", + "LEGACY_RAW_FISH", + "LEGACY_RECORD_10", + "LEGACY_RECORD_11", + "LEGACY_RECORD_12", + "LEGACY_RECORD_3", + "LEGACY_RECORD_4", + "LEGACY_RECORD_5", + "LEGACY_RECORD_6", + "LEGACY_RECORD_7", + "LEGACY_RECORD_8", + "LEGACY_RECORD_9", + "LEGACY_RED_GLAZED_TERRACOTTA", + "LEGACY_RED_MUSHROOM", + "LEGACY_RED_NETHER_BRICK", + "LEGACY_RED_ROSE", + "LEGACY_RED_SANDSTONE", + "LEGACY_RED_SANDSTONE_STAIRS", + "LEGACY_RED_SHULKER_BOX", + "LEGACY_REDSTONE", + "LEGACY_REDSTONE_BLOCK", + "LEGACY_REDSTONE_COMPARATOR", + "LEGACY_REDSTONE_COMPARATOR_OFF", + "LEGACY_REDSTONE_COMPARATOR_ON", + "LEGACY_REDSTONE_LAMP_OFF", + "LEGACY_REDSTONE_LAMP_ON", + "LEGACY_REDSTONE_ORE", + "LEGACY_REDSTONE_TORCH_OFF", + "LEGACY_REDSTONE_TORCH_ON", + "LEGACY_REDSTONE_WIRE", + "LEGACY_ROTTEN_FLESH", + "LEGACY_SADDLE", + "LEGACY_SAND", + "LEGACY_SANDSTONE", + "LEGACY_SANDSTONE_STAIRS", + "LEGACY_SAPLING", + "LEGACY_SEA_LANTERN", + "LEGACY_SEEDS", + "LEGACY_SHEARS", + "LEGACY_SHIELD", + "LEGACY_SHULKER_SHELL", + "LEGACY_SIGN", + "LEGACY_SIGN_POST", + "LEGACY_SILVER_GLAZED_TERRACOTTA", + "LEGACY_SILVER_SHULKER_BOX", + "LEGACY_SKULL", + "LEGACY_SKULL_ITEM", + "LEGACY_SLIME_BALL", + "LEGACY_SLIME_BLOCK", + "LEGACY_SMOOTH_BRICK", + "LEGACY_SMOOTH_STAIRS", + "LEGACY_SNOW", + "LEGACY_SNOW_BALL", + "LEGACY_SNOW_BLOCK", + "LEGACY_SOIL", + "LEGACY_SOUL_SAND", + "LEGACY_SPECKLED_MELON", + "LEGACY_SPECTRAL_ARROW", + "LEGACY_SPIDER_EYE", + "LEGACY_SPLASH_POTION", + "LEGACY_SPONGE", + "LEGACY_SPRUCE_DOOR", + "LEGACY_SPRUCE_DOOR_ITEM", + "LEGACY_SPRUCE_FENCE", + "LEGACY_SPRUCE_FENCE_GATE", + "LEGACY_SPRUCE_WOOD_STAIRS", + "LEGACY_STAINED_CLAY", + "LEGACY_STAINED_GLASS", + "LEGACY_STAINED_GLASS_PANE", + "LEGACY_STANDING_BANNER", + "LEGACY_STATIONARY_LAVA", + "LEGACY_STATIONARY_WATER", + "LEGACY_STEP", + "LEGACY_STICK", + "LEGACY_STONE", + "LEGACY_STONE_AXE", + "LEGACY_STONE_BUTTON", + "LEGACY_STONE_HOE", + "LEGACY_STONE_PICKAXE", + "LEGACY_STONE_PLATE", + "LEGACY_STONE_SLAB2", + "LEGACY_STONE_SPADE", + "LEGACY_STONE_SWORD", + "LEGACY_STORAGE_MINECART", + "LEGACY_STRING", + "LEGACY_STRUCTURE_BLOCK", + "LEGACY_STRUCTURE_VOID", + "LEGACY_SUGAR", + "LEGACY_SUGAR_CANE", + "LEGACY_SUGAR_CANE_BLOCK", + "LEGACY_SULPHUR", + "LEGACY_THIN_GLASS", + "LEGACY_TIPPED_ARROW", + "LEGACY_TNT", + "LEGACY_TORCH", + "LEGACY_TOTEM", + "LEGACY_TRAP_DOOR", + "LEGACY_TRAPPED_CHEST", + "LEGACY_TRIPWIRE", + "LEGACY_TRIPWIRE_HOOK", + "LEGACY_VINE", + "LEGACY_WALL_BANNER", + "LEGACY_WALL_SIGN", + "LEGACY_WATCH", + "LEGACY_WATER", + "LEGACY_WATER_BUCKET", + "LEGACY_WATER_LILY", + "LEGACY_WEB", + "LEGACY_WHEAT", + "LEGACY_WHITE_GLAZED_TERRACOTTA", + "LEGACY_WHITE_SHULKER_BOX", + "LEGACY_WOOD", + "LEGACY_WOOD_AXE", + "LEGACY_WOOD_BUTTON", + "LEGACY_WOOD_DOOR", + "LEGACY_WOOD_DOUBLE_STEP", + "LEGACY_WOOD_HOE", + "LEGACY_WOOD_PICKAXE", + "LEGACY_WOOD_PLATE", + "LEGACY_WOOD_SPADE", + "LEGACY_WOOD_STAIRS", + "LEGACY_WOOD_STEP", + "LEGACY_WOOD_SWORD", + "LEGACY_WOODEN_DOOR", + "LEGACY_WOOL", + "LEGACY_WORKBENCH", + "LEGACY_WRITTEN_BOOK", + "LEGACY_YELLOW_FLOWER", + "LEGACY_YELLOW_GLAZED_TERRACOTTA", + "LEGACY_YELLOW_SHULKER_BOX", + "LEVER", + "LIGHT", + "LIGHT_BLUE_BANNER", + "LIGHT_BLUE_BED", + "LIGHT_BLUE_CANDLE", + "LIGHT_BLUE_CANDLE_CAKE", + "LIGHT_BLUE_CARPET", + "LIGHT_BLUE_CONCRETE", + "LIGHT_BLUE_CONCRETE_POWDER", + "LIGHT_BLUE_DYE", + "LIGHT_BLUE_GLAZED_TERRACOTTA", + "LIGHT_BLUE_SHULKER_BOX", + "LIGHT_BLUE_STAINED_GLASS", + "LIGHT_BLUE_STAINED_GLASS_PANE", + "LIGHT_BLUE_TERRACOTTA", + "LIGHT_BLUE_WALL_BANNER", + "LIGHT_BLUE_WOOL", + "LIGHT_GRAY_BANNER", + "LIGHT_GRAY_BED", + "LIGHT_GRAY_CANDLE", + "LIGHT_GRAY_CANDLE_CAKE", + "LIGHT_GRAY_CARPET", + "LIGHT_GRAY_CONCRETE", + "LIGHT_GRAY_CONCRETE_POWDER", + "LIGHT_GRAY_DYE", + "LIGHT_GRAY_GLAZED_TERRACOTTA", + "LIGHT_GRAY_SHULKER_BOX", + "LIGHT_GRAY_STAINED_GLASS", + "LIGHT_GRAY_STAINED_GLASS_PANE", + "LIGHT_GRAY_TERRACOTTA", + "LIGHT_GRAY_WALL_BANNER", + "LIGHT_GRAY_WOOL", + "LIGHT_WEIGHTED_PRESSURE_PLATE", + "LIGHTNING_ROD", + "LILAC", + "LILY_OF_THE_VALLEY", + "LILY_PAD", + "LIME_BANNER", + "LIME_BED", + "LIME_CANDLE", + "LIME_CANDLE_CAKE", + "LIME_CARPET", + "LIME_CONCRETE", + "LIME_CONCRETE_POWDER", + "LIME_DYE", + "LIME_GLAZED_TERRACOTTA", + "LIME_SHULKER_BOX", + "LIME_STAINED_GLASS", + "LIME_STAINED_GLASS_PANE", + "LIME_TERRACOTTA", + "LIME_WALL_BANNER", + "LIME_WOOL", + "LINGERING_POTION", + "LLAMA_SPAWN_EGG", + "LODESTONE", + "LOOM", + "MAGENTA_BANNER", + "MAGENTA_BED", + "MAGENTA_CANDLE", + "MAGENTA_CANDLE_CAKE", + "MAGENTA_CARPET", + "MAGENTA_CONCRETE", + "MAGENTA_CONCRETE_POWDER", + "MAGENTA_DYE", + "MAGENTA_GLAZED_TERRACOTTA", + "MAGENTA_SHULKER_BOX", + "MAGENTA_STAINED_GLASS", + "MAGENTA_STAINED_GLASS_PANE", + "MAGENTA_TERRACOTTA", + "MAGENTA_WALL_BANNER", + "MAGENTA_WOOL", + "MAGMA_BLOCK", + "MAGMA_CREAM", + "MAGMA_CUBE_SPAWN_EGG", + "MANGROVE_BOAT", + "MANGROVE_BUTTON", + "MANGROVE_CHEST_BOAT", + "MANGROVE_DOOR", + "MANGROVE_FENCE", + "MANGROVE_FENCE_GATE", + "MANGROVE_HANGING_SIGN", + "MANGROVE_LEAVES", + "MANGROVE_LOG", + "MANGROVE_PLANKS", + "MANGROVE_PRESSURE_PLATE", + "MANGROVE_PROPAGULE", + "MANGROVE_ROOTS", + "MANGROVE_SIGN", + "MANGROVE_SLAB", + "MANGROVE_STAIRS", + "MANGROVE_TRAPDOOR", + "MANGROVE_WALL_HANGING_SIGN", + "MANGROVE_WALL_SIGN", + "MANGROVE_WOOD", + "MAP", + "MEDIUM_AMETHYST_BUD", + "MELON", + "MELON_SEEDS", + "MELON_SLICE", + "MELON_STEM", + "MILK_BUCKET", + "MINECART", + "MINER_POTTERY_SHERD", + "MOJANG_BANNER_PATTERN", + "MOOSHROOM_SPAWN_EGG", + "MOSS_BLOCK", + "MOSS_CARPET", + "MOSSY_COBBLESTONE", + "MOSSY_COBBLESTONE_SLAB", + "MOSSY_COBBLESTONE_STAIRS", + "MOSSY_COBBLESTONE_WALL", + "MOSSY_STONE_BRICK_SLAB", + "MOSSY_STONE_BRICK_STAIRS", + "MOSSY_STONE_BRICK_WALL", + "MOSSY_STONE_BRICKS", + "MOURNER_POTTERY_SHERD", + "MOVING_PISTON", + "MUD", + "MUD_BRICK_SLAB", + "MUD_BRICK_STAIRS", + "MUD_BRICK_WALL", + "MUD_BRICKS", + "MUDDY_MANGROVE_ROOTS", + "MULE_SPAWN_EGG", + "MUSHROOM_STEM", + "MUSHROOM_STEW", + "MUSIC_DISC_11", + "MUSIC_DISC_13", + "MUSIC_DISC_5", + "MUSIC_DISC_BLOCKS", + "MUSIC_DISC_CAT", + "MUSIC_DISC_CHIRP", + "MUSIC_DISC_FAR", + "MUSIC_DISC_MALL", + "MUSIC_DISC_MELLOHI", + "MUSIC_DISC_OTHERSIDE", + "MUSIC_DISC_PIGSTEP", + "MUSIC_DISC_RELIC", + "MUSIC_DISC_STAL", + "MUSIC_DISC_STRAD", + "MUSIC_DISC_WAIT", + "MUSIC_DISC_WARD", + "MUTTON", + "MYCELIUM", + "NAME_TAG", + "NAUTILUS_SHELL", + "NETHER_BRICK", + "NETHER_BRICK_FENCE", + "NETHER_BRICK_SLAB", + "NETHER_BRICK_STAIRS", + "NETHER_BRICK_WALL", + "NETHER_BRICKS", + "NETHER_GOLD_ORE", + "NETHER_PORTAL", + "NETHER_QUARTZ_ORE", + "NETHER_SPROUTS", + "NETHER_STAR", + "NETHER_WART", + "NETHER_WART_BLOCK", + "NETHERITE_AXE", + "NETHERITE_BLOCK", + "NETHERITE_BOOTS", + "NETHERITE_CHESTPLATE", + "NETHERITE_HELMET", + "NETHERITE_HOE", + "NETHERITE_INGOT", + "NETHERITE_LEGGINGS", + "NETHERITE_PICKAXE", + "NETHERITE_SCRAP", + "NETHERITE_SHOVEL", + "NETHERITE_SWORD", + "NETHERITE_UPGRADE_SMITHING_TEMPLATE", + "NETHERRACK", + "NOTE_BLOCK", + "OAK_BOAT", + "OAK_BUTTON", + "OAK_CHEST_BOAT", + "OAK_DOOR", + "OAK_FENCE", + "OAK_FENCE_GATE", + "OAK_HANGING_SIGN", + "OAK_LEAVES", + "OAK_LOG", + "OAK_PLANKS", + "OAK_PRESSURE_PLATE", + "OAK_SAPLING", + "OAK_SIGN", + "OAK_SLAB", + "OAK_STAIRS", + "OAK_TRAPDOOR", + "OAK_WALL_HANGING_SIGN", + "OAK_WALL_SIGN", + "OAK_WOOD", + "OBSERVER", + "OBSIDIAN", + "OCELOT_SPAWN_EGG", + "OCHRE_FROGLIGHT", + "ORANGE_BANNER", + "ORANGE_BED", + "ORANGE_CANDLE", + "ORANGE_CANDLE_CAKE", + "ORANGE_CARPET", + "ORANGE_CONCRETE", + "ORANGE_CONCRETE_POWDER", + "ORANGE_DYE", + "ORANGE_GLAZED_TERRACOTTA", + "ORANGE_SHULKER_BOX", + "ORANGE_STAINED_GLASS", + "ORANGE_STAINED_GLASS_PANE", + "ORANGE_TERRACOTTA", + "ORANGE_TULIP", + "ORANGE_WALL_BANNER", + "ORANGE_WOOL", + "OXEYE_DAISY", + "OXIDIZED_CHISELED_COPPER", + "OXIDIZED_COPPER", + "OXIDIZED_COPPER_BULB", + "OXIDIZED_COPPER_DOOR", + "OXIDIZED_COPPER_GRATE", + "OXIDIZED_COPPER_TRAPDOOR", + "OXIDIZED_CUT_COPPER", + "OXIDIZED_CUT_COPPER_SLAB", + "OXIDIZED_CUT_COPPER_STAIRS", + "PACKED_ICE", + "PACKED_MUD", + "PAINTING", + "PANDA_SPAWN_EGG", + "PAPER", + "PARROT_SPAWN_EGG", + "PEARLESCENT_FROGLIGHT", + "PEONY", + "PETRIFIED_OAK_SLAB", + "PHANTOM_MEMBRANE", + "PHANTOM_SPAWN_EGG", + "PIG_SPAWN_EGG", + "PIGLIN_BANNER_PATTERN", + "PIGLIN_BRUTE_SPAWN_EGG", + "PIGLIN_HEAD", + "PIGLIN_SPAWN_EGG", + "PIGLIN_WALL_HEAD", + "PILLAGER_SPAWN_EGG", + "PINK_BANNER", + "PINK_BED", + "PINK_CANDLE", + "PINK_CANDLE_CAKE", + "PINK_CARPET", + "PINK_CONCRETE", + "PINK_CONCRETE_POWDER", + "PINK_DYE", + "PINK_GLAZED_TERRACOTTA", + "PINK_PETALS", + "PINK_SHULKER_BOX", + "PINK_STAINED_GLASS", + "PINK_STAINED_GLASS_PANE", + "PINK_TERRACOTTA", + "PINK_TULIP", + "PINK_WALL_BANNER", + "PINK_WOOL", + "PISTON", + "PISTON_HEAD", + "PITCHER_CROP", + "PITCHER_PLANT", + "PITCHER_POD", + "PLAYER_HEAD", + "PLAYER_WALL_HEAD", + "PLENTY_POTTERY_SHERD", + "PODZOL", + "POINTED_DRIPSTONE", + "POISONOUS_POTATO", + "POLAR_BEAR_SPAWN_EGG", + "POLISHED_ANDESITE", + "POLISHED_ANDESITE_SLAB", + "POLISHED_ANDESITE_STAIRS", + "POLISHED_BASALT", + "POLISHED_BLACKSTONE", + "POLISHED_BLACKSTONE_BRICK_SLAB", + "POLISHED_BLACKSTONE_BRICK_STAIRS", + "POLISHED_BLACKSTONE_BRICK_WALL", + "POLISHED_BLACKSTONE_BRICKS", + "POLISHED_BLACKSTONE_BUTTON", + "POLISHED_BLACKSTONE_PRESSURE_PLATE", + "POLISHED_BLACKSTONE_SLAB", + "POLISHED_BLACKSTONE_STAIRS", + "POLISHED_BLACKSTONE_WALL", + "POLISHED_DEEPSLATE", + "POLISHED_DEEPSLATE_SLAB", + "POLISHED_DEEPSLATE_STAIRS", + "POLISHED_DEEPSLATE_WALL", + "POLISHED_DIORITE", + "POLISHED_DIORITE_SLAB", + "POLISHED_DIORITE_STAIRS", + "POLISHED_GRANITE", + "POLISHED_GRANITE_SLAB", + "POLISHED_GRANITE_STAIRS", + "POLISHED_TUFF", + "POLISHED_TUFF_SLAB", + "POLISHED_TUFF_STAIRS", + "POLISHED_TUFF_WALL", + "POPPED_CHORUS_FRUIT", + "POPPY", + "PORKCHOP", + "POTATO", + "POTATOES", + "POTION", + "POTTED_ACACIA_SAPLING", + "POTTED_ALLIUM", + "POTTED_AZALEA_BUSH", + "POTTED_AZURE_BLUET", + "POTTED_BAMBOO", + "POTTED_BIRCH_SAPLING", + "POTTED_BLUE_ORCHID", + "POTTED_BROWN_MUSHROOM", + "POTTED_CACTUS", + "POTTED_CHERRY_SAPLING", + "POTTED_CORNFLOWER", + "POTTED_CRIMSON_FUNGUS", + "POTTED_CRIMSON_ROOTS", + "POTTED_DANDELION", + "POTTED_DARK_OAK_SAPLING", + "POTTED_DEAD_BUSH", + "POTTED_FERN", + "POTTED_FLOWERING_AZALEA_BUSH", + "POTTED_JUNGLE_SAPLING", + "POTTED_LILY_OF_THE_VALLEY", + "POTTED_MANGROVE_PROPAGULE", + "POTTED_OAK_SAPLING", + "POTTED_ORANGE_TULIP", + "POTTED_OXEYE_DAISY", + "POTTED_PINK_TULIP", + "POTTED_POPPY", + "POTTED_RED_MUSHROOM", + "POTTED_RED_TULIP", + "POTTED_SPRUCE_SAPLING", + "POTTED_TORCHFLOWER", + "POTTED_WARPED_FUNGUS", + "POTTED_WARPED_ROOTS", + "POTTED_WHITE_TULIP", + "POTTED_WITHER_ROSE", + "POWDER_SNOW", + "POWDER_SNOW_BUCKET", + "POWDER_SNOW_CAULDRON", + "POWERED_RAIL", + "PRISMARINE", + "PRISMARINE_BRICK_SLAB", + "PRISMARINE_BRICK_STAIRS", + "PRISMARINE_BRICKS", + "PRISMARINE_CRYSTALS", + "PRISMARINE_SHARD", + "PRISMARINE_SLAB", + "PRISMARINE_STAIRS", + "PRISMARINE_WALL", + "PRIZE_POTTERY_SHERD", + "PUFFERFISH", + "PUFFERFISH_BUCKET", + "PUFFERFISH_SPAWN_EGG", + "PUMPKIN", + "PUMPKIN_PIE", + "PUMPKIN_SEEDS", + "PUMPKIN_STEM", + "PURPLE_BANNER", + "PURPLE_BED", + "PURPLE_CANDLE", + "PURPLE_CANDLE_CAKE", + "PURPLE_CARPET", + "PURPLE_CONCRETE", + "PURPLE_CONCRETE_POWDER", + "PURPLE_DYE", + "PURPLE_GLAZED_TERRACOTTA", + "PURPLE_SHULKER_BOX", + "PURPLE_STAINED_GLASS", + "PURPLE_STAINED_GLASS_PANE", + "PURPLE_TERRACOTTA", + "PURPLE_WALL_BANNER", + "PURPLE_WOOL", + "PURPUR_BLOCK", + "PURPUR_PILLAR", + "PURPUR_SLAB", + "PURPUR_STAIRS", + "QUARTZ", + "QUARTZ_BLOCK", + "QUARTZ_BRICKS", + "QUARTZ_PILLAR", + "QUARTZ_SLAB", + "QUARTZ_STAIRS", + "RABBIT", + "RABBIT_FOOT", + "RABBIT_HIDE", + "RABBIT_SPAWN_EGG", + "RABBIT_STEW", + "RAIL", + "RAISER_ARMOR_TRIM_SMITHING_TEMPLATE", + "RAVAGER_SPAWN_EGG", + "RAW_COPPER", + "RAW_COPPER_BLOCK", + "RAW_GOLD", + "RAW_GOLD_BLOCK", + "RAW_IRON", + "RAW_IRON_BLOCK", + "RECOVERY_COMPASS", + "RED_BANNER", + "RED_BED", + "RED_CANDLE", + "RED_CANDLE_CAKE", + "RED_CARPET", + "RED_CONCRETE", + "RED_CONCRETE_POWDER", + "RED_DYE", + "RED_GLAZED_TERRACOTTA", + "RED_MUSHROOM", + "RED_MUSHROOM_BLOCK", + "RED_NETHER_BRICK_SLAB", + "RED_NETHER_BRICK_STAIRS", + "RED_NETHER_BRICK_WALL", + "RED_NETHER_BRICKS", + "RED_SAND", + "RED_SANDSTONE", + "RED_SANDSTONE_SLAB", + "RED_SANDSTONE_STAIRS", + "RED_SANDSTONE_WALL", + "RED_SHULKER_BOX", + "RED_STAINED_GLASS", + "RED_STAINED_GLASS_PANE", + "RED_TERRACOTTA", + "RED_TULIP", + "RED_WALL_BANNER", + "RED_WOOL", + "REDSTONE", + "REDSTONE_BLOCK", + "REDSTONE_LAMP", + "REDSTONE_ORE", + "REDSTONE_TORCH", + "REDSTONE_WALL_TORCH", + "REDSTONE_WIRE", + "REINFORCED_DEEPSLATE", + "REPEATER", + "REPEATING_COMMAND_BLOCK", + "RESPAWN_ANCHOR", + "RIB_ARMOR_TRIM_SMITHING_TEMPLATE", + "ROOTED_DIRT", + "ROSE_BUSH", + "ROTTEN_FLESH", + "SADDLE", + "SALMON", + "SALMON_BUCKET", + "SALMON_SPAWN_EGG", + "SAND", + "SANDSTONE", + "SANDSTONE_SLAB", + "SANDSTONE_STAIRS", + "SANDSTONE_WALL", + "SCAFFOLDING", + "SCULK", + "SCULK_CATALYST", + "SCULK_SENSOR", + "SCULK_SHRIEKER", + "SCULK_VEIN", + "SCUTE", + "SEA_LANTERN", + "SEA_PICKLE", + "SEAGRASS", + "SENTRY_ARMOR_TRIM_SMITHING_TEMPLATE", + "SHAPER_ARMOR_TRIM_SMITHING_TEMPLATE", + "SHEAF_POTTERY_SHERD", + "SHEARS", + "SHEEP_SPAWN_EGG", + "SHELTER_POTTERY_SHERD", + "SHIELD", + "SHORT_GRASS", + "SHROOMLIGHT", + "SHULKER_BOX", + "SHULKER_SHELL", + "SHULKER_SPAWN_EGG", + "SILENCE_ARMOR_TRIM_SMITHING_TEMPLATE", + "SILVERFISH_SPAWN_EGG", + "SKELETON_HORSE_SPAWN_EGG", + "SKELETON_SKULL", + "SKELETON_SPAWN_EGG", + "SKELETON_WALL_SKULL", + "SKULL_BANNER_PATTERN", + "SKULL_POTTERY_SHERD", + "SLIME_BALL", + "SLIME_BLOCK", + "SLIME_SPAWN_EGG", + "SMALL_AMETHYST_BUD", + "SMALL_DRIPLEAF", + "SMITHING_TABLE", + "SMOKER", + "SMOOTH_BASALT", + "SMOOTH_QUARTZ", + "SMOOTH_QUARTZ_SLAB", + "SMOOTH_QUARTZ_STAIRS", + "SMOOTH_RED_SANDSTONE", + "SMOOTH_RED_SANDSTONE_SLAB", + "SMOOTH_RED_SANDSTONE_STAIRS", + "SMOOTH_SANDSTONE", + "SMOOTH_SANDSTONE_SLAB", + "SMOOTH_SANDSTONE_STAIRS", + "SMOOTH_STONE", + "SMOOTH_STONE_SLAB", + "SNIFFER_EGG", + "SNIFFER_SPAWN_EGG", + "SNORT_POTTERY_SHERD", + "SNOUT_ARMOR_TRIM_SMITHING_TEMPLATE", + "SNOW", + "SNOW_BLOCK", + "SNOW_GOLEM_SPAWN_EGG", + "SNOWBALL", + "SOUL_CAMPFIRE", + "SOUL_FIRE", + "SOUL_LANTERN", + "SOUL_SAND", + "SOUL_SOIL", + "SOUL_TORCH", + "SOUL_WALL_TORCH", + "SPAWNER", + "SPECTRAL_ARROW", + "SPIDER_EYE", + "SPIDER_SPAWN_EGG", + "SPIRE_ARMOR_TRIM_SMITHING_TEMPLATE", + "SPLASH_POTION", + "SPONGE", + "SPORE_BLOSSOM", + "SPRUCE_BOAT", + "SPRUCE_BUTTON", + "SPRUCE_CHEST_BOAT", + "SPRUCE_DOOR", + "SPRUCE_FENCE", + "SPRUCE_FENCE_GATE", + "SPRUCE_HANGING_SIGN", + "SPRUCE_LEAVES", + "SPRUCE_LOG", + "SPRUCE_PLANKS", + "SPRUCE_PRESSURE_PLATE", + "SPRUCE_SAPLING", + "SPRUCE_SIGN", + "SPRUCE_SLAB", + "SPRUCE_STAIRS", + "SPRUCE_TRAPDOOR", + "SPRUCE_WALL_HANGING_SIGN", + "SPRUCE_WALL_SIGN", + "SPRUCE_WOOD", + "SPYGLASS", + "SQUID_SPAWN_EGG", + "STICK", + "STICKY_PISTON", + "STONE", + "STONE_AXE", + "STONE_BRICK_SLAB", + "STONE_BRICK_STAIRS", + "STONE_BRICK_WALL", + "STONE_BRICKS", + "STONE_BUTTON", + "STONE_HOE", + "STONE_PICKAXE", + "STONE_PRESSURE_PLATE", + "STONE_SHOVEL", + "STONE_SLAB", + "STONE_STAIRS", + "STONE_SWORD", + "STONECUTTER", + "STRAY_SPAWN_EGG", + "STRIDER_SPAWN_EGG", + "STRING", + "STRIPPED_ACACIA_LOG", + "STRIPPED_ACACIA_WOOD", + "STRIPPED_BAMBOO_BLOCK", + "STRIPPED_BIRCH_LOG", + "STRIPPED_BIRCH_WOOD", + "STRIPPED_CHERRY_LOG", + "STRIPPED_CHERRY_WOOD", + "STRIPPED_CRIMSON_HYPHAE", + "STRIPPED_CRIMSON_STEM", + "STRIPPED_DARK_OAK_LOG", + "STRIPPED_DARK_OAK_WOOD", + "STRIPPED_JUNGLE_LOG", + "STRIPPED_JUNGLE_WOOD", + "STRIPPED_MANGROVE_LOG", + "STRIPPED_MANGROVE_WOOD", + "STRIPPED_OAK_LOG", + "STRIPPED_OAK_WOOD", + "STRIPPED_SPRUCE_LOG", + "STRIPPED_SPRUCE_WOOD", + "STRIPPED_WARPED_HYPHAE", + "STRIPPED_WARPED_STEM", + "STRUCTURE_BLOCK", + "STRUCTURE_VOID", + "SUGAR", + "SUGAR_CANE", + "SUNFLOWER", + "SUSPICIOUS_GRAVEL", + "SUSPICIOUS_SAND", + "SUSPICIOUS_STEW", + "SWEET_BERRIES", + "SWEET_BERRY_BUSH", + "TADPOLE_BUCKET", + "TADPOLE_SPAWN_EGG", + "TALL_GRASS", + "TALL_SEAGRASS", + "TARGET", + "TERRACOTTA", + "TIDE_ARMOR_TRIM_SMITHING_TEMPLATE", + "TINTED_GLASS", + "TIPPED_ARROW", + "TNT", + "TNT_MINECART", + "TORCH", + "TORCHFLOWER", + "TORCHFLOWER_CROP", + "TORCHFLOWER_SEEDS", + "TOTEM_OF_UNDYING", + "TRADER_LLAMA_SPAWN_EGG", + "TRAPPED_CHEST", + "TRIAL_KEY", + "TRIAL_SPAWNER", + "TRIDENT", + "TRIPWIRE", + "TRIPWIRE_HOOK", + "TROPICAL_FISH", + "TROPICAL_FISH_BUCKET", + "TROPICAL_FISH_SPAWN_EGG", + "TUBE_CORAL", + "TUBE_CORAL_BLOCK", + "TUBE_CORAL_FAN", + "TUBE_CORAL_WALL_FAN", + "TUFF", + "TUFF_BRICK_SLAB", + "TUFF_BRICK_STAIRS", + "TUFF_BRICK_WALL", + "TUFF_BRICKS", + "TUFF_SLAB", + "TUFF_STAIRS", + "TUFF_WALL", + "TURTLE_EGG", + "TURTLE_HELMET", + "TURTLE_SPAWN_EGG", + "TWISTING_VINES", + "TWISTING_VINES_PLANT", + "VERDANT_FROGLIGHT", + "VEX_ARMOR_TRIM_SMITHING_TEMPLATE", + "VEX_SPAWN_EGG", + "VILLAGER_SPAWN_EGG", + "VINDICATOR_SPAWN_EGG", + "VINE", + "VOID_AIR", + "WALL_TORCH", + "WANDERING_TRADER_SPAWN_EGG", + "WARD_ARMOR_TRIM_SMITHING_TEMPLATE", + "WARDEN_SPAWN_EGG", + "WARPED_BUTTON", + "WARPED_DOOR", + "WARPED_FENCE", + "WARPED_FENCE_GATE", + "WARPED_FUNGUS", + "WARPED_FUNGUS_ON_A_STICK", + "WARPED_HANGING_SIGN", + "WARPED_HYPHAE", + "WARPED_NYLIUM", + "WARPED_PLANKS", + "WARPED_PRESSURE_PLATE", + "WARPED_ROOTS", + "WARPED_SIGN", + "WARPED_SLAB", + "WARPED_STAIRS", + "WARPED_STEM", + "WARPED_TRAPDOOR", + "WARPED_WALL_HANGING_SIGN", + "WARPED_WALL_SIGN", + "WARPED_WART_BLOCK", + "WATER", + "WATER_BUCKET", + "WATER_CAULDRON", + "WAXED_CHISELED_COPPER", + "WAXED_COPPER_BLOCK", + "WAXED_COPPER_BULB", + "WAXED_COPPER_DOOR", + "WAXED_COPPER_GRATE", + "WAXED_COPPER_TRAPDOOR", + "WAXED_CUT_COPPER", + "WAXED_CUT_COPPER_SLAB", + "WAXED_CUT_COPPER_STAIRS", + "WAXED_EXPOSED_CHISELED_COPPER", + "WAXED_EXPOSED_COPPER", + "WAXED_EXPOSED_COPPER_BULB", + "WAXED_EXPOSED_COPPER_DOOR", + "WAXED_EXPOSED_COPPER_GRATE", + "WAXED_EXPOSED_COPPER_TRAPDOOR", + "WAXED_EXPOSED_CUT_COPPER", + "WAXED_EXPOSED_CUT_COPPER_SLAB", + "WAXED_EXPOSED_CUT_COPPER_STAIRS", + "WAXED_OXIDIZED_CHISELED_COPPER", + "WAXED_OXIDIZED_COPPER", + "WAXED_OXIDIZED_COPPER_BULB", + "WAXED_OXIDIZED_COPPER_DOOR", + "WAXED_OXIDIZED_COPPER_GRATE", + "WAXED_OXIDIZED_COPPER_TRAPDOOR", + "WAXED_OXIDIZED_CUT_COPPER", + "WAXED_OXIDIZED_CUT_COPPER_SLAB", + "WAXED_OXIDIZED_CUT_COPPER_STAIRS", + "WAXED_WEATHERED_CHISELED_COPPER", + "WAXED_WEATHERED_COPPER", + "WAXED_WEATHERED_COPPER_BULB", + "WAXED_WEATHERED_COPPER_DOOR", + "WAXED_WEATHERED_COPPER_GRATE", + "WAXED_WEATHERED_COPPER_TRAPDOOR", + "WAXED_WEATHERED_CUT_COPPER", + "WAXED_WEATHERED_CUT_COPPER_SLAB", + "WAXED_WEATHERED_CUT_COPPER_STAIRS", + "WAYFINDER_ARMOR_TRIM_SMITHING_TEMPLATE", + "WEATHERED_CHISELED_COPPER", + "WEATHERED_COPPER", + "WEATHERED_COPPER_BULB", + "WEATHERED_COPPER_DOOR", + "WEATHERED_COPPER_GRATE", + "WEATHERED_COPPER_TRAPDOOR", + "WEATHERED_CUT_COPPER", + "WEATHERED_CUT_COPPER_SLAB", + "WEATHERED_CUT_COPPER_STAIRS", + "WEEPING_VINES", + "WEEPING_VINES_PLANT", + "WET_SPONGE", + "WHEAT", + "WHEAT_SEEDS", + "WHITE_BANNER", + "WHITE_BED", + "WHITE_CANDLE", + "WHITE_CANDLE_CAKE", + "WHITE_CARPET", + "WHITE_CONCRETE", + "WHITE_CONCRETE_POWDER", + "WHITE_DYE", + "WHITE_GLAZED_TERRACOTTA", + "WHITE_SHULKER_BOX", + "WHITE_STAINED_GLASS", + "WHITE_STAINED_GLASS_PANE", + "WHITE_TERRACOTTA", + "WHITE_TULIP", + "WHITE_WALL_BANNER", + "WHITE_WOOL", + "WILD_ARMOR_TRIM_SMITHING_TEMPLATE", + "WITCH_SPAWN_EGG", + "WITHER_ROSE", + "WITHER_SKELETON_SKULL", + "WITHER_SKELETON_SPAWN_EGG", + "WITHER_SKELETON_WALL_SKULL", + "WITHER_SPAWN_EGG", + "WOLF_SPAWN_EGG", + "WOODEN_AXE", + "WOODEN_HOE", + "WOODEN_PICKAXE", + "WOODEN_SHOVEL", + "WOODEN_SWORD", + "WRITABLE_BOOK", + "WRITTEN_BOOK", + "YELLOW_BANNER", + "YELLOW_BED", + "YELLOW_CANDLE", + "YELLOW_CANDLE_CAKE", + "YELLOW_CARPET", + "YELLOW_CONCRETE", + "YELLOW_CONCRETE_POWDER", + "YELLOW_DYE", + "YELLOW_GLAZED_TERRACOTTA", + "YELLOW_SHULKER_BOX", + "YELLOW_STAINED_GLASS", + "YELLOW_STAINED_GLASS_PANE", + "YELLOW_TERRACOTTA", + "YELLOW_WALL_BANNER", + "YELLOW_WOOL", + "ZOGLIN_SPAWN_EGG", + "ZOMBIE_HEAD", + "ZOMBIE_HORSE_SPAWN_EGG", + "ZOMBIE_SPAWN_EGG", + "ZOMBIE_VILLAGER_SPAWN_EGG", + "ZOMBIE_WALL_HEAD", + "ZOMBIFIED_PIGLIN_SPAWN_EGG" +] \ No newline at end of file diff --git a/src/data/taskDefinitions.json b/src/data/taskDefinitions.json new file mode 100644 index 0000000..5a5143e --- /dev/null +++ b/src/data/taskDefinitions.json @@ -0,0 +1,53 @@ +{ + "taskTypes": { + "blockbreak": { + "description": "Break a set amount of blocks.", + "configuration": { + "amount": { + "type": "number", + "description": "The amount of blocks to break.", + "default": 1, + "required": true + }, + "block": { + "type": "material-list", + "description": "The specific block to break.", + "note": "Omitting this value will allow any block to be broken." + }, + "data": { + "type": "number", + "description": "The data value of the block to break.", + "default": 0, + "note": "Not required for Minecraft versions 1.13 and above." + }, + "reverse-if-placed": { + "type": "boolean", + "description": "Whether placing blocks should decrement from the quest progress.", + "default": false + }, + "check-coreprotect": { + "type": "boolean", + "description": "Whether the plugin should query CoreProtect if a block has been recently placed.", + "default": false, + "note": "This requires the CoreProtect plugin to be installed." + }, + "check-coreprotect-time": { + "type": "number", + "description": "How long ago (in seconds) the plugin should check with CoreProtect whether a block was placed.", + "default": false, + "note": "This requires the CoreProtect plugin to be installed." + }, + "check-playerblocktracker": { + "type": "boolean", + "description": "Whether the plugin should query PlayerBlockTracker if a block has been recently placed.", + "default": false, + "note": "This requires the PlayerBlockTracker plugin to be installed." + }, + "worlds": { + "type": "string-list", + "description": "The worlds in which the blocks should be broken." + } + } + } + } +} \ No newline at end of file diff --git a/src/data/testData.json b/src/data/testData.json new file mode 100644 index 0000000..c01d6c3 --- /dev/null +++ b/src/data/testData.json @@ -0,0 +1,384 @@ +{ + "quests": { + "example1": { + "tasks": { + "mining": { + "type": "blockbreak", + "amount": 30 + } + }, + "display": { + "name": "&cExample I (Single Task)", + "lore-normal": [ + "&cThis category is designed to show you the different", + "&cattributes a quest can have.", + "", + "&7This quest requires you to:", + "&7 - Break &f30 blocks&7.", + "", + "&7Rewards:", + "&7 - &f10 &7diamonds." + ], + "lore-started": [ + "", + "&7Your current progression:", + "&7 - &f{mining:progress}&7/30 blocks broken." + ], + "type": "WOODEN_PICKAXE" + }, + "rewards": [ + "give {player} diamond 10" + ], + "placeholders": { + "description": "&7Break &f30 blocks &7of any type.", + "progress": " &8- &f{mining:progress}&7/30 broken" + }, + "options": { + "category": "examples", + "repeatable": false, + "cooldown": { + "enabled": true, + "time": 1440 + }, + "sort-order": 1 + } + }, + "example2": { + "tasks": { + "mining": { + "type": "blockbreak", + "amount": 100 + }, + "building": { + "type": "blockplace", + "amount": 100 + } + }, + "display": { + "name": "&cExample II (Multiple Tasks)", + "lore-normal": [ + "&cThis category is designed to show you the different", + "&cattributes a quest can have. This quest requires", + "&cmultiple things to be done, unlike the previous one.", + "", + "&7This quest requires you to:", + "&7 - Break &f100 &7blocks.", + "&7 - Place &f100 &7blocks.", + "", + "&7Rewards:", + "&7 - &f15 diamonds&7.", + "&7 - &f$50&7 added to your in-game balance." + ], + "lore-started": [ + "", + "&7Your current progression:", + "&7 - &f{mining:progress}&7/100 blocks broken.", + "&7 - &f{building:progress}&7/100 blocks placed." + ], + "type": "GRASS_BLOCK" + }, + "rewards": [ + "give {player} diamond 15", + "eco give {player} 50" + ], + "placeholders": { + "description": "&7Break and place &f100 blocks &7of any type.", + "progress": " &8- &f{mining:progress}&7/100 broken, &f{building:progress}&7/100 placed" + }, + "options": { + "category": "examples", + "requires": [ + "example1" + ], + "repeatable": false, + "cooldown": { + "enabled": true, + "time": 1440 + }, + "sort-order": 2 + } + }, + "example3": { + "tasks": { + "mining": { + "type": "blockbreak", + "amount": 81, + "block": "GOLD_ORE" + }, + "building": { + "type": "blockplace", + "amount": 9, + "block": "GOLD_BLOCK" + } + }, + "display": { + "name": "&cExample III (Repeatable, 10 minute cooldown)", + "lore-normal": [ + "&cThis category is designed to show you the different", + "&cattributes a quest can have. This quest can be replayed", + "&cafter a cooldown, unlike the previous one.", + "", + "&7This quest requires you to:", + "&7 - Break &f81 gold ore&7.", + "&7 - Place &f9 gold blocks&7.", + "", + "&7Rewards:", + "&7 - &f30 diamonds&7.", + "&7 - &f$10&7 added to your in-game balance." + ], + "lore-started": [ + "", + "&7Your current progression:", + "&7 - &f{mining:progress}&7/81 gold ore broken.", + "&7 - &f{building:progress}&7/9 gold blocks placed." + ], + "type": "GOLD_ORE" + }, + "rewards": [ + "give {player} diamond 30", + "eco give {player} 10" + ], + "placeholders": { + "description": "&7Break &f81 gold ore &7and place &f9 gold blocks.", + "progress": " &8- &f{mining:progress}&7/81 gold ore, &f{building:progress}&7/9 gold blocks" + }, + "options": { + "category": "examples", + "requires": [ + "example2" + ], + "repeatable": true, + "cooldown": { + "enabled": true, + "time": 10 + }, + "sort-order": 3 + } + }, + "example4": { + "tasks": { + "mobkilling": { + "type": "mobkilling", + "amount": 3 + } + }, + "display": { + "name": "&cExample IV (Reward String)", + "lore-normal": [ + "&cThis category is designed to show you the different", + "&cattributes a quest can have. This quest has a 'reward string'", + "&c(a series of messages sent when a quest is complete),", + "&cunlike the previous one.", + "", + "&7This quest requires you to:", + "&7 - Kill &f3 &7mobs.", + "", + "&7Rewards:", + "&7 - &f$50 &7added to your in-game balance.", + "&7 - &f1 diamond&7." + ], + "lore-started": [ + "", + "&7Your current progression:", + "&7 - &f{mobkilling:progress}&7/3 mobs killed." + ], + "type": "STRING" + }, + "startstring": [ + "&7Upon completion of this quest, you will be rewarded with", + " &8* &c$50", + " &8* &c1 diamonds" + ], + "rewards": [ + "eco give {player} 50", + "give {player} diamond 1" + ], + "placeholders": { + "description": "&7Kill &f3 &7mobs.", + "progress": " &8- &f{mobkilling:progress}&7/3 mobs" + }, + "rewardstring": [ + " &8* &c$1000 &7was added to your in-game balance.", + " &8* &c1 diamond &7was added to your inventory." + ], + "options": { + "category": "examples", + "requires": [ + "example3" + ], + "repeatable": true, + "cooldown": { + "enabled": true, + "time": 10 + }, + "sort-order": 4 + } + }, + "example5": { + "tasks": { + "building": { + "type": "blockplace", + "amount": 10 + } + }, + "display": { + "name": "&cExample V (Permission)", + "lore-normal": [ + "&cThis category is designed to show you the different", + "&cattributes a quest can have. This quest requires", + "&ccertain permissions.", + "", + "&7This quest requires you to:", + "&7 - Place &f10 &7blocks.", + "", + "&7Rewards:", + "&7 - &f$10 &7added to your in-game balance." + ], + "lore-started": [ + "", + "&7Your current progression:", + "&7 - &f{building:progress}&7/10 blocks placed." + ], + "type": "GRASS_BLOCK" + }, + "rewards": [ + "eco give {player} 10" + ], + "placeholders": { + "description": "&7Place &f10 &7blocks of any type.", + "progress": " &8- &f{building:progress}&7/10 blocks" + }, + "options": { + "category": "examples", + "requires": [ + "example4" + ], + "permission-required": true, + "repeatable": false, + "cooldown": { + "enabled": true, + "time": 1440 + }, + "sort-order": 5 + } + }, + "example6": { + "tasks": { + "building": { + "type": "blockplace", + "amount": 10 + } + }, + "display": { + "name": "&cExample VI (Different category, permissions)", + "lore-normal": [ + "&cThis category is designed to show you the different", + "&cattributes a quest can have. This quest requires", + "&ccertain permissions.", + "", + "&7This quest requires you to:", + "&7 - Place &f10 &7blocks.", + "", + "&7Rewards:", + "&7 - &f$10 &7added to your in-game balance." + ], + "lore-started": [ + "", + "&7Your current progression:", + "&7 - &f{building:progress}&7/10 blocks placed." + ], + "type": "GRASS_BLOCK" + }, + "rewards": [ + "eco give {player} 10" + ], + "placeholders": { + "description": "&7Place &f10 &7blocks of any type.", + "progress": " &8- &f{building:progress}&7/10 blocks" + }, + "options": { + "category": "permissionexample", + "repeatable": false, + "cooldown": { + "enabled": true, + "time": 1440 + }, + "sort-order": 1 + } + }, + "example7": { + "tasks": { + "building": { + "type": "blockplace", + "amount": 10, + "worlds": [ + "world" + ] + } + }, + "display": { + "name": "&cExample VII (Different category, world restricted)", + "lore-normal": [ + "&cThis category is designed to show you the different", + "&cattributes a quest can have. This quest requires", + "&chas a task which requires you to be in a world called 'world'.", + "", + "&7This quest requires you to:", + "&7 - Place &f10 &7blocks.", + "", + "&7Rewards:", + "&7 - &f$10 &7added to your in-game balance." + ], + "lore-started": [ + "", + "&7Your current progression:", + "&7 - &f{building:progress}&7/10 blocks placed." + ], + "type": "GRASS_BLOCK" + }, + "rewards": [ + "eco give {player} 10" + ], + "placeholders": { + "description": "&7Place &f10 &7blocks of any type in world &fworld.", + "progress": " &8- &f{building:progress}&7/10 blocks" + }, + "options": { + "category": "permissionexample", + "repeatable": false, + "cooldown": { + "enabled": true, + "time": 1440 + }, + "sort-order": 1 + } + } + }, + "categories": { + "examples": { + "display": { + "name": "&cExamples", + "lore": [ + "&cThis category is designed to show you the different", + "&cattributes a quest can have." + ], + "type": "WOODEN_SWORD" + } + }, + "permissionexample": { + "display": { + "name": "&cPermission Example", + "lore": [ + "&7This category is an example of one which", + "&7requires a permission to open.", + "", + "&cIt is highly recommended you read this", + "&csection and all the comments so you can", + "&cmake the most of this plugin." + ], + "type": "WATER_BUCKET" + }, + "permission-required": true + } + } +} \ No newline at end of file diff --git a/src/lib/questsLoader.ts b/src/lib/questsLoader.ts new file mode 100644 index 0000000..0623f04 --- /dev/null +++ b/src/lib/questsLoader.ts @@ -0,0 +1,68 @@ +import type { EditorQuest, EditorTask, EditorCategory } from '../stores/session'; + +export function loadQuestsFromJson(config: any): EditorQuest[] { + return Object.keys(config).map((questid: any) => { + const quest = config[questid]; + + return { + id: questid, + display: { + name: quest.display.name, + lore: { + normal: quest.display['lore-normal'], + started: quest.display['lore-started'], + }, + type: quest.display.type, + }, + tasks: Object.fromEntries(Object.keys(quest.tasks).map((taskId: string) => { + return [taskId, { + id: taskId, + config: quest.tasks[taskId], + } as EditorTask]; + })), + rewards: quest.rewards, + ...(quest.startcommands && { startCommands: quest.startcommands }), + ...(quest.startstring && { startString: quest.startstring }), + ...(quest.rewardstring && { rewardString: quest.rewardstring }), + ...(quest.placeholders && { placeholders: quest.placeholders }), + options: { + category: quest.options.category, + requirements: quest.options.requires || [], + permissionRequired: quest.options['permission-required'] || false, + cancellable: quest.options.cancellable || false, + countsTowardsLimit: quest.options['counts-towards-limit'] || true, + repeatable: quest.options.repeatable || false, + cooldown: { + enabled: quest.options.cooldown?.enabled || false, + time: quest.options.cooldown?.time || 0, + }, + timeLimit: { + enabled: quest.options['time-limit']?.enabled || false, + time: quest.options['time-limit']?.time || 0, + }, + sortOrder: quest.options['sort-order'] || 0, + autostart: quest.options.autostart || false, + ...(quest.options['completed-display'] && { completedDisplay: quest.options['completed-display'] }), + ...(quest.options['cooldown-display'] && { cooldownDisplay: quest.options['cooldown-display'] }), + ...(quest.options['permission-display'] && { permissionDisplay: quest.options['permission-display'] }), + ...(quest.options['locked-display'] && { lockedDisplay: quest.options['locked-display'] }), + }, + } as EditorQuest; + }); +} + +export function loadCategoriesFromJson(config: any): EditorCategory[] { + return Object.keys(config).map((categoryid: any) => { + const category = config[categoryid]; + + return { + id: categoryid, + display: { + name: category.display.name, + lore: category.display.lore, + type: category.display.type, + }, + permissionRequired: category['permission-required'], + }; + }); +} diff --git a/src/lib/util.ts b/src/lib/util.ts new file mode 100644 index 0000000..9903e2c --- /dev/null +++ b/src/lib/util.ts @@ -0,0 +1,3 @@ +export function stripColourCodes(str: string): string { + return str.replace(/&[0-9a-fk-or]/i, ''); +} \ No newline at end of file diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..6e14a1e --- /dev/null +++ b/src/main.ts @@ -0,0 +1,35 @@ +import './assets/main.css' + +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome' +import { library } from "@fortawesome/fontawesome-svg-core"; +import { faFolder, faCaretDown, faCaretUp, faChevronRight, faTriangleExclamation, faPen, faTrash, faCode, faCheck, faXmark, faPlus } from "@fortawesome/free-solid-svg-icons"; +import { faCompass } from '@fortawesome/free-regular-svg-icons'; + +import App from './App.vue' +import Multiselect from 'vue-multiselect' +import router from './router' + +const app = createApp(App) + +library.add(faFolder); +library.add(faCaretDown); +library.add(faCaretUp); +library.add(faChevronRight); +library.add(faCompass); +library.add(faTriangleExclamation); +library.add(faPen); +library.add(faTrash); +library.add(faCode); +library.add(faCheck); +library.add(faXmark); +library.add(faPlus); + +app.component('font-awesome-icon', FontAwesomeIcon) +app.component('multiselect', Multiselect) + +app.use(createPinia()) +app.use(router) + +app.mount('#app') diff --git a/src/router/index.ts b/src/router/index.ts new file mode 100644 index 0000000..9091d16 --- /dev/null +++ b/src/router/index.ts @@ -0,0 +1,23 @@ +import { createRouter, createWebHistory } from 'vue-router' +import EditorView from '../views/EditorView.vue' + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/', + name: 'home', + component: EditorView + }, + { + path: '/about', + name: 'about', + // route level code-splitting + // this generates a separate chunk (About.[hash].js) for this route + // which is lazy-loaded when the route is visited. + component: () => import('../views/EditorView.vue') + } + ] +}) + +export default router diff --git a/src/stores/session.ts b/src/stores/session.ts new file mode 100644 index 0000000..22db332 --- /dev/null +++ b/src/stores/session.ts @@ -0,0 +1,149 @@ +import { defineStore } from 'pinia' + +export interface EditorQuest { + id: string; + display: { + name: string; + lore: { + normal: string[]; + started: string[]; + } + type: string; + } + tasks: { [key: string]: EditorTask }; + rewards: string[]; + startCommands?: string[]; + startString?: string[]; + rewardString?: string[]; + placeholders?: { [key: string]: string }; + options: { + category: string; + requirements: string[]; + permissionRequired: boolean; + cancellable: boolean; + countsTowardsLimit: boolean; + repeatable: boolean; + cooldown: { + enabled: boolean; + time: number; + } + timeLimit: { + enabled: boolean; + time: number; + } + sortOrder: number; + autostart: boolean; + completedDisplay?: string; + cooldownDisplay?: string; + permissionDisplay?: string; + lockedDisplay?: string; + } +} + +export interface EditorTask { + id: string; + config: { + type: string; + [key: string]: any; + } +} + +export interface EditorCategory { + id: string; + display: { + name: string; + lore: string[]; + type: string; + } + permissionRequired: string; +} + +export interface TaskDefinition { + description: string; + configuration: { + [key: string]: { + type: string | string[]; + description: string; + default?: any; + required?: boolean; + note?: string; + } + } +} + +export const useSessionStore = defineStore('session', { + state: () => ({ + sessionType: '', + session: { + quests: [] as EditorQuest[], + categories: [] as EditorCategory[], + taskDefinitions: {} as { [key: string]: TaskDefinition }, + }, + editor: { + selected: { + type: '' as 'Quest' | 'Category', + id: '', + } + } + }), + getters: { + getSessionType(): string { + return this.sessionType + }, + getQuests(): EditorQuest[] { + return this.session.quests + }, + getCategories(): EditorCategory[] { + return this.session.categories + }, + getQuestById: (state) => (id: string) => { + return state.session.quests.find(quest => quest.id === id) + }, + getCategoryById: (state) => (id: string) => { + return state.session.categories.find(quest => quest.id === id) + }, + getQuestsInCategory: (state) => (id: string) => { + return state.session.quests.filter(quest => quest.options.category === id) + }, + getTaskDefinitions: (state) => { + return state.session.taskDefinitions + }, + getTaskDefinitionByTaskType: (state) => (type: string) => { + return state.session.taskDefinitions[type] + }, + getKnownTaskTypes: (state) => () => { + return Object.keys(state.session.taskDefinitions) + } + // getEditorCategories: (state) => { + // return state.editor.categories + // } + }, + actions: { + setSessionType(type: string) { + this.sessionType = type + }, + setQuests(quests: EditorQuest[]) { + this.session.quests = quests + }, + setCategories(categories: EditorCategory[]) { + this.session.categories = categories + }, + // updateEditorCategories() { + // const categories: { [key: string]: { quests: string[] } } = {} + // this.session.categories.forEach(category => { + // categories[category.id] = { quests: [] } + // }) + // this.session.quests.forEach(quest => { + // categories[quest.options.category].quests.push(quest.id) + // }) + // this.editor.categories = categories; + // }, + setEditorSelected(type: 'Quest' | 'Category', id: string) { + this.editor.selected.type = type + this.editor.selected.id = id + }, + setTaskDefinitions(definitions: { [key: string]: TaskDefinition }) { + this.session.taskDefinitions = definitions + } + } +}); diff --git a/src/views/EditorView.vue b/src/views/EditorView.vue new file mode 100644 index 0000000..b94f998 --- /dev/null +++ b/src/views/EditorView.vue @@ -0,0 +1,37 @@ + + + + + \ No newline at end of file -- cgit v1.2.3-70-g09d2