Full Code of Simplix-Softworks/Cirrus for AI

master e9d150254681 cached
128 files
346.5 KB
84.6k tokens
655 symbols
1 requests
Download .txt
Showing preview only (392K chars total). Download the full file or copy to clipboard to get everything.
Repository: Simplix-Softworks/Cirrus
Branch: master
Commit: e9d150254681
Files: 128
Total size: 346.5 KB

Directory structure:
gitextract_6gkla1sj/

├── .editorconfig
├── .gitignore
├── LICENSE
├── README.md
├── cirrus-bungeecord/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── dev/
│                   └── simplix/
│                       └── cirrus/
│                           └── bungeecord/
│                               ├── BungeeCordPlayerWrapper.java
│                               ├── CirrusBungeeCord.java
│                               ├── converters/
│                               │   ├── ItemModelConverter.java
│                               │   ├── ItemStackConverter.java
│                               │   ├── PlayerConverter.java
│                               │   └── PlayerUniqueIdConverter.java
│                               ├── listeners/
│                               │   └── QuitListener.java
│                               └── protocolize/
│                                   └── ProtocolizeMenuBuilder.java
├── cirrus-bungeecord-example/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── dev/
│           │       └── simplix/
│           │           └── cirrus/
│           │               └── bungeecord/
│           │                   └── example/
│           │                       ├── CirrusExamplePlugin.java
│           │                       ├── commands/
│           │                       │   └── TestCommand.java
│           │                       └── menus/
│           │                           ├── ExampleMenu.java
│           │                           └── ExampleMultiPageMenu.java
│           └── resources/
│               └── plugin.yml
├── cirrus-common/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── dev/
│       │   │       └── simplix/
│       │   │           └── cirrus/
│       │   │               └── common/
│       │   │                   ├── Cirrus.java
│       │   │                   ├── Utils.java
│       │   │                   ├── business/
│       │   │                   │   ├── ConfigurationFactory.java
│       │   │                   │   ├── DataInventoryMenuItemWrapper.java
│       │   │                   │   ├── InventoryMenuItemWrapper.java
│       │   │                   │   ├── MenuItemWrapper.java
│       │   │                   │   └── PlayerWrapper.java
│       │   │                   ├── config/
│       │   │                   │   └── JsonConfigurationFactory.java
│       │   │                   ├── configuration/
│       │   │                   │   ├── MenuConfiguration.java
│       │   │                   │   ├── MultiPageMenuConfiguration.java
│       │   │                   │   └── impl/
│       │   │                   │       ├── SimpleMenuConfiguration.java
│       │   │                   │       └── SimpleMultiPageMenuConfiguration.java
│       │   │                   ├── container/
│       │   │                   │   ├── Container.java
│       │   │                   │   └── impl/
│       │   │                   │       └── ItemContainer.java
│       │   │                   ├── converter/
│       │   │                   │   ├── Converter.java
│       │   │                   │   └── Converters.java
│       │   │                   ├── effect/
│       │   │                   │   ├── AbstractChangingItemAnimation.java
│       │   │                   │   ├── AbstractMenuAnimation.java
│       │   │                   │   ├── Animated.java
│       │   │                   │   ├── Animations.java
│       │   │                   │   ├── MenuAnimation.java
│       │   │                   │   └── MenuAnimator.java
│       │   │                   ├── effects/
│       │   │                   │   ├── GradualColorChangeAnimation.java
│       │   │                   │   ├── RGBColorChangeAnimation.java
│       │   │                   │   └── SimpleChangingItemAnimation.java
│       │   │                   ├── handler/
│       │   │                   │   ├── ActionHandler.java
│       │   │                   │   └── AutoCancellingActionHandler.java
│       │   │                   ├── i18n/
│       │   │                   │   ├── LocalizedItemStackModel.java
│       │   │                   │   ├── LocalizedString.java
│       │   │                   │   ├── LocalizedStringDeserializer.java
│       │   │                   │   ├── LocalizedStringList.java
│       │   │                   │   ├── LocalizedStringListDeserializer.java
│       │   │                   │   ├── LocalizedStringListSerializer.java
│       │   │                   │   ├── LocalizedStringSerializer.java
│       │   │                   │   ├── Localizer.java
│       │   │                   │   └── Replacer.java
│       │   │                   ├── item/
│       │   │                   │   ├── CirrusItem.java
│       │   │                   │   ├── Items.java
│       │   │                   │   └── ProtocolizeMenuItemWrapper.java
│       │   │                   ├── menu/
│       │   │                   │   ├── AbstractConfigurableMenu.java
│       │   │                   │   ├── AbstractMenu.java
│       │   │                   │   ├── ErrorProne.java
│       │   │                   │   ├── Menu.java
│       │   │                   │   └── MenuBuilder.java
│       │   │                   ├── menus/
│       │   │                   │   ├── AbstractBrowserMenu.java
│       │   │                   │   ├── MultiPageMenu.java
│       │   │                   │   └── SimpleMenu.java
│       │   │                   ├── model/
│       │   │                   │   ├── CallResult.java
│       │   │                   │   └── Click.java
│       │   │                   ├── mojangson/
│       │   │                   │   ├── MojangsonScope.java
│       │   │                   │   ├── MojangsonWriter.java
│       │   │                   │   ├── TagDeserializer.java
│       │   │                   │   └── TagSerializer.java
│       │   │                   └── util/
│       │   │                       ├── ColorUtils.java
│       │   │                       ├── Colors.java
│       │   │                       ├── InventoryContentMap.java
│       │   │                       └── SafeRunnable.java
│       │   └── resources/
│       │       └── cirrus/
│       │           ├── MenuConfiguration.json
│       │           └── MultiPageMenuConfiguration.json
│       └── test/
│           └── java/
│               └── dev/
│                   └── simplix/
│                       └── cirrus/
│                           └── common/
│                               └── tests/
│                                   ├── SnbtGsonTest.java
│                                   └── SnbtTest.java
├── cirrus-spigot/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── dev/
│                   └── simplix/
│                       └── cirrus/
│                           └── spigot/
│                               ├── CirrusSpigot.java
│                               ├── SpigotPlayerWrapper.java
│                               ├── converters/
│                               │   ├── BukkitItemStackConverter.java
│                               │   ├── ItemModelConverter.java
│                               │   ├── ItemTypeMaterialDataConverter.java
│                               │   ├── MaterialDataItemTypeConverter.java
│                               │   ├── NmsNbtQuerzNbtConverter.java
│                               │   ├── PlayerConverter.java
│                               │   ├── ProtocolizeItemStackConverter.java
│                               │   ├── QuerzNbtNmsNbtConverter.java
│                               │   ├── SpigotClickTypeConverter.java
│                               │   └── SpigotInventoryTypeConverter.java
│                               ├── listener/
│                               │   └── InventoryListener.java
│                               ├── menubuilder/
│                               │   └── SpigotMenuBuilder.java
│                               ├── menus/
│                               │   └── SpigotMenu.java
│                               └── util/
│                                   ├── BungeeCordComponentConverterProvider.java
│                                   ├── OtherModuleProvider.java
│                                   ├── ProtocolVersionUtil.java
│                                   ├── ProtocolVersions.java
│                                   ├── ReflectionClasses.java
│                                   ├── ReflectionUtil.java
│                                   └── SpigotItemsUtils.java
├── cirrus-spigot-example/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── dev/
│           │       └── simplix/
│           │           └── cirrus/
│           │               └── spigot/
│           │                   └── example/
│           │                       ├── CirrusExamplePlugin.java
│           │                       ├── commands/
│           │                       │   └── TestCommandExecutor.java
│           │                       └── menus/
│           │                           ├── ExampleMenu.java
│           │                           └── ExampleMultiPageMenu.java
│           └── resources/
│               └── plugin.yml
├── cirrus-spigot-modern/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── dev/
│                   └── simplix/
│                       └── cirrus/
│                           └── spigot/
│                               └── modern/
│                                   └── ModernInventoryView.java
├── cirrus-velocity/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── dev/
│                   └── simplix/
│                       └── cirrus/
│                           └── velocity/
│                               ├── CirrusVelocity.java
│                               ├── VelocityPlayerWrapper.java
│                               ├── converters/
│                               │   ├── ItemModelConverter.java
│                               │   ├── ItemStackConverter.java
│                               │   ├── PlayerConverter.java
│                               │   └── PlayerUniqueIdConverter.java
│                               ├── listener/
│                               │   └── QuitListener.java
│                               └── protocolize/
│                                   └── ProtocolizeMenuBuilder.java
├── cirrus-velocity-example/
│   ├── .gitignore
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── dev/
│                   └── simplix/
│                       └── cirrus/
│                           └── velocity/
│                               └── example/
│                                   ├── CirrusExamplePlugin.java
│                                   ├── commands/
│                                   │   └── TestCommand.java
│                                   └── menus/
│                                       ├── ExampleMenu.java
│                                       └── ExampleMultiPageMenu.java
└── pom.xml

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = false
max_line_length = 100
tab_width = 2
ij_continuation_indent_size = 4
ij_formatter_off_tag = @formatter:off
ij_formatter_on_tag = @formatter:on
ij_formatter_tags_enabled = false
ij_smart_tabs = false
ij_visual_guides = 100
ij_wrap_on_typing = true

[]
ij_json_keep_blank_lines_in_code = 0
ij_json_keep_indents_on_empty_lines = false
ij_json_keep_line_breaks = true
ij_json_space_after_colon = true
ij_json_space_after_comma = true
ij_json_space_before_colon = true
ij_json_space_before_comma = false
ij_json_spaces_within_braces = false
ij_json_spaces_within_brackets = false
ij_json_wrap_long_lines = false

[*.bib]
indent_size = 4
tab_width = 4
ij_continuation_indent_size = 8
ij_bibtex_keep_first_column_comment = true
ij_bibtex_keep_indents_on_empty_lines = false
ij_bibtex_wrap_long_lines = false

[*.css]
ij_css_align_closing_brace_with_properties = false
ij_css_blank_lines_around_nested_selector = 1
ij_css_blank_lines_between_blocks = 1
ij_css_brace_placement = end_of_line
ij_css_enforce_quotes_on_format = false
ij_css_hex_color_long_format = false
ij_css_hex_color_lower_case = false
ij_css_hex_color_short_format = false
ij_css_hex_color_upper_case = false
ij_css_keep_blank_lines_in_code = 2
ij_css_keep_indents_on_empty_lines = false
ij_css_keep_single_line_blocks = false
ij_css_properties_order = font, font-family, font-size, font-weight, font-style, font-variant, font-size-adjust, font-stretch, line-height, position, z-index, top, right, bottom, left, display, visibility, float, clear, overflow, overflow-x, overflow-y, clip, zoom, align-content, align-items, align-self, flex, flex-flow, flex-basis, flex-direction, flex-grow, flex-shrink, flex-wrap, justify-content, order, box-sizing, width, min-width, max-width, height, min-height, max-height, margin, margin-top, margin-right, margin-bottom, margin-left, padding, padding-top, padding-right, padding-bottom, padding-left, table-layout, empty-cells, caption-side, border-spacing, border-collapse, list-style, list-style-position, list-style-type, list-style-image, content, quotes, counter-reset, counter-increment, resize, cursor, user-select, nav-index, nav-up, nav-right, nav-down, nav-left, transition, transition-delay, transition-timing-function, transition-duration, transition-property, transform, transform-origin, animation, animation-name, animation-duration, animation-play-state, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, text-align, text-align-last, vertical-align, white-space, text-decoration, text-emphasis, text-emphasis-color, text-emphasis-style, text-emphasis-position, text-indent, text-justify, letter-spacing, word-spacing, text-outline, text-transform, text-wrap, text-overflow, text-overflow-ellipsis, text-overflow-mode, word-wrap, word-break, tab-size, hyphens, pointer-events, opacity, color, border, border-width, border-style, border-color, border-top, border-top-width, border-top-style, border-top-color, border-right, border-right-width, border-right-style, border-right-color, border-bottom, border-bottom-width, border-bottom-style, border-bottom-color, border-left, border-left-width, border-left-style, border-left-color, border-radius, border-top-left-radius, border-top-right-radius, border-bottom-right-radius, border-bottom-left-radius, border-image, border-image-source, border-image-slice, border-image-width, border-image-outset, border-image-repeat, outline, outline-width, outline-style, outline-color, outline-offset, background, background-color, background-image, background-repeat, background-attachment, background-position, background-position-x, background-position-y, background-clip, background-origin, background-size, box-decoration-break, box-shadow, text-shadow
ij_css_space_after_colon = true
ij_css_space_before_opening_brace = true
ij_css_use_double_quotes = true
ij_css_value_alignment = do_not_align

[*.csv]
max_line_length = 2147483647
ij_wrap_on_typing = false
ij_csv_wrap_long_lines = false

[*.feature]
tab_width = 4
ij_continuation_indent_size = 8
ij_gherkin_keep_indents_on_empty_lines = false

[*.gsp]
indent_size = 4
tab_width = 4
ij_continuation_indent_size = 8
ij_gsp_keep_indents_on_empty_lines = false

[*.haml]
tab_width = 4
ij_continuation_indent_size = 8
ij_haml_keep_indents_on_empty_lines = false

[*.java]
ij_wrap_on_typing = false
ij_java_align_consecutive_assignments = false
ij_java_align_consecutive_variable_declarations = false
ij_java_align_group_field_declarations = false
ij_java_align_multiline_annotation_parameters = false
ij_java_align_multiline_array_initializer_expression = false
ij_java_align_multiline_assignment = false
ij_java_align_multiline_binary_operation = true
ij_java_align_multiline_chained_methods = false
ij_java_align_multiline_extends_list = false
ij_java_align_multiline_for = false
ij_java_align_multiline_method_parentheses = false
ij_java_align_multiline_parameters = false
ij_java_align_multiline_parameters_in_calls = false
ij_java_align_multiline_parenthesized_expression = false
ij_java_align_multiline_records = false
ij_java_align_multiline_resources = false
ij_java_align_multiline_ternary_operation = false
ij_java_align_multiline_text_blocks = false
ij_java_align_multiline_throws_list = false
ij_java_align_subsequent_simple_methods = false
ij_java_align_throws_keyword = false
ij_java_annotation_parameter_wrap = off
ij_java_array_initializer_new_line_after_left_brace = true
ij_java_array_initializer_right_brace_on_new_line = false
ij_java_array_initializer_wrap = on_every_item
ij_java_assert_statement_colon_on_next_line = false
ij_java_assert_statement_wrap = off
ij_java_assignment_wrap = off
ij_java_binary_operation_sign_on_next_line = true
ij_java_binary_operation_wrap = on_every_item
ij_java_blank_lines_after_anonymous_class_header = 0
ij_java_blank_lines_after_class_header = 1
ij_java_blank_lines_after_imports = 1
ij_java_blank_lines_after_package = 1
ij_java_blank_lines_around_class = 1
ij_java_blank_lines_around_field = 0
ij_java_blank_lines_around_field_in_interface = 0
ij_java_blank_lines_around_initializer = 1
ij_java_blank_lines_around_method = 1
ij_java_blank_lines_around_method_in_interface = 1
ij_java_blank_lines_before_class_end = 0
ij_java_blank_lines_before_imports = 1
ij_java_blank_lines_before_method_body = 0
ij_java_blank_lines_before_package = 0
ij_java_block_brace_style = end_of_line
ij_java_block_comment_at_first_column = true
ij_java_call_parameters_new_line_after_left_paren = true
ij_java_call_parameters_right_paren_on_new_line = false
ij_java_call_parameters_wrap = on_every_item
ij_java_case_statement_on_separate_line = true
ij_java_catch_on_new_line = false
ij_java_class_annotation_wrap = split_into_lines
ij_java_class_brace_style = end_of_line
ij_java_class_count_to_use_import_on_demand = 5
ij_java_class_names_in_javadoc = 1
ij_java_do_not_indent_top_level_class_members = false
ij_java_do_not_wrap_after_single_annotation = true
ij_java_do_while_brace_force = never
ij_java_doc_add_blank_line_after_description = true
ij_java_doc_add_blank_line_after_param_comments = false
ij_java_doc_add_blank_line_after_return = false
ij_java_doc_add_p_tag_on_empty_lines = true
ij_java_doc_align_exception_comments = true
ij_java_doc_align_param_comments = true
ij_java_doc_do_not_wrap_if_one_line = false
ij_java_doc_enable_formatting = true
ij_java_doc_enable_leading_asterisks = true
ij_java_doc_indent_on_continuation = false
ij_java_doc_keep_empty_lines = true
ij_java_doc_keep_empty_parameter_tag = true
ij_java_doc_keep_empty_return_tag = true
ij_java_doc_keep_empty_throws_tag = true
ij_java_doc_keep_invalid_tags = true
ij_java_doc_param_description_on_new_line = false
ij_java_doc_preserve_line_breaks = false
ij_java_doc_use_throws_not_exception_tag = true
ij_java_else_on_new_line = false
ij_java_entity_dd_suffix = EJB
ij_java_entity_eb_suffix = Bean
ij_java_entity_hi_suffix = Home
ij_java_entity_lhi_prefix = Local
ij_java_entity_lhi_suffix = Home
ij_java_entity_li_prefix = Local
ij_java_entity_pk_class = java.lang.String
ij_java_entity_vo_suffix = VO
ij_java_enum_constants_wrap = off
ij_java_extends_keyword_wrap = off
ij_java_extends_list_wrap = on_every_item
ij_java_field_annotation_wrap = on_every_item
ij_java_finally_on_new_line = false
ij_java_for_brace_force = never
ij_java_for_statement_new_line_after_left_paren = true
ij_java_for_statement_right_paren_on_new_line = false
ij_java_for_statement_wrap = on_every_item
ij_java_generate_final_locals = false
ij_java_generate_final_parameters = false
ij_java_if_brace_force = never
ij_java_imports_layout = $*, |, *
ij_java_indent_case_from_switch = true
ij_java_insert_inner_class_imports = true
ij_java_insert_override_annotation = true
ij_java_keep_blank_lines_before_right_brace = 1
ij_java_keep_blank_lines_between_package_declaration_and_header = 1
ij_java_keep_blank_lines_in_code = 1
ij_java_keep_blank_lines_in_declarations = 1
ij_java_keep_control_statement_in_one_line = false
ij_java_keep_first_column_comment = true
ij_java_keep_indents_on_empty_lines = false
ij_java_keep_line_breaks = true
ij_java_keep_multiple_expressions_in_one_line = false
ij_java_keep_simple_blocks_in_one_line = false
ij_java_keep_simple_classes_in_one_line = false
ij_java_keep_simple_lambdas_in_one_line = false
ij_java_keep_simple_methods_in_one_line = false
ij_java_label_indent_absolute = false
ij_java_label_indent_size = 0
ij_java_lambda_brace_style = end_of_line
ij_java_layout_static_imports_separately = true
ij_java_line_comment_add_space = false
ij_java_line_comment_at_first_column = true
ij_java_message_dd_suffix = EJB
ij_java_message_eb_suffix = Bean
ij_java_method_annotation_wrap = split_into_lines
ij_java_method_brace_style = end_of_line
ij_java_method_call_chain_wrap = on_every_item
ij_java_method_parameters_new_line_after_left_paren = true
ij_java_method_parameters_right_paren_on_new_line = false
ij_java_method_parameters_wrap = on_every_item
ij_java_modifier_list_wrap = false
ij_java_names_count_to_use_import_on_demand = 5
ij_java_new_line_after_lparen_in_record_header = true
ij_java_parameter_annotation_wrap = off
ij_java_parentheses_expression_new_line_after_left_paren = true
ij_java_parentheses_expression_right_paren_on_new_line = false
ij_java_place_assignment_sign_on_next_line = false
ij_java_prefer_longer_names = true
ij_java_prefer_parameters_wrap = false
ij_java_record_components_wrap = on_every_item
ij_java_repeat_synchronized = true
ij_java_replace_instanceof_and_cast = false
ij_java_replace_null_check = true
ij_java_replace_sum_lambda_with_method_ref = true
ij_java_resource_list_new_line_after_left_paren = true
ij_java_resource_list_right_paren_on_new_line = false
ij_java_resource_list_wrap = off
ij_java_rparen_on_new_line_in_record_header = false
ij_java_session_dd_suffix = EJB
ij_java_session_eb_suffix = Bean
ij_java_session_hi_suffix = Home
ij_java_session_lhi_prefix = Local
ij_java_session_lhi_suffix = Home
ij_java_session_li_prefix = Local
ij_java_session_si_suffix = Service
ij_java_space_after_closing_angle_bracket_in_type_argument = false
ij_java_space_after_colon = true
ij_java_space_after_comma = true
ij_java_space_after_comma_in_type_arguments = true
ij_java_space_after_for_semicolon = true
ij_java_space_after_quest = true
ij_java_space_after_type_cast = true
ij_java_space_before_annotation_array_initializer_left_brace = false
ij_java_space_before_annotation_parameter_list = false
ij_java_space_before_array_initializer_left_brace = false
ij_java_space_before_catch_keyword = true
ij_java_space_before_catch_left_brace = true
ij_java_space_before_catch_parentheses = true
ij_java_space_before_class_left_brace = true
ij_java_space_before_colon = true
ij_java_space_before_colon_in_foreach = true
ij_java_space_before_comma = false
ij_java_space_before_do_left_brace = true
ij_java_space_before_else_keyword = true
ij_java_space_before_else_left_brace = true
ij_java_space_before_finally_keyword = true
ij_java_space_before_finally_left_brace = true
ij_java_space_before_for_left_brace = true
ij_java_space_before_for_parentheses = true
ij_java_space_before_for_semicolon = false
ij_java_space_before_if_left_brace = true
ij_java_space_before_if_parentheses = true
ij_java_space_before_method_call_parentheses = false
ij_java_space_before_method_left_brace = true
ij_java_space_before_method_parentheses = false
ij_java_space_before_opening_angle_bracket_in_type_parameter = false
ij_java_space_before_quest = true
ij_java_space_before_switch_left_brace = true
ij_java_space_before_switch_parentheses = true
ij_java_space_before_synchronized_left_brace = true
ij_java_space_before_synchronized_parentheses = true
ij_java_space_before_try_left_brace = true
ij_java_space_before_try_parentheses = true
ij_java_space_before_type_parameter_list = false
ij_java_space_before_while_keyword = true
ij_java_space_before_while_left_brace = true
ij_java_space_before_while_parentheses = true
ij_java_space_inside_one_line_enum_braces = false
ij_java_space_within_empty_array_initializer_braces = false
ij_java_space_within_empty_method_call_parentheses = false
ij_java_space_within_empty_method_parentheses = false
ij_java_spaces_around_additive_operators = true
ij_java_spaces_around_assignment_operators = true
ij_java_spaces_around_bitwise_operators = true
ij_java_spaces_around_equality_operators = true
ij_java_spaces_around_lambda_arrow = true
ij_java_spaces_around_logical_operators = true
ij_java_spaces_around_method_ref_dbl_colon = false
ij_java_spaces_around_multiplicative_operators = true
ij_java_spaces_around_relational_operators = true
ij_java_spaces_around_shift_operators = true
ij_java_spaces_around_type_bounds_in_type_parameters = true
ij_java_spaces_around_unary_operator = false
ij_java_spaces_within_angle_brackets = false
ij_java_spaces_within_annotation_parentheses = false
ij_java_spaces_within_array_initializer_braces = false
ij_java_spaces_within_braces = false
ij_java_spaces_within_brackets = false
ij_java_spaces_within_cast_parentheses = false
ij_java_spaces_within_catch_parentheses = false
ij_java_spaces_within_for_parentheses = false
ij_java_spaces_within_if_parentheses = false
ij_java_spaces_within_method_call_parentheses = false
ij_java_spaces_within_method_parentheses = false
ij_java_spaces_within_parentheses = false
ij_java_spaces_within_switch_parentheses = false
ij_java_spaces_within_synchronized_parentheses = false
ij_java_spaces_within_try_parentheses = false
ij_java_spaces_within_while_parentheses = false
ij_java_special_else_if_treatment = true
ij_java_subclass_name_suffix = Impl
ij_java_ternary_operation_signs_on_next_line = true
ij_java_ternary_operation_wrap = on_every_item
ij_java_test_name_suffix = Test
ij_java_throws_keyword_wrap = normal
ij_java_throws_list_wrap = off
ij_java_use_external_annotations = false
ij_java_use_fq_class_names = false
ij_java_use_relative_indents = false
ij_java_use_single_class_imports = true
ij_java_variable_annotation_wrap = off
ij_java_visibility = public
ij_java_while_brace_force = never
ij_java_while_on_new_line = false
ij_java_wrap_comments = true
ij_java_wrap_first_method_in_call_chain = true
ij_java_wrap_long_lines = false

[*.less]
tab_width = 4
ij_continuation_indent_size = 8
ij_less_align_closing_brace_with_properties = false
ij_less_blank_lines_around_nested_selector = 1
ij_less_blank_lines_between_blocks = 1
ij_less_brace_placement = 0
ij_less_enforce_quotes_on_format = false
ij_less_hex_color_long_format = false
ij_less_hex_color_lower_case = false
ij_less_hex_color_short_format = false
ij_less_hex_color_upper_case = false
ij_less_keep_blank_lines_in_code = 2
ij_less_keep_indents_on_empty_lines = false
ij_less_keep_single_line_blocks = false
ij_less_properties_order = font, font-family, font-size, font-weight, font-style, font-variant, font-size-adjust, font-stretch, line-height, position, z-index, top, right, bottom, left, display, visibility, float, clear, overflow, overflow-x, overflow-y, clip, zoom, align-content, align-items, align-self, flex, flex-flow, flex-basis, flex-direction, flex-grow, flex-shrink, flex-wrap, justify-content, order, box-sizing, width, min-width, max-width, height, min-height, max-height, margin, margin-top, margin-right, margin-bottom, margin-left, padding, padding-top, padding-right, padding-bottom, padding-left, table-layout, empty-cells, caption-side, border-spacing, border-collapse, list-style, list-style-position, list-style-type, list-style-image, content, quotes, counter-reset, counter-increment, resize, cursor, user-select, nav-index, nav-up, nav-right, nav-down, nav-left, transition, transition-delay, transition-timing-function, transition-duration, transition-property, transform, transform-origin, animation, animation-name, animation-duration, animation-play-state, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, text-align, text-align-last, vertical-align, white-space, text-decoration, text-emphasis, text-emphasis-color, text-emphasis-style, text-emphasis-position, text-indent, text-justify, letter-spacing, word-spacing, text-outline, text-transform, text-wrap, text-overflow, text-overflow-ellipsis, text-overflow-mode, word-wrap, word-break, tab-size, hyphens, pointer-events, opacity, color, border, border-width, border-style, border-color, border-top, border-top-width, border-top-style, border-top-color, border-right, border-right-width, border-right-style, border-right-color, border-bottom, border-bottom-width, border-bottom-style, border-bottom-color, border-left, border-left-width, border-left-style, border-left-color, border-radius, border-top-left-radius, border-top-right-radius, border-bottom-right-radius, border-bottom-left-radius, border-image, border-image-source, border-image-slice, border-image-width, border-image-outset, border-image-repeat, outline, outline-width, outline-style, outline-color, outline-offset, background, background-color, background-image, background-repeat, background-attachment, background-position, background-position-x, background-position-y, background-clip, background-origin, background-size, box-decoration-break, box-shadow, text-shadow
ij_less_space_after_colon = true
ij_less_space_before_opening_brace = true
ij_less_use_double_quotes = true
ij_less_value_alignment = 0

[*.nbtt]
indent_size = 4
max_line_length = 150
tab_width = 4
ij_nbtt_keep_indents_on_empty_lines = false
ij_nbtt_space_after_colon = true
ij_nbtt_space_after_comma = true
ij_nbtt_space_before_colon = true
ij_nbtt_space_before_comma = false
ij_nbtt_spaces_within_brackets = false
ij_nbtt_spaces_within_parentheses = false

[*.sass]
ij_sass_align_closing_brace_with_properties = false
ij_sass_blank_lines_around_nested_selector = 1
ij_sass_blank_lines_between_blocks = 1
ij_sass_brace_placement = 0
ij_sass_enforce_quotes_on_format = false
ij_sass_hex_color_long_format = false
ij_sass_hex_color_lower_case = false
ij_sass_hex_color_short_format = false
ij_sass_hex_color_upper_case = false
ij_sass_keep_blank_lines_in_code = 2
ij_sass_keep_indents_on_empty_lines = false
ij_sass_keep_single_line_blocks = false
ij_sass_properties_order = font, font-family, font-size, font-weight, font-style, font-variant, font-size-adjust, font-stretch, line-height, position, z-index, top, right, bottom, left, display, visibility, float, clear, overflow, overflow-x, overflow-y, clip, zoom, align-content, align-items, align-self, flex, flex-flow, flex-basis, flex-direction, flex-grow, flex-shrink, flex-wrap, justify-content, order, box-sizing, width, min-width, max-width, height, min-height, max-height, margin, margin-top, margin-right, margin-bottom, margin-left, padding, padding-top, padding-right, padding-bottom, padding-left, table-layout, empty-cells, caption-side, border-spacing, border-collapse, list-style, list-style-position, list-style-type, list-style-image, content, quotes, counter-reset, counter-increment, resize, cursor, user-select, nav-index, nav-up, nav-right, nav-down, nav-left, transition, transition-delay, transition-timing-function, transition-duration, transition-property, transform, transform-origin, animation, animation-name, animation-duration, animation-play-state, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, text-align, text-align-last, vertical-align, white-space, text-decoration, text-emphasis, text-emphasis-color, text-emphasis-style, text-emphasis-position, text-indent, text-justify, letter-spacing, word-spacing, text-outline, text-transform, text-wrap, text-overflow, text-overflow-ellipsis, text-overflow-mode, word-wrap, word-break, tab-size, hyphens, pointer-events, opacity, color, border, border-width, border-style, border-color, border-top, border-top-width, border-top-style, border-top-color, border-right, border-right-width, border-right-style, border-right-color, border-bottom, border-bottom-width, border-bottom-style, border-bottom-color, border-left, border-left-width, border-left-style, border-left-color, border-radius, border-top-left-radius, border-top-right-radius, border-bottom-right-radius, border-bottom-left-radius, border-image, border-image-source, border-image-slice, border-image-width, border-image-outset, border-image-repeat, outline, outline-width, outline-style, outline-color, outline-offset, background, background-color, background-image, background-repeat, background-attachment, background-position, background-position-x, background-position-y, background-clip, background-origin, background-size, box-decoration-break, box-shadow, text-shadow
ij_sass_space_after_colon = true
ij_sass_space_before_opening_brace = true
ij_sass_use_double_quotes = true
ij_sass_value_alignment = 0

[*.scss]
ij_scss_align_closing_brace_with_properties = false
ij_scss_blank_lines_around_nested_selector = 1
ij_scss_blank_lines_between_blocks = 1
ij_scss_brace_placement = 0
ij_scss_enforce_quotes_on_format = false
ij_scss_hex_color_long_format = false
ij_scss_hex_color_lower_case = false
ij_scss_hex_color_short_format = false
ij_scss_hex_color_upper_case = false
ij_scss_keep_blank_lines_in_code = 2
ij_scss_keep_indents_on_empty_lines = false
ij_scss_keep_single_line_blocks = false
ij_scss_properties_order = font, font-family, font-size, font-weight, font-style, font-variant, font-size-adjust, font-stretch, line-height, position, z-index, top, right, bottom, left, display, visibility, float, clear, overflow, overflow-x, overflow-y, clip, zoom, align-content, align-items, align-self, flex, flex-flow, flex-basis, flex-direction, flex-grow, flex-shrink, flex-wrap, justify-content, order, box-sizing, width, min-width, max-width, height, min-height, max-height, margin, margin-top, margin-right, margin-bottom, margin-left, padding, padding-top, padding-right, padding-bottom, padding-left, table-layout, empty-cells, caption-side, border-spacing, border-collapse, list-style, list-style-position, list-style-type, list-style-image, content, quotes, counter-reset, counter-increment, resize, cursor, user-select, nav-index, nav-up, nav-right, nav-down, nav-left, transition, transition-delay, transition-timing-function, transition-duration, transition-property, transform, transform-origin, animation, animation-name, animation-duration, animation-play-state, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, text-align, text-align-last, vertical-align, white-space, text-decoration, text-emphasis, text-emphasis-color, text-emphasis-style, text-emphasis-position, text-indent, text-justify, letter-spacing, word-spacing, text-outline, text-transform, text-wrap, text-overflow, text-overflow-ellipsis, text-overflow-mode, word-wrap, word-break, tab-size, hyphens, pointer-events, opacity, color, border, border-width, border-style, border-color, border-top, border-top-width, border-top-style, border-top-color, border-right, border-right-width, border-right-style, border-right-color, border-bottom, border-bottom-width, border-bottom-style, border-bottom-color, border-left, border-left-width, border-left-style, border-left-color, border-radius, border-top-left-radius, border-top-right-radius, border-bottom-right-radius, border-bottom-left-radius, border-image, border-image-source, border-image-slice, border-image-width, border-image-outset, border-image-repeat, outline, outline-width, outline-style, outline-color, outline-offset, background, background-color, background-image, background-repeat, background-attachment, background-position, background-position-x, background-position-y, background-clip, background-origin, background-size, box-decoration-break, box-shadow, text-shadow
ij_scss_space_after_colon = true
ij_scss_space_before_opening_brace = true
ij_scss_use_double_quotes = true
ij_scss_value_alignment = 0

[*.styl]
tab_width = 4
ij_continuation_indent_size = 8
ij_stylus_align_closing_brace_with_properties = false
ij_stylus_blank_lines_around_nested_selector = 1
ij_stylus_blank_lines_between_blocks = 1
ij_stylus_brace_placement = 0
ij_stylus_enforce_quotes_on_format = false
ij_stylus_hex_color_long_format = false
ij_stylus_hex_color_lower_case = false
ij_stylus_hex_color_short_format = false
ij_stylus_hex_color_upper_case = false
ij_stylus_keep_blank_lines_in_code = 2
ij_stylus_keep_indents_on_empty_lines = false
ij_stylus_keep_single_line_blocks = false
ij_stylus_properties_order = font, font-family, font-size, font-weight, font-style, font-variant, font-size-adjust, font-stretch, line-height, position, z-index, top, right, bottom, left, display, visibility, float, clear, overflow, overflow-x, overflow-y, clip, zoom, align-content, align-items, align-self, flex, flex-flow, flex-basis, flex-direction, flex-grow, flex-shrink, flex-wrap, justify-content, order, box-sizing, width, min-width, max-width, height, min-height, max-height, margin, margin-top, margin-right, margin-bottom, margin-left, padding, padding-top, padding-right, padding-bottom, padding-left, table-layout, empty-cells, caption-side, border-spacing, border-collapse, list-style, list-style-position, list-style-type, list-style-image, content, quotes, counter-reset, counter-increment, resize, cursor, user-select, nav-index, nav-up, nav-right, nav-down, nav-left, transition, transition-delay, transition-timing-function, transition-duration, transition-property, transform, transform-origin, animation, animation-name, animation-duration, animation-play-state, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, text-align, text-align-last, vertical-align, white-space, text-decoration, text-emphasis, text-emphasis-color, text-emphasis-style, text-emphasis-position, text-indent, text-justify, letter-spacing, word-spacing, text-outline, text-transform, text-wrap, text-overflow, text-overflow-ellipsis, text-overflow-mode, word-wrap, word-break, tab-size, hyphens, pointer-events, opacity, color, border, border-width, border-style, border-color, border-top, border-top-width, border-top-style, border-top-color, border-right, border-right-width, border-right-style, border-right-color, border-bottom, border-bottom-width, border-bottom-style, border-bottom-color, border-left, border-left-width, border-left-style, border-left-color, border-radius, border-top-left-radius, border-top-right-radius, border-bottom-right-radius, border-bottom-left-radius, border-image, border-image-source, border-image-slice, border-image-width, border-image-outset, border-image-repeat, outline, outline-width, outline-style, outline-color, outline-offset, background, background-color, background-image, background-repeat, background-attachment, background-position, background-position-x, background-position-y, background-clip, background-origin, background-size, box-decoration-break, box-shadow, text-shadow
ij_stylus_space_after_colon = true
ij_stylus_space_before_opening_brace = true
ij_stylus_use_double_quotes = true
ij_stylus_value_alignment = 0

[*.tikz]
indent_size = 4
tab_width = 4
ij_continuation_indent_size = 8
ij_latex_keep_first_column_comment = true
ij_latex_keep_indents_on_empty_lines = false
ij_latex_line_comment_add_space = false
ij_latex_line_comment_at_first_column = true
ij_latex_wrap_long_lines = false

[.editorconfig]
ij_editorconfig_align_group_field_declarations = false
ij_editorconfig_space_after_colon = false
ij_editorconfig_space_after_comma = true
ij_editorconfig_space_before_colon = false
ij_editorconfig_space_before_comma = false
ij_editorconfig_spaces_around_assignment_operators = true

[{*.ant, *.bpmn, *.fxml, *.jhm, *.jnlp, *.jrxml, *.plan, *.pom, *.rng, *.tld, *.wadl, *.wsdd, *.wsdl, *.xjb, *.xml, *.xsd, *.xsl, *.xslt, *.xul}]
ij_continuation_indent_size = 2
ij_xml_align_attributes = false
ij_xml_align_text = false
ij_xml_attribute_wrap = normal
ij_xml_block_comment_at_first_column = true
ij_xml_keep_blank_lines = 2
ij_xml_keep_indents_on_empty_lines = false
ij_xml_keep_line_breaks = true
ij_xml_keep_line_breaks_in_text = true
ij_xml_keep_whitespaces = false
ij_xml_keep_whitespaces_around_cdata = preserve
ij_xml_keep_whitespaces_inside_cdata = false
ij_xml_line_comment_at_first_column = true
ij_xml_space_after_tag_name = false
ij_xml_space_around_equals_in_attribute = false
ij_xml_space_inside_empty_tag = false
ij_xml_text_wrap = normal
ij_xml_use_custom_settings = true

[{*.as, *.es, *.js2}]
indent_size = 4
ij_continuation_indent_size = 8
ij_actionscript_align_imports = false
ij_actionscript_align_multiline_array_initializer_expression = false
ij_actionscript_align_multiline_binary_operation = false
ij_actionscript_align_multiline_chained_methods = false
ij_actionscript_align_multiline_extends_list = false
ij_actionscript_align_multiline_for = false
ij_actionscript_align_multiline_parameters = false
ij_actionscript_align_multiline_parameters_in_calls = false
ij_actionscript_align_multiline_ternary_operation = false
ij_actionscript_align_object_properties = 0
ij_actionscript_align_union_types = false
ij_actionscript_align_var_statements = 0
ij_actionscript_array_initializer_new_line_after_left_brace = false
ij_actionscript_array_initializer_right_brace_on_new_line = false
ij_actionscript_array_initializer_wrap = normal
ij_actionscript_assignment_wrap = off
ij_actionscript_binary_operation_sign_on_next_line = true
ij_actionscript_binary_operation_wrap = normal
ij_actionscript_blacklist_imports = rxjs/Rx, node_modules/**, **/node_modules/**, @angular/material, @angular/material/typings/**
ij_actionscript_blank_lines_after_imports = 1
ij_actionscript_blank_lines_after_package = 0
ij_actionscript_blank_lines_around_function = 1
ij_actionscript_blank_lines_around_method = 1
ij_actionscript_blank_lines_before_imports = 1
ij_actionscript_blank_lines_before_package = 0
ij_actionscript_block_brace_style = end_of_line
ij_actionscript_call_parameters_new_line_after_left_paren = false
ij_actionscript_call_parameters_right_paren_on_new_line = false
ij_actionscript_call_parameters_wrap = normal
ij_actionscript_catch_on_new_line = false
ij_actionscript_chained_call_dot_on_new_line = true
ij_actionscript_class_brace_style = end_of_line
ij_actionscript_comma_on_new_line = false
ij_actionscript_do_while_brace_force = always
ij_actionscript_else_on_new_line = false
ij_actionscript_enforce_trailing_comma = keep
ij_actionscript_extends_keyword_wrap = off
ij_actionscript_extends_list_wrap = normal
ij_actionscript_field_prefix = _
ij_actionscript_file_name_style = relaxed
ij_actionscript_finally_on_new_line = false
ij_actionscript_for_brace_force = always
ij_actionscript_for_statement_new_line_after_left_paren = false
ij_actionscript_for_statement_right_paren_on_new_line = false
ij_actionscript_for_statement_wrap = normal
ij_actionscript_force_quote_style = false
ij_actionscript_force_semicolon_style = false
ij_actionscript_function_expression_brace_style = end_of_line
ij_actionscript_if_brace_force = always
ij_actionscript_import_merge_members = global
ij_actionscript_import_prefer_absolute_path = global
ij_actionscript_import_sort_members = true
ij_actionscript_import_sort_module_name = false
ij_actionscript_import_use_node_resolution = true
ij_actionscript_imports_wrap = on_every_item
ij_actionscript_indent_case_from_switch = true
ij_actionscript_indent_chained_calls = true
ij_actionscript_indent_package_children = 0
ij_actionscript_jsx_attribute_value = braces
ij_actionscript_keep_blank_lines_in_code = 1
ij_actionscript_keep_first_column_comment = true
ij_actionscript_keep_indents_on_empty_lines = false
ij_actionscript_keep_line_breaks = true
ij_actionscript_keep_simple_blocks_in_one_line = false
ij_actionscript_keep_simple_methods_in_one_line = false
ij_actionscript_line_comment_at_first_column = true
ij_actionscript_method_brace_style = end_of_line
ij_actionscript_method_call_chain_wrap = off
ij_actionscript_method_parameters_new_line_after_left_paren = false
ij_actionscript_method_parameters_right_paren_on_new_line = false
ij_actionscript_method_parameters_wrap = normal
ij_actionscript_object_literal_wrap = on_every_item
ij_actionscript_parentheses_expression_new_line_after_left_paren = false
ij_actionscript_parentheses_expression_right_paren_on_new_line = false
ij_actionscript_place_assignment_sign_on_next_line = false
ij_actionscript_prefer_as_type_cast = false
ij_actionscript_prefer_explicit_types_function_expression_returns = false
ij_actionscript_prefer_explicit_types_function_returns = false
ij_actionscript_prefer_explicit_types_vars_fields = false
ij_actionscript_prefer_parameters_wrap = false
ij_actionscript_reformat_c_style_comments = false
ij_actionscript_space_after_colon = true
ij_actionscript_space_after_comma = true
ij_actionscript_space_after_dots_in_rest_parameter = false
ij_actionscript_space_after_generator_mult = true
ij_actionscript_space_after_property_colon = true
ij_actionscript_space_after_quest = true
ij_actionscript_space_after_type_colon = false
ij_actionscript_space_after_unary_not = false
ij_actionscript_space_before_async_arrow_lparen = true
ij_actionscript_space_before_catch_keyword = true
ij_actionscript_space_before_catch_left_brace = true
ij_actionscript_space_before_catch_parentheses = true
ij_actionscript_space_before_class_lbrace = true
ij_actionscript_space_before_colon = true
ij_actionscript_space_before_comma = false
ij_actionscript_space_before_do_left_brace = true
ij_actionscript_space_before_else_keyword = true
ij_actionscript_space_before_else_left_brace = true
ij_actionscript_space_before_finally_keyword = true
ij_actionscript_space_before_finally_left_brace = true
ij_actionscript_space_before_for_left_brace = true
ij_actionscript_space_before_for_parentheses = true
ij_actionscript_space_before_for_semicolon = false
ij_actionscript_space_before_function_left_parenth = true
ij_actionscript_space_before_generator_mult = false
ij_actionscript_space_before_if_left_brace = true
ij_actionscript_space_before_if_parentheses = true
ij_actionscript_space_before_method_call_parentheses = false
ij_actionscript_space_before_method_left_brace = true
ij_actionscript_space_before_method_parentheses = false
ij_actionscript_space_before_property_colon = false
ij_actionscript_space_before_quest = true
ij_actionscript_space_before_switch_left_brace = true
ij_actionscript_space_before_switch_parentheses = true
ij_actionscript_space_before_try_left_brace = true
ij_actionscript_space_before_type_colon = false
ij_actionscript_space_before_unary_not = false
ij_actionscript_space_before_while_keyword = true
ij_actionscript_space_before_while_left_brace = true
ij_actionscript_space_before_while_parentheses = true
ij_actionscript_spaces_around_additive_operators = true
ij_actionscript_spaces_around_arrow_function_operator = true
ij_actionscript_spaces_around_assignment_operators = true
ij_actionscript_spaces_around_bitwise_operators = true
ij_actionscript_spaces_around_equality_operators = true
ij_actionscript_spaces_around_logical_operators = true
ij_actionscript_spaces_around_multiplicative_operators = true
ij_actionscript_spaces_around_relational_operators = true
ij_actionscript_spaces_around_shift_operators = true
ij_actionscript_spaces_around_unary_operator = false
ij_actionscript_spaces_within_array_initializer_brackets = false
ij_actionscript_spaces_within_brackets = false
ij_actionscript_spaces_within_catch_parentheses = false
ij_actionscript_spaces_within_for_parentheses = false
ij_actionscript_spaces_within_if_parentheses = false
ij_actionscript_spaces_within_imports = false
ij_actionscript_spaces_within_interpolation_expressions = false
ij_actionscript_spaces_within_method_call_parentheses = false
ij_actionscript_spaces_within_method_parentheses = false
ij_actionscript_spaces_within_object_literal_braces = false
ij_actionscript_spaces_within_object_type_braces = true
ij_actionscript_spaces_within_parentheses = false
ij_actionscript_spaces_within_switch_parentheses = false
ij_actionscript_spaces_within_type_assertion = false
ij_actionscript_spaces_within_union_types = true
ij_actionscript_spaces_within_while_parentheses = false
ij_actionscript_special_else_if_treatment = true
ij_actionscript_ternary_operation_signs_on_next_line = true
ij_actionscript_ternary_operation_wrap = normal
ij_actionscript_union_types_wrap = on_every_item
ij_actionscript_use_chained_calls_group_indents = false
ij_actionscript_use_double_quotes = true
ij_actionscript_use_explicit_js_extension = global
ij_actionscript_use_path_mapping = always
ij_actionscript_use_public_modifier = false
ij_actionscript_use_semicolon_after_statement = true
ij_actionscript_var_declaration_wrap = normal
ij_actionscript_while_brace_force = always
ij_actionscript_while_on_new_line = false
ij_actionscript_wrap_comments = false

[{*.ats, *.ts}]
ij_typescript_align_imports = false
ij_typescript_align_multiline_array_initializer_expression = false
ij_typescript_align_multiline_binary_operation = false
ij_typescript_align_multiline_chained_methods = false
ij_typescript_align_multiline_extends_list = false
ij_typescript_align_multiline_for = true
ij_typescript_align_multiline_parameters = true
ij_typescript_align_multiline_parameters_in_calls = false
ij_typescript_align_multiline_ternary_operation = false
ij_typescript_align_object_properties = 0
ij_typescript_align_union_types = false
ij_typescript_align_var_statements = 0
ij_typescript_array_initializer_new_line_after_left_brace = false
ij_typescript_array_initializer_right_brace_on_new_line = false
ij_typescript_array_initializer_wrap = off
ij_typescript_assignment_wrap = off
ij_typescript_binary_operation_sign_on_next_line = false
ij_typescript_binary_operation_wrap = off
ij_typescript_blacklist_imports = rxjs/Rx, node_modules/**, **/node_modules/**, @angular/material, @angular/material/typings/**
ij_typescript_blank_lines_after_imports = 1
ij_typescript_blank_lines_around_class = 1
ij_typescript_blank_lines_around_field = 0
ij_typescript_blank_lines_around_field_in_interface = 0
ij_typescript_blank_lines_around_function = 1
ij_typescript_blank_lines_around_method = 1
ij_typescript_blank_lines_around_method_in_interface = 1
ij_typescript_block_brace_style = end_of_line
ij_typescript_call_parameters_new_line_after_left_paren = false
ij_typescript_call_parameters_right_paren_on_new_line = false
ij_typescript_call_parameters_wrap = off
ij_typescript_catch_on_new_line = false
ij_typescript_chained_call_dot_on_new_line = true
ij_typescript_class_brace_style = end_of_line
ij_typescript_comma_on_new_line = false
ij_typescript_do_while_brace_force = never
ij_typescript_else_on_new_line = false
ij_typescript_enforce_trailing_comma = keep
ij_typescript_extends_keyword_wrap = off
ij_typescript_extends_list_wrap = off
ij_typescript_field_prefix = _
ij_typescript_file_name_style = relaxed
ij_typescript_finally_on_new_line = false
ij_typescript_for_brace_force = never
ij_typescript_for_statement_new_line_after_left_paren = false
ij_typescript_for_statement_right_paren_on_new_line = false
ij_typescript_for_statement_wrap = off
ij_typescript_force_quote_style = false
ij_typescript_force_semicolon_style = false
ij_typescript_function_expression_brace_style = end_of_line
ij_typescript_if_brace_force = never
ij_typescript_import_merge_members = global
ij_typescript_import_prefer_absolute_path = global
ij_typescript_import_sort_members = true
ij_typescript_import_sort_module_name = false
ij_typescript_import_use_node_resolution = true
ij_typescript_imports_wrap = on_every_item
ij_typescript_indent_case_from_switch = true
ij_typescript_indent_chained_calls = false
ij_typescript_indent_package_children = 0
ij_typescript_jsdoc_include_types = false
ij_typescript_jsx_attribute_value = braces
ij_typescript_keep_blank_lines_in_code = 2
ij_typescript_keep_first_column_comment = true
ij_typescript_keep_indents_on_empty_lines = false
ij_typescript_keep_line_breaks = true
ij_typescript_keep_simple_blocks_in_one_line = false
ij_typescript_keep_simple_methods_in_one_line = false
ij_typescript_line_comment_add_space = true
ij_typescript_line_comment_at_first_column = false
ij_typescript_method_brace_style = end_of_line
ij_typescript_method_call_chain_wrap = off
ij_typescript_method_parameters_new_line_after_left_paren = false
ij_typescript_method_parameters_right_paren_on_new_line = false
ij_typescript_method_parameters_wrap = off
ij_typescript_object_literal_wrap = on_every_item
ij_typescript_parentheses_expression_new_line_after_left_paren = false
ij_typescript_parentheses_expression_right_paren_on_new_line = false
ij_typescript_place_assignment_sign_on_next_line = false
ij_typescript_prefer_as_type_cast = false
ij_typescript_prefer_explicit_types_function_expression_returns = false
ij_typescript_prefer_explicit_types_function_returns = false
ij_typescript_prefer_explicit_types_vars_fields = false
ij_typescript_prefer_parameters_wrap = false
ij_typescript_reformat_c_style_comments = false
ij_typescript_space_after_colon = true
ij_typescript_space_after_comma = true
ij_typescript_space_after_dots_in_rest_parameter = false
ij_typescript_space_after_generator_mult = true
ij_typescript_space_after_property_colon = true
ij_typescript_space_after_quest = true
ij_typescript_space_after_type_colon = true
ij_typescript_space_after_unary_not = false
ij_typescript_space_before_async_arrow_lparen = true
ij_typescript_space_before_catch_keyword = true
ij_typescript_space_before_catch_left_brace = true
ij_typescript_space_before_catch_parentheses = true
ij_typescript_space_before_class_lbrace = true
ij_typescript_space_before_class_left_brace = true
ij_typescript_space_before_colon = true
ij_typescript_space_before_comma = false
ij_typescript_space_before_do_left_brace = true
ij_typescript_space_before_else_keyword = true
ij_typescript_space_before_else_left_brace = true
ij_typescript_space_before_finally_keyword = true
ij_typescript_space_before_finally_left_brace = true
ij_typescript_space_before_for_left_brace = true
ij_typescript_space_before_for_parentheses = true
ij_typescript_space_before_for_semicolon = false
ij_typescript_space_before_function_left_parenth = true
ij_typescript_space_before_generator_mult = false
ij_typescript_space_before_if_left_brace = true
ij_typescript_space_before_if_parentheses = true
ij_typescript_space_before_method_call_parentheses = false
ij_typescript_space_before_method_left_brace = true
ij_typescript_space_before_method_parentheses = false
ij_typescript_space_before_property_colon = false
ij_typescript_space_before_quest = true
ij_typescript_space_before_switch_left_brace = true
ij_typescript_space_before_switch_parentheses = true
ij_typescript_space_before_try_left_brace = true
ij_typescript_space_before_type_colon = false
ij_typescript_space_before_unary_not = false
ij_typescript_space_before_while_keyword = true
ij_typescript_space_before_while_left_brace = true
ij_typescript_space_before_while_parentheses = true
ij_typescript_spaces_around_additive_operators = true
ij_typescript_spaces_around_arrow_function_operator = true
ij_typescript_spaces_around_assignment_operators = true
ij_typescript_spaces_around_bitwise_operators = true
ij_typescript_spaces_around_equality_operators = true
ij_typescript_spaces_around_logical_operators = true
ij_typescript_spaces_around_multiplicative_operators = true
ij_typescript_spaces_around_relational_operators = true
ij_typescript_spaces_around_shift_operators = true
ij_typescript_spaces_around_unary_operator = false
ij_typescript_spaces_within_array_initializer_brackets = false
ij_typescript_spaces_within_brackets = false
ij_typescript_spaces_within_catch_parentheses = false
ij_typescript_spaces_within_for_parentheses = false
ij_typescript_spaces_within_if_parentheses = false
ij_typescript_spaces_within_imports = false
ij_typescript_spaces_within_interpolation_expressions = false
ij_typescript_spaces_within_method_call_parentheses = false
ij_typescript_spaces_within_method_parentheses = false
ij_typescript_spaces_within_object_literal_braces = false
ij_typescript_spaces_within_object_type_braces = true
ij_typescript_spaces_within_parentheses = false
ij_typescript_spaces_within_switch_parentheses = false
ij_typescript_spaces_within_type_assertion = false
ij_typescript_spaces_within_union_types = true
ij_typescript_spaces_within_while_parentheses = false
ij_typescript_special_else_if_treatment = true
ij_typescript_ternary_operation_signs_on_next_line = false
ij_typescript_ternary_operation_wrap = off
ij_typescript_union_types_wrap = on_every_item
ij_typescript_use_chained_calls_group_indents = false
ij_typescript_use_double_quotes = true
ij_typescript_use_explicit_js_extension = global
ij_typescript_use_path_mapping = always
ij_typescript_use_public_modifier = false
ij_typescript_use_semicolon_after_statement = true
ij_typescript_var_declaration_wrap = normal
ij_typescript_while_brace_force = never
ij_typescript_while_on_new_line = false
ij_typescript_wrap_comments = false

[{*.cfc, *.cfm, *.cfml}]
indent_size = 4
tab_width = 4
ij_continuation_indent_size = 8
ij_cfml_align_multiline_binary_operation = false
ij_cfml_align_multiline_for = true
ij_cfml_align_multiline_parameters = true
ij_cfml_align_multiline_parameters_in_calls = false
ij_cfml_align_multiline_ternary_operation = false
ij_cfml_assignment_wrap = off
ij_cfml_binary_operation_sign_on_next_line = false
ij_cfml_binary_operation_wrap = off
ij_cfml_block_brace_style = end_of_line
ij_cfml_call_parameters_new_line_after_left_paren = false
ij_cfml_call_parameters_right_paren_on_new_line = false
ij_cfml_call_parameters_wrap = off
ij_cfml_catch_on_new_line = false
ij_cfml_else_on_new_line = false
ij_cfml_for_statement_new_line_after_left_paren = false
ij_cfml_for_statement_right_paren_on_new_line = false
ij_cfml_for_statement_wrap = off
ij_cfml_keep_blank_lines_in_code = 2
ij_cfml_keep_first_column_comment = true
ij_cfml_keep_indents_on_empty_lines = false
ij_cfml_keep_line_breaks = true
ij_cfml_method_brace_style = next_line
ij_cfml_method_parameters_new_line_after_left_paren = false
ij_cfml_method_parameters_right_paren_on_new_line = false
ij_cfml_method_parameters_wrap = off
ij_cfml_parentheses_expression_new_line_after_left_paren = false
ij_cfml_parentheses_expression_right_paren_on_new_line = false
ij_cfml_place_assignment_sign_on_next_line = false
ij_cfml_space_after_colon = true
ij_cfml_space_after_comma = true
ij_cfml_space_after_for_semicolon = true
ij_cfml_space_after_quest = true
ij_cfml_space_before_catch_keyword = true
ij_cfml_space_before_catch_left_brace = true
ij_cfml_space_before_catch_parentheses = true
ij_cfml_space_before_colon = true
ij_cfml_space_before_comma = false
ij_cfml_space_before_else_keyword = true
ij_cfml_space_before_else_left_brace = true
ij_cfml_space_before_for_left_brace = true
ij_cfml_space_before_for_parentheses = true
ij_cfml_space_before_for_semicolon = false
ij_cfml_space_before_if_left_brace = true
ij_cfml_space_before_if_parentheses = true
ij_cfml_space_before_method_call_parentheses = false
ij_cfml_space_before_method_left_brace = true
ij_cfml_space_before_method_parentheses = false
ij_cfml_space_before_quest = true
ij_cfml_space_before_switch_left_brace = true
ij_cfml_space_before_switch_parentheses = true
ij_cfml_space_before_try_left_brace = true
ij_cfml_space_before_while_keyword = true
ij_cfml_space_before_while_left_brace = true
ij_cfml_space_before_while_parentheses = true
ij_cfml_spaces_around_additive_operators = true
ij_cfml_spaces_around_assignment_operators = true
ij_cfml_spaces_around_equality_operators = true
ij_cfml_spaces_around_logical_operators = true
ij_cfml_spaces_around_multiplicative_operators = true
ij_cfml_spaces_around_relational_operators = true
ij_cfml_spaces_around_unary_operator = false
ij_cfml_spaces_within_catch_parentheses = false
ij_cfml_spaces_within_for_parentheses = false
ij_cfml_spaces_within_if_parentheses = false
ij_cfml_spaces_within_method_call_parentheses = false
ij_cfml_spaces_within_method_parentheses = false
ij_cfml_spaces_within_switch_parentheses = false
ij_cfml_spaces_within_while_parentheses = false
ij_cfml_special_else_if_treatment = false
ij_cfml_ternary_operation_signs_on_next_line = false
ij_cfml_ternary_operation_wrap = off
ij_cfml_while_on_new_line = false

[{*.cjs, *.js}]
max_line_length = 80
ij_javascript_align_imports = false
ij_javascript_align_multiline_array_initializer_expression = false
ij_javascript_align_multiline_binary_operation = false
ij_javascript_align_multiline_chained_methods = false
ij_javascript_align_multiline_extends_list = false
ij_javascript_align_multiline_for = false
ij_javascript_align_multiline_parameters = false
ij_javascript_align_multiline_parameters_in_calls = false
ij_javascript_align_multiline_ternary_operation = false
ij_javascript_align_object_properties = 0
ij_javascript_align_union_types = false
ij_javascript_align_var_statements = 0
ij_javascript_array_initializer_new_line_after_left_brace = false
ij_javascript_array_initializer_right_brace_on_new_line = false
ij_javascript_array_initializer_wrap = normal
ij_javascript_assignment_wrap = off
ij_javascript_binary_operation_sign_on_next_line = true
ij_javascript_binary_operation_wrap = normal
ij_javascript_blacklist_imports = rxjs/Rx, node_modules/**, **/node_modules/**, @angular/material, @angular/material/typings/**
ij_javascript_blank_lines_after_imports = 1
ij_javascript_blank_lines_around_class = 1
ij_javascript_blank_lines_around_field = 0
ij_javascript_blank_lines_around_function = 1
ij_javascript_blank_lines_around_method = 1
ij_javascript_block_brace_style = end_of_line
ij_javascript_call_parameters_new_line_after_left_paren = false
ij_javascript_call_parameters_right_paren_on_new_line = false
ij_javascript_call_parameters_wrap = normal
ij_javascript_catch_on_new_line = false
ij_javascript_chained_call_dot_on_new_line = true
ij_javascript_class_brace_style = end_of_line
ij_javascript_comma_on_new_line = false
ij_javascript_do_while_brace_force = always
ij_javascript_else_on_new_line = false
ij_javascript_enforce_trailing_comma = keep
ij_javascript_extends_keyword_wrap = off
ij_javascript_extends_list_wrap = off
ij_javascript_field_prefix = _
ij_javascript_file_name_style = relaxed
ij_javascript_finally_on_new_line = false
ij_javascript_for_brace_force = always
ij_javascript_for_statement_new_line_after_left_paren = false
ij_javascript_for_statement_right_paren_on_new_line = false
ij_javascript_for_statement_wrap = normal
ij_javascript_force_quote_style = false
ij_javascript_force_semicolon_style = false
ij_javascript_function_expression_brace_style = end_of_line
ij_javascript_if_brace_force = always
ij_javascript_import_merge_members = global
ij_javascript_import_prefer_absolute_path = global
ij_javascript_import_sort_members = true
ij_javascript_import_sort_module_name = false
ij_javascript_import_use_node_resolution = true
ij_javascript_imports_wrap = on_every_item
ij_javascript_indent_case_from_switch = true
ij_javascript_indent_chained_calls = false
ij_javascript_indent_package_children = 0
ij_javascript_jsx_attribute_value = braces
ij_javascript_keep_blank_lines_in_code = 1
ij_javascript_keep_first_column_comment = true
ij_javascript_keep_indents_on_empty_lines = false
ij_javascript_keep_line_breaks = true
ij_javascript_keep_simple_blocks_in_one_line = false
ij_javascript_keep_simple_methods_in_one_line = false
ij_javascript_line_comment_add_space = true
ij_javascript_line_comment_at_first_column = false
ij_javascript_method_brace_style = end_of_line
ij_javascript_method_call_chain_wrap = off
ij_javascript_method_parameters_new_line_after_left_paren = false
ij_javascript_method_parameters_right_paren_on_new_line = false
ij_javascript_method_parameters_wrap = normal
ij_javascript_object_literal_wrap = on_every_item
ij_javascript_parentheses_expression_new_line_after_left_paren = false
ij_javascript_parentheses_expression_right_paren_on_new_line = false
ij_javascript_place_assignment_sign_on_next_line = false
ij_javascript_prefer_as_type_cast = false
ij_javascript_prefer_explicit_types_function_expression_returns = false
ij_javascript_prefer_explicit_types_function_returns = false
ij_javascript_prefer_explicit_types_vars_fields = false
ij_javascript_prefer_parameters_wrap = false
ij_javascript_reformat_c_style_comments = false
ij_javascript_space_after_colon = true
ij_javascript_space_after_comma = true
ij_javascript_space_after_dots_in_rest_parameter = false
ij_javascript_space_after_generator_mult = true
ij_javascript_space_after_property_colon = true
ij_javascript_space_after_quest = true
ij_javascript_space_after_type_colon = true
ij_javascript_space_after_unary_not = false
ij_javascript_space_before_async_arrow_lparen = true
ij_javascript_space_before_catch_keyword = true
ij_javascript_space_before_catch_left_brace = true
ij_javascript_space_before_catch_parentheses = true
ij_javascript_space_before_class_lbrace = true
ij_javascript_space_before_class_left_brace = true
ij_javascript_space_before_colon = true
ij_javascript_space_before_comma = false
ij_javascript_space_before_do_left_brace = true
ij_javascript_space_before_else_keyword = true
ij_javascript_space_before_else_left_brace = true
ij_javascript_space_before_finally_keyword = true
ij_javascript_space_before_finally_left_brace = true
ij_javascript_space_before_for_left_brace = true
ij_javascript_space_before_for_parentheses = true
ij_javascript_space_before_for_semicolon = false
ij_javascript_space_before_function_left_parenth = true
ij_javascript_space_before_generator_mult = false
ij_javascript_space_before_if_left_brace = true
ij_javascript_space_before_if_parentheses = true
ij_javascript_space_before_method_call_parentheses = false
ij_javascript_space_before_method_left_brace = true
ij_javascript_space_before_method_parentheses = false
ij_javascript_space_before_property_colon = false
ij_javascript_space_before_quest = true
ij_javascript_space_before_switch_left_brace = true
ij_javascript_space_before_switch_parentheses = true
ij_javascript_space_before_try_left_brace = true
ij_javascript_space_before_type_colon = false
ij_javascript_space_before_unary_not = false
ij_javascript_space_before_while_keyword = true
ij_javascript_space_before_while_left_brace = true
ij_javascript_space_before_while_parentheses = true
ij_javascript_spaces_around_additive_operators = true
ij_javascript_spaces_around_arrow_function_operator = true
ij_javascript_spaces_around_assignment_operators = true
ij_javascript_spaces_around_bitwise_operators = true
ij_javascript_spaces_around_equality_operators = true
ij_javascript_spaces_around_logical_operators = true
ij_javascript_spaces_around_multiplicative_operators = true
ij_javascript_spaces_around_relational_operators = true
ij_javascript_spaces_around_shift_operators = true
ij_javascript_spaces_around_unary_operator = false
ij_javascript_spaces_within_array_initializer_brackets = false
ij_javascript_spaces_within_brackets = false
ij_javascript_spaces_within_catch_parentheses = false
ij_javascript_spaces_within_for_parentheses = false
ij_javascript_spaces_within_if_parentheses = false
ij_javascript_spaces_within_imports = false
ij_javascript_spaces_within_interpolation_expressions = false
ij_javascript_spaces_within_method_call_parentheses = false
ij_javascript_spaces_within_method_parentheses = false
ij_javascript_spaces_within_object_literal_braces = false
ij_javascript_spaces_within_object_type_braces = true
ij_javascript_spaces_within_parentheses = false
ij_javascript_spaces_within_switch_parentheses = false
ij_javascript_spaces_within_type_assertion = false
ij_javascript_spaces_within_union_types = true
ij_javascript_spaces_within_while_parentheses = false
ij_javascript_special_else_if_treatment = true
ij_javascript_ternary_operation_signs_on_next_line = true
ij_javascript_ternary_operation_wrap = normal
ij_javascript_union_types_wrap = on_every_item
ij_javascript_use_chained_calls_group_indents = false
ij_javascript_use_double_quotes = true
ij_javascript_use_explicit_js_extension = global
ij_javascript_use_path_mapping = always
ij_javascript_use_public_modifier = false
ij_javascript_use_semicolon_after_statement = true
ij_javascript_var_declaration_wrap = normal
ij_javascript_while_brace_force = always
ij_javascript_while_on_new_line = false
ij_javascript_wrap_comments = false

[{*.cjsx, *.coffee}]
ij_continuation_indent_size = 2
ij_coffeescript_align_function_body = false
ij_coffeescript_align_imports = false
ij_coffeescript_align_multiline_array_initializer_expression = true
ij_coffeescript_align_multiline_parameters = true
ij_coffeescript_align_multiline_parameters_in_calls = false
ij_coffeescript_align_object_properties = 0
ij_coffeescript_align_union_types = false
ij_coffeescript_align_var_statements = 0
ij_coffeescript_array_initializer_new_line_after_left_brace = false
ij_coffeescript_array_initializer_right_brace_on_new_line = false
ij_coffeescript_array_initializer_wrap = normal
ij_coffeescript_blacklist_imports = rxjs/Rx, node_modules/**, **/node_modules/**, @angular/material, @angular/material/typings/**
ij_coffeescript_blank_lines_around_function = 1
ij_coffeescript_call_parameters_new_line_after_left_paren = false
ij_coffeescript_call_parameters_right_paren_on_new_line = false
ij_coffeescript_call_parameters_wrap = normal
ij_coffeescript_chained_call_dot_on_new_line = true
ij_coffeescript_comma_on_new_line = false
ij_coffeescript_enforce_trailing_comma = keep
ij_coffeescript_field_prefix = _
ij_coffeescript_file_name_style = relaxed
ij_coffeescript_force_quote_style = false
ij_coffeescript_force_semicolon_style = false
ij_coffeescript_function_expression_brace_style = end_of_line
ij_coffeescript_import_merge_members = global
ij_coffeescript_import_prefer_absolute_path = global
ij_coffeescript_import_sort_members = true
ij_coffeescript_import_sort_module_name = false
ij_coffeescript_import_use_node_resolution = true
ij_coffeescript_imports_wrap = on_every_item
ij_coffeescript_indent_chained_calls = true
ij_coffeescript_indent_package_children = 0
ij_coffeescript_jsx_attribute_value = braces
ij_coffeescript_keep_blank_lines_in_code = 2
ij_coffeescript_keep_first_column_comment = true
ij_coffeescript_keep_indents_on_empty_lines = false
ij_coffeescript_keep_line_breaks = true
ij_coffeescript_keep_simple_methods_in_one_line = false
ij_coffeescript_method_parameters_new_line_after_left_paren = false
ij_coffeescript_method_parameters_right_paren_on_new_line = false
ij_coffeescript_method_parameters_wrap = off
ij_coffeescript_object_literal_wrap = on_every_item
ij_coffeescript_prefer_as_type_cast = false
ij_coffeescript_prefer_explicit_types_function_expression_returns = false
ij_coffeescript_prefer_explicit_types_function_returns = false
ij_coffeescript_prefer_explicit_types_vars_fields = false
ij_coffeescript_reformat_c_style_comments = false
ij_coffeescript_space_after_comma = true
ij_coffeescript_space_after_dots_in_rest_parameter = false
ij_coffeescript_space_after_generator_mult = true
ij_coffeescript_space_after_property_colon = true
ij_coffeescript_space_after_type_colon = true
ij_coffeescript_space_after_unary_not = false
ij_coffeescript_space_before_async_arrow_lparen = true
ij_coffeescript_space_before_class_lbrace = true
ij_coffeescript_space_before_comma = false
ij_coffeescript_space_before_function_left_parenth = true
ij_coffeescript_space_before_generator_mult = false
ij_coffeescript_space_before_property_colon = false
ij_coffeescript_space_before_type_colon = false
ij_coffeescript_space_before_unary_not = false
ij_coffeescript_spaces_around_additive_operators = true
ij_coffeescript_spaces_around_arrow_function_operator = true
ij_coffeescript_spaces_around_assignment_operators = true
ij_coffeescript_spaces_around_bitwise_operators = true
ij_coffeescript_spaces_around_equality_operators = true
ij_coffeescript_spaces_around_logical_operators = true
ij_coffeescript_spaces_around_multiplicative_operators = true
ij_coffeescript_spaces_around_relational_operators = true
ij_coffeescript_spaces_around_shift_operators = true
ij_coffeescript_spaces_around_unary_operator = false
ij_coffeescript_spaces_within_array_initializer_braces = false
ij_coffeescript_spaces_within_array_initializer_brackets = false
ij_coffeescript_spaces_within_imports = false
ij_coffeescript_spaces_within_index_brackets = false
ij_coffeescript_spaces_within_interpolation_expressions = false
ij_coffeescript_spaces_within_method_call_parentheses = false
ij_coffeescript_spaces_within_method_parentheses = false
ij_coffeescript_spaces_within_object_braces = false
ij_coffeescript_spaces_within_object_literal_braces = false
ij_coffeescript_spaces_within_object_type_braces = true
ij_coffeescript_spaces_within_range_brackets = false
ij_coffeescript_spaces_within_type_assertion = false
ij_coffeescript_spaces_within_union_types = true
ij_coffeescript_union_types_wrap = on_every_item
ij_coffeescript_use_chained_calls_group_indents = false
ij_coffeescript_use_double_quotes = true
ij_coffeescript_use_explicit_js_extension = global
ij_coffeescript_use_path_mapping = always
ij_coffeescript_use_public_modifier = false
ij_coffeescript_use_semicolon_after_statement = false
ij_coffeescript_var_declaration_wrap = normal

[{*.ft, *.vm, *.vsl}]
indent_size = 4
tab_width = 4
ij_continuation_indent_size = 8
ij_vtl_keep_indents_on_empty_lines = false

[{*.gant, *.gradle, *.groovy, *.gson, *.gy}]
indent_size = 4
tab_width = 4
ij_continuation_indent_size = 8
ij_groovy_align_group_field_declarations = false
ij_groovy_align_multiline_array_initializer_expression = false
ij_groovy_align_multiline_assignment = false
ij_groovy_align_multiline_binary_operation = false
ij_groovy_align_multiline_chained_methods = false
ij_groovy_align_multiline_extends_list = false
ij_groovy_align_multiline_for = true
ij_groovy_align_multiline_list_or_map = true
ij_groovy_align_multiline_method_parentheses = false
ij_groovy_align_multiline_parameters = true
ij_groovy_align_multiline_parameters_in_calls = false
ij_groovy_align_multiline_resources = true
ij_groovy_align_multiline_ternary_operation = false
ij_groovy_align_multiline_throws_list = false
ij_groovy_align_named_args_in_map = true
ij_groovy_align_throws_keyword = false
ij_groovy_array_initializer_new_line_after_left_brace = false
ij_groovy_array_initializer_right_brace_on_new_line = false
ij_groovy_array_initializer_wrap = off
ij_groovy_assert_statement_wrap = off
ij_groovy_assignment_wrap = off
ij_groovy_binary_operation_wrap = off
ij_groovy_blank_lines_after_class_header = 0
ij_groovy_blank_lines_after_imports = 1
ij_groovy_blank_lines_after_package = 1
ij_groovy_blank_lines_around_class = 1
ij_groovy_blank_lines_around_field = 0
ij_groovy_blank_lines_around_field_in_interface = 0
ij_groovy_blank_lines_around_method = 1
ij_groovy_blank_lines_around_method_in_interface = 1
ij_groovy_blank_lines_before_imports = 1
ij_groovy_blank_lines_before_method_body = 0
ij_groovy_blank_lines_before_package = 0
ij_groovy_block_brace_style = end_of_line
ij_groovy_block_comment_at_first_column = true
ij_groovy_call_parameters_new_line_after_left_paren = false
ij_groovy_call_parameters_right_paren_on_new_line = false
ij_groovy_call_parameters_wrap = off
ij_groovy_catch_on_new_line = false
ij_groovy_class_annotation_wrap = split_into_lines
ij_groovy_class_brace_style = end_of_line
ij_groovy_class_count_to_use_import_on_demand = 5
ij_groovy_do_while_brace_force = never
ij_groovy_else_on_new_line = false
ij_groovy_enum_constants_wrap = off
ij_groovy_extends_keyword_wrap = off
ij_groovy_extends_list_wrap = off
ij_groovy_field_annotation_wrap = split_into_lines
ij_groovy_finally_on_new_line = false
ij_groovy_for_brace_force = never
ij_groovy_for_statement_new_line_after_left_paren = false
ij_groovy_for_statement_right_paren_on_new_line = false
ij_groovy_for_statement_wrap = off
ij_groovy_if_brace_force = never
ij_groovy_import_annotation_wrap = 2
ij_groovy_indent_case_from_switch = true
ij_groovy_indent_label_blocks = true
ij_groovy_insert_inner_class_imports = false
ij_groovy_keep_blank_lines_before_right_brace = 2
ij_groovy_keep_blank_lines_in_code = 2
ij_groovy_keep_blank_lines_in_declarations = 2
ij_groovy_keep_control_statement_in_one_line = true
ij_groovy_keep_first_column_comment = true
ij_groovy_keep_indents_on_empty_lines = false
ij_groovy_keep_line_breaks = true
ij_groovy_keep_multiple_expressions_in_one_line = false
ij_groovy_keep_simple_blocks_in_one_line = false
ij_groovy_keep_simple_classes_in_one_line = true
ij_groovy_keep_simple_lambdas_in_one_line = true
ij_groovy_keep_simple_methods_in_one_line = true
ij_groovy_label_indent_absolute = false
ij_groovy_label_indent_size = 0
ij_groovy_lambda_brace_style = end_of_line
ij_groovy_layout_static_imports_separately = true
ij_groovy_line_comment_add_space = false
ij_groovy_line_comment_at_first_column = true
ij_groovy_method_annotation_wrap = split_into_lines
ij_groovy_method_brace_style = end_of_line
ij_groovy_method_call_chain_wrap = off
ij_groovy_method_parameters_new_line_after_left_paren = false
ij_groovy_method_parameters_right_paren_on_new_line = false
ij_groovy_method_parameters_wrap = off
ij_groovy_modifier_list_wrap = false
ij_groovy_names_count_to_use_import_on_demand = 3
ij_groovy_parameter_annotation_wrap = off
ij_groovy_parentheses_expression_new_line_after_left_paren = false
ij_groovy_parentheses_expression_right_paren_on_new_line = false
ij_groovy_prefer_parameters_wrap = false
ij_groovy_resource_list_new_line_after_left_paren = false
ij_groovy_resource_list_right_paren_on_new_line = false
ij_groovy_resource_list_wrap = off
ij_groovy_space_after_assert_separator = true
ij_groovy_space_after_colon = true
ij_groovy_space_after_comma = true
ij_groovy_space_after_comma_in_type_arguments = true
ij_groovy_space_after_for_semicolon = true
ij_groovy_space_after_quest = true
ij_groovy_space_after_type_cast = true
ij_groovy_space_before_annotation_parameter_list = false
ij_groovy_space_before_array_initializer_left_brace = false
ij_groovy_space_before_assert_separator = false
ij_groovy_space_before_catch_keyword = true
ij_groovy_space_before_catch_left_brace = true
ij_groovy_space_before_catch_parentheses = true
ij_groovy_space_before_class_left_brace = true
ij_groovy_space_before_closure_left_brace = true
ij_groovy_space_before_colon = true
ij_groovy_space_before_comma = false
ij_groovy_space_before_do_left_brace = true
ij_groovy_space_before_else_keyword = true
ij_groovy_space_before_else_left_brace = true
ij_groovy_space_before_finally_keyword = true
ij_groovy_space_before_finally_left_brace = true
ij_groovy_space_before_for_left_brace = true
ij_groovy_space_before_for_parentheses = true
ij_groovy_space_before_for_semicolon = false
ij_groovy_space_before_if_left_brace = true
ij_groovy_space_before_if_parentheses = true
ij_groovy_space_before_method_call_parentheses = false
ij_groovy_space_before_method_left_brace = true
ij_groovy_space_before_method_parentheses = false
ij_groovy_space_before_quest = true
ij_groovy_space_before_switch_left_brace = true
ij_groovy_space_before_switch_parentheses = true
ij_groovy_space_before_synchronized_left_brace = true
ij_groovy_space_before_synchronized_parentheses = true
ij_groovy_space_before_try_left_brace = true
ij_groovy_space_before_try_parentheses = true
ij_groovy_space_before_while_keyword = true
ij_groovy_space_before_while_left_brace = true
ij_groovy_space_before_while_parentheses = true
ij_groovy_space_in_named_argument = true
ij_groovy_space_in_named_argument_before_colon = false
ij_groovy_space_within_empty_array_initializer_braces = false
ij_groovy_space_within_empty_method_call_parentheses = false
ij_groovy_spaces_around_additive_operators = true
ij_groovy_spaces_around_assignment_operators = true
ij_groovy_spaces_around_bitwise_operators = true
ij_groovy_spaces_around_equality_operators = true
ij_groovy_spaces_around_lambda_arrow = true
ij_groovy_spaces_around_logical_operators = true
ij_groovy_spaces_around_multiplicative_operators = true
ij_groovy_spaces_around_regex_operators = true
ij_groovy_spaces_around_relational_operators = true
ij_groovy_spaces_around_shift_operators = true
ij_groovy_spaces_within_annotation_parentheses = false
ij_groovy_spaces_within_array_initializer_braces = false
ij_groovy_spaces_within_braces = true
ij_groovy_spaces_within_brackets = false
ij_groovy_spaces_within_cast_parentheses = false
ij_groovy_spaces_within_catch_parentheses = false
ij_groovy_spaces_within_for_parentheses = false
ij_groovy_spaces_within_gstring_injection_braces = false
ij_groovy_spaces_within_if_parentheses = false
ij_groovy_spaces_within_list_or_map = false
ij_groovy_spaces_within_method_call_parentheses = false
ij_groovy_spaces_within_method_parentheses = false
ij_groovy_spaces_within_parentheses = false
ij_groovy_spaces_within_switch_parentheses = false
ij_groovy_spaces_within_synchronized_parentheses = false
ij_groovy_spaces_within_try_parentheses = false
ij_groovy_spaces_within_tuple_expression = false
ij_groovy_spaces_within_while_parentheses = false
ij_groovy_special_else_if_treatment = true
ij_groovy_ternary_operation_wrap = off
ij_groovy_throws_keyword_wrap = off
ij_groovy_throws_list_wrap = off
ij_groovy_use_flying_geese_braces = false
ij_groovy_use_fq_class_names = false
ij_groovy_use_fq_class_names_in_javadoc = true
ij_groovy_use_relative_indents = false
ij_groovy_use_single_class_imports = true
ij_groovy_variable_annotation_wrap = off
ij_groovy_while_brace_force = never
ij_groovy_while_on_new_line = false
ij_groovy_wrap_long_lines = false

[{*.gradle.kts, *.kt, *.kts, *.main.kts}]
ij_kotlin_align_in_columns_case_branch = false
ij_kotlin_align_multiline_binary_operation = false
ij_kotlin_align_multiline_extends_list = false
ij_kotlin_align_multiline_method_parentheses = false
ij_kotlin_align_multiline_parameters = true
ij_kotlin_align_multiline_parameters_in_calls = false
ij_kotlin_assignment_wrap = on_every_item
ij_kotlin_blank_lines_after_class_header = 0
ij_kotlin_blank_lines_around_block_when_branches = 0
ij_kotlin_block_comment_at_first_column = true
ij_kotlin_call_parameters_new_line_after_left_paren = true
ij_kotlin_call_parameters_right_paren_on_new_line = false
ij_kotlin_call_parameters_wrap = on_every_item
ij_kotlin_catch_on_new_line = false
ij_kotlin_class_annotation_wrap = split_into_lines
ij_kotlin_continuation_indent_for_chained_calls = true
ij_kotlin_continuation_indent_for_expression_bodies = true
ij_kotlin_continuation_indent_in_argument_lists = true
ij_kotlin_continuation_indent_in_elvis = true
ij_kotlin_continuation_indent_in_if_conditions = true
ij_kotlin_continuation_indent_in_parameter_lists = true
ij_kotlin_continuation_indent_in_supertype_lists = true
ij_kotlin_else_on_new_line = false
ij_kotlin_enum_constants_wrap = off
ij_kotlin_extends_list_wrap = on_every_item
ij_kotlin_field_annotation_wrap = split_into_lines
ij_kotlin_finally_on_new_line = false
ij_kotlin_if_rparen_on_new_line = false
ij_kotlin_import_nested_classes = false
ij_kotlin_insert_whitespaces_in_simple_one_line_method = true
ij_kotlin_keep_blank_lines_before_right_brace = 1
ij_kotlin_keep_blank_lines_in_code = 1
ij_kotlin_keep_blank_lines_in_declarations = 1
ij_kotlin_keep_first_column_comment = true
ij_kotlin_keep_indents_on_empty_lines = false
ij_kotlin_keep_line_breaks = true
ij_kotlin_lbrace_on_next_line = false
ij_kotlin_line_comment_add_space = false
ij_kotlin_line_comment_at_first_column = true
ij_kotlin_method_annotation_wrap = split_into_lines
ij_kotlin_method_call_chain_wrap = on_every_item
ij_kotlin_method_parameters_new_line_after_left_paren = true
ij_kotlin_method_parameters_right_paren_on_new_line = false
ij_kotlin_method_parameters_wrap = on_every_item
ij_kotlin_name_count_to_use_star_import = 5
ij_kotlin_name_count_to_use_star_import_for_members = 3
ij_kotlin_parameter_annotation_wrap = on_every_item
ij_kotlin_space_after_comma = true
ij_kotlin_space_after_extend_colon = true
ij_kotlin_space_after_type_colon = true
ij_kotlin_space_before_catch_parentheses = true
ij_kotlin_space_before_comma = false
ij_kotlin_space_before_extend_colon = true
ij_kotlin_space_before_for_parentheses = true
ij_kotlin_space_before_if_parentheses = true
ij_kotlin_space_before_lambda_arrow = true
ij_kotlin_space_before_type_colon = false
ij_kotlin_space_before_when_parentheses = true
ij_kotlin_space_before_while_parentheses = true
ij_kotlin_spaces_around_additive_operators = true
ij_kotlin_spaces_around_assignment_operators = true
ij_kotlin_spaces_around_equality_operators = true
ij_kotlin_spaces_around_function_type_arrow = true
ij_kotlin_spaces_around_logical_operators = true
ij_kotlin_spaces_around_multiplicative_operators = true
ij_kotlin_spaces_around_range = false
ij_kotlin_spaces_around_relational_operators = true
ij_kotlin_spaces_around_unary_operator = false
ij_kotlin_spaces_around_when_arrow = true
ij_kotlin_variable_annotation_wrap = off
ij_kotlin_while_on_new_line = false
ij_kotlin_wrap_elvis_expressions = 1
ij_kotlin_wrap_expression_body_functions = 0
ij_kotlin_wrap_first_method_in_call_chain = false

[{*.htm, *.html, *.ng, *.sht, *.shtm, *.shtml}]
ij_html_add_new_line_before_tags = body, div, p, form, h1, h2, h3
ij_html_align_attributes = true
ij_html_align_text = false
ij_html_attribute_wrap = normal
ij_html_block_comment_at_first_column = true
ij_html_do_not_align_children_of_min_lines = 0
ij_html_do_not_break_if_inline_tags = title, h1, h2, h3, h4, h5, h6, p
ij_html_do_not_indent_children_of_tags = html, body, thead, tbody, tfoot
ij_html_enforce_quotes = false
ij_html_inline_tags = a, abbr, acronym, b, basefont, bdo, big, br, cite, cite, code, dfn, em, font, i, img, input, kbd, label, q, s, samp, select, small, span, strike, strong, sub, sup, textarea, tt, u, var
ij_html_keep_blank_lines = 2
ij_html_keep_indents_on_empty_lines = false
ij_html_keep_line_breaks = true
ij_html_keep_line_breaks_in_text = true
ij_html_keep_whitespaces = false
ij_html_keep_whitespaces_inside = span, pre, textarea
ij_html_line_comment_at_first_column = true
ij_html_new_line_after_last_attribute = never
ij_html_new_line_before_first_attribute = never
ij_html_quote_style = double
ij_html_remove_new_line_before_tags = br
ij_html_space_after_tag_name = false
ij_html_space_around_equality_in_attribute = false
ij_html_space_inside_empty_tag = false
ij_html_text_wrap = normal

[{*.jsf, *.jsp, *.jspf, *.tag, *.tagf, *.xjsp}]
indent_size = 4
tab_width = 4
ij_continuation_indent_size = 8
ij_jsp_jsp_prefer_comma_separated_import_list = false
ij_jsp_keep_indents_on_empty_lines = false

[{*.jspx, *.tagx}]
indent_size = 4
tab_width = 4
ij_continuation_indent_size = 8
ij_jspx_keep_indents_on_empty_lines = false

[{*.properties, spring.handlers, spring.schemas}]
ij_properties_align_group_field_declarations = false
ij_properties_keep_blank_lines = false
ij_properties_key_value_delimiter = equals
ij_properties_spaces_around_key_value_delimiter = false

[{*.yaml, *.yml}]
ij_yaml_keep_indents_on_empty_lines = false
ij_yaml_keep_line_breaks = true


================================================
FILE: .gitignore
================================================
# Created by .ignore support plugin (hsz.mobi)
### Maven template
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
# https://github.com/takari/maven-wrapper#usage-without-binary-jar
.mvn/wrapper/maven-wrapper.jar

### Linux template
*~

# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*

# KDE directory preferences
.directory

# Linux trash folder which might appear on any partition or disk
.Trash-*

# .nfs files are created when an open file is removed but is still being accessed
.nfs*

### Windows template
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db

# Dump file
*.stackdump

# Folder config file
[Dd]esktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp

# Windows shortcuts
*.lnk

### JetBrains template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839

# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
.idea/**

# Generated files
.idea/**/contentModel.xml

# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml

# Gradle
.idea/**/gradle.xml
.idea/**/libraries

*.iml

# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn.  Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr

# CMake
cmake-build-*/

# Mongo Explorer plugin
.idea/**/mongoSettings.xml

# File-based project format
*.iws

# IntelliJ
out/

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Cursive Clojure plugin
.idea/replstate.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

# Editor-based Rest Client
.idea/httpRequests

# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser

### macOS template
# General
.DS_Store
.AppleDouble
.LSOverride

# Icon must end with two \r
Icon

# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

### Java template
# Compiled class file
*.class

# Log file
*.log

# BlueJ files
*.ctxt

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*



================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2020 Simplix Softworks

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
<p align="center">
  <img src="https://i.imgur.com/vmfZcvS.png" />
</p>


# Cirrus
[![Build Status](http://ci.exceptionflug.de/buildStatus/icon?job=Cirrus)](http://ci.exceptionflug.de/job/Cirrus/) [![JetBrains IntelliJ Plugins](https://img.shields.io/jetbrains/plugin/v/15194-cirrus-tooling)](https://plugins.jetbrains.com/plugin/15194-cirrus-tooling) [![Discord](https://img.shields.io/discord/752533664696369204?label=Discord)](https://discord.simplixsoft.com/) ![GitHub](https://img.shields.io/github/license/Exceptionflug/Protocolize)

Menu Framework.
Cirrus enables you to develop platform-independent versatile graphical menus for Spigot, BungeeCord, and Velocity! The
goal of Cirrus is to aim for maximum compatibility. Cirrus had been tested on several well-known BungeeCord-Forks as
well on all Spigot versions beginning from 1.16.5 till the latest release. The first-ever way of creating menus for Velocity.

# WIP

Cirrus is currently WIP. The documentation is invalid in parts. We will publish a stable version soon.
Spigot & BungeeCord implementations will work, Velocity implementations are currently very experimental.
We aim to publish documentation & production ready versions in the coming month.

## Version
Current version is:
- Stable: 2.0.0
- Development: 2.1.0-SNAPHOT

## PR

If you have any improvements regarding Cirrus feel free to create a PR. We are happy to review & merge it.
Keep in mind that to use our codestyle as defined in .editorconfig.

## Platforms

On Spigot Cirrus is fully independent of third party plugins. Protocolize is needed only only if Cirrus is used on
proxies like BungeeCord or Velocity.

- Spigot 
- BungeeCord
- Velocity (WIP)

## Supported Bukkit Versions

Due to the changes in the API we only officially support 1.16.5-LATEST (which is 1.19 by the time this is written)
Since Cirrus is designed to be mostly version independent, older versions will likely function as well but they are deprecated (so we won't attempt to resolve issues with these versions).

## Tooling

Cirrus offers an IntelliJ plugin to enhance the usability of Cirrus. It provides a realtime preview while editing menu
configuration files.

[![JetBrains IntelliJ plugins](https://img.shields.io/jetbrains/plugin/d/15194-cirrus-tooling)](https://plugins.jetbrains.com/plugin/15194-cirrus-tooling)

![Tooling](https://i.imgur.com/88pvZ8G.gif)

## Requirements

### Protocolize

Cirrus is powered by [Protocolize](https://github.com/Exceptionflug/protocolize). A protocol manipulation library by one
of the Simplix Softworks founders, Exceptionflug. Protocolize enables you to do so much more on BungeeCord/Velocity!

## Installation

Just shade and relocate the platform module into your own plugin. Don't forget to call the `CirrusSpigot`
, `CirrusBungeeCord` or `CirrusVelocity` init method.

### More developer documentation

Check out the [wiki](https://github.com/Simplix-Softworks/Cirrus/wiki) for further information on how to use Cirrus in
your application.


================================================
FILE: cirrus-bungeecord/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <artifactId>cirrus-bungeecord</artifactId>

    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>cirrus</artifactId>
        <groupId>dev.simplix.cirrus</groupId>
        <version>2.0.0</version>
    </parent>
    <version>${cirrus.version}</version>

    <dependencies>
        <dependency>
            <artifactId>cirrus-common</artifactId>
            <groupId>dev.simplix.cirrus</groupId>
            <scope>compile</scope>
            <version>${cirrus.version}</version>
        </dependency>
        <dependency>
            <groupId>net.md-5</groupId>
            <artifactId>bungeecord-api</artifactId>
            <version>1.21-R0.1-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.name}-${project.version}</finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.0.0</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <minimizeJar>false</minimizeJar>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <phase>deploy</phase>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

================================================
FILE: cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/BungeeCordPlayerWrapper.java
================================================
package dev.simplix.cirrus.bungeecord;

import dev.simplix.cirrus.common.business.PlayerWrapper;
import dev.simplix.protocolize.api.Protocolize;
import dev.simplix.protocolize.api.player.ProtocolizePlayer;
import lombok.NonNull;
import net.md_5.bungee.api.connection.ProxiedPlayer;

import java.util.UUID;

public class BungeeCordPlayerWrapper implements PlayerWrapper {

    private final ProtocolizePlayer protocolizePlayer;
    private final ProxiedPlayer handle;

    public BungeeCordPlayerWrapper(@NonNull ProxiedPlayer handle) {
        this.handle = handle;
        this.protocolizePlayer = Protocolize.playerProvider().player(handle.getUniqueId());
    }

    @Override
    public UUID uniqueId() {
        return this.handle.getUniqueId();
    }

    @Override
    public String name() {
        return this.handle.getName();
    }

    @Override
    public int protocolVersion() {
        return this.protocolizePlayer.protocolVersion();
    }

    @Override
    public void sendMessage(@NonNull String msg) {
        this.handle.sendMessage(msg);
    }

    @Override
    public void closeInventory() {
        this.protocolizePlayer.closeInventory();
    }

    @Override
    public boolean hasPermission(@NonNull String permission) {
        return this.handle.hasPermission(permission);
    }

    @Override
    public <T> T handle() {
        return (T) this.handle;
    }

    public ProtocolizePlayer protocolizePlayer() {
        return this.protocolizePlayer;
    }
}


================================================
FILE: cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/CirrusBungeeCord.java
================================================
package dev.simplix.cirrus.bungeecord;

import dev.simplix.cirrus.bungeecord.converters.ItemModelConverter;
import dev.simplix.cirrus.bungeecord.converters.ItemStackConverter;
import dev.simplix.cirrus.bungeecord.converters.PlayerConverter;
import dev.simplix.cirrus.bungeecord.converters.PlayerUniqueIdConverter;
import dev.simplix.cirrus.bungeecord.listeners.QuitListener;
import dev.simplix.cirrus.bungeecord.protocolize.ProtocolizeMenuBuilder;
import dev.simplix.cirrus.common.Cirrus;
import dev.simplix.cirrus.common.business.InventoryMenuItemWrapper;
import dev.simplix.cirrus.common.business.MenuItemWrapper;
import dev.simplix.cirrus.common.business.PlayerWrapper;
import dev.simplix.cirrus.common.converter.Converters;
import dev.simplix.cirrus.common.effect.MenuAnimator;
import dev.simplix.cirrus.common.item.CirrusItem;
import dev.simplix.cirrus.common.menu.MenuBuilder;
import dev.simplix.protocolize.api.item.ItemStack;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.plugin.Plugin;

import java.util.UUID;
import java.util.concurrent.TimeUnit;

public class CirrusBungeeCord {

    private static Plugin plugin;

    static {
        // Players
        Converters.register(ProxiedPlayer.class, PlayerWrapper.class, new PlayerConverter());
        Converters.register(UUID.class, PlayerWrapper.class, new PlayerUniqueIdConverter());

        // Items
        Converters.register(ItemStack.class, MenuItemWrapper.class, new ItemStackConverter());
        Converters.register(CirrusItem.class, InventoryMenuItemWrapper.class, new ItemModelConverter());
    }

    public static void init(Plugin plugin) {
        if (CirrusBungeeCord.plugin != null) {
            return;
        }
        CirrusBungeeCord.plugin = plugin;
        Cirrus.registerService(MenuBuilder.class, new ProtocolizeMenuBuilder());
        ProxyServer.getInstance().getPluginManager().registerListener(plugin, new QuitListener());

        ProxyServer.getInstance().getScheduler().schedule(plugin, () -> {
            if (ProxyServer.getInstance().getOnlineCount() > 0 && !MenuAnimator.isEmpty()) {
                MenuAnimator.updateAll();
            }
        }, 50 * 2, TimeUnit.MILLISECONDS);
    }

    public static Plugin plugin() {
        if (plugin == null) {
            throw new IllegalStateException("Cirrus is not initialized. Please call CirrusBungeeCord#init during onEnable.");
        } // ➤
        return plugin;
    }

}


================================================
FILE: cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/converters/ItemModelConverter.java
================================================
package dev.simplix.cirrus.bungeecord.converters;

import dev.simplix.cirrus.common.business.InventoryMenuItemWrapper;
import dev.simplix.cirrus.common.business.MenuItemWrapper;
import dev.simplix.cirrus.common.converter.Converter;
import dev.simplix.cirrus.common.converter.Converters;
import dev.simplix.cirrus.common.item.CirrusItem;
import dev.simplix.protocolize.api.chat.ChatElement;
import dev.simplix.protocolize.api.item.ItemStack;
import org.jetbrains.annotations.NotNull;
import java.util.stream.Collectors;

public class ItemModelConverter implements Converter<CirrusItem, InventoryMenuItemWrapper> {

    @Override
    public InventoryMenuItemWrapper convert(@NotNull CirrusItem model) {
        ItemStack itemStack = new ItemStack(model.itemType(), model.amount(), model.durability());
        itemStack.nbtData(model.nbt());
        itemStack.displayName(ChatElement.ofLegacyText(model.displayName()));
        itemStack.lore(model.lore().stream().map(ChatElement::ofLegacyText).collect(Collectors.toList()));

        return InventoryMenuItemWrapper.builder()
                .handle(Converters.convert(itemStack, MenuItemWrapper.class))
                .actionArguments(model.actionArguments())
                .actionHandler(model.actionHandler())
                .build();
    }

}


================================================
FILE: cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/converters/ItemStackConverter.java
================================================
package dev.simplix.cirrus.bungeecord.converters;

import dev.simplix.cirrus.common.business.MenuItemWrapper;
import dev.simplix.cirrus.common.converter.Converter;
import dev.simplix.cirrus.common.item.ProtocolizeMenuItemWrapper;
import dev.simplix.protocolize.api.item.ItemStack;
import lombok.NonNull;

public class ItemStackConverter implements Converter<ItemStack, MenuItemWrapper> {

    @Override
    public MenuItemWrapper convert(@NonNull ItemStack itemStack) {
        return new ProtocolizeMenuItemWrapper(itemStack);
    }

}


================================================
FILE: cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/converters/PlayerConverter.java
================================================
package dev.simplix.cirrus.bungeecord.converters;

import dev.simplix.cirrus.bungeecord.BungeeCordPlayerWrapper;
import dev.simplix.cirrus.common.business.PlayerWrapper;
import dev.simplix.cirrus.common.converter.Converter;
import lombok.NonNull;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import org.jetbrains.annotations.NotNull;

public final class PlayerConverter implements Converter<ProxiedPlayer, PlayerWrapper> {

    @Override
    public PlayerWrapper convert(@NonNull @NotNull ProxiedPlayer proxiedPlayer) {
        return new BungeeCordPlayerWrapper(proxiedPlayer);
    }

}


================================================
FILE: cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/converters/PlayerUniqueIdConverter.java
================================================
package dev.simplix.cirrus.bungeecord.converters;

import dev.simplix.cirrus.bungeecord.BungeeCordPlayerWrapper;
import dev.simplix.cirrus.common.business.PlayerWrapper;
import dev.simplix.cirrus.common.converter.Converter;
import lombok.NonNull;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.connection.ProxiedPlayer;

import java.util.UUID;

public class PlayerUniqueIdConverter implements Converter<UUID, PlayerWrapper> {

    @Override
    public PlayerWrapper convert(@NonNull UUID uuid) {
        ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid);
        if (player == null) {
            throw new IllegalArgumentException("Player " + uuid + " is offline");
        }
        return new BungeeCordPlayerWrapper(player);
    }

}


================================================
FILE: cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/listeners/QuitListener.java
================================================
package dev.simplix.cirrus.bungeecord.listeners;

import dev.simplix.cirrus.common.Cirrus;
import dev.simplix.cirrus.common.menu.MenuBuilder;
import lombok.NonNull;
import net.md_5.bungee.api.event.PlayerDisconnectEvent;
import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.event.EventHandler;

public class QuitListener implements Listener {

    @EventHandler
    public void onQuit(@NonNull PlayerDisconnectEvent event) {
        Cirrus.getService(MenuBuilder.class).destroyMenusOfPlayer(event.getPlayer().getUniqueId());
    }

}


================================================
FILE: cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/protocolize/ProtocolizeMenuBuilder.java
================================================
package dev.simplix.cirrus.bungeecord.protocolize;

import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import dev.simplix.cirrus.bungeecord.BungeeCordPlayerWrapper;
import dev.simplix.cirrus.common.Utils;
import dev.simplix.cirrus.common.business.InventoryMenuItemWrapper;
import dev.simplix.cirrus.common.business.PlayerWrapper;
import dev.simplix.cirrus.common.container.Container;
import dev.simplix.cirrus.common.handler.ActionHandler;
import dev.simplix.cirrus.common.i18n.Replacer;
import dev.simplix.cirrus.common.menu.AbstractMenu;
import dev.simplix.cirrus.common.menu.Menu;
import dev.simplix.cirrus.common.menu.MenuBuilder;
import dev.simplix.cirrus.common.model.CallResult;
import dev.simplix.cirrus.common.model.Click;
import dev.simplix.protocolize.api.ClickType;
import dev.simplix.protocolize.api.chat.ChatElement;
import dev.simplix.protocolize.api.inventory.Inventory;
import dev.simplix.protocolize.api.item.BaseItemStack;
import dev.simplix.protocolize.api.item.ItemStack;
import dev.simplix.protocolize.api.player.ProtocolizePlayer;
import dev.simplix.protocolize.data.packets.OpenWindow;
import dev.simplix.protocolize.data.packets.WindowItems;
import lombok.NonNull;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.chat.ComponentSerializer;
import org.jetbrains.annotations.Nullable;

import java.util.*;
import java.util.Map.Entry;
import java.util.stream.Collectors;

public class ProtocolizeMenuBuilder implements MenuBuilder {

    private final Map<UUID, Map.Entry<Menu, Long>> buildMap = new LinkedHashMap<>();
    private final Set<Menu> menus = Sets.newConcurrentHashSet();

    @Override
    public <T> T build(@Nullable T prebuild, @NonNull Menu menu) {
        final Entry<Menu, Long> menuLongEntry = this.buildMap.get(menu.player().uniqueId());
        if (menuLongEntry != null && !menuLongEntry.getKey().equals(menu)) {
            menuLongEntry.getKey().handleClose(true);
        }
        if (!(menu instanceof AbstractMenu)) {
            throw new IllegalArgumentException("This implementation can only build cirrus menus!");
        }
        final boolean register = prebuild == null;
        if (prebuild instanceof Inventory) {
            String title = Replacer.of(menu.title()).replaceAll((Object[]) menu.replacements().get())
                    .replacedMessageJoined();
            final Inventory inventory = (Inventory) prebuild;
            final BaseComponent[] component = TextComponent.fromLegacyText(title);
            for (BaseComponent baseComponent : component) {
                baseComponent.setItalic(false); // Wir kommen nicht aus Italien
            }
            if (!ComponentSerializer.toString((BaseComponent[]) inventory.title().asComponent())
                    .equals(ComponentSerializer.toString(component)) ||
                    inventory.type().getTypicalSize(menu.player().protocolVersion()) != menu
                            .topContainer()
                            .capacity()
                    || inventory.type() != menu.inventoryType()) {
                prebuild = (T) makeInv(menu);
            }
        } else {
            prebuild = (T) makeInv(menu);
        }
        final Inventory inventory = (Inventory) prebuild;
        buildContainer(inventory, menu.topContainer());
        buildContainer(inventory, menu.bottomContainer());

        this.buildMap.put(
                menu.player().uniqueId(),
                new AbstractMap.SimpleEntry<>(menu, System.currentTimeMillis()));
        if (register) {
            this.menus.add(menu);
        }
        open(menu.player(), inventory);
        return prebuild;
    }

    private void buildContainer(@NonNull Inventory inventory, @NonNull Container container) {
        for (int i = container.baseSlot(); i < container.baseSlot() + container.capacity(); i++) {
            InventoryMenuItemWrapper item = container.itemMap().get(i);
            BaseItemStack currentStack = inventory.item(i);
            if (item == null) {
                if (currentStack != null) {
                    inventory.item(i, ItemStack.NO_DATA);
                }
            }

            if (item != null) {
                for (BaseComponent[] loreComponent : item.loreComponents()) {
                    for (BaseComponent baseComponent : loreComponent) {
//                        if (!baseComponent.isItalic()) {
//                            baseComponent.setItalic(false);
//                        }
                    }
                }

                if (currentStack == null) {
                    if (item.handle() == null) {
                        ProxyServer.getInstance().getLogger()
                                .severe("InventoryItem's ItemStackWrapper is null @ slot " + i);
                        continue;
                    }
                    inventory.item(i, item.handle());
                } else {
                    if (!currentStack.equals(item.handle())) {
                        inventory.item(i, item.handle());
                    }
                }
            }
        }
    }

    private Inventory makeInv(@NonNull Menu menu) {
        Inventory inventory = new Inventory(menu.inventoryType());
        BaseComponent[] textComponent = TextComponent.fromLegacyText(Replacer.of(menu.title())
                .replaceAll((Object[]) menu.replacements().get()).replacedMessageJoined());
        for (BaseComponent component : textComponent) {
            if (!component.isItalic()) {
                component.setItalic(false); // Resolve client side behavior
            }
        }
        inventory.title(ChatElement.of(textComponent));

        inventory.onClose(inventoryClose -> {
            Map.Entry<Menu, Long> lastBuild = lastBuildOfPlayer(inventoryClose.player().uniqueId());
            if (((AbstractMenu) lastBuild.getKey()).internalId() == ((AbstractMenu) menu).internalId()
                    && (System.currentTimeMillis() - lastBuild.getValue()) <= 55) {
                return;
            }
            menu.handleClose((System.currentTimeMillis() - lastBuild.getValue()) <= 55);
            invalidate(menu);
        });

        inventory.onClick(inventoryClick -> {
            if (inventoryClick.clickType() == null) {
                return;
            }
            if (inventoryClick.player() == null) {
                return;
            }
            Inventory i = inventoryClick.inventory();
            if (i == null) {
                return;
            }
//            ProxyServer.getInstance().broadcast("Clicked inventory");
//            ProxyServer.getInstance().broadcast("Clicked menu: " + menu.getClass().getSimpleName() + " @ slot " + inventoryClick.slot());
            Container container;
            if (inventoryClick.slot() > menu.topContainer().capacity() - 1) {
                container = menu.bottomContainer();
//                ProxyServer.getInstance().broadcast("Clicked bottom container");
            } else {
                container = menu.topContainer();
//                ProxyServer.getInstance().broadcast("Clicked top container");
            }
            InventoryMenuItemWrapper item = container.get(inventoryClick.slot());
            ClickType type = inventoryClick.clickType();
            if (item == null) {
//                ProxyServer.getInstance().broadcast("Clicked nothing");
                if (menu.customActionHandler() != null) {
                    try {
                        CallResult callResult = menu
                                .customActionHandler()
                                .handle(new Click(type, menu, null, inventoryClick.slot()));
                        inventoryClick.cancelled(callResult == null || callResult == CallResult.DENY_GRABBING);
                    } catch (Exception ex) {
                        inventoryClick.cancelled(true);
                        menu.handleException(null, ex);
                    }
                }
                return;
            }
//            ProxyServer.getInstance().broadcast("Clicked " + item.displayName());
            ActionHandler actionHandler = menu.actionHandler(item.actionHandler());
            if (actionHandler == null) {
                inventoryClick.cancelled(true);
                return;
            }
            try {
                final CallResult callResult = actionHandler.handle(new Click(
                        type,
                        menu,
                        item,
                        inventoryClick.slot()));
                inventoryClick.cancelled(callResult == null || callResult == CallResult.DENY_GRABBING);
            } catch (final Exception ex) {
                inventoryClick.cancelled(true);
                menu.handleException(actionHandler, ex);
            }
        });

        return inventory;
    }

    @Override
    public <T> void open(
            PlayerWrapper playerWrapper, T inventoryImpl) {
        if (playerWrapper instanceof BungeeCordPlayerWrapper) {
            final ProtocolizePlayer protocolizePlayer = ((BungeeCordPlayerWrapper) playerWrapper).protocolizePlayer();
            final Inventory inventory = (Inventory) inventoryImpl;

            boolean alreadyOpen = false;
            int windowId = -1;
            for (Integer id : protocolizePlayer.registeredInventories().keySet()) {
                Inventory val = protocolizePlayer.registeredInventories().get(id);
                if (val.type() == inventory.type() && val.title().equals(inventory.title())) {
                    alreadyOpen = true;
                    break;
                }
            }

            // Close all inventories if not opened
            if (!alreadyOpen) {
                protocolizePlayer.closeInventory();
            }

            if (protocolizePlayer.registeredInventories().containsValue(inventory)) {
                for (Integer id : protocolizePlayer.registeredInventories().keySet()) {
                    Inventory val = protocolizePlayer.registeredInventories().get(id);
                    if (val == inventory) {
                        windowId = id;
                        break;
                    }
                }
                if (windowId == -1) {
                    windowId = protocolizePlayer.generateWindowId();
                    protocolizePlayer.registerInventory(windowId, inventory);
                }
            } else {
                windowId = protocolizePlayer.generateWindowId();
                protocolizePlayer.registerInventory(windowId, inventory);
            }

            if (!alreadyOpen) {
                protocolizePlayer.sendPacket(new OpenWindow(windowId, inventory.type(), inventory.title()));
            }
            int protocolVersion;
            try {
                protocolVersion = protocolizePlayer.protocolVersion();
            } catch (Throwable t) {
                protocolVersion = 47;
            }
            List<BaseItemStack> items = Lists.newArrayList(inventory.itemsIndexed(protocolVersion));
            protocolizePlayer.sendPacket(new WindowItems((short) windowId, items, 0));
        }
    }

    private void removeItalic(BaseComponent[] components) {
        for (BaseComponent component : components) {
            component.setItalic(false);
        }
    }

    @Override
    @Nullable
    public Menu menuByHandle(Object handle) {
        if (handle == null) {
            return null;
        }
        for (final Menu menu : this.menus) {
            if (menu.equals(handle)) {
                return menu;
            }
        }
        return null;
    }

    @Override
    public void destroyMenusOfPlayer(@NonNull UUID uniqueId) {
        this.menus.removeIf(
                wrapper -> ((ProxiedPlayer) wrapper.player().handle()).getUniqueId().equals(uniqueId));
        this.buildMap.remove(uniqueId);
    }

    @Override
    public Entry<Menu, Long> lastBuildOfPlayer(@NonNull UUID uniqueId) {
        return this.buildMap.get(uniqueId);
    }

    @Override
    public void invalidate(@NonNull Menu menu) {
        this.menus.remove(menu);
    }

}


================================================
FILE: cirrus-bungeecord-example/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>dev.simplix.cirrus</groupId>
        <artifactId>cirrus</artifactId>
        <version>2.0.0</version>
    </parent>

    <groupId>dev.simplix.cirrus</groupId>
    <artifactId>cirrus-bungeecord-example</artifactId>
    <version>${cirrus.version}</version>

    <dependencies>
        <dependency>
            <artifactId>cirrus-common</artifactId>
            <groupId>dev.simplix.cirrus</groupId>
            <scope>compile</scope>
            <version>${cirrus.version}</version>
        </dependency>
        <dependency>
            <artifactId>cirrus-bungeecord</artifactId>
            <groupId>dev.simplix.cirrus</groupId>
            <scope>compile</scope>
            <version>${cirrus.version}</version>
        </dependency>
        <dependency>
            <groupId>net.md-5</groupId>
            <artifactId>bungeecord-api</artifactId>
            <version>1.21-R0.1-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.name}-${project.version}</finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.0.0</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

================================================
FILE: cirrus-bungeecord-example/src/main/java/dev/simplix/cirrus/bungeecord/example/CirrusExamplePlugin.java
================================================
package dev.simplix.cirrus.bungeecord.example;

import dev.simplix.cirrus.bungeecord.CirrusBungeeCord;
import dev.simplix.cirrus.bungeecord.example.commands.TestCommand;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.plugin.Plugin;

public class CirrusExamplePlugin extends Plugin {

    @Override
    public void onEnable() {
        CirrusBungeeCord.init(this);
        ProxyServer.getInstance().getPluginManager().registerCommand(this, new TestCommand());
    }

}


================================================
FILE: cirrus-bungeecord-example/src/main/java/dev/simplix/cirrus/bungeecord/example/commands/TestCommand.java
================================================
package dev.simplix.cirrus.bungeecord.example.commands;

import dev.simplix.cirrus.bungeecord.example.menus.ExampleMenu;
import dev.simplix.cirrus.common.Cirrus;
import dev.simplix.cirrus.common.business.PlayerWrapper;
import dev.simplix.cirrus.common.converter.Converters;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.plugin.Command;

public class TestCommand extends Command {

    public TestCommand() {
        super("test");
    }

    @Override
    public void execute(CommandSender sender, String[] args) {
        if (sender instanceof ProxiedPlayer) {
            ProxiedPlayer proxy = (ProxiedPlayer) sender;
            new ExampleMenu(Converters.convert(proxy, PlayerWrapper.class),
                    Cirrus.configurationFactory().loadFile("plugins/Cirrus/example.json")).open();
        }
    }

}


================================================
FILE: cirrus-bungeecord-example/src/main/java/dev/simplix/cirrus/bungeecord/example/menus/ExampleMenu.java
================================================
package dev.simplix.cirrus.bungeecord.example.menus;

import dev.simplix.cirrus.common.business.PlayerWrapper;
import dev.simplix.cirrus.common.menu.AbstractConfigurableMenu;
import dev.simplix.cirrus.common.model.CallResult;
import dev.simplix.cirrus.common.configuration.MenuConfiguration;

import java.util.Locale;

public class ExampleMenu extends AbstractConfigurableMenu<MenuConfiguration> {

    public ExampleMenu(PlayerWrapper player, MenuConfiguration configuration) {
        super(player, configuration, Locale.ENGLISH);

        registerActionHandler("tnt", click -> {
            topContainer().itemMap().remove(click.slot());
            title("Hello, {viewer}");
            build();
            player().sendMessage("It simply works :)");
            return CallResult.DENY_GRABBING;
        });
    }

}


================================================
FILE: cirrus-bungeecord-example/src/main/java/dev/simplix/cirrus/bungeecord/example/menus/ExampleMultiPageMenu.java
================================================
package dev.simplix.cirrus.bungeecord.example.menus;

import dev.simplix.cirrus.common.business.PlayerWrapper;
import dev.simplix.cirrus.common.configuration.MultiPageMenuConfiguration;
import dev.simplix.cirrus.common.menus.MultiPageMenu;
import dev.simplix.cirrus.common.model.CallResult;
import dev.simplix.protocolize.api.Protocolize;
import dev.simplix.protocolize.api.item.ItemStack;
import dev.simplix.protocolize.api.providers.MappingProvider;
import dev.simplix.protocolize.data.ItemType;

import java.util.Collections;
import java.util.Locale;

public class ExampleMultiPageMenu extends MultiPageMenu {

    private final MappingProvider mappingProvider = Protocolize.mappingProvider();

    public ExampleMultiPageMenu(
            PlayerWrapper player,
            MultiPageMenuConfiguration configuration) {
        super(player, configuration, Locale.ENGLISH);
        registerMyActionHandlers();
        addItems();
    }

    private void registerMyActionHandlers() {
        registerActionHandler("test", click -> {
            player().sendMessage("This is " + click.clickedItem().type().name());
            return CallResult.DENY_GRABBING;
        });
    }

    private void addItems() {
        for (ItemType type : ItemType.values()) {
            if (this.mappingProvider.mapping(type, player().protocolVersion()) != null) {
                add(wrapItemStack(new ItemStack(type)), "test", Collections.emptyList());
            }
        }
    }

}


================================================
FILE: cirrus-bungeecord-example/src/main/resources/plugin.yml
================================================
name: CirrusExample
author: Exceptionflug
version: 1.0
main: dev.simplix.cirrus.bungeecord.example.CirrusExamplePlugin
softdepend:
  - simplixcore

commands:
  test:
    description: hi

================================================
FILE: cirrus-common/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <artifactId>cirrus-common</artifactId>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
                <groupId>org.apache.maven.plugins</groupId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <phase>deploy</phase>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <configuration>
                            <doclint>none</doclint>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.8.0-alpha2</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <artifactId>cirrus</artifactId>
        <groupId>dev.simplix.cirrus</groupId>
        <version>2.0.0</version>
    </parent>

    <version>${cirrus.version}</version>

</project>

================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/Cirrus.java
================================================
package dev.simplix.cirrus.common;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import dev.simplix.cirrus.common.business.ConfigurationFactory;
import dev.simplix.cirrus.common.business.InventoryMenuItemWrapper;
import dev.simplix.cirrus.common.business.MenuItemWrapper;
import dev.simplix.cirrus.common.config.JsonConfigurationFactory;
import dev.simplix.cirrus.common.converter.Converter;
import dev.simplix.cirrus.common.converter.Converters;
import dev.simplix.cirrus.common.i18n.*;
import dev.simplix.cirrus.common.mojangson.TagDeserializer;
import dev.simplix.cirrus.common.mojangson.TagSerializer;
import net.querz.nbt.tag.CompoundTag;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class Cirrus {

    private static final Map<Class<?>, Object> SERVICES = new ConcurrentHashMap<>();

    public static Gson gson() {
        return GSON;
    }

    private static final Gson GSON = new GsonBuilder()
            .registerTypeAdapter(CompoundTag.class, new TagSerializer())
            .registerTypeAdapter(CompoundTag.class, new TagDeserializer())
            .registerTypeAdapter(LocalizedString.class, new LocalizedStringSerializer())
            .registerTypeAdapter(LocalizedString.class, new LocalizedStringDeserializer())
            .registerTypeAdapter(LocalizedStringList.class, new LocalizedStringListSerializer())
            .registerTypeAdapter(LocalizedStringList.class, new LocalizedStringListDeserializer())
            .setPrettyPrinting()
            .create();

    static {
        Converters.register(
                InventoryMenuItemWrapper.class, MenuItemWrapper.class,
                (Converter<InventoryMenuItemWrapper, MenuItemWrapper>) InventoryMenuItemWrapper::wrapper);
        registerService(ConfigurationFactory.class, new JsonConfigurationFactory(GSON));
    }

    /**
     * This returns an instance of a registered service.
     *
     * @param type The registration type of the desired service
     * @param <T>  The type of the service
     * @return The instance of T or null if there is no service with this registration type
     * @see Cirrus#registerService(Class, Object)
     */
    public static <T> T getService(Class<T> type) {
        return (T) SERVICES.get(type);
    }

    /**
     * This will map a given service instance to a given registration type.
     *
     * @param type     The registration type of the desired service
     * @param instance An instance of the registration type
     * @param <T>      The registration type
     */
    public static <T> void registerService(Class<T> type, T instance) {
        SERVICES.put(type, instance);
    }

    public static ConfigurationFactory configurationFactory() {
        return getService(ConfigurationFactory.class);
    }

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/Utils.java
================================================
package dev.simplix.cirrus.common;

import lombok.experimental.UtilityClass;
import net.md_5.bungee.api.chat.BaseComponent;
import net.querz.nbt.tag.*;

@UtilityClass
public class Utils {
    private static final String STEVE_TEXTURE = "ewogICJ0aW1lc3RhbXAiIDogMTU5MTU3NDcyMzc4MywKICAicHJvZmlsZUlkIiA6ICI4NjY3YmE3MWI4NWE0MDA0YWY1NDQ1N2E5NzM0ZWVkNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJTdGV2ZSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS82ZDNiMDZjMzg1MDRmZmMwMjI5Yjk0OTIxNDdjNjlmY2Y1OWZkMmVkNzg4NWY3ODUwMjE1MmY3N2I0ZDUwZGUxIgogICAgfSwKICAgICJDQVBFIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS85NTNjYWM4Yjc3OWZlNDEzODNlNjc1ZWUyYjg2MDcxYTcxNjU4ZjIxODBmNTZmYmNlOGFhMzE1ZWE3MGUyZWQ2IgogICAgfQogIH0KfQ==";

    public void removeItalic(BaseComponent[] components) {
        for (BaseComponent component : components) {
            component.setItalic(false);
        }
    }

    public static void hideNbtFlags(CompoundTag tag) {
        tag.put("HideFlags", new IntTag(127));
    }

    public static void glow(CompoundTag tag) {
        hideNbtFlags(tag);

        final ListTag<CompoundTag> enchantments = new ListTag<>(CompoundTag.class);
        final ListTag<CompoundTag> enchs = new ListTag<>(CompoundTag.class);

        final CompoundTag exampleEnchantment = new CompoundTag();

        exampleEnchantment.put("id", new StringTag("minecraft:efficiency"));
        exampleEnchantment.put("lvl", new ShortTag((short) 1));

        final CompoundTag exampleEnch = new CompoundTag();
        exampleEnch.put("id", new ShortTag((short) 1));
        exampleEnch.put("lvl", new ShortTag((short) 1));

        enchantments.add(exampleEnchantment);
        enchs.add(exampleEnch);

        tag.put("ench", enchs);
        tag.put("Enchantments", enchantments);
    }

    public static void texture(CompoundTag tag, String textureHash) {
        if (!(tag.get("SkullOwner") instanceof CompoundTag)) {
            tag.put("SkullOwner", new CompoundTag());
        }

        CompoundTag skullOwner = tag.getCompoundTag("SkullOwner");

        if (skullOwner == null) {
            skullOwner = new CompoundTag();
        }

        skullOwner.put("Name", new StringTag(textureHash));
        CompoundTag properties = skullOwner.getCompoundTag("Properties");
        if (properties == null) {
            properties = new CompoundTag();
        }

        CompoundTag texture = new CompoundTag();
        texture.put(
                "Value",
                new StringTag(textureHash.isEmpty() ? STEVE_TEXTURE : textureHash));
        ListTag<CompoundTag> textures = new ListTag<>(CompoundTag.class);
        textures.add(texture);
        properties.put("textures", textures);
        skullOwner.put("Properties", properties);
        tag.put("SkullOwner", skullOwner);

    }

    public static int calculateSizeForContent(final int items) {
        return (
                items <= 9 ?
                        9 * 1 : items <= 9 * 2 ? 9 * 2 : items <= 9 * 3 ? 9 * 3
                        : items <= 9 * 4 ? 9 * 4 : 9 * 5) + 9;
    }

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/business/ConfigurationFactory.java
================================================
package dev.simplix.cirrus.common.business;

import dev.simplix.cirrus.common.configuration.MenuConfiguration;
import dev.simplix.cirrus.common.configuration.MultiPageMenuConfiguration;
import dev.simplix.cirrus.common.configuration.impl.SimpleMenuConfiguration;
import dev.simplix.cirrus.common.configuration.impl.SimpleMultiPageMenuConfiguration;
import lombok.NonNull;

public interface ConfigurationFactory {

    default MenuConfiguration loadFile(@NonNull String file) {
        return loadFile(file, SimpleMenuConfiguration.class);
    }

    default MenuConfiguration loadResource(@NonNull String resourcePath, @NonNull Class<?> caller) {
        return loadResource(resourcePath, caller, SimpleMenuConfiguration.class);
    }

    default MultiPageMenuConfiguration loadFileForMultiPageMenu(@NonNull String file) {
        return loadFile(file, SimpleMultiPageMenuConfiguration.class);
    }

    default MultiPageMenuConfiguration loadResourcesForMultiPageMenu(
            @NonNull String resourcePath,
            @NonNull Class<?> caller) {
        return loadResource(resourcePath, caller, SimpleMultiPageMenuConfiguration.class);
    }

    <T extends MenuConfiguration> T loadFile(@NonNull String file, @NonNull Class<T> type);

    <T extends MenuConfiguration> T loadResource(
            @NonNull String resourcePath,
            @NonNull Class<?> caller,
            @NonNull Class<T> type);

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/business/DataInventoryMenuItemWrapper.java
================================================
package dev.simplix.cirrus.common.business;

import lombok.Getter;
import lombok.NonNull;
import lombok.ToString;
import lombok.experimental.Accessors;

import java.util.List;

@Accessors(fluent = true)
@Getter
@ToString(callSuper = true)
public class DataInventoryMenuItemWrapper<T> extends InventoryMenuItemWrapper {

    private final T data;

    public DataInventoryMenuItemWrapper(
            @NonNull MenuItemWrapper handle,
            @NonNull String actionHandler,
            @NonNull List<String> actionArguments, T data) {
        super(handle, actionHandler, actionArguments);
        this.data = data;
    }

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/business/InventoryMenuItemWrapper.java
================================================
package dev.simplix.cirrus.common.business;

import dev.simplix.protocolize.data.ItemType;
import lombok.Builder;
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;
import lombok.experimental.Accessors;
import net.md_5.bungee.api.chat.BaseComponent;
import net.querz.nbt.tag.CompoundTag;

import java.util.List;

@Accessors(fluent = true)
@Builder
public class InventoryMenuItemWrapper implements MenuItemWrapper {

    private final MenuItemWrapper handle;

    @Getter
    @Setter
    private String actionHandler;
    @Getter
    @Setter
    private List<String> actionArguments;

    @Override
    public String displayName() {
        return this.handle.displayName();
    }

    @Override
    public BaseComponent[] displayNameComponents() {
        return this.handle.displayNameComponents();
    }

    @Override
    public List<String> lore() {
        return this.handle.lore();
    }

    @Override
    public List<BaseComponent[]> loreComponents() {
        return this.handle.loreComponents();
    }

    @Override
    public ItemType type() {
        return this.handle.type();
    }

    @Override
    public CompoundTag nbt() {
        return this.handle.nbt();
    }

    @Override
    public int amount() {
        return this.handle.amount();
    }

    @Override
    public short durability() {
        return this.handle.durability();
    }

    @Override
    public void type(@NonNull ItemType type) {
        this.handle.type(type);
    }

    @Override
    public void displayName(@NonNull String displayName) {
        this.handle.displayName(displayName);
    }

    @Override
    public void displayNameComponents(@NonNull BaseComponent... baseComponents) {
        this.handle.displayNameComponents(baseComponents);
    }

    @Override
    public void lore(@NonNull List<String> lore) {
        this.handle.lore(lore);
    }

    @Override
    public void loreComponents(@NonNull List<BaseComponent[]> lore) {
        this.handle.loreComponents(lore);
    }

    @Override
    public void nbt(@NonNull CompoundTag tag) {
        this.handle.nbt(tag);
    }

    @Override
    public void amount(int amount) {
        this.handle.amount(amount);
    }

    @Override
    public void durability(short durability) {
        this.handle.durability(durability);
    }

    @Override
    public <T> T handle() {
        return this.handle.handle();
    }

    public MenuItemWrapper wrapper() {
        return this.handle;
    }

    @Override
    public String toString() {
        return "InventoryItemWrapper{" +
                "handle=" + this.handle +
                ", actionHandler='" + this.actionHandler + '\'' +
                ", actionArguments=" + this.actionArguments +
                '}';
    }
}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/business/MenuItemWrapper.java
================================================
package dev.simplix.cirrus.common.business;

import dev.simplix.protocolize.data.ItemType;
import lombok.NonNull;
import net.md_5.bungee.api.chat.BaseComponent;
import net.querz.nbt.tag.CompoundTag;

import java.util.List;

/**
 * An {@link MenuItemWrapper} provides uniform data access for items across different platforms.
 * Please be aware, that most of the given properties are immutable, so you have to set them using
 * their setter after you have done some changes.
 */
public interface MenuItemWrapper {

    /**
     * Returns the display name of an item as a string.
     *
     * @return display name
     */
    String displayName();

    /**
     * Returns the display name of an item as component array.
     *
     * @return display name
     */
    BaseComponent[] displayNameComponents();

    /**
     * The lore of the item as strings.
     *
     * @return lore
     */
    List<String> lore();

    /**
     * The lore of the item as component arrays.
     *
     * @return lore
     */
    List<BaseComponent[]> loreComponents();

    /**
     * The {@link ItemType} of the item.
     *
     * @return item type
     */
    ItemType type();

    /**
     * This returns a querz-nbt {@link CompoundTag} with the nbt information about this item. Please
     * be aware, that the nbt data of spigot ItemStacks are immutable. So you have to call setNBT()
     * after you changed the data to set them.
     *
     * @return nbt data
     */
    CompoundTag nbt();

    /**
     * Returns the amount of the stack
     *
     * @return amount
     */
    int amount();

    /**
     * Returns the durability of the item.
     *
     * @return
     */
    short durability();

    /**
     * Sets the mcc item type.
     *
     * @param type type to set
     */
    void type(@NonNull ItemType type);

    /**
     * Sets the display name of the item
     *
     * @param displayName name
     */
    void displayName(@NonNull String displayName);

    /**
     * Sets the display name of the item
     *
     * @param baseComponents name
     */
    void displayNameComponents(@NonNull BaseComponent... baseComponents);

    /**
     * Sets the lore of the item
     *
     * @param lore
     */
    void lore(List<String> lore);

    /**
     * Sets the lore of the item
     *
     * @param lore
     */
    void loreComponents(@NonNull List<BaseComponent[]> lore);

    /**
     * Sets the nbt data.
     *
     * @param tag nbt data
     */
    void nbt(@NonNull CompoundTag tag);

    /**
     * Sets the stack amount.
     *
     * @param amount amount
     */
    void amount(int amount);

    /**
     * Sets the durability.
     * <br>#DUDELAVERITY
     *
     * @param durability durability
     */
    void durability(short durability);

    /**
     * Returns the handle of the wrapper
     *
     * @param <T> dyncast handle type
     * @return the handle
     */
    <T> T handle();

}

================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/business/PlayerWrapper.java
================================================
package dev.simplix.cirrus.common.business;

import lombok.NonNull;

import java.util.UUID;

public interface PlayerWrapper {

    void sendMessage(@NonNull String msg);

    void closeInventory();

    boolean hasPermission(@NonNull String permission);

    UUID uniqueId();

    String name();

    int protocolVersion();

    <T> T handle();

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/config/JsonConfigurationFactory.java
================================================
package dev.simplix.cirrus.common.config;

import com.google.common.io.ByteStreams;
import com.google.gson.Gson;
import dev.simplix.cirrus.common.Cirrus;
import dev.simplix.cirrus.common.business.ConfigurationFactory;
import dev.simplix.cirrus.common.configuration.MenuConfiguration;
import lombok.NonNull;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.NoSuchFileException;
import java.util.Objects;

public class JsonConfigurationFactory implements ConfigurationFactory {

    private final Gson gson;

    public JsonConfigurationFactory(Gson gson) {
        this.gson = gson;
    }

    @Override
    public <T extends MenuConfiguration> T loadFile(
            @NonNull String filename,
            @NonNull Class<T> type) {
        File file = new File(filename);
        if (!file.exists()) {
            if (file.getParentFile() != null) {
                file.getParentFile().mkdirs();
            }
            copyResourceToFile("/cirrus/" + type.getSimpleName() + ".json", file);
        }
        try (
                InputStreamReader reader = new InputStreamReader(
                        Files.newInputStream(file.toPath()),
                        StandardCharsets.UTF_8)) {
            return this.gson.fromJson(reader, type);
        } catch (IOException ioException) {
            throw new RuntimeException(ioException);
        }
    }

    @Override
    public <T extends MenuConfiguration> T loadResource(
            @NonNull String resourcePath,
            @NonNull Class<?> caller,
            @NonNull Class<T> type) {
        try (InputStream stream = caller.getResourceAsStream(resourcePath)) {
            if (stream == null) {
                throw new NoSuchFileException("Unable to find resource " + resourcePath);
            }
            String contents = new String(ByteStreams.toByteArray(stream), StandardCharsets.UTF_8);
            return this.gson.fromJson(contents, type);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    private void copyResourceToFile(@NonNull String resource, @NonNull File file) {
        try (FileOutputStream fileOutputStream = new FileOutputStream(file)) {
            fileOutputStream.write(ByteStreams.toByteArray(
                    Objects.requireNonNull(Cirrus.class.getResourceAsStream(resource), "Inputstream is null")));
            fileOutputStream.flush();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/configuration/MenuConfiguration.java
================================================
package dev.simplix.cirrus.common.configuration;

import com.google.common.base.Preconditions;
import dev.simplix.cirrus.common.i18n.LocalizedItemStackModel;
import dev.simplix.cirrus.common.i18n.LocalizedString;

public interface MenuConfiguration {

    default LocalizedItemStackModel forceBusinessItem(String keyword) {
        return Preconditions.checkNotNull(
                businessItems().get(keyword),
                "No business-item named '" + keyword + "' found"
        );
    }

    LocalizedString title();

    dev.simplix.protocolize.data.inventory.InventoryType type();

    LocalizedItemStackModel placeholderItem();

    int[] reservedSlots();

    LocalizedItemStackModel[] items();

    java.util.Map<String, LocalizedItemStackModel> businessItems();

    MenuConfiguration title(LocalizedString title);

    MenuConfiguration type(dev.simplix.protocolize.data.inventory.InventoryType type);

    MenuConfiguration placeholderItem(LocalizedItemStackModel placeholderItem);

    MenuConfiguration reservedSlots(int[] reservedSlots);

    MenuConfiguration items(LocalizedItemStackModel[] items);

    MenuConfiguration businessItems(java.util.Map<String, LocalizedItemStackModel> businessItems);
}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/configuration/MultiPageMenuConfiguration.java
================================================
package dev.simplix.cirrus.common.configuration;

import dev.simplix.cirrus.common.i18n.LocalizedString;
import dev.simplix.cirrus.common.i18n.LocalizedItemStackModel;

public interface MultiPageMenuConfiguration extends MenuConfiguration {
    LocalizedItemStackModel nextPageItem();

    LocalizedItemStackModel previousPageItem();

    MultiPageMenuConfiguration title(LocalizedString title);

    MultiPageMenuConfiguration type(dev.simplix.protocolize.data.inventory.InventoryType type);

    MultiPageMenuConfiguration placeholderItem(LocalizedItemStackModel placeholderItem);

    MultiPageMenuConfiguration reservedSlots(int[] reservedSlots);

    MultiPageMenuConfiguration items(LocalizedItemStackModel[] items);

    MultiPageMenuConfiguration businessItems(java.util.Map<String, LocalizedItemStackModel> businessItems);

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/configuration/impl/SimpleMenuConfiguration.java
================================================
package dev.simplix.cirrus.common.configuration.impl;

import dev.simplix.cirrus.common.configuration.MenuConfiguration;
import dev.simplix.cirrus.common.i18n.LocalizedString;
import dev.simplix.cirrus.common.i18n.LocalizedItemStackModel;
import dev.simplix.protocolize.data.inventory.InventoryType;

import java.util.HashMap;
import java.util.Map;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

@Data
@Accessors(fluent = true)
@NoArgsConstructor
public class SimpleMenuConfiguration implements MenuConfiguration {

    private LocalizedString title;
    private InventoryType type;
    private LocalizedItemStackModel placeholderItem;
    private int[] reservedSlots = new int[0];
    private LocalizedItemStackModel[] items = new LocalizedItemStackModel[0];
    private Map<String, LocalizedItemStackModel> businessItems = new HashMap<>();

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/configuration/impl/SimpleMultiPageMenuConfiguration.java
================================================
package dev.simplix.cirrus.common.configuration.impl;

import dev.simplix.cirrus.common.configuration.MultiPageMenuConfiguration;
import dev.simplix.cirrus.common.i18n.LocalizedString;
import dev.simplix.cirrus.common.i18n.LocalizedItemStackModel;
import dev.simplix.protocolize.data.inventory.InventoryType;

import java.util.HashMap;
import java.util.Map;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

@Data
@Builder
@Accessors(fluent = true)
@AllArgsConstructor
@NoArgsConstructor
public class SimpleMultiPageMenuConfiguration implements MultiPageMenuConfiguration {

    private LocalizedItemStackModel nextPageItem;
    private LocalizedItemStackModel previousPageItem;
    private LocalizedString title;
    private InventoryType type;
    private LocalizedItemStackModel placeholderItem;
    private int[] reservedSlots = new int[0];
    private LocalizedItemStackModel[] items = new LocalizedItemStackModel[0];
    private Map<String, LocalizedItemStackModel> businessItems = new HashMap<>();
}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/container/Container.java
================================================
package dev.simplix.cirrus.common.container;

import dev.simplix.cirrus.common.business.InventoryMenuItemWrapper;
import dev.simplix.cirrus.common.business.MenuItemWrapper;
import dev.simplix.cirrus.common.converter.Converters;
import dev.simplix.cirrus.common.item.CirrusItem;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * A container stores {@link InventoryMenuItemWrapper}s at a given slot position.
 */
public interface Container {

    /**
     * Returns a map collecting all items.
     *
     * @return The map
     */
    Map<Integer, InventoryMenuItemWrapper> itemMap();

    /**
     * Returns a set with slots that are marked as reserved
     *
     * @return The set
     */
    Set<Integer> reservedSlots();

    /**
     * Returns the maximum capacity of this container
     *
     * @return the maximum amount of items this container can hold
     */
    int capacity();

    /**
     * Returns the initial slot id of this container
     *
     * @return Initial slot id
     */
    int baseSlot();

    /**
     * @return the slot index of the next available empty slot or -1 if no slot is empty
     */
    int nextFreeSlot();

    /**
     * @return the slot index of the next available empty slot or -1 after the specified index
     */
    int nextFreeSlot(int i);

    /**
     * Sets an item into the next free slot. Free slots are slots where no item has been set and the
     * slot is not marked as reserved.
     *
     * @param inventoryItemWrapper The item to set
     */
    default void add(InventoryMenuItemWrapper inventoryItemWrapper) {
        set(nextFreeSlot(), inventoryItemWrapper);
    }

    /**
     * Sets an item into the next free slot. Free slots are slots where no item has been set and the
     * slot is not marked as reserved.
     *
     * @param menuItemWrapper The item stack to set
     * @param actionHandler   The action handler which should be called on click
     * @param actionArgs      the arguments for that click
     */
    default void add(
            MenuItemWrapper menuItemWrapper,
            String actionHandler,
            List<String> actionArgs) {
        set(nextFreeSlot(), InventoryMenuItemWrapper.builder()
                .handle(menuItemWrapper)
                .actionHandler(actionHandler)
                .actionArguments(actionArgs)
                .build());
    }

    /**
     * Sets an item into the next free slot. Free slots are slots where no item has been set and the
     * slot is not marked as reserved.
     *
     * @param model The item stack model
     */
    default void add(CirrusItem model) {
        set(nextFreeSlot(), InventoryMenuItemWrapper.builder()
                .handle(Converters.convert(model, InventoryMenuItemWrapper.class))
                .actionHandler(model.actionHandler())
                .actionArguments(model.actionArguments())
                .build());
    }

    /**
     * Sets an item into a given position in the container
     *
     * @param slot                 The slot the item will be located at
     * @param inventoryItemWrapper The item stack wrapper
     */
    default void set(int slot, InventoryMenuItemWrapper inventoryItemWrapper) {
        itemMap().put(slot, inventoryItemWrapper);
    }

    /**
     * Sets an item into a given position in the container
     *
     * @param slot            The slot the item will be located at
     * @param menuItemWrapper The item stack wrapper
     * @param actionHandler   The handler that handles the click
     * @param actionArgs      Arguments for the action handler
     */
    default void set(
            int slot,
            MenuItemWrapper menuItemWrapper,
            String actionHandler,
            List<String> actionArgs) {
        set(slot, InventoryMenuItemWrapper.builder()
                .handle(menuItemWrapper)
                .actionHandler(actionHandler)
                .actionArguments(actionArgs)
                .build());
    }

    /**
     * Sets an item into a given position in the container
     *
     * @param slot  The slot the item will be located at
     * @param model The item stack model
     */
    default void set(int slot, CirrusItem model) {
        set(slot, InventoryMenuItemWrapper.builder()
                .handle(Converters.convert(model, InventoryMenuItemWrapper.class))
                .actionHandler(model.actionHandler())
                .actionArguments(model.actionArguments())
                .build());
    }

    /**
     * Returns the item stack from the given position
     *
     * @param slot slot
     * @return item
     */
    default InventoryMenuItemWrapper get(int slot) {
        return itemMap().get(slot);
    }

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/container/impl/ItemContainer.java
================================================
package dev.simplix.cirrus.common.container.impl;

import dev.simplix.cirrus.common.business.InventoryMenuItemWrapper;
import dev.simplix.cirrus.common.container.Container;
import dev.simplix.cirrus.common.util.InventoryContentMap;

import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import lombok.NonNull;

public class ItemContainer implements Container {

    private final InventoryContentMap inventoryContentMap = new InventoryContentMap();
    private final Set<Integer> reservedSlots = new HashSet<>();
    private final int baseSlotIndex;
    private final int capacity;

    public ItemContainer(int baseSlotIndex, int capacity) {
        this.baseSlotIndex = baseSlotIndex;
        this.capacity = capacity;
    }

    @Override
    public void set(int slot, @NonNull InventoryMenuItemWrapper inventoryItemWrapper) {
        itemMap().put(slot + this.baseSlotIndex, inventoryItemWrapper);
    }

    @Override
    public Map<Integer, InventoryMenuItemWrapper> itemMap() {
        return this.inventoryContentMap;
    }

    @Override
    public Set<Integer> reservedSlots() {
        return this.reservedSlots;
    }

    @Override
    public int capacity() {
        return this.capacity;
    }

    @Override
    public int baseSlot() {
        return this.baseSlotIndex;
    }

    @Override
    public int nextFreeSlot() {
        for (int i = this.baseSlotIndex; i < this.capacity + this.baseSlotIndex; i++) {
            if (!itemMap().containsKey(i) && !reservedSlots().contains(i)) {
                return i;
            }
        }
        return -1;
    }

    @Override
    public int nextFreeSlot(int base) {
        for (int i = base; i < this.capacity + this.baseSlotIndex; i++) {
            if (!itemMap().containsKey(i) && !reservedSlots().contains(i)) {
                return i;
            }
        }
        return -1;
    }

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/converter/Converter.java
================================================
package dev.simplix.cirrus.common.converter;

import lombok.NonNull;

/**
 * A converter is used to convert one object to another.
 *
 * @param <Source> The source type of the object
 * @param <Target> The target type ot the object
 */
public interface Converter<Source, Target> {

    /**
     * Converts a given source object to the target type.
     *
     * @param src The source object
     * @return The target object
     */
    Target convert(@NonNull Source src);

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/converter/Converters.java
================================================
package dev.simplix.cirrus.common.converter;

import lombok.NonNull;
import org.jetbrains.annotations.Nullable;

import java.util.AbstractMap.SimpleEntry;
import java.util.*;
import java.util.Map.Entry;

/**
 * Central registration class for {@link Converter}s.
 */
@SuppressWarnings("rawtypes")
public final class Converters {

    private static final Map<Entry<Class, Class>, Converter> CONVERTER_MAP = new HashMap<>();

    private Converters() {
    }

    /**
     * Converts a source object to a given type.
     *
     * @param source The source object to convert
     * @param to     The target type class
     * @param <T>    The target type
     * @return An object instance of the target type
     */
    public static <T> T convert(@NonNull final Object source, @NonNull final Class<T> to) {
        Converter converter = getConverter(source.getClass(), to);
        if (converter == null) {
            converter = getMultiConverter(source.getClass(), to);
        }
        if (converter == null) {
            throw new NullPointerException("No converter available to convert " + source
                    .getClass()
                    .getName() + " to " + to.getName());
        }
        return (T) converter.convert(source);
    }

    private static <S, T> Converter<S, T> getMultiConverter(
            @NonNull final Class<S> source,
            @NonNull final Class<T> to) {
        final List<Converter> converters = new ArrayList<>();
        findConversionRoute(converters, source, to);
        if (converters.size() <= 1) {
            return null;
        }
        return src -> {
            Object out = src;
            for (final Converter converter : converters) {
                out = converter.convert(out);
            }
            return (T) out;
        };
    }

    private static boolean findConversionRoute(
            @NonNull final List<Converter> converters,
            @NonNull final Class<?> source,
            @NonNull final Class<?> to) {
        for (final Entry<Class, Class> entry : CONVERTER_MAP.keySet()) {
            if (entry.getKey().equals(source)) {
                final List<Converter> list = new ArrayList<>();
                if (buildRoute(list, entry, to)) {
                    list.add(CONVERTER_MAP.get(entry));
                    Collections.reverse(list);
                    converters.addAll(list);
                    return true;
                }
            }
        }
        return false;
    }

    private static boolean buildRoute(
            @NonNull final List<Converter> converters,
            @NonNull final Map.Entry<Class, Class> entry,
            @NonNull final Class<?> to) {
        if (entry.getValue().equals(to)) {
            return true;
        }
        for (final Entry<Class, Class> entry1 : CONVERTER_MAP.keySet()) {
            if (entry1.getKey().equals(entry.getValue())) {
                if (buildRoute(converters, entry1, to)) {
                    converters.add(CONVERTER_MAP.get(entry1));
                    return true;
                }
            }
        }
        return false;
    }

    /**
     * Registers a {@link Converter} for a given type conversion.
     *
     * @param sourceType The source type
     * @param targetType The target type
     * @param converter  The convert instance
     */
    public static void register(
            @NonNull final Class<?> sourceType,
            @NonNull final Class targetType,
            @NonNull final Converter converter) {
        CONVERTER_MAP.put(new SimpleEntry<>(sourceType, targetType), converter);
    }

    /**
     * Returns a registered converter
     *
     * @param sourceType The source type class
     * @param targetType The target type class
     * @param <S>        The source type
     * @param <T>        The target type
     * @return The converter instance or null if no such converter exists
     */
    @Nullable
    public static <S, T> Converter<S, T> getConverter(
            final Class<S> sourceType,
            final Class<T> targetType) {
        Converter converter = CONVERTER_MAP.get(new SimpleEntry<>(sourceType, targetType));
        if (converter == null) {
            for (Entry<Class, Class> entry : CONVERTER_MAP.keySet()) {
                if (entry.getKey().isAssignableFrom(sourceType)) {
                    if (entry.getValue().equals(targetType)) {
                        return CONVERTER_MAP.get(entry);
                    }
                }
            }
        }
        return converter;
    }
}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/effect/AbstractChangingItemAnimation.java
================================================
package dev.simplix.cirrus.common.effect;

import dev.simplix.cirrus.common.item.CirrusItem;

public abstract class AbstractChangingItemAnimation extends AbstractMenuAnimation<CirrusItem> {

    protected AbstractChangingItemAnimation(CirrusItem input, int effectLength) {
        super(input, effectLength);
    }

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/effect/AbstractMenuAnimation.java
================================================
package dev.simplix.cirrus.common.effect;

import com.google.common.base.Preconditions;
import com.google.common.collect.Iterators;

import java.util.Iterator;

public abstract class AbstractMenuAnimation<T> implements MenuAnimation<T> {
    protected final T input;
    protected final int effectLength;

    private Iterator<T> iterator;

    protected AbstractMenuAnimation(
            T input,
            int effectLength) {
        this.input = Preconditions.checkNotNull(input, "input must not be null");
        Preconditions.checkState(effectLength > 0, "effectLength is not larger than 0");
        this.effectLength = effectLength;
    }

    @Override
    public int effectLength() {
        return this.effectLength;
    }

    @Override
    public final T input() {
        return this.input;
    }

    @Override
    public final T next() {
        if (this.iterator == null) {
            this.iterator = Iterators.cycle(calculate());
        }

        return this.iterator.next();
    }
}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/effect/Animated.java
================================================
package dev.simplix.cirrus.common.effect;

import dev.simplix.cirrus.common.menu.Menu;

public interface Animated extends Menu {
    void update();

    @Override
    default void handleClose(boolean inventorySwitch) {
        MenuAnimator.remove(this);
    }
}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/effect/Animations.java
================================================
package dev.simplix.cirrus.common.effect;

import lombok.experimental.UtilityClass;

@UtilityClass
public class Animations {

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/effect/MenuAnimation.java
================================================
package dev.simplix.cirrus.common.effect;

import java.util.List;

public interface MenuAnimation<T> {

    /**
     * Duration of the effect in the menu in ticks
     */
    int effectLength();

    /**
     * Initial input of the effect
     */
    T input();

    /**
     * All calculated values for the effect
     */
    List<T> calculate();

    /**
     * Next effect frame. Usually calculated with an
     * infinite iterable calculated with {@link MenuAnimation#calculate()}
     * and created with {@link com.google.common.collect.Iterables#cycle(Object[])}
     */
    T next();

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/effect/MenuAnimator.java
================================================
package dev.simplix.cirrus.common.effect;

import lombok.NonNull;
import lombok.experimental.UtilityClass;

import java.util.LinkedList;
import java.util.List;

@UtilityClass
public class MenuAnimator {
    private final List<Animated> menus = new LinkedList<>();

    public boolean isEmpty() {
        return menus.isEmpty();
    }

    public void register(@NonNull Animated menu) {
        menus.add(menu);
    }

    public void remove(@NonNull Animated menu) {
        menus.remove(menu);
    }

    public void updateAll() {
        for (Animated menu : menus) {
            menu.update();
            menu.build();
        }
    }

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/effects/GradualColorChangeAnimation.java
================================================
package dev.simplix.cirrus.common.effects;

import com.google.common.base.Preconditions;
import dev.simplix.cirrus.common.effect.AbstractMenuAnimation;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * Will generate: <a href="https://media3.giphy.com/media/bvuK2KpLTip6vtemxY/giphy.gif?cid=790b7611af638e257a5f310fdd6d3015bfb9ee3119298826&rid=giphy.gif&ct=g">...</a>
 */
public class GradualColorChangeAnimation extends AbstractMenuAnimation<String> {

    protected final String primaryColor;
    protected final String secondaryColor;

    protected boolean reverse = false;
    protected int transitionCount = 0;

    public GradualColorChangeAnimation(
            String primaryColor,
            String input) {
        this(primaryColor, "§f§l", input, 2);
    }

    public GradualColorChangeAnimation(
            String primaryColor,
            String secondaryColor,
            String input,
            int effectLength) {
        super(input, effectLength);
        this.primaryColor = Preconditions.checkNotNull(primaryColor, "primaryColor must not be null");
        this.secondaryColor = Preconditions.checkNotNull(secondaryColor, "secondaryColor must not be null");
    }

    public GradualColorChangeAnimation reversed() {
        this.reverse = true;
        return this;
    }

    public GradualColorChangeAnimation reverse(boolean reverse) {
        this.reverse = reverse;
        return this;
    }

    public GradualColorChangeAnimation transitionCount(int transitionCount) {
        this.transitionCount = transitionCount;
        return this;
    }

    public GradualColorChangeAnimation length(int length) {
        return new GradualColorChangeAnimation(this.primaryColor, this.secondaryColor, this.input, length).reverse(this.reverse).transitionCount(this.transitionCount);
    }

    @Override
    public List<String> calculate() {

        final List<String> out = new ArrayList<>();
        out.addAll(insertEffect(this.primaryColor, this.secondaryColor));
        out.addAll(insertEffect(this.secondaryColor, this.primaryColor));

        return out;
    }

    private List<String> insertEffect(String effectColor, String primaryColor) {
        final List<String> out = new ArrayList<>();

        if (this.reverse) {
            for (int i = this.input.length() - 1; i >= 0; i--) {
                out.addAll(Collections.nCopies(this.effectLength, addAtIndex(primaryColor + this.input, effectColor, i + primaryColor.length())));
            }
            if (this.transitionCount != 0) {
                out.addAll(Collections.nCopies(this.transitionCount, effectColor + this.input));
            }

        } else {
            for (int i = 0; i <= this.input.length(); i++) {
                out.addAll(Collections.nCopies(this.effectLength, addAtIndex(primaryColor + this.input, effectColor, i + primaryColor.length())));
            }
            if (this.transitionCount != 0) {
                out.addAll(Collections.nCopies(this.transitionCount, primaryColor + this.input));
            }
        }
        return out;
    }

    private String addAtIndex(String str, String toAdd, int position) {
        StringBuilder sb = new StringBuilder(str);
        sb.insert(position, toAdd);
        return sb.toString();
    }
}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/effects/RGBColorChangeAnimation.java
================================================
package dev.simplix.cirrus.common.effects;

import com.google.common.base.Preconditions;
import dev.simplix.cirrus.common.effect.AbstractMenuAnimation;
import dev.simplix.cirrus.common.util.ColorUtils;
import net.md_5.bungee.api.ChatColor;

import java.awt.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class RGBColorChangeAnimation extends AbstractMenuAnimation<String> {

    private final List<Color> colors;
    private String colorSuffix;
    private double step;

    private RGBColorChangeAnimation(
            String input,
            int effectLength,
            double step,
            String colorSuffix,
            List<Color> colors
    ) {
        super(Preconditions.checkNotNull(input, "input must not be null"), effectLength);
        this.step = step;
        this.colors = Preconditions.checkNotNull(colors, "colors must not be null");
        this.colorSuffix = Preconditions.checkNotNull(colorSuffix, "colorAddon must not be null");
        Preconditions.checkState(colors.size() >= 2, "At least 2 colors must be provided¥");
    }

    public static RGBColorChangeAnimation fat(String input, Color... colors) {
        return of(input, "§l", 2, 40, colors);
    }

    public static RGBColorChangeAnimation of(String input, String colorSuffix, int effectLength, double step, Color... colors) {
        return new RGBColorChangeAnimation(input, effectLength, step, colorSuffix, Arrays.asList(colors));
    }

    public RGBColorChangeAnimation step(int step) {
        this.step = step;
        return this;
    }

    public RGBColorChangeAnimation colorSuffix(String colorSuffix) {
        this.colorSuffix = colorSuffix;
        return this;
    }

    @Override
    public List<String> calculate() {
        final List<String> out = new ArrayList<>();

        for (int i = 0; i < this.colors.size(); i++) {
            final Color color = this.colors.get(i);
            final int index = (this.colors.size() == i + 1) ? 0 : (i + 1);
            final Color color2 = this.colors.get(index);

            out.addAll(Collections.nCopies(
                    this.effectLength,
                    ChatColor.of(color) + this.colorSuffix + this.input
            ));

            for (Color between : ColorUtils.colorsInBetween(color, color2, this.step)) {
                out.addAll(
                        Collections.nCopies(
                                this.effectLength,
                                ChatColor.of(between) + this.colorSuffix + this.input
                        )
                );
            }
        }

        return out;
    }
}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/effects/SimpleChangingItemAnimation.java
================================================
package dev.simplix.cirrus.common.effects;

import dev.simplix.cirrus.common.effect.AbstractChangingItemAnimation;
import dev.simplix.cirrus.common.item.CirrusItem;

import java.util.List;

public class SimpleChangingItemAnimation extends AbstractChangingItemAnimation {
    private final List<CirrusItem> values;

    protected SimpleChangingItemAnimation(CirrusItem basis, List<CirrusItem> values, int effectLength) {
        super(basis, effectLength);
        this.values = values;
    }

    @Override
    public List<CirrusItem> calculate() {
        return this.values;
    }
}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/handler/ActionHandler.java
================================================
package dev.simplix.cirrus.common.handler;

import dev.simplix.cirrus.common.business.InventoryMenuItemWrapper;
import dev.simplix.cirrus.common.model.CallResult;
import dev.simplix.cirrus.common.model.Click;

/**
 * {@link ActionHandler}s are functions that get called when a click on an {@link
 * InventoryMenuItemWrapper} occurs.
 */
@FunctionalInterface
public interface ActionHandler {

    CallResult handle(Click click);

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/handler/AutoCancellingActionHandler.java
================================================
package dev.simplix.cirrus.common.handler;

import dev.simplix.cirrus.common.model.CallResult;
import dev.simplix.cirrus.common.model.Click;

@FunctionalInterface
public interface AutoCancellingActionHandler extends ActionHandler {
    @Override
    default CallResult handle(Click click) {
        onHandle(click);
        return CallResult.DENY_GRABBING;
    }

    void onHandle(Click click);
}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedItemStackModel.java
================================================
package dev.simplix.cirrus.common.i18n;

import dev.simplix.cirrus.common.Utils;
import dev.simplix.cirrus.common.item.CirrusItem;
import dev.simplix.protocolize.data.ItemType;
import lombok.*;
import lombok.experimental.Accessors;
import net.querz.nbt.tag.CompoundTag;

import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;

@Data
@Builder
@Accessors(fluent = true)
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class LocalizedItemStackModel {

    @Builder.Default
    private LocalizedString displayName = new LocalizedString(new HashMap<>());
    @Builder.Default
    private LocalizedStringList lore = new LocalizedStringList(new HashMap<>());
    @Builder.Default
    private ItemType itemType = ItemType.STONE;
    @Builder.Default
    private byte amount = 1;
    @Builder.Default
    private short durability = -1;
    @Builder.Default
    private String actionHandler = "noAction";
    @Builder.Default
    private List<String> actionArguments = Collections.emptyList();
    @Builder.Default
    private int[] slots = new int[0];
    @Builder.Default
    @NonNull
    private CompoundTag nbt = new CompoundTag();

    public LocalizedItemStackModel glow() {
        Utils.glow(this.nbt);
        return this;
    }

    public LocalizedItemStackModel texture(@NonNull String texture) {
        Utils.texture(this.nbt, texture);
        return this;
    }

    public CirrusItem localize(Locale locale, String... replacements) {
        return Localizer.localize(
                this,
                locale,
                replacements
        );
    }

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedString.java
================================================
package dev.simplix.cirrus.common.i18n;

import lombok.NonNull;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

public class LocalizedString {

    private final Map<String, String> translations = new HashMap<>();

    public LocalizedString(@NonNull Map<String, String> stringMap) {
        this.translations.putAll(stringMap);
    }

    /**
     * @return The map with all translations
     */
    public Map<String, String> translations() {
        return this.translations;
    }

    /**
     * Returns the localized string for the given {@link Locale}. If the given locale is not
     * available, it will return the first available translation. If there aren't any translations, it
     * will return "missigno."
     *
     * @param locale The desired locale
     * @return the localized string or "missigno."
     */
    public String translated(Locale locale) {
        return this.translations.getOrDefault(
                locale.getLanguage(),
                this.translations.getOrDefault(
                        this.translations.keySet().stream().findFirst().orElse(""),
                        "missgno."));
    }

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedStringDeserializer.java
================================================
package dev.simplix.cirrus.common.i18n;

import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.reflect.TypeToken;
import lombok.NonNull;

import java.lang.reflect.Type;
import java.util.Map;

public class LocalizedStringDeserializer implements JsonDeserializer<LocalizedString> {

    @Override
    public LocalizedString deserialize(
            @NonNull JsonElement jsonElement,
            @NonNull Type type,
            @NonNull JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
        Map<String, String> stringMap = jsonDeserializationContext.deserialize(
                jsonElement,
                new TypeToken<Map<String, String>>() {
                }.getType());
        return new LocalizedString(stringMap);
    }

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedStringList.java
================================================
package dev.simplix.cirrus.common.i18n;

import lombok.NoArgsConstructor;
import lombok.NonNull;

import java.util.*;

@NoArgsConstructor
public class LocalizedStringList {

    private final Map<String, List<String>> translations = new HashMap<>();

    public LocalizedStringList(@NonNull Map<String, List<String>> stringListMap) {
        this.translations.putAll(stringListMap);
    }

    /**
     * @return The map with all translations
     */
    public Map<String, List<String>> translations() {
        return this.translations;
    }


    private final List<String> forceAdded = new ArrayList<>();

    /**
     * Returns the localized string list for the given {@link Locale}. If the given locale is not
     * available, it will return the first available translation. If there aren't any translations, it
     * will return an empty list.
     *
     * @param locale The desired locale
     * @return the localized string list
     */
    public List<String> translated(@NonNull Locale locale) {
        if (this.translations.isEmpty()) {
            return Collections.emptyList();
        }
        String fallback = this.translations.keySet().iterator().next();
        final List<String> out = new ArrayList<>(this.translations.getOrDefault(
                locale.getLanguage(),
                this.translations.getOrDefault(
                        fallback,
                        Collections.emptyList()))
        );

        out.addAll(this.forceAdded);
        return out;
    }

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedStringListDeserializer.java
================================================
package dev.simplix.cirrus.common.i18n;

import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.reflect.TypeToken;
import lombok.NonNull;

import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;

public class LocalizedStringListDeserializer implements JsonDeserializer<LocalizedStringList> {

    @Override
    public LocalizedStringList deserialize(
            @NonNull JsonElement jsonElement,
            @NonNull Type type,
            @NonNull JsonDeserializationContext jsonDeserializationContext)
            throws JsonParseException {
        Map<String, List<String>> stringListMap = jsonDeserializationContext.deserialize(
                jsonElement,
                new TypeToken<Map<String, List<String>>>() {
                }.getType());
        return new LocalizedStringList(stringListMap);
    }
}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedStringListSerializer.java
================================================
package dev.simplix.cirrus.common.i18n;

import com.google.gson.JsonElement;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import lombok.NonNull;

import java.lang.reflect.Type;

public class LocalizedStringListSerializer implements JsonSerializer<LocalizedStringList> {

    @Override
    public JsonElement serialize(
            @NonNull LocalizedStringList localizedStringList,
            @NonNull Type type,
            @NonNull JsonSerializationContext jsonSerializationContext) {
        return jsonSerializationContext.serialize(localizedStringList.translations());
    }

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedStringSerializer.java
================================================
package dev.simplix.cirrus.common.i18n;

import com.google.gson.JsonElement;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import lombok.NonNull;

import java.lang.reflect.Type;

public class LocalizedStringSerializer implements JsonSerializer<LocalizedString> {

    @Override
    public JsonElement serialize(
            @NonNull LocalizedString localizedString,
            @NonNull Type type,
            @NonNull JsonSerializationContext jsonSerializationContext) {
        return jsonSerializationContext.serialize(localizedString.translations());
    }

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/Localizer.java
================================================
package dev.simplix.cirrus.common.i18n;

import dev.simplix.cirrus.common.item.CirrusItem;
import lombok.NonNull;
import net.querz.nbt.io.SNBTUtil;
import net.querz.nbt.tag.CompoundTag;
import org.jetbrains.annotations.Nullable;

import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Locale;

public final class Localizer {

    public static List<String> localize(
            LocalizedStringList localizedStringList,
            @NonNull Locale locale,
            String... replacements) {
        if (localizedStringList == null) {
            return Collections.emptyList();
        }
        return Arrays.asList(Replacer.of(localizedStringList.translated(locale))
                .replaceAll((Object[]) replacements).replacedMessage());
    }

    public static String localize(
            LocalizedString localizedString,
            @NonNull Locale locale,
            String... replacements) {
        if (localizedString == null) {
            return "";
        }
        return Replacer
                .of(localizedString.translated(locale))
                .replaceAll((Object[]) replacements)
                .replacedMessageJoined();
    }

    public static CirrusItem localize(
            @NonNull LocalizedItemStackModel model,
            @NonNull Locale locale,
            @NonNull String... replacements) {
        return CirrusItem.of(localize(model.displayName(), locale, replacements))
                .actionArguments(Arrays.asList(Replacer
                        .of(model.actionArguments() == null ? Collections.emptyList() : model.actionArguments())
                        .replaceAll((Object[]) replacements)
                        .replacedMessage()))
                .actionHandler(model.actionHandler())
                .amount(model.amount())
                .durability(model.durability())
                .itemType(model.itemType())
                .lore(localize(model.lore(), locale, replacements))
                .nbt(formatNbt(model.nbt(), replacements))
                .slots(model.slots());
    }

    private static CompoundTag formatNbt(
            @Nullable CompoundTag compoundTag,
            @NonNull String... replacements) {
        if (compoundTag == null) {
            return null;
        }
        try {
            String mojangson = SNBTUtil.toSNBT(compoundTag);
            return (CompoundTag) SNBTUtil.fromSNBT(Replacer.of(mojangson)
                    .replaceAll((Object[]) replacements).replacedMessageJoined());
        } catch (IOException ioException) {
            // Ignored
        }
        return compoundTag;
    }

}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/Replacer.java
================================================
package dev.simplix.cirrus.common.i18n;

import com.google.common.base.Preconditions;
import lombok.Getter;
import lombok.NonNull;
import lombok.experimental.Accessors;
import lombok.val;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * This is a utility class for handy message replacements. Placeholders begin with { and are ending
 * with }
 * <br>
 * <b>Example:</b>
 * <br> {viewer}
 */
@Getter
@Accessors(fluent = true)
public final class Replacer {

    public static final String DELIMITER = "\n";
    private final List<String> messages;

    //Messages to replace
    private final List<String> variables = new ArrayList<>();
    private final List<Object> replacements = new ArrayList<>();

    private Replacer(List<String> messages) {
        // Cloning our messages
        this.messages = new ArrayList<>(messages);
    }

    // ----------------------------------------------------------------------------------------------------
    // Static Factory methods
    // ----------------------------------------------------------------------------------------------------
    public static Replacer of(@NonNull final String... messages) {
        return new Replacer(Arrays.asList(messages));
    }

    public static Replacer of(@NonNull final List<String> messages) {
        return new Replacer(messages);
    }

    public static Replacer ofMultilineString(@NonNull final String multilineString) {
        return new Replacer(Arrays.asList(multilineString.split(DELIMITER)));
    }

    public final Replacer find(@NonNull final String... variables) {
        this.variables.clear();
        this.variables.addAll(Arrays.asList(variables));
        return this;
    }

    public final Replacer replace(@NonNull final Object... replacements) {
        this.replacements.clear();

        this.replacements.addAll(Arrays.asList(replacements));
        return this;
    }

    public Replacer set(final int index, @NonNull final String message) {
        this.messages.set(index, message);
        return this;
    }

    /**
     * Replaces all variables with replacements.
     *
     * @param associativeArray Variable, Replacement, Variable, Replacement
     */
    public final Replacer replaceAll(@NonNull final Object... associativeArray) {
        this.variables.clear();
        this.replacements.clear();

        //Even: Value
        for (int i = 0; i < associativeArray.length; i++) {
            if (i % 2 == 0) {
                //Odd: Key
                val raw = associativeArray[i];
                Preconditions.checkState(
                        raw instanceof String,
                        "Expected String at " + raw + ", got " + raw.getClass()
                                .getSimpleName());
                this.variables.add((String) raw);
            } else {
                this.replacements.add(associativeArray[i]);
            }
        }
        return this;
    }

    /**
     * Method to replace the registered Replacers.
     */
    public String[] replacedMessage() {
        Preconditions.checkState(
                this.replacements.size() == this.variables.size(),
                "Variables " + this.variables.size()
                        + " != replacements " + this.replacements.size(),
                "Variables: " + this.variables.toString(),
                "Replacments: " + this.replacements
        );

        // Join and replace as 1 message for maximum performance
        String message = String.join(DELIMITER, this.messages);

        for (int i = 0; i < this.variables.size(); i++) {
            String found = this.variables.get(i);
            { // Auto insert brackets
                if (!found.startsWith("{")) {
                    found = "{" + found;
                }

                if (!found.endsWith("}")) {
                    found = found + "}";
                }
            }
            final Object rep = i <= this.replacements.size() ? this.replacements.get(i) : null;

            message = message.replace(found, rep == null ? "" : rep.toString());
        }

        return message.split(DELIMITER);
    }

    /**
     * Same as {@link #replacedMessage()} but joined using {@link String#join(CharSequence,
     * CharSequence...)} and the {@link #DELIMITER}
     */
    public String replacedMessageJoined() {
        return String.join(DELIMITER, replacedMessage());
    }
}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/item/CirrusItem.java
================================================
package dev.simplix.cirrus.common.item;

import dev.simplix.cirrus.common.Utils;
import dev.simplix.cirrus.common.effect.AbstractMenuAnimation;
import dev.simplix.protocolize.data.ItemType;
import lombok.NonNull;
import lombok.experimental.Accessors;
import net.querz.nbt.tag.CompoundTag;
import org.jetbrains.annotations.Nullable;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.function.Supplier;

@Accessors(fluent = true)
public class CirrusItem {

    @NonNull
    private String displayName = "Example-DisplayName";
    @Nullable
    private AbstractMenuAnimation<String> titleEffect = null;
    private List<String> lore = Collections.emptyList();
    @Nullable
    private Supplier<List<String>> loreSupplier = null;
    private ItemType itemType = ItemType.STONE;
    private byte amount = 1;
    private short durability = -1;
    private String actionHandler = "noAction";
    private List<String> actionArguments = Collections.emptyList();
    private int[] slots = new int[0];
    @NonNull
    private CompoundTag nbt;

    private CirrusItem(@NonNull String displayName, @Nullable AbstractMenuAnimation<String> titleEffect, List<String> lore, @Nullable Supplier<List<String>> loreSupplier, ItemType itemType, byte amount, short durability, String actionHandler, List<String> actionArguments, int[] slots, @NonNull CompoundTag nbt) {
        this.displayName = displayName;
        this.titleEffect = titleEffect;
        this.lore = lore;
        this.loreSupplier = loreSupplier;
        this.itemType = itemType;
        this.amount = amount;
        this.durability = durability;
        this.actionHandler = actionHandler;
        this.actionArguments = actionArguments;
        this.slots = slots;
        this.nbt = nbt;
    }

    private CirrusItem() {
    }

    // ----------------------------------------------------------------------------------------------------
    // Instancing
    // ----------------------------------------------------------------------------------------------------

    public static CirrusItem of(String name, ItemType type) {
        return new CirrusItem().displayName(name).itemType(type);
    }

    public static CirrusItem of(String name) {
        return of(name, ItemType.STONE);
    }

    public static CirrusItem animated(AbstractMenuAnimation<String> effect, ItemType type) {
        return new CirrusItem().itemType(type).titleEffect(effect);
    }

    public static CirrusItem animated(AbstractMenuAnimation<String> effect) {
        return animated(effect, ItemType.STONE);
    }

    // ----------------------------------------------------------------------------------------------------
    // Chained setters
    // ----------------------------------------------------------------------------------------------------

    public CirrusItem lore(String... lines) {
        this.lore = Arrays.asList(lines);
        return this;
    }

    public CirrusItem slot(int... slots) {
        this.slots = slots;
        return this;
    }

    public String displayNam() {
        if (this.titleEffect != null) {
            return this.titleEffect.next();
        }
        return this.displayName;
    }

    public CirrusItem glow() {
        Utils.glow(this.nbt);
        return this;
    }

    public CirrusItem texture(@NonNull String texture) {
        Utils.texture(this.nbt, texture);
        return this;
    }

    public CirrusItem copy() {
        return new CirrusItem(
                this.displayName,
                this.titleEffect,
                this.lore,
                this.loreSupplier,
                this.itemType,
                this.amount,
                this.durability,
                this.actionHandler,
                this.actionArguments,
                this.slots,
                this.nbt
        );
    }

    public @NonNull String displayName() {
        return this.displayName;
    }

    public @Nullable AbstractMenuAnimation<String> titleEffect() {
        return this.titleEffect;
    }

    public List<String> lore() {
        if (this.loreSupplier != null) {
            return this.loreSupplier.get();
        }
        return this.lore;
    }

    public @Nullable Supplier<List<String>> loreSupplier() {
        return this.loreSupplier;
    }

    public ItemType itemType() {
        return this.itemType;
    }

    public byte amount() {
        return this.amount;
    }

    public short durability() {
        return this.durability;
    }

    public String actionHandler() {
        return this.actionHandler;
    }

    public List<String> actionArguments() {
        return this.actionArguments;
    }

    public int[] slots() {
        return this.slots;
    }

    public @NonNull CompoundTag nbt() {
        return this.nbt;
    }

    public CirrusItem displayName(@NonNull String displayName) {
        this.displayName = displayName;
        return this;
    }

    public CirrusItem titleEffect(@Nullable AbstractMenuAnimation<String> titleEffect) {
        this.titleEffect = titleEffect;
        return this;
    }

    public CirrusItem lore(List<String> lore) {
        this.lore = lore;
        return this;
    }

    public CirrusItem loreSupplier(@Nullable Supplier<List<String>> loreSupplier) {
        this.loreSupplier = loreSupplier;
        return this;
    }

    public CirrusItem itemType(ItemType itemType) {
        this.itemType = itemType;
        return this;
    }

    public CirrusItem amount(byte amount) {
        this.amount = amount;
        return this;
    }

    public CirrusItem durability(short durability) {
        this.durability = durability;
        return this;
    }

    public CirrusItem actionHandler(String actionHandler) {
        this.actionHandler = actionHandler;
        return this;
    }

    public CirrusItem actionArguments(List<String> actionArguments) {
        this.actionArguments = actionArguments;
        return this;
    }

    public CirrusItem slots(int[] slots) {
        this.slots = slots;
        return this;
    }

    public CirrusItem nbt(@NonNull CompoundTag nbt) {
        this.nbt = nbt;
        return this;
    }

    @Override
    public boolean equals(final Object o) {
        if (o == this) {
            return true;
        }
        if (!(o instanceof CirrusItem)) {
            return false;
        }
        final CirrusItem other = (CirrusItem) o;
        if (!other.canEqual((Object) this)) {
            return false;
        }
        final Object this$displayName = this.displayName();
        final Object other$displayName = other.displayName();
        if (this$displayName == null ? other$displayName != null : !this$displayName.equals(other$displayName)) {
            return false;
        }
        final Object this$titleEffect = this.titleEffect();
        final Object other$titleEffect = other.titleEffect();
        if (this$titleEffect == null ? other$titleEffect != null : !this$titleEffect.equals(other$titleEffect)) {
            return false;
        }
        final Object this$lore = this.lore();
        final Object other$lore = other.lore();
        if (this$lore == null ? other$lore != null : !this$lore.equals(other$lore)) {
            return false;
        }
        final Object this$loreSupplier = this.loreSupplier();
        final Object other$loreSupplier = other.loreSupplier();
        if (this$loreSupplier == null ? other$loreSupplier != null : !this$loreSupplier.equals(other$loreSupplier)) {
            return false;
        }
        final Object this$itemType = this.itemType();
        final Object other$itemType = other.itemType();
        if (this$itemType == null ? other$itemType != null : !this$itemType.equals(other$itemType)) {
            return false;
        }
        if (this.amount() != other.amount()) {
            return false;
        }
        if (this.durability() != other.durability()) {
            return false;
        }
        final Object this$actionHandler = this.actionHandler();
        final Object other$actionHandler = other.actionHandler();
        if (this$actionHandler == null ? other$actionHandler != null : !this$actionHandler.equals(other$actionHandler)) {
            return false;
        }
        final Object this$actionArguments = this.actionArguments();
        final Object other$actionArguments = other.actionArguments();
        if (this$actionArguments == null ? other$actionArguments != null : !this$actionArguments.equals(other$actionArguments)) {
            return false;
        }
        if (!Arrays.equals(this.slots(), other.slots())) {
            return false;
        }
        final Object this$nbt = this.nbt();
        final Object other$nbt = other.nbt();
        if (this$nbt == null ? other$nbt != null : !this$nbt.equals(other$nbt)) {
            return false;
        }
        return true;
    }

    protected boolean canEqual(final Object other) {
        return other instanceof CirrusItem;
    }

    @Override
    public int hashCode() {
        final int PRIME = 59;
        int result = 1;
        final Object $displayName = this.displayName();
        result = result * PRIME + ($displayName == null ? 43 : $displayName.hashCode());
        final Object $titleEffect = this.titleEffect();
        result = result * PRIME + ($titleEffect == null ? 43 : $titleEffect.hashCode());
        final Object $lore = this.lore();
        result = result * PRIME + ($lore == null ? 43 : $lore.hashCode());
        final Object $loreSupplier = this.loreSupplier();
        result = result * PRIME + ($loreSupplier == null ? 43 : $loreSupplier.hashCode());
        final Object $itemType = this.itemType();
        result = result * PRIME + ($itemType == null ? 43 : $itemType.hashCode());
        result = result * PRIME + this.amount();
        result = result * PRIME + this.durability();
        final Object $actionHandler = this.actionHandler();
        result = result * PRIME + ($actionHandler == null ? 43 : $actionHandler.hashCode());
        final Object $actionArguments = this.actionArguments();
        result = result * PRIME + ($actionArguments == null ? 43 : $actionArguments.hashCode());
        result = result * PRIME + Arrays.hashCode(this.slots());
        final Object $nbt = this.nbt();
        result = result * PRIME + ($nbt == null ? 43 : $nbt.hashCode());
        return result;
    }

    @Override
    public String toString() {
        return "CirrusItem(displayName=" + this.displayName() + ", titleEffect=" + this.titleEffect() + ", lore=" + this.lore() + ", loreSupplier=" + this.loreSupplier() + ", itemType=" + this.itemType() + ", amount=" + this.amount() + ", durability=" + this.durability() + ", actionHandler=" + this.actionHandler() + ", actionArguments=" + this.actionArguments() + ", slots=" + Arrays.toString(this.slots()) + ", nbt=" + this.nbt() + ")";
    }
}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/item/Items.java
================================================
package dev.simplix.cirrus.common.item;

import dev.simplix.cirrus.common.effects.RGBColorChangeAnimation;
import lombok.experimental.UtilityClass;

import java.awt.*;

@UtilityClass
public class Items {

    
    public CirrusItem rgb(String displayName, Color... colors) {
        return CirrusItem
                .animated(RGBColorChangeAnimation.fat(displayName, colors));
    }
}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/item/ProtocolizeMenuItemWrapper.java
================================================
package dev.simplix.cirrus.common.item;

import dev.simplix.cirrus.common.business.MenuItemWrapper;
import dev.simplix.protocolize.api.chat.ChatElement;
import dev.simplix.protocolize.api.item.ItemStack;
import dev.simplix.protocolize.data.ItemType;
import lombok.NonNull;
import net.md_5.bungee.api.chat.BaseComponent;
import net.querz.nbt.tag.CompoundTag;

import java.util.List;
import java.util.stream.Collectors;

public class ProtocolizeMenuItemWrapper implements MenuItemWrapper {

    private final ItemStack itemStack;

    public ProtocolizeMenuItemWrapper(ItemStack itemStack) {
        this.itemStack = itemStack;
    }

    @Override
    public String displayName() {
        return this.itemStack.displayName().asLegacyText();
    }

    @Override
    public BaseComponent[] displayNameComponents() {
        return (BaseComponent[]) this.itemStack.displayName().asComponent();
    }

    @Override
    public List<String> lore() {
        return this.itemStack.lore().stream().map(ChatElement::asLegacyText).collect(Collectors.toList());
    }

    @Override
    public List<BaseComponent[]> loreComponents() {
        return (List<BaseComponent[]>) this.itemStack.lore().stream().map(ChatElement::asComponent).collect(Collectors.toList());
    }

    @Override
    public ItemType type() {
        return this.itemStack.itemType();
    }

    @Override
    public CompoundTag nbt() {
        return this.itemStack.nbtData();
    }

    @Override
    public int amount() {
        return this.itemStack.amount();
    }

    @Override
    public short durability() {
        return this.itemStack.durability();
    }

    @Override
    public void type(@NonNull ItemType type) {
        this.itemStack.itemType(type);
    }

    @Override
    public void displayName(@NonNull String displayName) {
        this.itemStack.displayName(ChatElement.ofLegacyText(displayName));
    }

    @Override
    public void displayNameComponents(BaseComponent... baseComponents) {
        this.itemStack.displayName(ChatElement.of(baseComponents));
    }

    @Override
    public void lore(@NonNull List<String> lore) {
        this.itemStack.lore(lore.stream().map(ChatElement::ofLegacyText).collect(Collectors.toList()));
    }

    @Override
    public void loreComponents(@NonNull List<BaseComponent[]> lore) {
        this.itemStack.lore(lore.stream().map(ChatElement::of).collect(Collectors.toList()));
    }

    @Override
    public void nbt(@NonNull CompoundTag compoundTag) {
        this.itemStack.nbtData(compoundTag);
    }

    @Override
    public void amount(int amount) {
        this.itemStack.amount((byte) amount);
    }

    @Override
    public void durability(short durability) {
        this.itemStack.durability(durability);
    }

    @Override
    public <T> T handle() {
        return (T) this.itemStack;
    }

    @Override
    public String toString() {
        return handle().toString();
    }
}


================================================
FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/menu/AbstractConfigurableMenu.java
================================================
package dev.simplix.cirrus.common.menu;

import dev.simplix.cirrus.common.business.Player
Download .txt
gitextract_6gkla1sj/

├── .editorconfig
├── .gitignore
├── LICENSE
├── README.md
├── cirrus-bungeecord/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── dev/
│                   └── simplix/
│                       └── cirrus/
│                           └── bungeecord/
│                               ├── BungeeCordPlayerWrapper.java
│                               ├── CirrusBungeeCord.java
│                               ├── converters/
│                               │   ├── ItemModelConverter.java
│                               │   ├── ItemStackConverter.java
│                               │   ├── PlayerConverter.java
│                               │   └── PlayerUniqueIdConverter.java
│                               ├── listeners/
│                               │   └── QuitListener.java
│                               └── protocolize/
│                                   └── ProtocolizeMenuBuilder.java
├── cirrus-bungeecord-example/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── dev/
│           │       └── simplix/
│           │           └── cirrus/
│           │               └── bungeecord/
│           │                   └── example/
│           │                       ├── CirrusExamplePlugin.java
│           │                       ├── commands/
│           │                       │   └── TestCommand.java
│           │                       └── menus/
│           │                           ├── ExampleMenu.java
│           │                           └── ExampleMultiPageMenu.java
│           └── resources/
│               └── plugin.yml
├── cirrus-common/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── dev/
│       │   │       └── simplix/
│       │   │           └── cirrus/
│       │   │               └── common/
│       │   │                   ├── Cirrus.java
│       │   │                   ├── Utils.java
│       │   │                   ├── business/
│       │   │                   │   ├── ConfigurationFactory.java
│       │   │                   │   ├── DataInventoryMenuItemWrapper.java
│       │   │                   │   ├── InventoryMenuItemWrapper.java
│       │   │                   │   ├── MenuItemWrapper.java
│       │   │                   │   └── PlayerWrapper.java
│       │   │                   ├── config/
│       │   │                   │   └── JsonConfigurationFactory.java
│       │   │                   ├── configuration/
│       │   │                   │   ├── MenuConfiguration.java
│       │   │                   │   ├── MultiPageMenuConfiguration.java
│       │   │                   │   └── impl/
│       │   │                   │       ├── SimpleMenuConfiguration.java
│       │   │                   │       └── SimpleMultiPageMenuConfiguration.java
│       │   │                   ├── container/
│       │   │                   │   ├── Container.java
│       │   │                   │   └── impl/
│       │   │                   │       └── ItemContainer.java
│       │   │                   ├── converter/
│       │   │                   │   ├── Converter.java
│       │   │                   │   └── Converters.java
│       │   │                   ├── effect/
│       │   │                   │   ├── AbstractChangingItemAnimation.java
│       │   │                   │   ├── AbstractMenuAnimation.java
│       │   │                   │   ├── Animated.java
│       │   │                   │   ├── Animations.java
│       │   │                   │   ├── MenuAnimation.java
│       │   │                   │   └── MenuAnimator.java
│       │   │                   ├── effects/
│       │   │                   │   ├── GradualColorChangeAnimation.java
│       │   │                   │   ├── RGBColorChangeAnimation.java
│       │   │                   │   └── SimpleChangingItemAnimation.java
│       │   │                   ├── handler/
│       │   │                   │   ├── ActionHandler.java
│       │   │                   │   └── AutoCancellingActionHandler.java
│       │   │                   ├── i18n/
│       │   │                   │   ├── LocalizedItemStackModel.java
│       │   │                   │   ├── LocalizedString.java
│       │   │                   │   ├── LocalizedStringDeserializer.java
│       │   │                   │   ├── LocalizedStringList.java
│       │   │                   │   ├── LocalizedStringListDeserializer.java
│       │   │                   │   ├── LocalizedStringListSerializer.java
│       │   │                   │   ├── LocalizedStringSerializer.java
│       │   │                   │   ├── Localizer.java
│       │   │                   │   └── Replacer.java
│       │   │                   ├── item/
│       │   │                   │   ├── CirrusItem.java
│       │   │                   │   ├── Items.java
│       │   │                   │   └── ProtocolizeMenuItemWrapper.java
│       │   │                   ├── menu/
│       │   │                   │   ├── AbstractConfigurableMenu.java
│       │   │                   │   ├── AbstractMenu.java
│       │   │                   │   ├── ErrorProne.java
│       │   │                   │   ├── Menu.java
│       │   │                   │   └── MenuBuilder.java
│       │   │                   ├── menus/
│       │   │                   │   ├── AbstractBrowserMenu.java
│       │   │                   │   ├── MultiPageMenu.java
│       │   │                   │   └── SimpleMenu.java
│       │   │                   ├── model/
│       │   │                   │   ├── CallResult.java
│       │   │                   │   └── Click.java
│       │   │                   ├── mojangson/
│       │   │                   │   ├── MojangsonScope.java
│       │   │                   │   ├── MojangsonWriter.java
│       │   │                   │   ├── TagDeserializer.java
│       │   │                   │   └── TagSerializer.java
│       │   │                   └── util/
│       │   │                       ├── ColorUtils.java
│       │   │                       ├── Colors.java
│       │   │                       ├── InventoryContentMap.java
│       │   │                       └── SafeRunnable.java
│       │   └── resources/
│       │       └── cirrus/
│       │           ├── MenuConfiguration.json
│       │           └── MultiPageMenuConfiguration.json
│       └── test/
│           └── java/
│               └── dev/
│                   └── simplix/
│                       └── cirrus/
│                           └── common/
│                               └── tests/
│                                   ├── SnbtGsonTest.java
│                                   └── SnbtTest.java
├── cirrus-spigot/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── dev/
│                   └── simplix/
│                       └── cirrus/
│                           └── spigot/
│                               ├── CirrusSpigot.java
│                               ├── SpigotPlayerWrapper.java
│                               ├── converters/
│                               │   ├── BukkitItemStackConverter.java
│                               │   ├── ItemModelConverter.java
│                               │   ├── ItemTypeMaterialDataConverter.java
│                               │   ├── MaterialDataItemTypeConverter.java
│                               │   ├── NmsNbtQuerzNbtConverter.java
│                               │   ├── PlayerConverter.java
│                               │   ├── ProtocolizeItemStackConverter.java
│                               │   ├── QuerzNbtNmsNbtConverter.java
│                               │   ├── SpigotClickTypeConverter.java
│                               │   └── SpigotInventoryTypeConverter.java
│                               ├── listener/
│                               │   └── InventoryListener.java
│                               ├── menubuilder/
│                               │   └── SpigotMenuBuilder.java
│                               ├── menus/
│                               │   └── SpigotMenu.java
│                               └── util/
│                                   ├── BungeeCordComponentConverterProvider.java
│                                   ├── OtherModuleProvider.java
│                                   ├── ProtocolVersionUtil.java
│                                   ├── ProtocolVersions.java
│                                   ├── ReflectionClasses.java
│                                   ├── ReflectionUtil.java
│                                   └── SpigotItemsUtils.java
├── cirrus-spigot-example/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── dev/
│           │       └── simplix/
│           │           └── cirrus/
│           │               └── spigot/
│           │                   └── example/
│           │                       ├── CirrusExamplePlugin.java
│           │                       ├── commands/
│           │                       │   └── TestCommandExecutor.java
│           │                       └── menus/
│           │                           ├── ExampleMenu.java
│           │                           └── ExampleMultiPageMenu.java
│           └── resources/
│               └── plugin.yml
├── cirrus-spigot-modern/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── dev/
│                   └── simplix/
│                       └── cirrus/
│                           └── spigot/
│                               └── modern/
│                                   └── ModernInventoryView.java
├── cirrus-velocity/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── dev/
│                   └── simplix/
│                       └── cirrus/
│                           └── velocity/
│                               ├── CirrusVelocity.java
│                               ├── VelocityPlayerWrapper.java
│                               ├── converters/
│                               │   ├── ItemModelConverter.java
│                               │   ├── ItemStackConverter.java
│                               │   ├── PlayerConverter.java
│                               │   └── PlayerUniqueIdConverter.java
│                               ├── listener/
│                               │   └── QuitListener.java
│                               └── protocolize/
│                                   └── ProtocolizeMenuBuilder.java
├── cirrus-velocity-example/
│   ├── .gitignore
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── dev/
│                   └── simplix/
│                       └── cirrus/
│                           └── velocity/
│                               └── example/
│                                   ├── CirrusExamplePlugin.java
│                                   ├── commands/
│                                   │   └── TestCommand.java
│                                   └── menus/
│                                       ├── ExampleMenu.java
│                                       └── ExampleMultiPageMenu.java
└── pom.xml
Download .txt
SYMBOL INDEX (655 symbols across 110 files)

FILE: cirrus-bungeecord-example/src/main/java/dev/simplix/cirrus/bungeecord/example/CirrusExamplePlugin.java
  class CirrusExamplePlugin (line 8) | public class CirrusExamplePlugin extends Plugin {
    method onEnable (line 10) | @Override

FILE: cirrus-bungeecord-example/src/main/java/dev/simplix/cirrus/bungeecord/example/commands/TestCommand.java
  class TestCommand (line 11) | public class TestCommand extends Command {
    method TestCommand (line 13) | public TestCommand() {
    method execute (line 17) | @Override

FILE: cirrus-bungeecord-example/src/main/java/dev/simplix/cirrus/bungeecord/example/menus/ExampleMenu.java
  class ExampleMenu (line 10) | public class ExampleMenu extends AbstractConfigurableMenu<MenuConfigurat...
    method ExampleMenu (line 12) | public ExampleMenu(PlayerWrapper player, MenuConfiguration configurati...

FILE: cirrus-bungeecord-example/src/main/java/dev/simplix/cirrus/bungeecord/example/menus/ExampleMultiPageMenu.java
  class ExampleMultiPageMenu (line 15) | public class ExampleMultiPageMenu extends MultiPageMenu {
    method ExampleMultiPageMenu (line 19) | public ExampleMultiPageMenu(
    method registerMyActionHandlers (line 27) | private void registerMyActionHandlers() {
    method addItems (line 34) | private void addItems() {

FILE: cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/BungeeCordPlayerWrapper.java
  class BungeeCordPlayerWrapper (line 11) | public class BungeeCordPlayerWrapper implements PlayerWrapper {
    method BungeeCordPlayerWrapper (line 16) | public BungeeCordPlayerWrapper(@NonNull ProxiedPlayer handle) {
    method uniqueId (line 21) | @Override
    method name (line 26) | @Override
    method protocolVersion (line 31) | @Override
    method sendMessage (line 36) | @Override
    method closeInventory (line 41) | @Override
    method hasPermission (line 46) | @Override
    method handle (line 51) | @Override
    method protocolizePlayer (line 56) | public ProtocolizePlayer protocolizePlayer() {

FILE: cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/CirrusBungeeCord.java
  class CirrusBungeeCord (line 25) | public class CirrusBungeeCord {
    method init (line 39) | public static void init(Plugin plugin) {
    method plugin (line 54) | public static Plugin plugin() {

FILE: cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/converters/ItemModelConverter.java
  class ItemModelConverter (line 13) | public class ItemModelConverter implements Converter<CirrusItem, Invento...
    method convert (line 15) | @Override

FILE: cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/converters/ItemStackConverter.java
  class ItemStackConverter (line 9) | public class ItemStackConverter implements Converter<ItemStack, MenuItem...
    method convert (line 11) | @Override

FILE: cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/converters/PlayerConverter.java
  class PlayerConverter (line 10) | public final class PlayerConverter implements Converter<ProxiedPlayer, P...
    method convert (line 12) | @Override

FILE: cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/converters/PlayerUniqueIdConverter.java
  class PlayerUniqueIdConverter (line 12) | public class PlayerUniqueIdConverter implements Converter<UUID, PlayerWr...
    method convert (line 14) | @Override

FILE: cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/listeners/QuitListener.java
  class QuitListener (line 10) | public class QuitListener implements Listener {
    method onQuit (line 12) | @EventHandler

FILE: cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/protocolize/ProtocolizeMenuBuilder.java
  class ProtocolizeMenuBuilder (line 37) | public class ProtocolizeMenuBuilder implements MenuBuilder {
    method build (line 42) | @Override
    method buildContainer (line 85) | private void buildContainer(@NonNull Inventory inventory, @NonNull Con...
    method makeInv (line 120) | private Inventory makeInv(@NonNull Menu menu) {
    method open (line 201) | @Override
    method removeItalic (line 254) | private void removeItalic(BaseComponent[] components) {
    method menuByHandle (line 260) | @Override
    method destroyMenusOfPlayer (line 274) | @Override
    method lastBuildOfPlayer (line 281) | @Override
    method invalidate (line 286) | @Override

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/Cirrus.java
  class Cirrus (line 19) | public class Cirrus {
    method gson (line 23) | public static Gson gson() {
    method getService (line 52) | public static <T> T getService(Class<T> type) {
    method registerService (line 63) | public static <T> void registerService(Class<T> type, T instance) {
    method configurationFactory (line 67) | public static ConfigurationFactory configurationFactory() {

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/Utils.java
  class Utils (line 7) | @UtilityClass
    method removeItalic (line 11) | public void removeItalic(BaseComponent[] components) {
    method hideNbtFlags (line 17) | public static void hideNbtFlags(CompoundTag tag) {
    method glow (line 21) | public static void glow(CompoundTag tag) {
    method texture (line 43) | public static void texture(CompoundTag tag, String textureHash) {
    method calculateSizeForContent (line 72) | public static int calculateSizeForContent(final int items) {

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/business/ConfigurationFactory.java
  type ConfigurationFactory (line 9) | public interface ConfigurationFactory {
    method loadFile (line 11) | default MenuConfiguration loadFile(@NonNull String file) {
    method loadResource (line 15) | default MenuConfiguration loadResource(@NonNull String resourcePath, @...
    method loadFileForMultiPageMenu (line 19) | default MultiPageMenuConfiguration loadFileForMultiPageMenu(@NonNull S...
    method loadResourcesForMultiPageMenu (line 23) | default MultiPageMenuConfiguration loadResourcesForMultiPageMenu(
    method loadFile (line 29) | <T extends MenuConfiguration> T loadFile(@NonNull String file, @NonNul...
    method loadResource (line 31) | <T extends MenuConfiguration> T loadResource(

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/business/DataInventoryMenuItemWrapper.java
  class DataInventoryMenuItemWrapper (line 10) | @Accessors(fluent = true)
    method DataInventoryMenuItemWrapper (line 17) | public DataInventoryMenuItemWrapper(

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/business/InventoryMenuItemWrapper.java
  class InventoryMenuItemWrapper (line 14) | @Accessors(fluent = true)
    method displayName (line 27) | @Override
    method displayNameComponents (line 32) | @Override
    method lore (line 37) | @Override
    method loreComponents (line 42) | @Override
    method type (line 47) | @Override
    method nbt (line 52) | @Override
    method amount (line 57) | @Override
    method durability (line 62) | @Override
    method type (line 67) | @Override
    method displayName (line 72) | @Override
    method displayNameComponents (line 77) | @Override
    method lore (line 82) | @Override
    method loreComponents (line 87) | @Override
    method nbt (line 92) | @Override
    method amount (line 97) | @Override
    method durability (line 102) | @Override
    method handle (line 107) | @Override
    method wrapper (line 112) | public MenuItemWrapper wrapper() {
    method toString (line 116) | @Override

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/business/MenuItemWrapper.java
  type MenuItemWrapper (line 15) | public interface MenuItemWrapper {
    method displayName (line 22) | String displayName();
    method displayNameComponents (line 29) | BaseComponent[] displayNameComponents();
    method lore (line 36) | List<String> lore();
    method loreComponents (line 43) | List<BaseComponent[]> loreComponents();
    method type (line 50) | ItemType type();
    method nbt (line 59) | CompoundTag nbt();
    method amount (line 66) | int amount();
    method durability (line 73) | short durability();
    method type (line 80) | void type(@NonNull ItemType type);
    method displayName (line 87) | void displayName(@NonNull String displayName);
    method displayNameComponents (line 94) | void displayNameComponents(@NonNull BaseComponent... baseComponents);
    method lore (line 101) | void lore(List<String> lore);
    method loreComponents (line 108) | void loreComponents(@NonNull List<BaseComponent[]> lore);
    method nbt (line 115) | void nbt(@NonNull CompoundTag tag);
    method amount (line 122) | void amount(int amount);
    method durability (line 130) | void durability(short durability);
    method handle (line 138) | <T> T handle();

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/business/PlayerWrapper.java
  type PlayerWrapper (line 7) | public interface PlayerWrapper {
    method sendMessage (line 9) | void sendMessage(@NonNull String msg);
    method closeInventory (line 11) | void closeInventory();
    method hasPermission (line 13) | boolean hasPermission(@NonNull String permission);
    method uniqueId (line 15) | UUID uniqueId();
    method name (line 17) | String name();
    method protocolVersion (line 19) | int protocolVersion();
    method handle (line 21) | <T> T handle();

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/config/JsonConfigurationFactory.java
  class JsonConfigurationFactory (line 16) | public class JsonConfigurationFactory implements ConfigurationFactory {
    method JsonConfigurationFactory (line 20) | public JsonConfigurationFactory(Gson gson) {
    method loadFile (line 24) | @Override
    method loadResource (line 45) | @Override
    method copyResourceToFile (line 61) | private void copyResourceToFile(@NonNull String resource, @NonNull Fil...

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/configuration/MenuConfiguration.java
  type MenuConfiguration (line 7) | public interface MenuConfiguration {
    method forceBusinessItem (line 9) | default LocalizedItemStackModel forceBusinessItem(String keyword) {
    method title (line 16) | LocalizedString title();
    method type (line 18) | dev.simplix.protocolize.data.inventory.InventoryType type();
    method placeholderItem (line 20) | LocalizedItemStackModel placeholderItem();
    method reservedSlots (line 22) | int[] reservedSlots();
    method items (line 24) | LocalizedItemStackModel[] items();
    method businessItems (line 26) | java.util.Map<String, LocalizedItemStackModel> businessItems();
    method title (line 28) | MenuConfiguration title(LocalizedString title);
    method type (line 30) | MenuConfiguration type(dev.simplix.protocolize.data.inventory.Inventor...
    method placeholderItem (line 32) | MenuConfiguration placeholderItem(LocalizedItemStackModel placeholderI...
    method reservedSlots (line 34) | MenuConfiguration reservedSlots(int[] reservedSlots);
    method items (line 36) | MenuConfiguration items(LocalizedItemStackModel[] items);
    method businessItems (line 38) | MenuConfiguration businessItems(java.util.Map<String, LocalizedItemSta...

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/configuration/MultiPageMenuConfiguration.java
  type MultiPageMenuConfiguration (line 6) | public interface MultiPageMenuConfiguration extends MenuConfiguration {
    method nextPageItem (line 7) | LocalizedItemStackModel nextPageItem();
    method previousPageItem (line 9) | LocalizedItemStackModel previousPageItem();
    method title (line 11) | MultiPageMenuConfiguration title(LocalizedString title);
    method type (line 13) | MultiPageMenuConfiguration type(dev.simplix.protocolize.data.inventory...
    method placeholderItem (line 15) | MultiPageMenuConfiguration placeholderItem(LocalizedItemStackModel pla...
    method reservedSlots (line 17) | MultiPageMenuConfiguration reservedSlots(int[] reservedSlots);
    method items (line 19) | MultiPageMenuConfiguration items(LocalizedItemStackModel[] items);
    method businessItems (line 21) | MultiPageMenuConfiguration businessItems(java.util.Map<String, Localiz...

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/configuration/impl/SimpleMenuConfiguration.java
  class SimpleMenuConfiguration (line 15) | @Data

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/configuration/impl/SimpleMultiPageMenuConfiguration.java
  class SimpleMultiPageMenuConfiguration (line 17) | @Data

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/container/Container.java
  type Container (line 15) | public interface Container {
    method itemMap (line 22) | Map<Integer, InventoryMenuItemWrapper> itemMap();
    method reservedSlots (line 29) | Set<Integer> reservedSlots();
    method capacity (line 36) | int capacity();
    method baseSlot (line 43) | int baseSlot();
    method nextFreeSlot (line 48) | int nextFreeSlot();
    method nextFreeSlot (line 53) | int nextFreeSlot(int i);
    method add (line 61) | default void add(InventoryMenuItemWrapper inventoryItemWrapper) {
    method add (line 73) | default void add(
    method add (line 90) | default void add(CirrusItem model) {
    method set (line 104) | default void set(int slot, InventoryMenuItemWrapper inventoryItemWrapp...
    method set (line 116) | default void set(
    method set (line 134) | default void set(int slot, CirrusItem model) {
    method get (line 148) | default InventoryMenuItemWrapper get(int slot) {

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/container/impl/ItemContainer.java
  class ItemContainer (line 13) | public class ItemContainer implements Container {
    method ItemContainer (line 20) | public ItemContainer(int baseSlotIndex, int capacity) {
    method set (line 25) | @Override
    method itemMap (line 30) | @Override
    method reservedSlots (line 35) | @Override
    method capacity (line 40) | @Override
    method baseSlot (line 45) | @Override
    method nextFreeSlot (line 50) | @Override
    method nextFreeSlot (line 60) | @Override

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/converter/Converter.java
  type Converter (line 11) | public interface Converter<Source, Target> {
    method convert (line 19) | Target convert(@NonNull Source src);

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/converter/Converters.java
  class Converters (line 13) | @SuppressWarnings("rawtypes")
    method Converters (line 18) | private Converters() {
    method convert (line 29) | public static <T> T convert(@NonNull final Object source, @NonNull fin...
    method getMultiConverter (line 42) | private static <S, T> Converter<S, T> getMultiConverter(
    method findConversionRoute (line 59) | private static boolean findConversionRoute(
    method buildRoute (line 77) | private static boolean buildRoute(
    method register (line 102) | public static void register(
    method getConverter (line 118) | @Nullable

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/effect/AbstractChangingItemAnimation.java
  class AbstractChangingItemAnimation (line 5) | public abstract class AbstractChangingItemAnimation extends AbstractMenu...
    method AbstractChangingItemAnimation (line 7) | protected AbstractChangingItemAnimation(CirrusItem input, int effectLe...

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/effect/AbstractMenuAnimation.java
  class AbstractMenuAnimation (line 8) | public abstract class AbstractMenuAnimation<T> implements MenuAnimation<...
    method AbstractMenuAnimation (line 14) | protected AbstractMenuAnimation(
    method effectLength (line 22) | @Override
    method input (line 27) | @Override
    method next (line 32) | @Override

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/effect/Animated.java
  type Animated (line 5) | public interface Animated extends Menu {
    method update (line 6) | void update();
    method handleClose (line 8) | @Override

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/effect/Animations.java
  class Animations (line 5) | @UtilityClass

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/effect/MenuAnimation.java
  type MenuAnimation (line 5) | public interface MenuAnimation<T> {
    method effectLength (line 10) | int effectLength();
    method input (line 15) | T input();
    method calculate (line 20) | List<T> calculate();
    method next (line 27) | T next();

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/effect/MenuAnimator.java
  class MenuAnimator (line 9) | @UtilityClass
    method isEmpty (line 13) | public boolean isEmpty() {
    method register (line 17) | public void register(@NonNull Animated menu) {
    method remove (line 21) | public void remove(@NonNull Animated menu) {
    method updateAll (line 25) | public void updateAll() {

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/effects/GradualColorChangeAnimation.java
  class GradualColorChangeAnimation (line 13) | public class GradualColorChangeAnimation extends AbstractMenuAnimation<S...
    method GradualColorChangeAnimation (line 21) | public GradualColorChangeAnimation(
    method GradualColorChangeAnimation (line 27) | public GradualColorChangeAnimation(
    method reversed (line 37) | public GradualColorChangeAnimation reversed() {
    method reverse (line 42) | public GradualColorChangeAnimation reverse(boolean reverse) {
    method transitionCount (line 47) | public GradualColorChangeAnimation transitionCount(int transitionCount) {
    method length (line 52) | public GradualColorChangeAnimation length(int length) {
    method calculate (line 56) | @Override
    method insertEffect (line 66) | private List<String> insertEffect(String effectColor, String primaryCo...
    method addAtIndex (line 88) | private String addAtIndex(String str, String toAdd, int position) {

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/effects/RGBColorChangeAnimation.java
  class RGBColorChangeAnimation (line 14) | public class RGBColorChangeAnimation extends AbstractMenuAnimation<Strin...
    method RGBColorChangeAnimation (line 20) | private RGBColorChangeAnimation(
    method fat (line 34) | public static RGBColorChangeAnimation fat(String input, Color... color...
    method of (line 38) | public static RGBColorChangeAnimation of(String input, String colorSuf...
    method step (line 42) | public RGBColorChangeAnimation step(int step) {
    method colorSuffix (line 47) | public RGBColorChangeAnimation colorSuffix(String colorSuffix) {
    method calculate (line 52) | @Override

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/effects/SimpleChangingItemAnimation.java
  class SimpleChangingItemAnimation (line 8) | public class SimpleChangingItemAnimation extends AbstractChangingItemAni...
    method SimpleChangingItemAnimation (line 11) | protected SimpleChangingItemAnimation(CirrusItem basis, List<CirrusIte...
    method calculate (line 16) | @Override

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/handler/ActionHandler.java
  type ActionHandler (line 11) | @FunctionalInterface
    method handle (line 14) | CallResult handle(Click click);

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/handler/AutoCancellingActionHandler.java
  type AutoCancellingActionHandler (line 6) | @FunctionalInterface
    method handle (line 8) | @Override
    method onHandle (line 14) | void onHandle(Click click);

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedItemStackModel.java
  class LocalizedItemStackModel (line 15) | @Data
    method glow (line 43) | public LocalizedItemStackModel glow() {
    method texture (line 48) | public LocalizedItemStackModel texture(@NonNull String texture) {
    method localize (line 53) | public CirrusItem localize(Locale locale, String... replacements) {

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedString.java
  class LocalizedString (line 9) | public class LocalizedString {
    method LocalizedString (line 13) | public LocalizedString(@NonNull Map<String, String> stringMap) {
    method translations (line 20) | public Map<String, String> translations() {
    method translated (line 32) | public String translated(Locale locale) {

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedStringDeserializer.java
  class LocalizedStringDeserializer (line 13) | public class LocalizedStringDeserializer implements JsonDeserializer<Loc...
    method deserialize (line 15) | @Override

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedStringList.java
  class LocalizedStringList (line 8) | @NoArgsConstructor
    method LocalizedStringList (line 13) | public LocalizedStringList(@NonNull Map<String, List<String>> stringLi...
    method translations (line 20) | public Map<String, List<String>> translations() {
    method translated (line 35) | public List<String> translated(@NonNull Locale locale) {

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedStringListDeserializer.java
  class LocalizedStringListDeserializer (line 14) | public class LocalizedStringListDeserializer implements JsonDeserializer...
    method deserialize (line 16) | @Override

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedStringListSerializer.java
  class LocalizedStringListSerializer (line 10) | public class LocalizedStringListSerializer implements JsonSerializer<Loc...
    method serialize (line 12) | @Override

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedStringSerializer.java
  class LocalizedStringSerializer (line 10) | public class LocalizedStringSerializer implements JsonSerializer<Localiz...
    method serialize (line 12) | @Override

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/Localizer.java
  class Localizer (line 15) | public final class Localizer {
    method localize (line 17) | public static List<String> localize(
    method localize (line 28) | public static String localize(
    method localize (line 41) | public static CirrusItem localize(
    method formatNbt (line 59) | private static CompoundTag formatNbt(

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/Replacer.java
  class Replacer (line 20) | @Getter
    method Replacer (line 31) | private Replacer(List<String> messages) {
    method of (line 39) | public static Replacer of(@NonNull final String... messages) {
    method of (line 43) | public static Replacer of(@NonNull final List<String> messages) {
    method ofMultilineString (line 47) | public static Replacer ofMultilineString(@NonNull final String multili...
    method find (line 51) | public final Replacer find(@NonNull final String... variables) {
    method replace (line 57) | public final Replacer replace(@NonNull final Object... replacements) {
    method set (line 64) | public Replacer set(final int index, @NonNull final String message) {
    method replaceAll (line 74) | public final Replacer replaceAll(@NonNull final Object... associativeA...
    method replacedMessage (line 98) | public String[] replacedMessage() {
    method replacedMessageJoined (line 133) | public String replacedMessageJoined() {

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/item/CirrusItem.java
  class CirrusItem (line 16) | @Accessors(fluent = true)
    method CirrusItem (line 35) | private CirrusItem(@NonNull String displayName, @Nullable AbstractMenu...
    method CirrusItem (line 49) | private CirrusItem() {
    method of (line 56) | public static CirrusItem of(String name, ItemType type) {
    method of (line 60) | public static CirrusItem of(String name) {
    method animated (line 64) | public static CirrusItem animated(AbstractMenuAnimation<String> effect...
    method animated (line 68) | public static CirrusItem animated(AbstractMenuAnimation<String> effect) {
    method lore (line 76) | public CirrusItem lore(String... lines) {
    method slot (line 81) | public CirrusItem slot(int... slots) {
    method displayNam (line 86) | public String displayNam() {
    method glow (line 93) | public CirrusItem glow() {
    method texture (line 98) | public CirrusItem texture(@NonNull String texture) {
    method copy (line 103) | public CirrusItem copy() {
    method displayName (line 119) | public @NonNull String displayName() {
    method titleEffect (line 123) | public @Nullable AbstractMenuAnimation<String> titleEffect() {
    method lore (line 127) | public List<String> lore() {
    method loreSupplier (line 134) | public @Nullable Supplier<List<String>> loreSupplier() {
    method itemType (line 138) | public ItemType itemType() {
    method amount (line 142) | public byte amount() {
    method durability (line 146) | public short durability() {
    method actionHandler (line 150) | public String actionHandler() {
    method actionArguments (line 154) | public List<String> actionArguments() {
    method slots (line 158) | public int[] slots() {
    method nbt (line 162) | public @NonNull CompoundTag nbt() {
    method displayName (line 166) | public CirrusItem displayName(@NonNull String displayName) {
    method titleEffect (line 171) | public CirrusItem titleEffect(@Nullable AbstractMenuAnimation<String> ...
    method lore (line 176) | public CirrusItem lore(List<String> lore) {
    method loreSupplier (line 181) | public CirrusItem loreSupplier(@Nullable Supplier<List<String>> loreSu...
    method itemType (line 186) | public CirrusItem itemType(ItemType itemType) {
    method amount (line 191) | public CirrusItem amount(byte amount) {
    method durability (line 196) | public CirrusItem durability(short durability) {
    method actionHandler (line 201) | public CirrusItem actionHandler(String actionHandler) {
    method actionArguments (line 206) | public CirrusItem actionArguments(List<String> actionArguments) {
    method slots (line 211) | public CirrusItem slots(int[] slots) {
    method nbt (line 216) | public CirrusItem nbt(@NonNull CompoundTag nbt) {
    method equals (line 221) | @Override
    method canEqual (line 285) | protected boolean canEqual(final Object other) {
    method hashCode (line 289) | @Override
    method toString (line 315) | @Override

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/item/Items.java
  class Items (line 8) | @UtilityClass
    method rgb (line 12) | public CirrusItem rgb(String displayName, Color... colors) {

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/item/ProtocolizeMenuItemWrapper.java
  class ProtocolizeMenuItemWrapper (line 14) | public class ProtocolizeMenuItemWrapper implements MenuItemWrapper {
    method ProtocolizeMenuItemWrapper (line 18) | public ProtocolizeMenuItemWrapper(ItemStack itemStack) {
    method displayName (line 22) | @Override
    method displayNameComponents (line 27) | @Override
    method lore (line 32) | @Override
    method loreComponents (line 37) | @Override
    method type (line 42) | @Override
    method nbt (line 47) | @Override
    method amount (line 52) | @Override
    method durability (line 57) | @Override
    method type (line 62) | @Override
    method displayName (line 67) | @Override
    method displayNameComponents (line 72) | @Override
    method lore (line 77) | @Override
    method loreComponents (line 82) | @Override
    method nbt (line 87) | @Override
    method amount (line 92) | @Override
    method durability (line 97) | @Override
    method handle (line 102) | @Override
    method toString (line 107) | @Override

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/menu/AbstractConfigurableMenu.java
  class AbstractConfigurableMenu (line 15) | @Getter
    method AbstractConfigurableMenu (line 21) | public AbstractConfigurableMenu(
    method AbstractConfigurableMenu (line 28) | public AbstractConfigurableMenu(
    method updateReplacements (line 39) | @Override
    method applyItems (line 49) | private void applyItems() {

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/menu/AbstractMenu.java
  class AbstractMenu (line 28) | @Getter
    method AbstractMenu (line 48) | public AbstractMenu(
    method AbstractMenu (line 55) | public AbstractMenu(
    method registerActionHandler (line 71) | @Override
    method registerActionHandler (line 76) | @Override
    method actionHandler (line 81) | @Override
    method customActionHandler (line 87) | @Override
    method title (line 92) | @Override
    method title (line 97) | @Override
    method replacements (line 102) | @Override
    method updateReplacements (line 108) | protected void updateReplacements() {
    method nativeInventory (line 111) | protected void nativeInventory(@NonNull Object nativeInventory) {
    method build (line 115) | @Override
    method open (line 123) | @Override
    method add (line 130) | protected int add(@NonNull LocalizedItemStackModel localizedItemStackM...
    method add (line 134) | protected int add(@NonNull CirrusItem menuItem) {
    method add (line 140) | protected int add(@NonNull InventoryMenuItemWrapper inventoryMenuItemW...
    method set (line 147) | protected void set(@NonNull LocalizedItemStackModel model) {
    method set (line 154) | protected void set(@NonNull CirrusItem model) {
    method equals (line 164) | @Override
    method hashCode (line 180) | @Override
    method handleException (line 196) | @Override

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/menu/ErrorProne.java
  type ErrorProne (line 8) | public interface ErrorProne {
    method handleException (line 10) | default void handleException(@Nullable ActionHandler actionHandler, Th...
    method errorProne (line 19) | default void errorProne(@NonNull SafeRunnable runnable) {
    method errorProne (line 34) | default void errorProne(@NonNull SafeRunnable runnable, @NonNull Runna...

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/menu/Menu.java
  type Menu (line 16) | public interface Menu extends ErrorProne {
    method inventoryType (line 21) | InventoryType inventoryType();
    method registerActionHandler (line 23) | void registerActionHandler(@NonNull String name, @NonNull AutoCancelli...
    method registerActionHandler (line 31) | void registerActionHandler(@NonNull String name, @NonNull ActionHandle...
    method customActionHandler (line 38) | void customActionHandler(@NonNull ActionHandler actionHandler);
    method open (line 43) | void open();
    method build (line 48) | void build();
    method customActionHandler (line 55) | ActionHandler customActionHandler();
    method actionHandler (line 63) | @Nullable
    method topContainer (line 71) | Container topContainer();
    method bottomContainer (line 78) | Container bottomContainer();
    method title (line 85) | String title();
    method title (line 92) | void title(@NonNull String title);
    method locale (line 97) | Locale locale();
    method player (line 104) | PlayerWrapper player();
    method replacements (line 111) | Supplier<String[]> replacements();
    method replacements (line 118) | void replacements(Supplier<String[]> supplier);
    method handleClose (line 125) | default void handleClose(boolean inventorySwitch) {
    method wrapItemStack (line 134) | default MenuItemWrapper wrapItemStack(@NonNull Object object) {

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/menu/MenuBuilder.java
  type MenuBuilder (line 11) | public interface MenuBuilder {
    method build (line 13) | <T> T build(@Nullable T prebuild, @NonNull Menu menu);
    method open (line 15) | <T> void open(@NonNull PlayerWrapper playerWrapper, @NonNull T invento...
    method menuByHandle (line 17) | @Nullable
    method findMenuByHandle (line 20) | default Optional<Menu> findMenuByHandle(@Nullable Object handle) {
    method destroyMenusOfPlayer (line 24) | void destroyMenusOfPlayer(@NonNull UUID uniqueId);
    method lastBuildOfPlayer (line 26) | Map.Entry<Menu, Long> lastBuildOfPlayer(@NonNull UUID uniqueId);
    method invalidate (line 28) | void invalidate(@NonNull Menu menu);

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/menus/AbstractBrowserMenu.java
  class AbstractBrowserMenu (line 13) | public abstract class AbstractBrowserMenu<T> extends MultiPageMenu {
    method AbstractBrowserMenu (line 18) | public AbstractBrowserMenu(
    method AbstractBrowserMenu (line 25) | public AbstractBrowserMenu(
    method click (line 40) | protected abstract void click(Click click, T value);
    method values (line 42) | protected abstract List<T> values();
    method map (line 44) | protected abstract CirrusItem map(T value);
    method mappedValues (line 46) | protected Map<T, CirrusItem> mappedValues() {
    method insert (line 58) | protected void insert() {

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/menus/MultiPageMenu.java
  class MultiPageMenu (line 25) | @Slf4j
    method MultiPageMenu (line 36) | public MultiPageMenu(
    method MultiPageMenu (line 43) | public MultiPageMenu(
    method registerActionHandlers (line 67) | private void registerActionHandlers() {
    method build (line 86) | @Override
    method open (line 91) | @Override
    method menuBuilder (line 97) | @Override
    method bottomContainer (line 102) | @Override
    method topContainer (line 107) | @Override
    method currentPage (line 112) | public Menu currentPage() {
    method pages (line 116) | public List<Menu> pages() {
    method currentPageNumber (line 120) | public int currentPageNumber() {
    method currentPage (line 124) | public void currentPage(int page) {
    method newPage (line 128) | public void newPage() {
    method add (line 133) | public int add(@NonNull CirrusItem model, String actionHandler, List<S...
    method add (line 137) | @Override
    method add (line 164) | public int add(
    class PageMenu (line 193) | class PageMenu extends AbstractConfigurableMenu<MenuConfiguration> {
      method PageMenu (line 195) | public PageMenu(
      method replacements (line 202) | @Override
      method title (line 207) | @Override
      method actionHandler (line 212) | @Override
      method nativeInventory (line 217) | @Override
      method menuBuilder (line 222) | @Override
      method build (line 227) | @Override
      method nativeInventory (line 241) | @Override

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/menus/SimpleMenu.java
  class SimpleMenu (line 12) | public class SimpleMenu extends AbstractConfigurableMenu<MenuConfigurati...
    method SimpleMenu (line 13) | public SimpleMenu(@NonNull PlayerWrapper player,
    method SimpleMenu (line 19) | public SimpleMenu(@NonNull PlayerWrapper player,

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/model/CallResult.java
  type CallResult (line 3) | public enum CallResult {

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/model/Click.java
  class Click (line 17) | public final class Click {
    method Click (line 24) | public Click(
    method player (line 35) | public PlayerWrapper player() {
    method clickType (line 39) | public ClickType clickType() {
    method clickedMenu (line 43) | public Menu clickedMenu() {
    method arguments (line 47) | public List<String> arguments() {
    method clickedItem (line 54) | public <T extends MenuItemWrapper> T clickedItem() {
    method slot (line 58) | public int slot() {

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/mojangson/MojangsonScope.java
  class MojangsonScope (line 25) | final class MojangsonScope {

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/mojangson/MojangsonWriter.java
  class MojangsonWriter (line 13) | public class MojangsonWriter extends JsonWriter {
    method MojangsonWriter (line 78) | public MojangsonWriter(Writer out) {
    method beginArray (line 93) | public MojangsonWriter beginArray() throws IOException {
    method endArray (line 103) | public MojangsonWriter endArray() throws IOException {
    method beginObject (line 113) | public MojangsonWriter beginObject() throws IOException {
    method endObject (line 123) | public MojangsonWriter endObject() throws IOException {
    method open (line 130) | private MojangsonWriter open(int empty, char openBracket) throws IOExc...
    method close (line 140) | private MojangsonWriter close(int empty, int nonempty, char closeBracket)
    method push (line 158) | private void push(int newTop) {
    method peek (line 168) | private int peek() {
    method replaceTop (line 178) | private void replaceTop(int topOfStack) {
    method name (line 188) | public MojangsonWriter name(String name) throws IOException {
    method writeDeferredName (line 202) | private void writeDeferredName() throws IOException {
    method value (line 216) | public MojangsonWriter value(String value) throws IOException {
    method jsonValue (line 232) | public MojangsonWriter jsonValue(String value) throws IOException {
    method nullValue (line 247) | public MojangsonWriter nullValue() throws IOException {
    method value (line 266) | public MojangsonWriter value(boolean value) throws IOException {
    method value (line 278) | public MojangsonWriter value(Boolean value) throws IOException {
    method value (line 295) | public MojangsonWriter value(double value) throws IOException {
    method value (line 310) | public MojangsonWriter value(long value) throws IOException {
    method value (line 324) | public MojangsonWriter value(Number value) throws IOException {
    method flush (line 343) | public void flush() throws IOException {
    method close (line 355) | public void close() throws IOException {
    method newline (line 365) | private void newline() throws IOException {
    method beforeName (line 380) | private void beforeName() throws IOException {
    method beforeValue (line 395) | @SuppressWarnings("fallthrough")
    method string (line 428) | private void string(String value) throws IOException {

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/mojangson/TagDeserializer.java
  class TagDeserializer (line 13) | @Slf4j
    method deserialize (line 18) | @Override

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/mojangson/TagSerializer.java
  class TagSerializer (line 14) | public final class TagSerializer implements JsonSerializer<Tag<?>> {
    method serialize (line 16) | @Override

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/util/ColorUtils.java
  class ColorUtils (line 9) | @UtilityClass
    method colorsInBetween (line 12) | public List<Color> colorsInBetween(final Color first, final Color seco...

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/util/Colors.java
  class Colors (line 7) | @UtilityClass

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/util/InventoryContentMap.java
  class InventoryContentMap (line 17) | public class InventoryContentMap implements ConcurrentMap<Integer, Inven...
    method size (line 23) | @Override
    method isEmpty (line 28) | @Override
    method containsKey (line 33) | @Override
    method containsValue (line 38) | @Override
    method get (line 43) | @Override
    method put (line 48) | @Nullable
    method remove (line 54) | @Override
    method putAll (line 59) | @Override
    method clear (line 64) | @Override
    method keySet (line 69) | @NotNull
    method values (line 75) | @NotNull
    method entrySet (line 81) | @NotNull
    method equals (line 87) | @Override
    method hashCode (line 92) | @Override
    method getOrDefault (line 97) | @Override
    method forEach (line 102) | @Override
    method replaceAll (line 107) | @Override
    method putIfAbsent (line 112) | @Override
    method remove (line 117) | @Override
    method replace (line 122) | @Override
    method replace (line 130) | @Override
    method computeIfAbsent (line 135) | @Override
    method computeIfPresent (line 142) | @Override
    method compute (line 149) | @Override
    method merge (line 156) | @Override

FILE: cirrus-common/src/main/java/dev/simplix/cirrus/common/util/SafeRunnable.java
  type SafeRunnable (line 3) | public interface SafeRunnable {
    method run (line 5) | void run() throws Throwable;

FILE: cirrus-common/src/test/java/dev/simplix/cirrus/common/tests/SnbtGsonTest.java
  class SnbtGsonTest (line 11) | public final class SnbtGsonTest {
    method test (line 19) | public void test() {

FILE: cirrus-common/src/test/java/dev/simplix/cirrus/common/tests/SnbtTest.java
  class SnbtTest (line 11) | public final class SnbtTest {
    method test (line 13) | @Test

FILE: cirrus-spigot-example/src/main/java/dev/simplix/cirrus/spigot/example/CirrusExamplePlugin.java
  class CirrusExamplePlugin (line 7) | public class CirrusExamplePlugin extends JavaPlugin {
    method onEnable (line 9) | @Override

FILE: cirrus-spigot-example/src/main/java/dev/simplix/cirrus/spigot/example/commands/TestCommandExecutor.java
  class TestCommandExecutor (line 13) | public class TestCommandExecutor implements CommandExecutor {
    method onCommand (line 15) | @Override

FILE: cirrus-spigot-example/src/main/java/dev/simplix/cirrus/spigot/example/menus/ExampleMenu.java
  class ExampleMenu (line 13) | public class ExampleMenu extends AbstractConfigurableMenu {
    method ExampleMenu (line 15) | public ExampleMenu(PlayerWrapper player, MenuConfiguration configurati...

FILE: cirrus-spigot-example/src/main/java/dev/simplix/cirrus/spigot/example/menus/ExampleMultiPageMenu.java
  class ExampleMultiPageMenu (line 15) | public class ExampleMultiPageMenu extends MultiPageMenu {
    method ExampleMultiPageMenu (line 19) | public ExampleMultiPageMenu(
    method registerMyActionHandlers (line 27) | private void registerMyActionHandlers() {
    method addItems (line 34) | private void addItems() {

FILE: cirrus-spigot-modern/src/main/java/dev/simplix/cirrus/spigot/modern/ModernInventoryView.java
  class ModernInventoryView (line 10) | public final class ModernInventoryView extends InventoryView {
    method ModernInventoryView (line 16) | public ModernInventoryView(
    method getTopInventory (line 25) | @Override
    method getBottomInventory (line 30) | @Override
    method getPlayer (line 35) | @Override
    method getType (line 40) | @Override
    method getTitle (line 45) | @Override

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/CirrusSpigot.java
  class CirrusSpigot (line 39) | @Slf4j
    method init (line 44) | public static void init(JavaPlugin plugin) {
    method registerConverters (line 56) | private static void registerConverters() {
    method plugin (line 117) | public static JavaPlugin plugin() {

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/SpigotPlayerWrapper.java
  class SpigotPlayerWrapper (line 11) | public class SpigotPlayerWrapper implements PlayerWrapper {
    method SpigotPlayerWrapper (line 15) | public SpigotPlayerWrapper(@NonNull Player handle) {
    method sendMessage (line 19) | @Override
    method closeInventory (line 24) | @Override
    method hasPermission (line 29) | @Override
    method uniqueId (line 34) | @Override
    method name (line 39) | @Override
    method handle (line 44) | @Override
    method protocolVersion (line 49) | @Override

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/converters/BukkitItemStackConverter.java
  class BukkitItemStackConverter (line 12) | public class BukkitItemStackConverter implements Converter<ItemStack, de...
    method convert (line 26) | @Override

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/converters/ItemModelConverter.java
  class ItemModelConverter (line 11) | public class ItemModelConverter implements Converter<CirrusItem, Invento...
    method convert (line 13) | @Override

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/converters/ItemTypeMaterialDataConverter.java
  class ItemTypeMaterialDataConverter (line 14) | public class ItemTypeMaterialDataConverter implements Converter<ItemType...
    method convert (line 18) | @Override

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/converters/MaterialDataItemTypeConverter.java
  class MaterialDataItemTypeConverter (line 15) | public class MaterialDataItemTypeConverter implements Converter<Material...
    method convert (line 19) | @Override

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/converters/NmsNbtQuerzNbtConverter.java
  class NmsNbtQuerzNbtConverter (line 15) | public class NmsNbtQuerzNbtConverter implements Converter<Object, Compou...
    method convert (line 28) | @Override

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/converters/PlayerConverter.java
  class PlayerConverter (line 10) | public final class PlayerConverter implements Converter<Player, PlayerWr...
    method convert (line 12) | @Override

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/converters/ProtocolizeItemStackConverter.java
  class ProtocolizeItemStackConverter (line 34) | public class ProtocolizeItemStackConverter implements Converter<ItemStac...
    method convert (line 57) | @Override
    method method (line 146) | private Method method() throws NoSuchMethodException {
    method mutateMetaDataToHideAttributes (line 160) | private void mutateMetaDataToHideAttributes(org.bukkit.inventory.ItemS...
    method makeProfile (line 175) | private GameProfile makeProfile(@NonNull String textureHash) {
    method mutateItemMetaForTextureHash (line 186) | private void mutateItemMetaForTextureHash(SkullMeta meta, String textu...
    method writeDataToNbt (line 208) | private void writeDataToNbt(@NonNull ItemStack stack) {
    method setDisplayNameTag (line 228) | private void setDisplayNameTag(@NonNull CompoundTag nbtData, @NonNull ...
    method setLoreTag (line 241) | private void setLoreTag(

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/converters/QuerzNbtNmsNbtConverter.java
  class QuerzNbtNmsNbtConverter (line 17) | public class QuerzNbtNmsNbtConverter implements Converter<CompoundTag, O...
    method convert (line 31) | @Override

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/converters/SpigotClickTypeConverter.java
  class SpigotClickTypeConverter (line 8) | public class SpigotClickTypeConverter implements Converter<ClickType, de...
    method convert (line 10) | @Override

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/converters/SpigotInventoryTypeConverter.java
  class SpigotInventoryTypeConverter (line 7) | public class SpigotInventoryTypeConverter implements Converter<Inventory...
    method convert (line 9) | @Override

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/listener/InventoryListener.java
  class InventoryListener (line 26) | @Slf4j
    method onDrag (line 31) | @EventHandler
    method onClick (line 46) | @EventHandler
    method onQuit (line 108) | @EventHandler
    method onClose (line 113) | @EventHandler

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/menubuilder/SpigotMenuBuilder.java
  class SpigotMenuBuilder (line 28) | @Slf4j
    method build (line 49) | @Override
    method buildContainer (line 81) | private void buildContainer(Inventory inventory, Container container, ...
    method isChest (line 132) | private static boolean isChest(dev.simplix.protocolize.data.inventory....
    method makeView (line 140) | private InventoryView makeView(Menu menu) {
    method modernView (line 167) | private InventoryView modernView(Menu menu, Inventory top, Inventory b...
    method legacyView (line 179) | private InventoryView legacyView(Menu menu, Inventory top, Inventory b...
    method createPlayerInventory (line 209) | private Inventory createPlayerInventory(Player player) {
    method open (line 230) | @Override
    method menuByHandle (line 235) | @Override
    method destroyMenusOfPlayer (line 248) | @Override
    method lastBuildOfPlayer (line 255) | @Override
    method invalidate (line 260) | @Override

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/menus/SpigotMenu.java
  type SpigotMenu (line 12) | public interface SpigotMenu extends Menu {
    method typeFromMaterial (line 14) | default ItemType typeFromMaterial(@NonNull MaterialData material) {
    method typeFromMaterial (line 18) | default ItemType typeFromMaterial(@NonNull Material material) {
    method wrapBukkitItemStack (line 22) | default MenuItemWrapper wrapBukkitItemStack(@NonNull ItemStack itemSta...

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/util/BungeeCordComponentConverterProvider.java
  class BungeeCordComponentConverterProvider (line 14) | public final class BungeeCordComponentConverterProvider implements Compo...
    method platformConverter (line 16) | @Override
    class BungeeCordComponentConverter (line 21) | public static class BungeeCordComponentConverter implements ComponentC...
      method BungeeCordComponentConverter (line 25) | private BungeeCordComponentConverter() {
      method toLegacyText (line 28) | @Override
      method toJson (line 33) | @Override
      method fromLegacyText (line 38) | @Override
      method fromJson (line 43) | @Override

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/util/OtherModuleProvider.java
  class OtherModuleProvider (line 21) | @Slf4j(topic = "Protocolize")
    method registerModule (line 28) | @Override
    method moduleInstalled (line 38) | @Override
    method module (line 43) | @Override
    method supportedPlatform (line 48) | private boolean supportedPlatform(Platform[] supportedPlatforms) {
    method enableModule (line 57) | private void enableModule(ProtocolizeModule module) {

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/util/ProtocolVersionUtil.java
  class ProtocolVersionUtil (line 10) | @Slf4j
    method serverProtocolVersion (line 16) | public static int serverProtocolVersion() {
    method detectVersion (line 23) | private static int detectVersion() {

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/util/ProtocolVersions.java
  class ProtocolVersions (line 3) | public class ProtocolVersions {

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/util/ReflectionClasses.java
  class ReflectionClasses (line 3) | public class ReflectionClasses {
    method itemStackClass (line 5) | public static Class<?> itemStackClass() throws ClassNotFoundException {
    method nbtCompressedStreamTools (line 16) | public static Class<?> nbtCompressedStreamTools() throws ClassNotFound...
    method nbtTagCompound (line 28) | public static Class<?> nbtTagCompound() throws ClassNotFoundException {

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/util/ReflectionUtil.java
  class ReflectionUtil (line 21) | @Slf4j
    method hasNewPackageStructure (line 34) | public static boolean hasNewPackageStructure() {
    method getClass (line 38) | public static Class<?> getClass(String classname) throws ClassNotFound...
    method serverVersion (line 62) | public static String serverVersion() {
    method gameProfile (line 70) | public static GameProfile gameProfile(@NonNull Player player)
    method nmsPlayer (line 77) | public static Object nmsPlayer(@NonNull Player player)
    method obcPlayer (line 83) | public static Object obcPlayer(@NonNull Player player)
    method nmsWorld (line 88) | public static Object nmsWorld(@NonNull World world)
    method nmsScoreboard (line 94) | public static Object nmsScoreboard(@NonNull Scoreboard scoreboard)
    method fieldValue (line 100) | public static Object fieldValue(@NonNull Object instance, @NonNull Str...
    method fieldValue (line 122) | public static <T> T fieldValue(@NonNull Field field, @NonNull Object o...
    method field (line 131) | public static Field field(@NonNull Class<?> clazz, @NonNull String fie...
    method value (line 138) | public static void value(Object instance, String field, Object value) {
    method value (line 148) | public static void value(
    method valueSubclass (line 162) | public static void valueSubclass(
    method sendAllPacket (line 176) | public static void sendAllPacket(@NonNull Object packet) throws Reflec...
    method sendListPacket (line 187) | public static void sendListPacket(@NonNull List<String> players, @NonN...
    method sendPlayerPacket (line 202) | public static void sendPlayerPacket(@NonNull Player player, @NonNull O...
    method listFields (line 212) | public static void listFields(@NonNull Object object) {
    method fieldValue (line 230) | public static Object fieldValue(

FILE: cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/util/SpigotItemsUtils.java
  class SpigotItemsUtils (line 13) | @UtilityClass
    method typeFromMaterial (line 16) | public ItemType typeFromMaterial(@NonNull MaterialData material) {
    method typeFromMaterial (line 20) | public ItemType typeFromMaterial(@NonNull Material material) {
    method wrapBukkitItemStack (line 24) | public MenuItemWrapper wrapBukkitItemStack(@NonNull ItemStack itemStac...

FILE: cirrus-velocity-example/src/main/java/dev/simplix/cirrus/velocity/example/CirrusExamplePlugin.java
  class CirrusExamplePlugin (line 12) | @Plugin(
    method CirrusExamplePlugin (line 24) | @Inject
    method onProxyInitialization (line 30) | @Subscribe

FILE: cirrus-velocity-example/src/main/java/dev/simplix/cirrus/velocity/example/commands/TestCommand.java
  class TestCommand (line 10) | public class TestCommand implements SimpleCommand {
    method execute (line 12) | @Override

FILE: cirrus-velocity-example/src/main/java/dev/simplix/cirrus/velocity/example/menus/ExampleMenu.java
  class ExampleMenu (line 10) | public class ExampleMenu extends SimpleMenu {
    method ExampleMenu (line 12) | public ExampleMenu(PlayerWrapper player, MenuConfiguration configurati...

FILE: cirrus-velocity-example/src/main/java/dev/simplix/cirrus/velocity/example/menus/ExampleMultiPageMenu.java
  class ExampleMultiPageMenu (line 15) | public class ExampleMultiPageMenu extends MultiPageMenu {
    method ExampleMultiPageMenu (line 19) | public ExampleMultiPageMenu(
    method registerMyActionHandlers (line 27) | private void registerMyActionHandlers() {
    method addItems (line 34) | private void addItems() {

FILE: cirrus-velocity/src/main/java/dev/simplix/cirrus/velocity/CirrusVelocity.java
  class CirrusVelocity (line 29) | public class CirrusVelocity {
    method init (line 33) | public static void init(ProxyServer proxyServer, Object plugin) {

FILE: cirrus-velocity/src/main/java/dev/simplix/cirrus/velocity/VelocityPlayerWrapper.java
  class VelocityPlayerWrapper (line 13) | public class VelocityPlayerWrapper implements PlayerWrapper {
    method VelocityPlayerWrapper (line 19) | public VelocityPlayerWrapper(@NonNull Player handle) {
    method uniqueId (line 24) | @Override
    method name (line 29) | @Override
    method protocolVersion (line 34) | @Override
    method sendMessage (line 39) | @Override
    method closeInventory (line 44) | @Override
    method hasPermission (line 49) | @Override
    method handle (line 54) | @Override
    method protocolizePlayer (line 59) | public ProtocolizePlayer protocolizePlayer() {

FILE: cirrus-velocity/src/main/java/dev/simplix/cirrus/velocity/converters/ItemModelConverter.java
  class ItemModelConverter (line 13) | public class ItemModelConverter implements Converter<CirrusItem, Invento...
    method convert (line 15) | @Override

FILE: cirrus-velocity/src/main/java/dev/simplix/cirrus/velocity/converters/ItemStackConverter.java
  class ItemStackConverter (line 9) | public class ItemStackConverter implements Converter<ItemStack, MenuItem...
    method convert (line 11) | @Override

FILE: cirrus-velocity/src/main/java/dev/simplix/cirrus/velocity/converters/PlayerConverter.java
  class PlayerConverter (line 9) | public final class PlayerConverter implements Converter<Player, PlayerWr...
    method convert (line 11) | @Override

FILE: cirrus-velocity/src/main/java/dev/simplix/cirrus/velocity/converters/PlayerUniqueIdConverter.java
  class PlayerUniqueIdConverter (line 12) | public class PlayerUniqueIdConverter implements Converter<UUID, PlayerWr...
    method PlayerUniqueIdConverter (line 16) | public PlayerUniqueIdConverter(ProxyServer proxyServer) {
    method convert (line 20) | @Override

FILE: cirrus-velocity/src/main/java/dev/simplix/cirrus/velocity/listener/QuitListener.java
  class QuitListener (line 13) | public class QuitListener {
    method onQuit (line 17) | @Subscribe

FILE: cirrus-velocity/src/main/java/dev/simplix/cirrus/velocity/protocolize/ProtocolizeMenuBuilder.java
  class ProtocolizeMenuBuilder (line 30) | @Slf4j
    method build (line 36) | @Override
    method buildContainer (line 71) | private void buildContainer(@NonNull Inventory inventory, @NonNull Con...
    method makeInv (line 96) | private Inventory makeInv(@NonNull Menu menu) {
    method open (line 170) | @Override
    method menuByHandle (line 178) | @Override
    method destroyMenusOfPlayer (line 192) | @Override
    method lastBuildOfPlayer (line 199) | @Override
    method invalidate (line 204) | @Override
Condensed preview — 128 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (382K chars).
[
  {
    "path": ".editorconfig",
    "chars": 77498,
    "preview": "[*]\r\ncharset = utf-8\r\nend_of_line = lf\r\nindent_size = 2\r\nindent_style = space\r\ninsert_final_newline = false\r\nmax_line_le"
  },
  {
    "path": ".gitignore",
    "chars": 3441,
    "preview": "# Created by .ignore support plugin (hsz.mobi)\r\n### Maven template\r\ntarget/\r\npom.xml.tag\r\npom.xml.releaseBackup\r\npom.xml"
  },
  {
    "path": "LICENSE",
    "chars": 1074,
    "preview": "MIT License\n\nCopyright (c) 2020 Simplix Softworks\n\nPermission is hereby granted, free of charge, to any person obtaining"
  },
  {
    "path": "README.md",
    "chars": 2994,
    "preview": "<p align=\"center\">\n  <img src=\"https://i.imgur.com/vmfZcvS.png\" />\n</p>\n\n\n# Cirrus\n[![Build Status](http://ci.exceptionf"
  },
  {
    "path": "cirrus-bungeecord/pom.xml",
    "chars": 3299,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xmlns=\"ht"
  },
  {
    "path": "cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/BungeeCordPlayerWrapper.java",
    "chars": 1547,
    "preview": "package dev.simplix.cirrus.bungeecord;\r\n\r\nimport dev.simplix.cirrus.common.business.PlayerWrapper;\r\nimport dev.simplix.p"
  },
  {
    "path": "cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/CirrusBungeeCord.java",
    "chars": 2501,
    "preview": "package dev.simplix.cirrus.bungeecord;\n\nimport dev.simplix.cirrus.bungeecord.converters.ItemModelConverter;\nimport dev.s"
  },
  {
    "path": "cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/converters/ItemModelConverter.java",
    "chars": 1330,
    "preview": "package dev.simplix.cirrus.bungeecord.converters;\r\n\r\nimport dev.simplix.cirrus.common.business.InventoryMenuItemWrapper;"
  },
  {
    "path": "cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/converters/ItemStackConverter.java",
    "chars": 553,
    "preview": "package dev.simplix.cirrus.bungeecord.converters;\r\n\r\nimport dev.simplix.cirrus.common.business.MenuItemWrapper;\r\nimport "
  },
  {
    "path": "cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/converters/PlayerConverter.java",
    "chars": 613,
    "preview": "package dev.simplix.cirrus.bungeecord.converters;\r\n\r\nimport dev.simplix.cirrus.bungeecord.BungeeCordPlayerWrapper;\r\nimpo"
  },
  {
    "path": "cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/converters/PlayerUniqueIdConverter.java",
    "chars": 796,
    "preview": "package dev.simplix.cirrus.bungeecord.converters;\r\n\r\nimport dev.simplix.cirrus.bungeecord.BungeeCordPlayerWrapper;\r\nimpo"
  },
  {
    "path": "cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/listeners/QuitListener.java",
    "chars": 548,
    "preview": "package dev.simplix.cirrus.bungeecord.listeners;\n\nimport dev.simplix.cirrus.common.Cirrus;\nimport dev.simplix.cirrus.com"
  },
  {
    "path": "cirrus-bungeecord/src/main/java/dev/simplix/cirrus/bungeecord/protocolize/ProtocolizeMenuBuilder.java",
    "chars": 12577,
    "preview": "package dev.simplix.cirrus.bungeecord.protocolize;\r\n\r\nimport com.google.common.collect.Lists;\r\nimport com.google.common."
  },
  {
    "path": "cirrus-bungeecord-example/pom.xml",
    "chars": 2434,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xmlns=\"ht"
  },
  {
    "path": "cirrus-bungeecord-example/src/main/java/dev/simplix/cirrus/bungeecord/example/CirrusExamplePlugin.java",
    "chars": 488,
    "preview": "package dev.simplix.cirrus.bungeecord.example;\n\nimport dev.simplix.cirrus.bungeecord.CirrusBungeeCord;\nimport dev.simpli"
  },
  {
    "path": "cirrus-bungeecord-example/src/main/java/dev/simplix/cirrus/bungeecord/example/commands/TestCommand.java",
    "chars": 890,
    "preview": "package dev.simplix.cirrus.bungeecord.example.commands;\n\nimport dev.simplix.cirrus.bungeecord.example.menus.ExampleMenu;"
  },
  {
    "path": "cirrus-bungeecord-example/src/main/java/dev/simplix/cirrus/bungeecord/example/menus/ExampleMenu.java",
    "chars": 822,
    "preview": "package dev.simplix.cirrus.bungeecord.example.menus;\n\nimport dev.simplix.cirrus.common.business.PlayerWrapper;\nimport de"
  },
  {
    "path": "cirrus-bungeecord-example/src/main/java/dev/simplix/cirrus/bungeecord/example/menus/ExampleMultiPageMenu.java",
    "chars": 1514,
    "preview": "package dev.simplix.cirrus.bungeecord.example.menus;\r\n\r\nimport dev.simplix.cirrus.common.business.PlayerWrapper;\r\nimport"
  },
  {
    "path": "cirrus-bungeecord-example/src/main/resources/plugin.yml",
    "chars": 194,
    "preview": "name: CirrusExample\r\nauthor: Exceptionflug\r\nversion: 1.0\r\nmain: dev.simplix.cirrus.bungeecord.example.CirrusExamplePlugi"
  },
  {
    "path": "cirrus-common/pom.xml",
    "chars": 2330,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xmlns=\"ht"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/Cirrus.java",
    "chars": 2800,
    "preview": "package dev.simplix.cirrus.common;\n\nimport com.google.gson.Gson;\nimport com.google.gson.GsonBuilder;\nimport dev.simplix."
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/Utils.java",
    "chars": 3172,
    "preview": "package dev.simplix.cirrus.common;\n\nimport lombok.experimental.UtilityClass;\nimport net.md_5.bungee.api.chat.BaseCompone"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/business/ConfigurationFactory.java",
    "chars": 1415,
    "preview": "package dev.simplix.cirrus.common.business;\n\nimport dev.simplix.cirrus.common.configuration.MenuConfiguration;\nimport de"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/business/DataInventoryMenuItemWrapper.java",
    "chars": 627,
    "preview": "package dev.simplix.cirrus.common.business;\n\nimport lombok.Getter;\nimport lombok.NonNull;\nimport lombok.ToString;\nimport"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/business/InventoryMenuItemWrapper.java",
    "chars": 2754,
    "preview": "package dev.simplix.cirrus.common.business;\n\nimport dev.simplix.protocolize.data.ItemType;\nimport lombok.Builder;\nimport"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/business/MenuItemWrapper.java",
    "chars": 2916,
    "preview": "package dev.simplix.cirrus.common.business;\n\nimport dev.simplix.protocolize.data.ItemType;\nimport lombok.NonNull;\nimport"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/business/PlayerWrapper.java",
    "chars": 348,
    "preview": "package dev.simplix.cirrus.common.business;\n\nimport lombok.NonNull;\n\nimport java.util.UUID;\n\npublic interface PlayerWrap"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/config/JsonConfigurationFactory.java",
    "chars": 2547,
    "preview": "package dev.simplix.cirrus.common.config;\n\nimport com.google.common.io.ByteStreams;\nimport com.google.gson.Gson;\nimport "
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/configuration/MenuConfiguration.java",
    "chars": 1222,
    "preview": "package dev.simplix.cirrus.common.configuration;\n\nimport com.google.common.base.Preconditions;\nimport dev.simplix.cirrus"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/configuration/MultiPageMenuConfiguration.java",
    "chars": 835,
    "preview": "package dev.simplix.cirrus.common.configuration;\n\nimport dev.simplix.cirrus.common.i18n.LocalizedString;\nimport dev.simp"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/configuration/impl/SimpleMenuConfiguration.java",
    "chars": 891,
    "preview": "package dev.simplix.cirrus.common.configuration.impl;\n\nimport dev.simplix.cirrus.common.configuration.MenuConfiguration;"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/configuration/impl/SimpleMultiPageMenuConfiguration.java",
    "chars": 1107,
    "preview": "package dev.simplix.cirrus.common.configuration.impl;\n\nimport dev.simplix.cirrus.common.configuration.MultiPageMenuConfi"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/container/Container.java",
    "chars": 4712,
    "preview": "package dev.simplix.cirrus.common.container;\n\nimport dev.simplix.cirrus.common.business.InventoryMenuItemWrapper;\nimport"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/container/impl/ItemContainer.java",
    "chars": 1881,
    "preview": "package dev.simplix.cirrus.common.container.impl;\n\nimport dev.simplix.cirrus.common.business.InventoryMenuItemWrapper;\ni"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/converter/Converter.java",
    "chars": 476,
    "preview": "package dev.simplix.cirrus.common.converter;\n\nimport lombok.NonNull;\n\n/**\n * A converter is used to convert one object t"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/converter/Converters.java",
    "chars": 4540,
    "preview": "package dev.simplix.cirrus.common.converter;\n\nimport lombok.NonNull;\nimport org.jetbrains.annotations.Nullable;\n\nimport "
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/effect/AbstractChangingItemAnimation.java",
    "chars": 318,
    "preview": "package dev.simplix.cirrus.common.effect;\n\nimport dev.simplix.cirrus.common.item.CirrusItem;\n\npublic abstract class Abst"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/effect/AbstractMenuAnimation.java",
    "chars": 1008,
    "preview": "package dev.simplix.cirrus.common.effect;\n\nimport com.google.common.base.Preconditions;\nimport com.google.common.collect"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/effect/Animated.java",
    "chars": 262,
    "preview": "package dev.simplix.cirrus.common.effect;\n\nimport dev.simplix.cirrus.common.menu.Menu;\n\npublic interface Animated extend"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/effect/Animations.java",
    "chars": 128,
    "preview": "package dev.simplix.cirrus.common.effect;\n\nimport lombok.experimental.UtilityClass;\n\n@UtilityClass\npublic class Animatio"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/effect/MenuAnimation.java",
    "chars": 594,
    "preview": "package dev.simplix.cirrus.common.effect;\n\nimport java.util.List;\n\npublic interface MenuAnimation<T> {\n\n    /**\n     * D"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/effect/MenuAnimator.java",
    "chars": 642,
    "preview": "package dev.simplix.cirrus.common.effect;\n\nimport lombok.NonNull;\nimport lombok.experimental.UtilityClass;\n\nimport java."
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/effects/GradualColorChangeAnimation.java",
    "chars": 3312,
    "preview": "package dev.simplix.cirrus.common.effects;\n\nimport com.google.common.base.Preconditions;\nimport dev.simplix.cirrus.commo"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/effects/RGBColorChangeAnimation.java",
    "chars": 2663,
    "preview": "package dev.simplix.cirrus.common.effects;\n\nimport com.google.common.base.Preconditions;\nimport dev.simplix.cirrus.commo"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/effects/SimpleChangingItemAnimation.java",
    "chars": 585,
    "preview": "package dev.simplix.cirrus.common.effects;\n\nimport dev.simplix.cirrus.common.effect.AbstractChangingItemAnimation;\nimpor"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/handler/ActionHandler.java",
    "chars": 431,
    "preview": "package dev.simplix.cirrus.common.handler;\n\nimport dev.simplix.cirrus.common.business.InventoryMenuItemWrapper;\nimport d"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/handler/AutoCancellingActionHandler.java",
    "chars": 398,
    "preview": "package dev.simplix.cirrus.common.handler;\n\nimport dev.simplix.cirrus.common.model.CallResult;\nimport dev.simplix.cirrus"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedItemStackModel.java",
    "chars": 1628,
    "preview": "package dev.simplix.cirrus.common.i18n;\n\nimport dev.simplix.cirrus.common.Utils;\nimport dev.simplix.cirrus.common.item.C"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedString.java",
    "chars": 1164,
    "preview": "package dev.simplix.cirrus.common.i18n;\n\nimport lombok.NonNull;\n\nimport java.util.HashMap;\nimport java.util.Locale;\nimpo"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedStringDeserializer.java",
    "chars": 907,
    "preview": "package dev.simplix.cirrus.common.i18n;\n\nimport com.google.gson.JsonDeserializationContext;\nimport com.google.gson.JsonD"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedStringList.java",
    "chars": 1509,
    "preview": "package dev.simplix.cirrus.common.i18n;\n\nimport lombok.NoArgsConstructor;\nimport lombok.NonNull;\n\nimport java.util.*;\n\n@"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedStringListDeserializer.java",
    "chars": 977,
    "preview": "package dev.simplix.cirrus.common.i18n;\n\nimport com.google.gson.JsonDeserializationContext;\nimport com.google.gson.JsonD"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedStringListSerializer.java",
    "chars": 626,
    "preview": "package dev.simplix.cirrus.common.i18n;\n\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonSerializationCon"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/LocalizedStringSerializer.java",
    "chars": 606,
    "preview": "package dev.simplix.cirrus.common.i18n;\n\nimport com.google.gson.JsonElement;\nimport com.google.gson.JsonSerializationCon"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/Localizer.java",
    "chars": 2670,
    "preview": "package dev.simplix.cirrus.common.i18n;\n\nimport dev.simplix.cirrus.common.item.CirrusItem;\nimport lombok.NonNull;\nimport"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/i18n/Replacer.java",
    "chars": 4419,
    "preview": "package dev.simplix.cirrus.common.i18n;\n\nimport com.google.common.base.Preconditions;\nimport lombok.Getter;\nimport lombo"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/item/CirrusItem.java",
    "chars": 10902,
    "preview": "package dev.simplix.cirrus.common.item;\n\nimport dev.simplix.cirrus.common.Utils;\nimport dev.simplix.cirrus.common.effect"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/item/Items.java",
    "chars": 386,
    "preview": "package dev.simplix.cirrus.common.item;\n\nimport dev.simplix.cirrus.common.effects.RGBColorChangeAnimation;\nimport lombok"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/item/ProtocolizeMenuItemWrapper.java",
    "chars": 2931,
    "preview": "package dev.simplix.cirrus.common.item;\n\nimport dev.simplix.cirrus.common.business.MenuItemWrapper;\nimport dev.simplix.p"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/menu/AbstractConfigurableMenu.java",
    "chars": 2106,
    "preview": "package dev.simplix.cirrus.common.menu;\n\nimport dev.simplix.cirrus.common.business.PlayerWrapper;\nimport dev.simplix.cir"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/menu/AbstractMenu.java",
    "chars": 7070,
    "preview": "package dev.simplix.cirrus.common.menu;\n\nimport dev.simplix.cirrus.common.Cirrus;\nimport dev.simplix.cirrus.common.busin"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/menu/ErrorProne.java",
    "chars": 1338,
    "preview": "package dev.simplix.cirrus.common.menu;\n\nimport dev.simplix.cirrus.common.handler.ActionHandler;\nimport dev.simplix.cirr"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/menu/Menu.java",
    "chars": 3458,
    "preview": "package dev.simplix.cirrus.common.menu;\n\nimport dev.simplix.cirrus.common.business.MenuItemWrapper;\nimport dev.simplix.c"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/menu/MenuBuilder.java",
    "chars": 783,
    "preview": "package dev.simplix.cirrus.common.menu;\n\nimport dev.simplix.cirrus.common.business.PlayerWrapper;\nimport lombok.NonNull;"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/menus/AbstractBrowserMenu.java",
    "chars": 2124,
    "preview": "package dev.simplix.cirrus.common.menus;\n\nimport dev.simplix.cirrus.common.business.PlayerWrapper;\nimport dev.simplix.ci"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/menus/MultiPageMenu.java",
    "chars": 8334,
    "preview": "package dev.simplix.cirrus.common.menus;\n\nimport dev.simplix.cirrus.common.Cirrus;\nimport dev.simplix.cirrus.common.busi"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/menus/SimpleMenu.java",
    "chars": 966,
    "preview": "package dev.simplix.cirrus.common.menus;\n\nimport dev.simplix.cirrus.common.business.PlayerWrapper;\nimport dev.simplix.ci"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/model/CallResult.java",
    "chars": 106,
    "preview": "package dev.simplix.cirrus.common.model;\n\npublic enum CallResult {\n\n    DENY_GRABBING, ALLOW_GRABBING\n\n}\n\n"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/model/Click.java",
    "chars": 1636,
    "preview": "package dev.simplix.cirrus.common.model;\n\nimport dev.simplix.cirrus.common.business.InventoryMenuItemWrapper;\nimport dev"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/mojangson/MojangsonScope.java",
    "chars": 1938,
    "preview": "/*\r\n * Copyright (C) 2010 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you ma"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/mojangson/MojangsonWriter.java",
    "chars": 13533,
    "preview": "package dev.simplix.cirrus.common.mojangson;\n\nimport com.google.gson.stream.JsonWriter;\n\nimport java.io.IOException;\nimp"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/mojangson/TagDeserializer.java",
    "chars": 1160,
    "preview": "package dev.simplix.cirrus.common.mojangson;\n\nimport com.google.gson.*;\nimport lombok.NonNull;\nimport lombok.extern.slf4"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/mojangson/TagSerializer.java",
    "chars": 834,
    "preview": "package dev.simplix.cirrus.common.mojangson;\r\n\r\nimport com.google.gson.JsonElement;\r\nimport com.google.gson.JsonParser;\r"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/util/ColorUtils.java",
    "chars": 982,
    "preview": "package dev.simplix.cirrus.common.util;\n\nimport lombok.experimental.UtilityClass;\n\nimport java.awt.*;\nimport java.util.A"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/util/Colors.java",
    "chars": 949,
    "preview": "package dev.simplix.cirrus.common.util;\n\nimport lombok.experimental.UtilityClass;\n\nimport java.awt.*;\n\n@UtilityClass\npub"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/util/InventoryContentMap.java",
    "chars": 4929,
    "preview": "package dev.simplix.cirrus.common.util;\r\n\r\nimport dev.simplix.cirrus.common.business.InventoryMenuItemWrapper;\r\nimport l"
  },
  {
    "path": "cirrus-common/src/main/java/dev/simplix/cirrus/common/util/SafeRunnable.java",
    "chars": 110,
    "preview": "package dev.simplix.cirrus.common.util;\n\npublic interface SafeRunnable {\n\n    void run() throws Throwable;\n\n}\n"
  },
  {
    "path": "cirrus-common/src/main/resources/cirrus/MenuConfiguration.json",
    "chars": 1284,
    "preview": "{\r\n  \"title\": {\r\n    \"en\": \"§bCirrus Menu\",\r\n    \"de\": \"§bCirrus Menü\"\r\n  },\r\n  \"type\": \"GENERIC_9X4\",\r\n  \"placeholderIt"
  },
  {
    "path": "cirrus-common/src/main/resources/cirrus/MultiPageMenuConfiguration.json",
    "chars": 1308,
    "preview": "{\r\n  \"title\": {\r\n    \"en\": \"§bCirrus Menu {page} / {pageCount}\",\r\n    \"de\": \"§bCirrus Menü {page} / {pageCount}\"\r\n  },\r\n"
  },
  {
    "path": "cirrus-common/src/test/java/dev/simplix/cirrus/common/tests/SnbtGsonTest.java",
    "chars": 1431,
    "preview": "package dev.simplix.cirrus.common.tests;\r\n\r\nimport com.google.gson.Gson;\r\nimport com.google.gson.GsonBuilder;\r\nimport de"
  },
  {
    "path": "cirrus-common/src/test/java/dev/simplix/cirrus/common/tests/SnbtTest.java",
    "chars": 1007,
    "preview": "package dev.simplix.cirrus.common.tests;\r\n\r\nimport net.querz.nbt.io.SNBTUtil;\r\nimport net.querz.nbt.tag.CompoundTag;\r\nim"
  },
  {
    "path": "cirrus-spigot/pom.xml",
    "chars": 4308,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xmlns=\"ht"
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/CirrusSpigot.java",
    "chars": 4996,
    "preview": "package dev.simplix.cirrus.spigot;\n\nimport dev.simplix.cirrus.common.Cirrus;\nimport dev.simplix.cirrus.common.business.I"
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/SpigotPlayerWrapper.java",
    "chars": 1241,
    "preview": "package dev.simplix.cirrus.spigot;\n\nimport dev.simplix.cirrus.common.business.PlayerWrapper;\nimport dev.simplix.cirrus.s"
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/converters/BukkitItemStackConverter.java",
    "chars": 1688,
    "preview": "package dev.simplix.cirrus.spigot.converters;\n\nimport dev.simplix.cirrus.common.converter.Converter;\nimport dev.simplix."
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/converters/ItemModelConverter.java",
    "chars": 1127,
    "preview": "package dev.simplix.cirrus.spigot.converters;\r\n\r\nimport dev.simplix.cirrus.common.business.InventoryMenuItemWrapper;\r\nim"
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/converters/ItemTypeMaterialDataConverter.java",
    "chars": 1113,
    "preview": "package dev.simplix.cirrus.spigot.converters;\n\nimport dev.simplix.cirrus.common.converter.Converter;\nimport dev.simplix."
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/converters/MaterialDataItemTypeConverter.java",
    "chars": 1721,
    "preview": "package dev.simplix.cirrus.spigot.converters;\n\nimport com.google.common.collect.Multimap;\nimport dev.simplix.cirrus.comm"
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/converters/NmsNbtQuerzNbtConverter.java",
    "chars": 1637,
    "preview": "package dev.simplix.cirrus.spigot.converters;\n\nimport dev.simplix.cirrus.common.converter.Converter;\nimport dev.simplix."
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/converters/PlayerConverter.java",
    "chars": 563,
    "preview": "package dev.simplix.cirrus.spigot.converters;\r\n\r\nimport dev.simplix.cirrus.common.business.PlayerWrapper;\r\nimport dev.si"
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/converters/ProtocolizeItemStackConverter.java",
    "chars": 10724,
    "preview": "package dev.simplix.cirrus.spigot.converters;\n\n\nimport com.mojang.authlib.GameProfile;\nimport com.mojang.authlib.propert"
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/converters/QuerzNbtNmsNbtConverter.java",
    "chars": 1788,
    "preview": "package dev.simplix.cirrus.spigot.converters;\n\nimport dev.simplix.cirrus.common.converter.Converter;\nimport dev.simplix."
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/converters/SpigotClickTypeConverter.java",
    "chars": 1720,
    "preview": "package dev.simplix.cirrus.spigot.converters;\n\nimport dev.simplix.cirrus.common.converter.Converter;\nimport lombok.NonNu"
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/converters/SpigotInventoryTypeConverter.java",
    "chars": 1563,
    "preview": "package dev.simplix.cirrus.spigot.converters;\r\n\r\nimport dev.simplix.cirrus.common.converter.Converter;\r\nimport dev.simpl"
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/listener/InventoryListener.java",
    "chars": 5634,
    "preview": "package dev.simplix.cirrus.spigot.listener;\n\nimport dev.simplix.cirrus.common.Cirrus;\nimport dev.simplix.cirrus.common.b"
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/menubuilder/SpigotMenuBuilder.java",
    "chars": 10706,
    "preview": "package dev.simplix.cirrus.spigot.menubuilder;\n\nimport dev.simplix.cirrus.common.business.InventoryMenuItemWrapper;\nimpo"
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/menus/SpigotMenu.java",
    "chars": 850,
    "preview": "package dev.simplix.cirrus.spigot.menus;\n\nimport dev.simplix.cirrus.common.business.MenuItemWrapper;\nimport dev.simplix."
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/util/BungeeCordComponentConverterProvider.java",
    "chars": 1468,
    "preview": "package dev.simplix.cirrus.spigot.util;\n\nimport dev.simplix.protocolize.api.ComponentConverter;\nimport dev.simplix.proto"
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/util/OtherModuleProvider.java",
    "chars": 2030,
    "preview": "package dev.simplix.cirrus.spigot.util;\n\nimport dev.simplix.protocolize.api.Platform;\nimport dev.simplix.protocolize.api"
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/util/ProtocolVersionUtil.java",
    "chars": 1303,
    "preview": "package dev.simplix.cirrus.spigot.util;\n\nimport java.lang.reflect.Field;\n\nimport dev.simplix.protocolize.data.inventory."
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/util/ProtocolVersions.java",
    "chars": 1867,
    "preview": "package dev.simplix.cirrus.spigot.util;\n\npublic class ProtocolVersions {\n\n    public final static int MINECRAFT_1_8 = 47"
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/util/ReflectionClasses.java",
    "chars": 1146,
    "preview": "package dev.simplix.cirrus.spigot.util;\n\npublic class ReflectionClasses {\n\n    public static Class<?> itemStackClass() t"
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/util/ReflectionUtil.java",
    "chars": 9167,
    "preview": "package dev.simplix.cirrus.spigot.util;\n\nimport com.mojang.authlib.GameProfile;\nimport lombok.AccessLevel;\nimport lombok"
  },
  {
    "path": "cirrus-spigot/src/main/java/dev/simplix/cirrus/spigot/util/SpigotItemsUtils.java",
    "chars": 1053,
    "preview": "package dev.simplix.cirrus.spigot.util;\n\nimport dev.simplix.cirrus.common.business.MenuItemWrapper;\nimport dev.simplix.c"
  },
  {
    "path": "cirrus-spigot-example/pom.xml",
    "chars": 2324,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xmlns=\"ht"
  },
  {
    "path": "cirrus-spigot-example/src/main/java/dev/simplix/cirrus/spigot/example/CirrusExamplePlugin.java",
    "chars": 412,
    "preview": "package dev.simplix.cirrus.spigot.example;\n\nimport dev.simplix.cirrus.spigot.CirrusSpigot;\nimport dev.simplix.cirrus.spi"
  },
  {
    "path": "cirrus-spigot-example/src/main/java/dev/simplix/cirrus/spigot/example/commands/TestCommandExecutor.java",
    "chars": 1165,
    "preview": "package dev.simplix.cirrus.spigot.example.commands;\n\nimport dev.simplix.cirrus.common.Cirrus;\nimport dev.simplix.cirrus."
  },
  {
    "path": "cirrus-spigot-example/src/main/java/dev/simplix/cirrus/spigot/example/menus/ExampleMenu.java",
    "chars": 1265,
    "preview": "package dev.simplix.cirrus.spigot.example.menus;\n\nimport dev.simplix.cirrus.common.business.PlayerWrapper;\nimport dev.si"
  },
  {
    "path": "cirrus-spigot-example/src/main/java/dev/simplix/cirrus/spigot/example/menus/ExampleMultiPageMenu.java",
    "chars": 1468,
    "preview": "package dev.simplix.cirrus.spigot.example.menus;\n\nimport dev.simplix.cirrus.common.business.PlayerWrapper;\nimport dev.si"
  },
  {
    "path": "cirrus-spigot-example/src/main/resources/plugin.yml",
    "chars": 187,
    "preview": "name: CirrusExample\nauthor: Exceptionflug\nversion: 1.0\nmain: dev.simplix.cirrus.spigot.example.CirrusExamplePlugin\napi-v"
  },
  {
    "path": "cirrus-spigot-modern/pom.xml",
    "chars": 1042,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xmlns=\"ht"
  },
  {
    "path": "cirrus-spigot-modern/src/main/java/dev/simplix/cirrus/spigot/modern/ModernInventoryView.java",
    "chars": 1109,
    "preview": "package dev.simplix.cirrus.spigot.modern;\n\nimport dev.simplix.cirrus.common.menu.Menu;\nimport lombok.NonNull;\nimport org"
  },
  {
    "path": "cirrus-velocity/pom.xml",
    "chars": 2025,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xmlns=\"ht"
  },
  {
    "path": "cirrus-velocity/src/main/java/dev/simplix/cirrus/velocity/CirrusVelocity.java",
    "chars": 2262,
    "preview": "package dev.simplix.cirrus.velocity;\n\nimport com.velocitypowered.api.proxy.Player;\nimport com.velocitypowered.api.proxy."
  },
  {
    "path": "cirrus-velocity/src/main/java/dev/simplix/cirrus/velocity/VelocityPlayerWrapper.java",
    "chars": 1701,
    "preview": "package dev.simplix.cirrus.velocity;\n\nimport com.velocitypowered.api.proxy.Player;\nimport dev.simplix.cirrus.common.busi"
  },
  {
    "path": "cirrus-velocity/src/main/java/dev/simplix/cirrus/velocity/converters/ItemModelConverter.java",
    "chars": 1299,
    "preview": "package dev.simplix.cirrus.velocity.converters;\n\nimport dev.simplix.cirrus.common.business.InventoryMenuItemWrapper;\nimp"
  },
  {
    "path": "cirrus-velocity/src/main/java/dev/simplix/cirrus/velocity/converters/ItemStackConverter.java",
    "chars": 535,
    "preview": "package dev.simplix.cirrus.velocity.converters;\n\nimport dev.simplix.cirrus.common.business.MenuItemWrapper;\nimport dev.s"
  },
  {
    "path": "cirrus-velocity/src/main/java/dev/simplix/cirrus/velocity/converters/PlayerConverter.java",
    "chars": 515,
    "preview": "package dev.simplix.cirrus.velocity.converters;\n\nimport com.velocitypowered.api.proxy.Player;\nimport dev.simplix.cirrus."
  },
  {
    "path": "cirrus-velocity/src/main/java/dev/simplix/cirrus/velocity/converters/PlayerUniqueIdConverter.java",
    "chars": 805,
    "preview": "package dev.simplix.cirrus.velocity.converters;\n\nimport com.velocitypowered.api.proxy.ProxyServer;\nimport dev.simplix.ci"
  },
  {
    "path": "cirrus-velocity/src/main/java/dev/simplix/cirrus/velocity/listener/QuitListener.java",
    "chars": 573,
    "preview": "package dev.simplix.cirrus.velocity.listener;\n\nimport com.velocitypowered.api.event.Subscribe;\nimport com.velocitypowere"
  },
  {
    "path": "cirrus-velocity/src/main/java/dev/simplix/cirrus/velocity/protocolize/ProtocolizeMenuBuilder.java",
    "chars": 8479,
    "preview": "package dev.simplix.cirrus.velocity.protocolize;\n\nimport com.google.common.collect.Sets;\nimport com.velocitypowered.api."
  },
  {
    "path": "cirrus-velocity-example/.gitignore",
    "chars": 1567,
    "preview": "# User-specific stuff\n.idea/\n\n*.iml\n*.ipr\n*.iws\n\n# IntelliJ\nout/\n\n# Compiled class file\n*.class\n\n# Log file\n*.log\n\n# Blu"
  },
  {
    "path": "cirrus-velocity-example/pom.xml",
    "chars": 2384,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xmlns=\"ht"
  },
  {
    "path": "cirrus-velocity-example/src/main/java/dev/simplix/cirrus/velocity/example/CirrusExamplePlugin.java",
    "chars": 1110,
    "preview": "package dev.simplix.cirrus.velocity.example;\n\nimport com.google.inject.Inject;\nimport com.velocitypowered.api.command.Co"
  },
  {
    "path": "cirrus-velocity-example/src/main/java/dev/simplix/cirrus/velocity/example/commands/TestCommand.java",
    "chars": 791,
    "preview": "package dev.simplix.cirrus.velocity.example.commands;\n\nimport com.velocitypowered.api.command.SimpleCommand;\nimport com."
  },
  {
    "path": "cirrus-velocity-example/src/main/java/dev/simplix/cirrus/velocity/example/menus/ExampleMenu.java",
    "chars": 774,
    "preview": "package dev.simplix.cirrus.velocity.example.menus;\n\nimport dev.simplix.cirrus.common.business.PlayerWrapper;\nimport dev."
  },
  {
    "path": "cirrus-velocity-example/src/main/java/dev/simplix/cirrus/velocity/example/menus/ExampleMultiPageMenu.java",
    "chars": 1470,
    "preview": "package dev.simplix.cirrus.velocity.example.menus;\n\nimport dev.simplix.cirrus.common.business.PlayerWrapper;\nimport dev."
  },
  {
    "path": "pom.xml",
    "chars": 4022,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xmlns=\"ht"
  }
]

About this extraction

This page contains the full source code of the Simplix-Softworks/Cirrus GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 128 files (346.5 KB), approximately 84.6k tokens, and a symbol index with 655 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!